Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX: Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 103

Автор Уильям БтивСнс

12.4. ΠœΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ адрСса IPv6

БущСствуСт нСбольшой класс ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ IPv6, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, с ΠΊΠ°ΠΊΠΈΠΌ собСсСдником ΠΎΠ½ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ (IPv4 ΠΈΠ»ΠΈ IPv6). Π­Ρ‚ΠΈ прилоТСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ, являСтся Π»ΠΈ адрСс собСсСдника адрСсом IPv4, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊ Π²ΠΈΠ΄Ρƒ IPv6. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Π²Π΅Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ макросов, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΡ… Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства адрСса Ipv6.

#include <netinet/in.h>


int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr *aptr);

int IN6_IS_ADDR_LOOPBACK(const struct in6_addr *aptr);

int IN6_IS_ADDR_MULTICAST(const struct in6_addr *aptr);

int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr *aptr);

int IN6_IS_ADDR_SITELOCAL(const struct in6_addr *aptr);

int IN6_IS_ADDR_V4MAPPED(const struct in6_addr *aptr);

int IN6_IS_ADDR_V4COMPAT(const struct in6_addr *aptr);


int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr *aptr);

int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr *aptr);

int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr *aptr);

int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr *aptr);

int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr *aptr);

ВсС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚: Π½Π΅Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ссли адрСс IPv6 ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ сСмь макросов ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ адрСса IPv6. ΠœΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ адрСсов Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ А.5. ПослСдниС ΠΏΡΡ‚ΡŒ макросов ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия адрСса многоадрСсной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ IPv6 (см. Ρ€Π°Π·Π΄Π΅Π» 19.2).

ΠšΠ»ΠΈΠ΅Π½Ρ‚ IPv6 ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ макрос IN6_IS_ADDR_V4MAPPED для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ адрСса IPv6, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ распознаватСлСм. Π‘Π΅Ρ€Π²Π΅Ρ€ IPv6 ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ этот макрос для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ адрСса IPv6, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ accept ΠΈΠ»ΠΈ recvfrom.

Как ΠΏΡ€ΠΈΠΌΠ΅Ρ€ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΡƒΠΆΠ΅Π½ этот макрос, ΠΌΠΎΠΆΠ½ΠΎ привСсти FTP ΠΈ Π΅Π³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ PORT. Если ΠΌΡ‹ запустим FTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚, зарСгистрируСмся Π½Π° FTP-сСрвСрС ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ FTP dir, FTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΡˆΠ»Π΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ PORT FTP-сСрвСру Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ соСдинСниС. Она сообщит сСрвСру IP-адрСс ΠΈ ΠΏΠΎΡ€Ρ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π°Ρ‚Π΅ΠΌ сСрвСр создаст соСдинСниС. (Π’ Π³Π»Π°Π²Π΅ 27 [111] содСрТатся ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ свСдСния ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ прилоТСния FTP.) Но FTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ IPv6 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π½Π°Ρ‚ΡŒ, с ΠΊΠ°ΠΊΠΈΠΌ сСрвСром ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅Π»ΠΎ β€” IPv4 ΠΈΠ»ΠΈ IPv6, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сСрвСр IPv4 Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ PORT a1, a2, a3, a4, p1, p2 (Π³Π΄Π΅ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ числа, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΡ‚ 0 Π΄ΠΎ 255, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ 4-Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ адрСс IPv4, Π° Π΄Π²Π° послСдних β€” 2-Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°), Π° сСрвСру IPv6 Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° EPRT (RFC 2428 [3]), содСрТащая сСмСйство адрСса, адрСс Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΈ ΠΏΠΎΡ€Ρ‚ Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π’ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ 12.1 приводятся ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΠΎΠ±Π΅ΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄.

12.5. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠΌΠΎΡΡ‚ΡŒ исходного ΠΊΠΎΠ΄Π°

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… сСтСвых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ написаны для IPv4. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ sockaddr_in Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² памяти ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, Π° функция socket Π·Π°Π΄Π°Π΅Ρ‚ AF_INET Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΎΡ‚ листинга 1.1 ΠΊ листингу 1.2 ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ эти прилоТСния IPv4 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² прилоТСния IPv6 Π±Π΅Π· особых усилий. МногиС ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ измСнСния ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ автоматичСски, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сцСнарии рСдактирования. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π±ΠΎΠ»Π΅Π΅ зависящиС ΠΎΡ‚ IPv4, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΠ΅ свойства, ΠΊΠ°ΠΊ многоадрСсная ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π°, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ IP ΠΈΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ (нСструктурированныС) сокСты, ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… усилий ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ.

