ББК 32.973.202-018.2
С53
С53
Снейдер, Йон.
Эффективное программирование TCP/IP / Й. Снейдер ; пер. с англ. А. А. Слинкина.
— 2-е изд., эл. — 1 файл pdf : 321 с. — Москва : ДМК Пресс, 2022. — (Для
программистов). — Систем. требования: Adobe Reader XI либо Adobe Digital Editions
4.5 ; экран 10". — Текст : электронный.
ISBN 978-5-89818-250-2
Программирование TCP/IP может показаться очень простым, но это заблуждение. Многие
программисты сталкиваются с тем, что написанное ими сетевое приложение недостаточно
надежно. Особое внимание в данной книге уделено тонким вопросам функционирования семейства
протоколов и способам работы с ними. Здесь изложены подтвержденные практикой
советы, технические приемы и эвристические правила программирования TCP/IP для достижения
максимальной производительности; показано, как избежать многих типичных ошибок.
Основные идеи и концепции иллюстрируются многочисленными примерами.
Книга значительно ускорит процесс обучения программированию и позволит вам быстро
достичь уровня профессионала.
ББК 32.973.202-018.2
Публикуется по согласованию с издательством, выпустившим оригинал: ADDISON+WES+ LEY LONGMAN, a
Pearson Education Company.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими
бы то ни было средствами без письменного разрешения владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность технических ошибок все
равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений.
В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги.
В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских
прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации.
ISBN 978-5-89818-250-2
© Перевод на русский язык, оформление.
ДМК Пресс
Стр.5
Содержание
Предисловие ................................................................................... 11
Глава 1. Введение ........................................................................ 15
Некоторые термины ........................................................................ 15
Путеводитель по книге .................................................................... 16
Архитектура клиентсервер ............................................................ 18
Элементы API сокетов ..................................................................... 20
Резюме ............................................................................................ 28
Глава 2. Основы ............................................................................. 29
Совет 1. О необходимости различать протоколы,
требующие и не требующие
установления логического соединения ............................... 29
Резюме ............................................................................................ 35
Совет 2. О том, что такое подсети и CIDR .......................................... 35
Классы адресов ................................................................................. 36
Подсети ............................................................................................ 40
Ограниченное вещание ................................................................... 43
Вещание на сеть .............................................................................. 44
Вещание на подсеть ........................................................................ 44
Вещание на все подсети ................................................................. 44
Бесклассовая междоменная маршрутизация – CIDR .................. 45
Текущее состояние организации подсетей и CIDR ...................... 47
Резюме ............................................................................................ 47
Совет 3. О том, что такое частные адреса и NAT ................................ 48
Резюме ............................................................................................ 50
Совет 4. О разработке и применении каркасов приложений ............. 50
Каркас TCPсервера .......................................................................... 52
Каркас TCPклиента ........................................................................... 57
Каркас UDPсервера .......................................................................... 59
Каркас UDPклиента ........................................................................... 61
Резюме ............................................................................................ 63
Стр.6
6
Эффективное программирование TCP/IP
Совет 5. О том, почему интерфейс сокетов
лучше интерфейса XTI/TLI ................................................... 63
Резюме ............................................................................................ 65
Совет 6. О том, что TCP – потоковый протокол ................................. 65
Резюме ............................................................................................ 73
Совет 7. О важности правильной оценки производительности TCP ....... 73
Источник и приемник на базе UDP ........................................................ 75
Источник и приемник на базе TCP ........................................................ 77
Резюме ............................................................................................ 84
Совет 8. О том, что не надо заново изобретать TCP .......................... 84
Резюме ............................................................................................ 87
Совет 9. О том, что при всей надежности у TCP есть и недостатки .... 87
Что такое надежность ......................................................................... 87
Потенциальные ошибки ...................................................................... 89
Сбой в сети ....................................................................................... 90
Отказ приложения ............................................................................. 90
Крах хоста на другом конце соединения ............................................... 95
Резюме ............................................................................................ 96
Совет 10. О том, что TCP не выполняет опрос соединения ................ 96
Механизм контролеров ...................................................................... 97
Пульсация ........................................................................................ 99
Еще один пример пульсации ............................................................. 104
Резюме .......................................................................................... 110
Совет 11. О некорректном поведении партнера ............................. 111
Проверка завершения работы клиента ............................................... 112
Проверка корректности входной информации ..................................... 114
Резюме .......................................................................................... 118
Совет 12. О работе программы в локальной и глобальной сетях ..... 118
Недостаточная производительность .................................................. 119
Скрытая ошибка .............................................................................. 120
Резюме .......................................................................................... 124
Совет 13. О функционировании протоколов .................................... 124
Резюме .......................................................................................... 125
Совет 14. О семиуровневой эталонной модели OSI ........................ 126
Модель OSI ..................................................................................... 126
Модель TCP/IP ................................................................................ 128
Резюме .......................................................................................... 130
Стр.7
Содержание
7
Глава 3. Создание эффективных
и устойчивых сетевых программ ................... 131
Совет 15. Об операции записи в TCP .............................................. 131
Операция записи с точки зрения приложения ...................................... 131
Операция записи с точки зрения TCP ................................................. 132
Резюме .......................................................................................... 136
Совет 16. О важности аккуратного размыкания
TCPсоединений ............................................................. 137
Вызов shutdown ............................................................................... 137
Аккуратное размыкание соединений .................................................. 139
Резюме .......................................................................................... 144
Совет 17. О запуске приложения через inetd ................................... 144
TCPсерверы .................................................................................. 145
UDPсерверы .................................................................................. 149
Резюме .......................................................................................... 154
Совет 18. О назначении серверу номера порта
с помощью tcpmux .......................................................... 154
Резюме .....................................................................................................163
Совет 19. Об использовании двух TCPсоединений ........................ 163
Архитектура с одним соединением .................................................... 164
Архитектура с двумя соединениями ................................................... 165
Резюме .......................................................................................... 170
Совет 20. О том, как сделать приложение
событийноуправляемым (1) ........................................... 170
Резюме .......................................................................................... 179
Совет 21. О том, как сделать приложение
событийноуправляемым (2) ........................................... 179
Резюме .......................................................................................... 187
Совет 22. О том, что не надо прерывать состояние TIMEWAIT
для закрытия соединения ................................................ 187
Что это такое ................................................................................... 188
Зачем нужно состояние TIMEWAIT ..................................................... 189
Принудительная отмена состояния TIMEWAIT ..................................... 190
Резюме .......................................................................................... 192
Совет 23. Об установке опции SO_REUSEADDR .............................. 192
Резюме .......................................................................................... 197
Стр.8
8
Эффективное программирование TCP/IP
Совет 24. О написании одного большого блока
вместо нескольких маленьких ......................................... 197
Отключение алгоритма Нейгла .......................................................... 200
Запись со сбором ............................................................................ 201
Резюме .......................................................................................... 204
Совет 25. Об организации таймаута для вызова connect ............... 204
Использование вызова alarm ............................................................. 205
Использование select ............................................................................... 207
Резюме .......................................................................................... 210
Совет 26. О вреде копирования данных .......................................... 210
Буферы в разделяемой памяти .......................................................... 212
Система буферов в разделяемой памяти ............................................ 213
Реализация в UNIX ........................................................................... 216
Реализация в Windows ...................................................................... 220
Резюме .......................................................................................... 224
Совет 27. Об обнулении структуры sockaddr_in ............................... 225
Совет 28. О важности порядка байтов ............................................. 225
Резюме .......................................................................................... 228
Совет 29. О том, что не стоит «зашивать» IPадреса
и номера портов в код ..................................................... 229
Резюме .......................................................................................... 234
Совет 30. О подсоединенном UDPсокете ...................................... 234
Резюме .......................................................................................... 238
Совет 31. О том, что C – не единственный
язык программирования ................................................. 238
Резюме .......................................................................................... 243
Совет 32. О значимости размеров буферов .................................... 243
Резюме .......................................................................................... 247
Глава 4. Инструменты и ресурсы ....................................... 248
Совет 33. Об использовании утилиты ping ...................................... 248
Резюме .......................................................................................... 251
Совет 34. Об использовании программы tcpdump
или аналогичного средства ............................................. 251
Как работает tcpdump ...................................................................... 251
Использование tcpdump ................................................................... 255
Выходная информация, формируемая tcpdump ................................... 256
Резюме .......................................................................................... 261
Стр.9
Содержание
9
Совет 35. О применении программы traceroute ............................... 261
Как работает traceroute .................................................................... 262
Программа tracert в системе Windows ................................................. 266
Резюме .......................................................................................... 267
Совет 36. О преимуществах программы ttcp ................................... 267
Резюме .......................................................................................... 271
Совет 37. О работе с программой lsof ............................................. 271
Резюме .......................................................................................... 273
Совет 38. Об использовании программы netstat ............................. 273
Активные сокеты .............................................................................. 273
Интерфейсы ................................................................................... 275
Маршрутная таблица ....................................................................... 276
Статистика протоколов ..................................................................... 279
Программа netstat в Windows ............................................................ 281
Резюме .................................................................................................... 281
Совет 39. О средствах трассировки системных вызовов ................ 281
Преждевременное завершение ......................................................... 282
Низкая производительность ttcp ........................................................ 286
Резюме .......................................................................................... 287
Совет 40. О создании и применении программы
для анализа ICMPсообщений ......................................... 287
Чтение ICMPсообщений .................................................................. 288
Печать ICMPсообщений .................................................................. 289
Резюме .......................................................................................... 295
Совет 41. О пользе книг Стивенса ................................................... 295
«TCP/IP Illustrated» ........................................................................... 295
«UNIX Network Programming» ............................................................. 297
Совет 42. О чтении текстов программ ............................................. 297
Резюме .......................................................................................... 299
Совет 43. О том, что надо знать RFC ............................................... 299
Тексты RFC ..................................................................................... 300
Совет 44. Об участии в конференциях Usenet .................................. 300
Другие ресурсы, относящиеся к конференциям ................................... 301
Приложение 1 ............................................................................... 303
Вспомогательный код для UNIX .................................................... 303
Заголовочный файл etcp.h ................................................................ 303
Стр.10
10
Эффективное программирование TCP/IP
Функция daemon .............................................................................. 304
Функция signal ..........................................................................................305
Приложение 2 ............................................................................... 307
Вспомогательный код для Windows ............................................. 307
Заголовочный файл skel.h ................................................................. 307
Функции совместимости с Windows ............................................ 307
Литература ..................................................................................... 310
Предметный указатель ........................................................... 314
Стр.11