UNIX: разработка сетевых приложений
UNIX: разработка сетевых приложений читать книгу онлайн
Новое издание книги, посвященной созданию веб-серверов, клиент-серверных приложений или любого другого сетевого программного обеспечения в операционной системе UNIX, — классическое руководство по сетевым программным интерфейсам, в частности сокетам. Оно основано на трудах Уильяма Стивенса и полностью переработано и обновлено двумя ведущими экспертами по сетевому программированию. В книгу включено описание ключевых современных стандартов, реализаций и методов, она содержит большое количество иллюстрирующих примеров и может использоваться как учебник по программированию в сетях, так и в качестве справочника для опытных программистов.
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
27.8. История развития интерфейса IPv6
Документ RFC 2292 [113] определял более раннюю версию описываемого интерфейса, которая была реализована в некоторых системах. В этой версии для работы с параметрами получателя и транзитных узлов использовались функции
inet6_option_space
inet6_option_init
inet6_option_append
inet6_option_alloc
inet6_option_next
inet6_option_find
struct cmsghdr
inet6_rthdr_space
inet6_rthdr_init
inet6_rthdr_add
inet6_rthdr_lasthop
inet6_rthdr_reverse
inet6_rthdr_segments
inet6_rthdr_getaddr
inet6_rthdr_getflags
В этом API закрепленные параметры устанавливались при помощи параметра сокета
IPV6_PKTOPTIONS
IPV6_PKTOPTIONS
IPV6_DSTOPTS
IPV6_HOPOPTS
IPV6_RTHDR
Подробнее обо всем этом вы можете прочесть в разделах 4–8 документа RFC 2292 [113].
27.9. Резюме
Из десяти определенных в IPv4 параметров наиболее часто используются параметры маршрутизации от отправителя, но в настоящее время их популярность падает из-за проблем, связанных с безопасностью. Доступ к параметрам заголовков IPv4 осуществляется с помощью параметра сокета
IP_OPTIONS
В IPv6 определены шесть заголовков расширения. Доступ к заголовкам расширения IPv6 осуществляется с помощью функционального интерфейса, что освобождает нас от необходимости углубляться в детали фактического формата пакета. Эти заголовки расширения записываются как вспомогательные данные функцией
sendmsg
recvmsg
Упражнения
1. Что изменится, если в нашем примере, приведенном в конце раздела 27.3, мы зададим каждый промежуточный узел с параметром
-G
-g
2. Размер буфера, указываемый в качестве аргумента функции
setsockopt
IP_OPTIONS
3. Каким образом программа
ping
4. Почему в примере кода для сервера
rlogind
getsockopt
setsockopt
5. В течение долгого времени для удаления маршрута использовался код, несколько отличающийся от приведенного в конце раздела 27.3. Он выглядел следующим образом:
optsize = 0;
setsockopt(0, ipproto, IP_OPTIONS, NULL, &optsize);
Что в этом фрагменте неправильно? Имеет ли это значение?
Глава 28
Символьные сокеты
28.1. Введение
Символьные, или неструктурированные, сокеты (raw sockets) обеспечивают три возможности, не предоставляемые обычными сокетами TCP и UDP.
1. Символьные сокеты позволяют читать и записывать пакеты ICMPv4, IGMPv4 и ICMPv6. Например, программа
ping
ping
mrouted
2. Эта возможность также позволяет реализовывать как пользовательские процессы те приложения, которые построены с использованием протоколов ICMP и IGMP, вместо того чтобы помещать большее количество кода в ядро. Например, подобным образом построен демон обнаружения маршрутов (
in.rdisc
С помощью символьных сокетов процесс может читать и записывать IPv4-дейтаграммы с полем протокола IPv4, которое не обрабатывается ядром. Посмотрите еще раз на 8-разрядное поле протокола IPv4, изображенное на рис. А.1. Большинство ядер обрабатывают дейтаграммы, содержащие значения поля протокола 1 (ICMP), 2 (IGMP), 6 (TCP) и 17 (UDP). Но для этого поля определено гораздо большее количество значений, полный список которых приведен в реестре IANA «Номера протоколов» (Protocol Numbers). Например, протокол маршрутизации OSPF не использует протоколы TCP или UDP, а работает напрямую с протоколом IP, устанавливая в поле протокола значение 89 для IP-дейтаграмм. Программа
gated
3. С помощью символьных сокетов процесс может построить собственный заголовок IPv4 при помощи параметра сокета
IP_HDRINCL
В данной главе описывается создание символьных сокетов, а также операции ввода и вывода с этими сокетами. Далее приводятся версии программ
ping
traceroute
28.2. Создание символьных сокетов
При создании символьных сокетов выполняются следующие шаги:
1. Символьный сокет создается функцией
socket
SOCK_RAW
int sockfd;
sockfd = socket(AF_INET, SOCK_RAW, <i>protocol</i>);