Лит
Лайф
Жанры
Авторы
Книги
Серии
Форум
Подборки
Стивенс Уильям Ричард
Книга "UNIX: разработка сетевых приложений"
Оглавление
Главы
752
Вложения
1
Ключевые слова
У. Р. Стивенс, Б. Феннер, Э. М. Рудофф UNIX Разработка сетевых приложений 3-е издание
Вступительное слово
Предисловие
Часть 1 Введение. TCP/IP
Глава 1 Введение в сетевое программирование
1.1. Введение
1.2. Простой клиент времени и даты
1.3. Независимость от протокола
1.4. Обработка ошибок: функции-обертки
В любой реальной программе существенным моментом является проверка каждого вызова функции на ...
Значение системной переменной Unix errno
1.5. Простой сервер времени и даты
1.6. Таблица соответствия примеров технологии клиент-сервер
1.7. Модель OSI
1.8. История сетевого обеспечения BSD
1.9. Сети и узлы, используемые в примерах
На рис. 1.7 показаны различные сети и узлы, используемые нами в примерах. Для каждого узла мы...
Определение топологии сети
1.10. Стандарты Unix
Когда писалась эта книга, наибольший интерес в сфере стандартизации Unix вызывала деятельност...
История POSIX
История Open Group
Объединение стандартов
Internet Engineering Task Force
1.11. 64-разрядные архитектуры
1.12. Резюме
Упражнения
Глава 2 Транспортный уровень: TCP, UDP и SCRIPT
2.1. Введение
2.2. Обзор протоколов TCP/IP
2.3. UDP: протокол пользовательских дейтаграмм
2.4. TCP: протокол контроля передачи
2.5. SCRIPT: протокол управления передачей потоков
2.6. Установление и завершение соединения TCP
Чтобы облегчить понимание функций connect, accept и close и чтобы нам было легче отлаживать п...
Трехэтапное рукопожатие
Параметры TCP
Завершение соединения TCP
Диаграмма состояний TCP
Обмен пакетами
2.7. Состояние TIME_WAIT
2.8. Установление и завершение ассоциации SCRIPT
Протокол SCRIPT ориентирован на установление соединения, подобно TCP, поэтому он также имеет ...
Четырехэтапное рукопожатие
Завершение ассоциации
Диаграмма состояний SCRIPT
Обмен пакетами
Параметры SCRIPT
2.9. Номера портов
В любой момент времени каждый транспортный протокол (UDP, TCP, SCRIPT) может использоваться н...
Пара сокетов
2.10. Номера портов TCP и параллельные серверы
2.11. Размеры буфера и ограничения
Существуют несколько ограничений, устанавливающих максимальный размер дейтаграмм IP. Сначала ...
Отправка по TCP
Отправка по UDP
Отправка по SCRIPT
2.12. Стандартные службы Интернета
2.13. Использование протоколов типичными приложениями Интернета
2.14. Резюме
Упражнения
Часть 2 Элементарные сокеты
Глава 3 Введение в сокеты
3.1. Введение
3.2. Структуры адреса сокетов
Большинство функций сокетов используют в качестве аргумента указатель на структуру адреса сок...
Структура адреса сокета IPv4
Универсальная структура адреса сокета
Структура адреса сокета IPv6
Новая универсальная структура адреса сокета
Сравнение структур адреса сокетов
3.3. Аргументы типа «значение-результат»
3.4. Функции определения порядка байтов
3.5. Функции управления байтами
3.6. Функции inet_aton, inet_addr и inet_ntoa
3.7. Функции inet_pton и inet_ntop
Эти функции появились с IPv6 и работают как с адресами IPv4, так и с адресами IPv6. Их мы и б...
Пример
3.8. Функция sock_ntop и связанные с ней функции
3.9. Функции readn, writen и readline
3.10. Резюме
Упражнения
Глава 4 Элементарные сокеты TCP
4.1. Введение
4.2. Функция socket
Чтобы обеспечить сетевой ввод-вывод, процесс должен начать работу с вызова функции socket, за...
AF_xxx и PF_xxx
4.3. Функция connect
4.4. Функция bind
4.5. Функция listen
4.6. Функция accept
Функция accept вызывается сервером TCP для возвращения следующего установленного соединения и...
Пример: аргументы типа «значение-результат»
4.7. Функции fork и exec
4.8. Параллельные серверы
4.9. Функция close
Обычная функция Unix close также используется для закрытия сокета и завершения соединения TCP...
Счетчик ссылок дескриптора
4.10. Функции getsockname и getpeername
Эти две функции возвращают либо локальный (функция getsockname), либо удаленный (функция getp...
Пример: получение семейства адресов сокета
4.11. Резюме
Упражнения
Глава 5 Пример TCP-соединения клиент-сервер
5.1. Введение
5.2. Эхо-сервер TCP: функция main
5.3. Эхо-сервер TCP: функция str_echo
5.4. Эхо-клиент TCP: функция main
5.5. Эхо-клиент TCP: функция str_cli
5.6. Нормальный запуск
5.7. Нормальное завершение
5.8. Обработка сигналов POSIX
Сигнал — это уведомление процесса о том, что произошло некое событие. Иногда сигналы называют...
Функция signal
Семантика сигналов POSIX
5.9. Обработка сигнала SIGCHLD
Назначение состояния зомби — сохранить информацию о дочернем процессе, чтобы родительский про...
Обработка зомбированных процессов
Обработка прерванных системных вызовов
5.10. Функции wait и waitpid
В листинге 5.7 мы вызываем функцию wait для обработки завершенного дочернего процесса. ...
Различия между функциями wait и waitpid
5.11. Прерывание соединения перед завершением функции accept
5.12. Завершение процесса сервера
5.13. Сигнал SIGPIPE
5.14. Сбой на узле сервера
5.15. Сбой и перезагрузка на узле сервера
5.16. Выключение узла сервера
5.17. Итоговый пример TCP
5.18. Формат данных
В нашем примере сервер никогда не исследует запрос, который он получает от клиента. Сервер ли...
Пример: передача текстовых строк между клиентом и сервером
Пример: передача двоичных структур между клиентом и сервером
5.19. Резюме
Упражнения
Глава 6 Мультиплексирование ввода-вывода: функции select и poll
6.1. Введение
6.2. Модели ввода-вывода
Прежде чем начать описание функций select и poll, мы должны вернуться назад и уяснить основны...
Модель блокируемого ввода-вывода
Модель неблокируемого ввода-вывода
Модель мультиплексирования ввода-вывода
Модель ввода-вывода, управляемого сигналом
Модель асинхронного ввода-вывода
Сравнение моделей ввода-вывода
Сравнение синхронного и асинхронного ввода-вывода
6.3. Функция select
Эта функция позволяет процессу сообщить ядру, что необходимо подождать, пока не произойдет од...
При каких условиях дескриптор становится готовым?
Максимальное число дескрипторов для функции select
6.4. Функция str_cli (продолжение)
6.5. Пакетный ввод
6.6. Функция shutdown
6.7. Функция str_cli (еще раз)
6.8. Эхо-сервер TCP (продолжение)
Вернемся к нашему эхо-серверу TCP из разделов 5.2 и 5.3. Перепишем сервер как одиночный проце...
Атака типа «отказ в обслуживании»
6.9. Функция pselect
6.10. Функция poll
6.11. Эхо-сервер TCP (еще раз)
6.12. Резюме
Упражнения
Глава 7 Параметры сокетов
7.1. Введение
7.2. Функции getsockopt и setsockopt
7.3. Проверка наличия параметра и получение значения по умолчанию
7.4. Состояния сокетов
7.5. Общие параметры сокетов
Мы начнем с обсуждения общих параметров сокетов. Эти параметры не зависят от протокола (то ес...
Параметр сокета SO_BROADCAST
Параметр сокета SO_DEBUG
Параметр сокета SO_DONTROUTE
Параметр сокета SO_ERROR
Параметр сокета SO_KEEPALIVE
Параметр сокета SO_LINGER
Параметр сокета SO_OOBINLINE
Параметры сокета SO_RCVBUF и SO_SNDBUF
Параметры сокета SO_RCVLOWAT и SO_SNDLOWAT
Параметры сокета SO_RCVTIMEO и SO_SNDTIMEO
Параметры сокета SO_REUSEADDR и SO_REUSEPORT
Параметр сокета SO_TYPE
Параметр сокета SO_USELOOPBACK
7.6. Параметры сокетов IPv4
Эти параметры сокетов обрабатываются IPv4 и для них аргумент level равен IPPROTO_IP. Обсужден...
Параметр сокета IP_HRDINCL
Параметр сокета IP_OPTIONS
Параметр сокета IP_RECVDSTADDR
Параметр сокета IP_RECVIF
Параметр сокета IP_TOS
Параметр сокета IP_TTL
7.7. Параметр сокета ICMPv6
Единственный параметр сокета, обрабатываемый ICMPv6, имеет аргумент level, равный IPPROTO_ICM...
Параметр сокета ICMP6_FILTER
7.8. Параметры сокетов IPv6
Эти параметры сокетов обрабатываются IPv6 и имеют аргумент level, равный IPPROTO_IPV6. Мы отл...
Параметр сокета IPV6_CHECKSUM
Параметр сокета IPV6_DONTFRAG
Параметр сокета IPV6_NEXTHOP
Параметр сокета IPV6_PATHMTU
Параметр сокета IPV6_RECVDSTOPTS
Параметр сокета IPV6_RECVHOPLIMIT
Параметр сокета IPV6_RECVHOPOPTS
Параметр сокета IPV6_RECVPATHMTU
Параметр сокета IPV6_RECVPKTINFO
Параметр сокета IPV6_RECVRTHDR
Параметр сокета IPV6_RECVTCLASS
Параметр сокета IPV6_UNICAST_HOPS
Параметр сокета IPV6_USE_MIN_MTU
Параметр сокета IPV6_V6ONLY
Параметры сокета IPV6_XXX
7.9. Параметры сокетов TCP
Для сокетов TCP предусмотрены два специальных параметра. Для них необходимо указывать level I...
Параметр сокета TCP_MAXSEG
Параметр сокета TCP_NODELAY
7.10. Параметры сокетов SCTP
Относительно большое количество параметров, определенных для сокетов SCTP (17 на момент напис...
Параметр сокета SCTP_ADAPTION_LAYER
Параметр сокета SCTP_ASSOCINFO
Параметр сокета SCTP_AUTOCLOSE
Параметр сокета SCTP_DEFAULT_SEND_PARAM
Параметр сокета SCTP_DISАВLE_FRAGМENTS
Параметр сокета SCTP_EVENTS
Параметр сокета SCTP_GET_PEER_ADDR_INFO
Параметр сокета SCTP_I_WANT_MAPPED_V4_ADDR
Параметр сокета SCTP_INITMSG
Параметр сокета SCTP_MAXBURST
Параметр сокета SCTP_MAXSEG
Параметр сокета SCTP_NODELAY
Параметр сокета SCTP_PEER_ADDR_PARAMS
Параметр сокета SCTP_PRIMARY_ADDR
Параметр сокета SCTP_RTOINFO
Параметр сокета SCTP_SET_PEER_PRIMARY_ADDR
Параметр сокета SCTP_STATUS
7.11. Функция fcntl
7.12. Резюме
Упражнения
Глава 8 Основные сведения о сокетах UDP
8.1. Введение
8.2. Функции recvfrom и sendto
8.3. Эхо-сервер UDP: функция main
8.4. Эхо-сервер UDP: функция dg_echo
8.5. Эхо-клиент UDP: функция main
8.6. Эхо-клиент UDP: функция dg_cli
8.7. Потерянные дейтаграммы
8.8. Проверка полученного ответа
8.9. Запуск клиента без запуска сервера
8.10. Итоговый пример клиент-сервера UDP
8.11. Функция connect для UDP
В конце разделе 8.9 мы упомянули, что асинхронные ошибки не возвращаются на сокете UDP, если ...
Многократный вызов функции connect для сокета UDP
Производительность
8.12. Функция dg_cli (продолжение)
8.13. Отсутствие управления потоком в UDP
Теперь мы проверим, как влияет на работу приложения отсутствие какого-либо управления потоком...
Приемный буфер сокета UDP
8.14. Определение исходящего интерфейса для UDP
8.15. Эхо-сервер TCP и UDP, использующий функцию select
8.16. Резюме
Упражнения
Глава 9 Основы сокетов SCTP
9.1. Введение
9.2. Модели интерфейса
Сокеты SCTP бывают двух типов: «один-к-одному» и «один-ко-многим». Сокету типа «один-к-одному...
Сокет типа «один-к-одному»
Сокет типа «один-ко-многим»
9.3. Функция sctp_bindx
9.4. Функция sctp_connectx
9.5. Функция sctp_getpaddrs
9.6. Функция sctp_freepaddrs
9.7. Функция sctp_getladdrs
9.8. Функция sctp_freeladdrs
9.9. Функция sctp_sendmsg
9.10. Функция sctp_recvmsg
9.11. Функция sctp_opt_info
9.12. Функция sctp_peeloff
9.13. Функция shutdown
9.14. Уведомления
9.15. Резюме
Упражнения
Глава 10 Пример SCTP-соединения клиент-сервер
10.1. Введение
10.2. Потоковый эхо-сервер SCTP типа «один-ко-многим»: функция main
10.3. Потоковый эхо-клиент SCTP типа «один-ко-многим»: функция main
10.4. Потоковый эхо-клиент SCTP: функция str_cli
В листинге 10.3 приведена основная функция эхо-клиента SCTP. Листинг 10.3. Функция sctp...
Запуск программы
10.5. Блокирование очереди
Наш сервер позволяет отправлять текстовые сообщения по любому из нескольких потоков. Поток SC...
Запуск программы
Запуск измененной программы
10.6. Управление количеством потоков
10.7. Управление завершением соединения
10.8. Резюме
Упражнения
Глава 11 Преобразования имен и адресов
11.1. Введение
11.2. Система доменных имен
Система доменных имен (Domain Name System, DNS) используется прежде всего для сопоставления и...
Записи ресурсов
Распознаватели и серверы имен
Альтернативы DNS
11.3. Функция gethostbyname
Узлы компьютерных сетей мы обычно идентифицируем по их именам, удобным для человеческого восп...
Пример
11.4 Функция gethostbyaddr
11.5. Функции getservbyname и getservbyport
Службы, как и узлы, также часто идентифицируются по именам. Используя в нашем коде имя службы...
Пример: использование функций gethostbyname и getservbyname
11.6. Функция getaddrinfo
11.7. Функция gai_strerror
11.8. Функция freeaddrinfo
11.9. Функция getaddrinfo: IPv6
11.10. Функция getaddrinfo: примеры
11.11. Функция host_serv
11.12. Функция tcp_connect
Теперь мы напишем две функции, использующие функцию getaddrinfo для обработки большинства сце...
Пример: клиент времени и даты
11.13. Функция tcp_listen
Наша следующая функция, tcp_listen, выполняет обычные шаги сервера TCP: создание сокета TCP, ...
Пример: сервер времени и даты
Пример: сервер времени и даты с указанием протокола
11.14. Функция udp_client
Наши функции, предоставляющие более простой интерфейс для функции getaddrinfo, в случае UDP и...
Пример: не зависящий от протокола UDP-клиент времени и даты
11.15. Функция udp_connect
11.16. Функция udp_server
Наша последняя функция, предоставляющая более простой интерфейс для функции getaddrinfo, — эт...
Пример: не зависящий от протокола UDP-сервер времени и даты
11.17. Функция getnameinfo
11.18. Функции, допускающие повторное вхождение
11.19. Функции gethostbyname_r и gethostbyaddr_r
11.20. Устаревшие функции поиска адресов IPv6
В процессе разработки IPv6 интерфейс поиска адресов IPv6 много раз претерпевал серьезные изме...
Константа RES_USE_INET6
Функция gethostbyname2
Функция getipnodebyname
11.21. Другая информация о сетях
11.22. Резюме
Упражнения
Часть 3 Дополнительные возможности сокетов
Глава 12 Совместимость IPv4 и IPv6
12.1. Введение
12.2. Клиент IPv4, сервер IPv6
12.3. Клиент IPv6, сервер IPv4
Теперь мы поменяем протоколы, используемые клиентом и сервером в примере из предыдущего разде...
Резюме: совместимость IPv4 и IPv6
12.4. Макроопределения проверки адреса IPv6
12.5. Переносимость исходного кода
12.6. Резюме
Упражнения
Глава 13 Процессы-демоны и суперсервер inetd
13.1. Введение
13.2. Демон syslogd
13.3. Функция syslog
13.4. Функция daemon_init
В листинге 13.1[1] показана функция, называемая daemon_init, которую мы можем вызвать (обычно...
Пример: сервер времени и даты в качестве демона
13.5. Демон inetd
13.6. Функция daemon_inetd
В листинге 13.3 показана функция daemon_inetd, которую мы можем вызвать с сервера, запущенног...
Пример: сервер времени и даты, активизированный демоном inetd
13.7. Резюме
Упражнения
Глава 14 Дополнительные функции ввода-вывода
14.1. Введение
14.2. Тайм-ауты сокета
Существует три способа установки тайм-аута для операции ввода-вывода через сокет. 1. Вы...
Тайм-аут для функции connect (сигнал SIGALRM)
Тайм-аут для функции recvfrom (сигнал SIGALRM)
Тайм-аут для функции recvfrom (функция select)
Тайм-аут для функции recvfrom (параметр сокета SO_RCVTIMEO)
14.3. Функции recv и send
14.4. Функции readv и writev
14.5. Функции recvmsg и sendmsg
14.6. Вспомогательные данные
14.7. Сколько данных находится в очереди?
14.8. Сокеты и стандартный ввод-вывод
Во всех наших примерах мы применяли то, что иногда называется вводом-выводом Unix, вызывали ф...
Пример: функция str_echo, использующая стандартный ввод-вывод
14.9. Расширенный опрос
В начале этой главы мы рассказывали о способах установки таймеров для операций с сокетами. Во...
Интерфейс /dev/poll
Интерфейс kqueue
Рекомендации
14.10. Резюме
Упражнения
Глава 15 Доменные протоколы Unix
15.1. Введение
15.2. Структура адреса доменного сокета Unix
В листинге 15.1[1] показана структура адреса доменного сокета Unix, задаваемая включением заг...
Пример: функция bind и доменный сокет Unix
15.3. Функция socketpair
15.4. Функции сокетов
15.5. Клиент и сервер потокового доменного протокола Unix
15.6. Клиент и сервер дейтаграммного доменного протокола Unix
15.7. Передача дескрипторов
Когда нам требуется передать дескриптор от одного процесса другому, обычно мы выбираем одно и...
Пример передачи дескриптора
15.8. Получение информации об отправителе
На рис. 14.4 мы показали другой тип информации, передаваемой через доменный сокет Unix в виде...
Пример
15.9. Резюме
Упражнения
Глава 16 Неблокируемый ввод-вывод
16.1. Введение
16.2. Неблокируемые чтение и запись: функция str_cli (продолжение)
Мы снова возвращаемся к нашей функции str_cli, которую мы обсуждали в разделах 5.5 и 6.4. Пос...
Более простая версия функции str_cli
Сравнение времени выполнения различных версий функции str_cli
16.3. Неблокируемая функция connect
16.4. Неблокируемая функция connect: клиент времени и даты
В листинге 16.7 показана наша функция connect_nonb, вызывающая неблокируемую функцию connect....
Прерванная функция connect
16.5. Неблокируемая функция connect: веб-клиент
Первое практическое использование неблокируемой функции connect относится к веб-клиенту Netsc...
Эффективность одновременных соединений
16.6. Неблокируемая функция accept
16.7. Резюме
Упражнения
Глава 17 Операции функции ioctl
17.1. Введение
17.2. Функция ioctl
17.3. Операции с сокетами
17.4. Операции с файлами
17.5. Конфигурация интерфейса
17.6. Функция get_ifi_info
17.7. Операции с интерфейсами
17.8. Операции с кэшем ARP
Операции с кэшем ARP также осуществляются с помощью функции ioctl. В этих запросах использует...
Пример: вывод аппаратного адреса узла
17.9. Операции с таблицей маршрутизации
17.10. Резюме
Упражнения
Глава 18 Маршрутизирующие сокеты
18.1. Введение
18.2. Структура адреса сокета канального уровня
18.3. Чтение и запись
Создав маршрутизирующий сокет, процесс может отправлять ядру команды путем записи в этот соке...
Пример: получение и вывод записи из таблицы маршрутизации
18.4. Операции функции sysctl
Маршрутизирующие сокеты нужны нам главным образом для проверки таблицы маршрутизации и списка...
Пример: определяем, включены ли контрольные суммы UDP
18.5. Функция get_ifi_info (повтор)
18.6. Функции имени и индекса интерфейса
Документ RFC 3493 [36] определяет четыре функции, обрабатывающие имена и индексы интерфейсов....
Функция if_nametoindex
Функция if_indextoname
Функция if_nameindex
Функция if_freenameindex
18.7. Резюме
Упражнения
Глава 19 Сокеты управления ключами
19.1. Введение
19.2. Чтение и запись
19.3. Дамп базы соглашений о безопасности
19.4. Создание статического соглашения о безопасности
Наиболее прямолинейным методом добавления соглашения о безопасности в базу является отправка ...
Пример
19.5. Динамическое управление SA
Для повышения безопасности требуется периодическая смена ключей. Обычно для этого используетс...
Пример
19.6. Резюме
Упражнения
Глава 20 Широковещательная передача
20.1. Введение
20.2. Широковещательные адреса
20.3. Направленная и широковещательная передачи
20.4. Функция dg_cli при использовании широковещательной передачи
Мы еще раз изменим нашу функцию dg_cli, на этот раз дав ей возможность отправлять широковещат...
Фрагментация IP-пакетов и широковещательная передача
20.5. Ситуация гонок
Ситуация гонок (race condition) обычно возникает, когда множество процессов получают доступ к...
Блокирование и разблокирование сигнала с помощью функции pselect
Использование функций sigsetjmp и siglongjmp
Применение IPC в обработчике сигнала функции
20.6. Резюме
Упражнения
Глава 21 Многоадресная передача
21.1. Введение
21.2. Адрес многоадресной передачи
При описании адресов многоадресной передачи необходимо провести различия между IPv4 и IPv6. ...
Адреса IPv4 класса D
Адреса многоадресной передачи IPv6
Область действия адресов многоадресной передачи
Сеансы многоадресной передачи
21.3. Сравнение многоадресной и широковещательной передачи в локальной сети
21.4. Многоадресная передача в глобальной сети
21.5. Многоадресная передача от отправителя
21.6. Параметры сокетов многоадресной передачи
21.7. Функция mcast_join и родственные функции
Несмотря на то что параметры сокетов многоадресной передачи для IPv4 аналогичны параметрам со...
Пример: функция mcast_join
Пример: функция mcast_set_loop
21.8 Функция dg_cli, использующая многоадресную передачу
Мы изменяем нашу функцию dg_cli, показанную в листинге 20.1, просто удаляя вызов функции sets...
Фрагментация IP и многоадресная передача
21.9. Получение анонсов сеансов многоадресной передачи
21.10. Отправка и получение
Программа для получения анонсов сеанса многоадресной передачи, показанная в предыдущем раздел...
Пример
21.11. SNTP: простой синхронизирующий сетевой протокол
21.12. Резюме
Упражнения
Глава 22 Дополнительные сведения о сокетах udp
22.1. Введение
22.2. Получение флагов, IP-адреса получателя и индекса интерфейса
Исторически функции sendmsg и recvmsg использовались только для передачи дескрипторов через д...
Пример: вывод IP-адреса получателя и флага обрезки дейтаграммы
22.3. Обрезанные дейтаграммы
22.4. Когда UDP оказывается предпочтительнее TCP
22.5. Добавление надежности приложению UDP
Если мы хотим использовать UDP для приложения типа «запрос-ответ», как было отмечено в предыд...
Пример
22.6. Связывание с адресами интерфейсов
22.7. Параллельные серверы UDP
22.8. Информация о пакетах IPv6
IPv6 позволяет приложению определять до пяти характеристик исходящей дейтаграммы: ■ IPv...
Исходящий и входящий интерфейсы
Адрес отправителя и адрес получателя IPv6
Задание и получение предельного количества транзитных узлов
Задание адреса следующего транзитного узла
Задание и получение класса трафика
22.9. Управление транспортной MTU IPv6
IPv6 предоставляет приложениям средства для управления механизмом обнаружения транспортной MT...
Отправка с минимальной MTU
Получение сообщений об изменении транспортной MTU
Определение текущей транспортной MTU
Отключение фрагментации
22.10. Резюме
Упражнения
Глава 23 Дополнительные сведения о сокетах SCTP
23.1. Введение
23.2. Сервер типа «один-ко-многим» с автоматическим закрытием
23.3. Частичная доставка
23.4. Уведомления
В разделе 9.14 уже отмечалось, что приложение может подписаться на уведомления, общее количес...
Запуск программы
23.5. Неупорядоченные данные
23.6. Связывание с подмножеством адресов
23.7. Получение адресов
Поскольку протокол SCTP ориентирован на многоинтерфейсные узлы, для определения адресов локал...
Выполнение программы
23.8. Определение идентификатора ассоциации по IP-адресу
23.9. Проверка соединения и ошибки доступа
23.10. Выделение ассоциации
23.11. Управление таймерами
23.12. Когда SCTP оказывается предпочтительнее TCP
23.13. Резюме
Упражнения
Глава 24 Внеполосные данные
24.1. Введение
24.2. Внеполосные данные протокола TCP
В протоколе TCP нет настоящих внеполосных данных. Вместо этого в TCP предусмотрен так называе...
Простой пример использования сигнала SIGURG
Простой пример использования функции select
24.3. Функция sockatmark
С приемом внеполосных данных всегда связана так называемая отметка внеполосных данных (out-of...
Пример: особенности отметки внеполосных данных
Пример: дополнительные свойства внеполосных данных
Пример: единственность отметки внеполосных данных в TCP
24.4. Резюме по теме внеполосных данных TCP
24.5. Резюме
Упражнения
Глава 25 Управляемый сигналом ввод-вывод
25.1. Введение
25.2. Управляемый сигналом ввод-вывод для сокетов
Для использования управляемого сигналом ввода-вывода с сокетом (SIGIO) необходимо, чтобы проц...
Сигнал SIGIO и сокеты UDP
Сигнал SIGIO и сокеты TCP
25.3. Эхо-сервер UDP с использованием сигнала SIGIO
25.4. Резюме
Упражнения
Глава 26 Программные потоки
26.1. Введение
26.2. Основные функции для работы с потоками: создание и завершение потоков
В этом разделе мы рассматриваем пять основных функций для работы с потоками, а в следующих дв...
Функция pthread_create
Функция pthread_join
Функция pthread_self
Функция pthread_detach
Функция pthread_exit
26.3. Использование потоков в функции str_cli
26.4. Использование потоков в эхо-сервере TCP
Теперь мы перепишем эхо-сервер TCP, приведенный в листинге 5.1, используя для каждого клиента...
Передача аргументов новым потокам
Функции, безопасные в многопоточной среде
26.5. Собственные данные потоков
При преобразовании существующих функций для использования в многопоточной среде часто возника...
Пример: функция readline, использующая собственные данные потока
26.6. Веб-клиент и одновременное соединение (продолжение)
26.7. Взаимные исключения
26.8. Условные переменные
26.9. Веб-клиент и одновременный доступ
26.10. Резюме
Упражнения
Глава 27 Параметры IP
27.1. Введение
27.2. Параметры IPv4
27.3. Параметры маршрута от отправителя IPv4
Маршрут от отправителя (source route) — это список IP-адресов, указанных отправителем дейтагр...
Пример
Уничтожение полученного маршрута от отправителя
27.4. Заголовки расширения IPv6
27.5. Параметры транзитных узлов и параметры получателя IPv6
27.6. Заголовок маршрутизации IPv6
27.7. «Закрепленные» параметры IPv6
27.8. История развития интерфейса IPv6
27.9. Резюме
Упражнения
Глава 28 Символьные сокеты
28.1. Введение
28.2. Создание символьных сокетов
28.3. Вывод на символьном сокете
Вывод на символьном сокете регулируется следующими правилами: 1. Стандартный вывод выпо...
Особенности символьного сокета версии IPv6
Параметр сокета IPV6_CHECKSUM
28.4. Ввод через символьный сокет
Первый вопрос, на который следует ответить, говоря о символьных сокетах, следующий: какие из ...
Фильтрация по типу сообщений ICMPv6
28.5. Программа ping
28.6. Программа traceroute
В этом разделе мы приведем собственную версию программы traceroute. Как и в случае с программ...
Пример
28.7. Демон сообщений ICMP
Получение асинхронных ошибок ICMP на сокет UDP всегда было и продолжает оставаться проблемой....
Эхо-клиент UDP, использующий демон icmpd
Примеры эхо-клиента UDP
Демон icmpd
28.8. Резюме
Упражнения
Глава 29 Доступ к канальному уровню
29.1. Введение
29.2. BPF: пакетный фильтр BSD
29.3. DLPI: интерфейс поставщика канального уровня
29.4. Linux: SOCK_PACKET и PF_PACKET
29.5. Libcap: библиотека для захвата пакетов
29.6. Libnet: библиотека создания и отправки пакетов
29.7. Анализ поля контрольной суммы UDP
Теперь мы приступаем к рассмотрению примера, в котором отсылается дейтаграмма UDP, содержащая...
Пример
Функции libnet
29.8. Резюме
Упражнения
Глава 30 Альтернативное устройство клиента и сервера
30.1. Введение
30.2. Альтернативы для клиента TCP
30.3. Тестовый клиент TCP
30.4. Последовательный сервер TCP
30.5. Параллельный сервер TCP: один дочерний процесс для каждого клиента
30.6. Сервер TCP с предварительным порождением процессов без блокировки для вызова accept
В первом из рассматриваемых нами «усовершенствованных» серверов используется технология, назы...
Реализация 4.4BSD
Эффект наличия слишком большого количества дочерних процессов
Распределение клиентских соединений между дочерними процессами
Коллизии при вызове функции select
30.7. Сервер TCP с предварительным порождением процессов и защитой вызова accept блокировкой файла
Описанная выше реализация, позволяющая нескольким процессам вызывать функцию accept на одном ...
Эффект наличия слишком большого количества дочерних процессов
Распределение клиентских соединений между дочерними процессами
30.8. Сервер TCP с предварительным порождением процессов и защитой вызова accept при помощи взаимного исключения
30.9. Сервер TCP с предварительным порождением процессов: передача дескриптора
30.10. Параллельный сервер TCP: один поток для каждого клиента
30.11. Сервер TCP с предварительным порождением потоков, каждый из которых вызывает accept
30.12. Сервер с предварительным порождением потоков: основной поток вызывает функцию accept
30.13. Резюме
Упражнения
Глава 31 Потоки (STREAMS)
31.1. Введение
31.2. Обзор
Потоки обеспечивают двустороннее соединение между процессом и драйвером, как показано на рис....
Типы сообщений
31.3. Функции getmsg и putmsg
31.4. Функции getpmsg и putpmsg
31.5. Функция ioctl
31.6. TPI: интерфейс поставщика транспортных служб
31.7. Резюме
Упражнения
Приложения
Приложение А Протоколы IPv4, IPv6, ICMPv4 и ICMFV6
А.1. Введение
А.2. Заголовок IPv4
А.3. Заголовок IPv6
А.4. Адресация IPv4
Адреса IPv4 состоят из 32 разрядов и обычно записываются в виде последовательности из четырех...
Адреса подсетей
Адрес закольцовки
Неопределенный адрес
Частные адреса
Многоинтерфейсность и псевдонимы адресов
А.5. Адресация IPv6
Адреса IPv6 содержат 128 бит и обычно записываются как восемь 16-разрядных шестнадцатеричных ...
Объединяемые глобальные индивидуальные адреса
Тестовые адреса 6bone
Адреса IPv4, преобразованные к виду IPv6
Адреса IPv6, совместимые с IPv4
Адрес закольцовки
Неопределенный адрес
Адрес локальной связи
Адрес, локальный на уровне сайта
А.6. ICMPv4 и ICMPv6: протоколы управляющих сообщений в сети Интернет
Приложение Б Виртуальные сети
Б.1. Введение
Б.2. MBone
Б.3. 6bone
Б.4. Переход на IPv6: 6to4
Приложение В Техника отладки
Это приложение содержит некоторые рекомендации и описание методов отладки сетевых приложений. ...
В.1. Трассировка системных вызовов
Многие версии Unix предоставляют возможность трассировки (отслеживания) системных вызовов. За...
Сокеты ядра BSD
Сокеты ядра Solaris 9
В.2. Стандартные службы Интернета
В.3. Программа sock
В.4. Небольшие тестовые программы
В.5. Программа tcpdump
В.6. Программа netstat
В.7. Программа lsof
Приложение Г Различные исходные коды
Г.1. Заголовочный файл unp.h
Г.2. Заголовочный файл config.h
Г.3. Стандартные функции обработки ошибок
Приложение Д Решения некоторых упражнений
Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Глава 6
Глава 7
Глава 8
Глава 9
Глава 10
Глава 11
Глава 12
Глава 13
Глава 14
Глава 15
Глава 16
Глава 17
Глава 18
Глава 20
Глава 21
Глава 22
Глава 24
Глава 25
Глава 26
Глава 27
Глава 28
Глава 29
Глава 30
Глава 31
Литература
Результаты поиска:
×
QR код текущей страницы
×