Если ΠΌΡ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с IPv6 ΠΈ распространим Π΅Π³ΠΎ исходный ΠΊΠΎΠ΄, Π½Π°ΠΌ придСтся Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ систСма ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» IPv6. Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ способ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ β€” ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ #ifdef, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎ возмоТности IPv6 (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² этой Π³Π»Π°Π²Π΅, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ IPv6 ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с сСрвСрами IPv4 ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΎΡ‡Π΅Π½ΡŒ быстро засоряСтся Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π°ΠΌΠΈ #ifdef, ΠΈ Π΅Π³ΠΎ становится слоТнСС ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ.

ΠΠ°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСниС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° IPv6 ΠΊΠ°ΠΊ возмоТности ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π΅ зависящСй ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ шагом здСсь Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ gethostbyname ΠΈ gethostbyaddr ΠΈ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ getaddrinfo ΠΈ getnameinfo, описанных Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ со структурами адрСсов сокСтов ΠΊΠ°ΠΊ с Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ указатСля ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сокСтов: bind, connect, recvfrom ΠΈ Ρ‚.Π΄. Наши Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sock_XXX ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° 3.8 ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½ΠΈΠΌΠΈ нСзависимо ΠΎΡ‚ IPv4 ΠΈ IPv6. ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ содСрТат #ifdef для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с IPv4 ΠΈ IPv6, Π½ΠΎ Ссли ΠΌΡ‹ скроСм эту Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… функциях, наш ΠΊΠΎΠ΄ станСт ΠΏΡ€ΠΎΡ‰Π΅. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ 21.7 ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ ряд Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ mcast_XXX, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ прилоТСния многоадрСсной ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π½Π΅ зависящими ΠΎΡ‚ вСрсии ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° IP.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡Π΅ΡΡ‚ΡŒ, β€” Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли ΠΌΡ‹ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌ наш исходный ΠΊΠΎΠ΄ Π² систСмС, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ ΠΈ IPv4, ΠΈ IPv6, Π·Π°Ρ‚Π΅ΠΌ распространим Π»ΠΈΠ±ΠΎ исполняСмый ΠΊΠΎΠ΄, Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (Π½ΠΎ Π½Π΅ исходный ΠΊΠΎΠ΄) ΠΈ ΠΊΡ‚ΠΎ-Ρ‚ΠΎ запустит нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² систСмС, Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π΅ΠΉ IPv6. Π•ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ сСрвСр Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ записи Ρ‚ΠΈΠΏΠ° AAAA ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΊΠ°ΠΊ записи Ρ‚ΠΈΠΏΠ° AAAA, Ρ‚Π°ΠΊ ΠΈ записи Ρ‚ΠΈΠΏΠ° А Π½Π΅ΠΊΠΎΠ΅ΠΌΡƒ собСсСднику, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ пытаСтся ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Если нашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ с IPv6, Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ socket для создания сокСта IPv6, ΠΎΠ½Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли ΡƒΠ·Π΅Π» Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ IPv6. ΠœΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ этот вопрос с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, описанных Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅, игнорируя ΠΎΡˆΠΈΠ±ΠΊΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ socket ΠΈ ΠΏΡ‹Ρ‚Π°ΡΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ адрСс Π² спискС, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΌ сСрвСром ΠΈΠΌΠ΅Π½. Если ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ собСсСдника имССтся запись Ρ‚ΠΈΠΏΠ° А ΠΈ Ρ‡Ρ‚ΠΎ сСрвСр ΠΈΠΌΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ запись Ρ‚ΠΈΠΏΠ° А Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ любой записи Ρ‚ΠΈΠΏΠ° AAAA, Ρ‚ΠΎ сокСт IPv4 ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ создастся. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ имССтся Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Π½Π΅ Π² исходном ΠΊΠΎΠ΄Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прилоТСния.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ дСскрипторы сокСтов, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², Π² стандартС RFC 2133 [37] прСдлагаСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ сокСта IPV6_ADDRFORM, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сСмСйство сокСта. Однако сСмантика ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π΅ Π±Ρ‹Π»Π° описана ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ, Π΄Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ½ ΠΌΠΎΠ³ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΎΡ‡Π΅Π½ΡŒ спСцифичСских ситуациях, поэтому Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ вСрсии интСрфСйса сокСтов Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π±Ρ‹Π» ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½.

