Настоящее учебное пособие предназначено для студентов компьютерных специальностей,
изучающих курсы "Сетевое программирование", "Сетевые операционные системы",
"Современные вычислительные сети", "Современное сетевое программирование"
и выполняющих соответствующите лабораторные и курсовую работы.
Пособие может быть полезно всем, кто интересуется вопросами проектирования сетевых приложений
с использованием интерфейса сокетов операционных систем UNIX (*NIX) и Windows.
Содержание
Введение 5
Глава 1 Стек протоколов TCP/IP 7
1.1. Структура стека TCP/IP 8
1.1.1. Краткая характеристика протоколов 8
1.1.2. Взаимодействие протоколов стека 10
1.2. Межсетевой протокол IPv4 (Internet Protocol) 11
1.2.1. Формат заголовка IP-пакета 12
1.2.2. Фрагментация пакетов IPv4 20
1.3. Межсетевой протокол IPv6 23
1.3.1. Адресация в IPv6 25
1.3.2. Индивидуальные адреса 26
1.3.3. Специальные адреса 28
1.3.4. Заголовок IPv6 28
1.3.5. Дополнительные заголовки в IPv6 30
1.3.6. Совместимость IPv6 32
1.4. Протокол ICMP 33
1.4.1. Назначение ICMP 33
1.4.2. Сообщения ICMP 34
1.4.3. Сообщения ICMP об ошибке 36
1.4.4. Сообщения-запросы ICMP 39
1.5. Протокол IGMP 42
1.5.1. Понятие группового адреса 44
1.5.2. IGMP-сообщение 45
1.5.3. Вступление в группу 46
1.5.4. Запросы (queries) и отчеты (reports) IGMP 46
1.5.5. Особенности группового взаимодействия 47
1.5.6. Поле времени жизни 48
1.5.7. Специальный диапазон адресов 48
1.5.8. Групповая передача в Интернете 49
1.6. Протокол ARP 50
1.6.1. Сценарий работы модуля ARP 50
1.6.1.1. Формат сообщений протокола 51
1.7. Протокол TCP 54
1.7.1. Сегменты TCP 55
1.7.2. Порты и протоколы 55
1.7.3. Квитирование и скользящее окно в протоколе TCP 59
1.7.3.1. Концепция квитирования 59
1.7.3.2. Пример кумулятивного подтверждения 61
1.7.3.3. Скользящее окно и реакция на перегрузку 62
1.7.4. Формат заголовка TCP 64
1.7.5. Внеполосные (срочные) данные протокола TCP 69
1.7.6. Как передается сообщение 70
1.7.7. Установление TCP-соединения 71
1.7.8. Таймеры TCP 72
1.7.9. Блок управления передачей и управления потоком 74
1.7.10. Переходы автомата TCP при установлении соединения. 76
1.7.11. Окончание соединения TCP 77
1.7.12. Дополнительные алгоритмы TCP-автомата 81
1.8. Протокол UDP 82
2. Глава 2 Интерфейс сокетов 85
2.1. Интерфейсы прикладного сетевого программирования 85
2.2. Ввод-вывод сетевых данных 87
2.3. Абстракция сокетов 88
2.4. Функция создания сокета 89
2.4.1. Параметры сокета 90
2.4.1.1. Структуры адреса в стандарте сокетов 93
2.5. Основные функции интерфейса сокетов Беркли 97
2.5.1. Функция connect() 97
2.5.2. Функция bind() 99
2.5.3. Функция listen() 101
2.5.4. Функция accept() 102
2.5.5. Функции передачи данных через сокет 105
2.5.6. Функция send() и уcтановление флага PUSH 108
2.5.7. Функции приема данных через сокет 109
2.5.8. Функции закрытия соединения 111
2.5.9. Функция select() 115
2.5.10. Макрокоманды для работы с наборами сокетов 118
2.5.11. Функция poll() 120
2.5.12. Функция epoll() 120
2.5.13. Проблема блокирования 121
2.5.14. Функции ioctl() и fcntl() 124
2.5.15. Функции работы с базами данных 128
2.5.16. Дополнительные сетевые библиотечные функции 134
2.6. Примеры UNIX-like программ клиент/сервер 138
2.7. Суперсервер Интернет UNIX-системы 146
2.7.1. Конфигурирование inetd 147
2.8. Функции опций сокета 148
2.8.1. Опции функции setsockopt() 149
2.8.2. Опции функции getsockopt() 157
2.8.3. Опции сокета для групповой передачи 160
2.9. Простой сокет 161
2.10. Алгоритм Nagle 163
2.11. Взаимодействие приложения со стеком TCP/IP 166
3. Глава 3 Интерфейс Windows Sockets 170
3.1. Введение 170
3.2. Функции интерфейса Беркли-сокетов, поддерживаемые WinSock 172
3.3. Функции-расширения, специфические для Windows 175
3.4. Инициализация приложения и завершение его работы 176
3.4.1. Основы Windows-программирования 179
3.5. Синхронные и асинхронные сокеты Windows 182
3.5.1. Синхронные сокеты WinSock API 183
3.5.2. Асинхронные сокеты и WinSock API 186
3.5.2.1. Функция WSAAsyncSelect() 187
3.5.2.2. Сетевые события и условия возникновения 188
3.5.2.3. Функции типа WSAAsyncGetXByY 196
3.6. Работа с ошибками сетевого интерфейса 197
3.6.1. Коды ошибок и WSAGetLastError() 198
3.6.2. Обработка ошибок 200
3.7. Программирование TCP-протокола в среде Windows 200
3.7.1. Клиент WinTCP 201
3.7.2. Сервер WinTCP 202
4. Глава 4 Спецификация Winsock 2.0 205
4.1. Обзор основных функций Winsock 2.0 API 207
4.1.1. Функция WSASocket() 208
4.1.2. Функция WSAAccept() 209
4.1.3. Функция WSAConnect() 210
4.1.4. Функция WSADuplicateSocket() 211
4.1.5. Функция WSAHtonl() 212
4.1.6. Функция WSAIoctl() 212
4.1.7. Функция WSAJoinLeaf() 214
4.1.8. Функция WSARecv() 215
4.1.9. Функция WSARecvDisconnect() 216
4.1.10. Функция WSARecvFrom() 216
4.1.11. Функция WSASend() 216
4.1.12. Функция WSASendDisconnect() 217
4.1.13. Функция WSASendTo() 217
4.1.14. Функция WSAProviderConfigChange() 218
4.2. Интерфейс WinSock Service Provider 218
4.2.1. Программные аспекты SPI 219
4.3. Модели ввода/вывода в Winsock 2.0 229
4.3.1. Mодель сетевого I/O с использованием WSAEventSelect() 229
4.3.2. Mодель с перекрытием – Overlapped I/O 232
4.3.3. Модель порта завершения 235
4.3.3.1. Связывание I/O устройства с портом завершения ввода-вывода 236
4.3.3.2. Рабочие потоки и порты завершения 237
4.3.4. Выбор модели I/O для приложения 244
4.4. Дополнительные возможности спецификации WinSock 2.0 245
4.4.1. API функций расширения 245
4.4.1.1. Функция AcceptEx() 246
4.4.1.2. Функции ConnectEx(), DisconnectEx() 248
4.4.1.3. Функции TransmitFile(), TransmitPackets() 249
4.4.1.4. Функция WSARecvMsg() 251
4.4.2. Протокол резервирования ресурсов RSVP 251
4.4.3. Вспомогательные функции – Helper API 253
4.4.4. Инфракрасные сокеты 259
5. Глава 5 Специфические программные интерфейсы 262
5.1. Интерфейс NetBIOS 263
5.1.1. Основы функционирования NetBIOS 263
5.1.2. Программные аспекты NetBIOS 265
5.1.2.1. Программирование с помощью NetBIOS-интерфейса 266
5.1.2.2. Программирование NetBIOS-приложений с использованием WinSock 269
5.2. Интерфейсы доступа к канальному уровню 271
Приложения 279
Литература 322
|