12.6. РСзюмС

Π‘Π΅Ρ€Π²Π΅Ρ€ IPv6 Π½Π° ΡƒΠ·Π»Π΅ с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ стСком ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ сСрвис ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ IPv4, Ρ‚Π°ΠΊ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ IPv6. ΠšΠ»ΠΈΠ΅Π½Ρ‚ IPv4 посылаСт сСрвСру Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ IPv4, Π½ΠΎ стСк ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² сСрвСра ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ адрСс ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΊ Π²ΠΈΠ΄Ρƒ IPv6, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сСрвСр IPv6 Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ со структурами адрСсов сокСтов IPv6.

Аналогично, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ IPv6 Π½Π° ΡƒΠ·Π»Π΅ с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ стСком ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с сСрвСром IPv4. Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ адрСса IPv4, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊ Π²ΠΈΠ΄Ρƒ IPv6, для всСх записСй сСрвСра Ρ‚ΠΈΠΏΠ° А, ΠΈ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ connect для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· этих адрСсов ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ стСк посылаСт сСгмСнт SYN IPv4. Волько ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΠΈ сСрвСрам Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ собСсСдником (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, FTP), ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ собСсСдник ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ IPv4, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ макрос IN6_IS_ADDR_V4MAPPED.

УпраТнСния

1. Π—апуститС FTP-ΠΊΠ»ΠΈΠ΅Π½Ρ‚ IPv6 Π½Π° ΡƒΠ·Π»Π΅ с Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ стСком ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ². Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ΡΡŒ с FTP-сСрвСром IPv4, запуститС ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ debug, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ dir. Π”Π°Π»Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Ρ‚Π΅ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, Π½ΠΎ для сСрвСра IPv6, ΠΈ сравнитС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ PORT, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄ dir.

2. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΡƒΡŽ Π²Π²ΠΎΠ΄Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся адрСсом IPv4 Π² Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎ-дСсятичной записи. Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ TCP-сокСт IPv4 ΠΈ свяТитС этот адрСс ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 8888, с сокСтом ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ bind. Π’Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ listen, Π° Π·Π°Ρ‚Π΅ΠΌ pause. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΡƒΡŽ строку IPv6 ΠΈ создаСт ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ TCP-сокСт IPv6. ЗапуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ IPv4, Π·Π°Π΄Π°Π² Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΈ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ IPv6, Π·Π°Π΄Π°Π² Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс IPv6. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ IPv6, Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° IPv4 ΡƒΠΆΠ΅ связана с этим ΠΏΠΎΡ€Ρ‚ΠΎΠΌ? ΠŸΠΎΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π»ΠΈ Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΏΡ€ΠΈ использовании ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° сокСта SO_REUSEADDR? Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли Π²Ρ‹ сначала запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ IPv6, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ IPv4?

Π“Π»Π°Π²Π° 13

ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹-Π΄Π΅ΠΌΠΎΠ½Ρ‹ ΠΈ супСрсСрвСр inetd

13.1. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π”Π΅ΠΌΠΎΠ½ (daemon) β€” это процСсс, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ Π½Π΅ связанный с ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ. БистСмы Unix ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ мноТСство процСссов (ΠΎΡ‚ 20 Π΄ΠΎ 50), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π΅ΠΌΠΎΠ½Π°ΠΌΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ административныС Π·Π°Π΄Π°Ρ‡ΠΈ.

ΠΠ΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌ эффСктом запуска ΠΈΠ· систСмного сцСнария ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² процСссС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°). Если ΠΆΠ΅ Π΄Π΅ΠΌΠΎΠ½ запускаСтся ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ взаимодСйствия с систСмами управлСния Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ, сСансами Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.