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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² срСдС Linux. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 94

Автор Майкл ДТонсон

133:  parentProcess(socks[0]);

134:

135:  /* Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ процСсса */

136:  wait(&status);

137:

138:  if (WEXITSTATUS(status))

139:   fprintf(stderr, "childfailed\n");

140:

141:  return 0;

142: }

17.5. БСтСвая ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ TCP/IP

Π‘Π°ΠΌΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ сокСтов Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ прилоТСниям, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌ Π½Π° основС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ², ΠΎΠ±Ρ‰Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. БСмСйство ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² TCP/IP [34] ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Internet самым большим Π² ΠΌΠΈΡ€Π΅ числом ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ², ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Π² ΡΠ΅Ρ‚ΡŒ. БистСма Linux ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ TCP/IP, которая позволяСт Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ сСрвСр, ΠΈ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ TCP/IP.

НаиболСС распространСнной вСрсиСй TCP/IP являСтся вСрсия 4 (IPv4). Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² сСтСвой инфраструктуры ΡƒΠΆΠ΅ доступна вСрсия 6 ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° TCP/IP (IPv6), ΠΎΠ΄Π½Π°ΠΊΠΎ IPv4 Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄ΠΎ сих ΠΏΠΎΡ€. Π’ Π΄Π°Π½Π½ΠΎΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ сосрСдоточимся Π½Π° создании ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для IPv4, Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° отличия для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ IPv6, Π° Ρ‚Π°ΠΊΠΆΠ΅ для Ρ‚Π΅Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π΅ вСрсии.

17.5.1. УпорядочСниС Π±Π°ΠΉΡ‚ΠΎΠ²

Π‘Π΅Ρ‚ΠΈ TCP/IP, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½Ρ‹ΠΌΠΈ; ΠΎΠ½ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя ΡˆΠΈΡ€ΠΎΠΊΠΈΠΉ ряд ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€. Одно ΠΈΠ· основных ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°ΠΌΠΈ связано со способом хранСния чисСл.

ΠœΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ числа ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ². НапримСр, Ρ†Π΅Π»Ρ‹Π΅ числа Π² Π‘ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ 4 Π±Π°ΠΉΡ‚Π°ΠΌΠΈ (32 Π±ΠΈΡ‚Π°ΠΌΠΈ). БущСствуСт довольно ΠΌΠ½ΠΎΠ³ΠΎ способов хранСния этих Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… Π±Π°ΠΉΡ‚ΠΎΠ² Π² памяти ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. АрхитСктуры с ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΌ порядком Π±Π°ΠΉΡ‚ΠΎΠ² ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ (Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΉ) Π±Π°ΠΉΡ‚ Π² наимСньшСм Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΌ адрСсС, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π² порядкС ΠΎΡ‚ Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠ³ΠΎ ΠΊ ΠΌΠ΅Π½Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠΌΡƒ. ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ с прямым порядком Π±Π°ΠΉΡ‚ΠΎΠ² хранят ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ значСния Π² Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌ порядкС: Π½Π°ΠΈΠΌΠ΅Π½Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΉ Π±Π°ΠΉΡ‚ отправляСтся Π² наимСньший адрСс памяти. Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°Ρ… Π±Π°ΠΉΡ‚Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… порядках.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅ значСния ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° TCP/IP, Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΠ»ΠΈΡΡŒ ΠΎ Π΅Π΄ΠΈΠ½ΠΎΠΌ стандартС способа ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚ΡŒ[126]. TCP/IP Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ порядка Π±Π°ΠΉΡ‚ΠΎΠ² для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ (хотя ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ Π·Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡŒ)[127]. УпорядочСниС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ примСняСтся для ΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· ΡΠ΅Ρ‚ΡŒ, извСстно ΠΊΠ°ΠΊ сСтСвой порядок Π±Π°ΠΉΡ‚ΠΎΠ².

Для прСобразования порядка Π±Π°ΠΉΡ‚ΠΎΠ² хоста Π² сСтСвой порядок Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

#include <netinet/in.h>


unsigned int htonl(unsigned int hostlong);

unsigned short htons(unsigned short hostshort);

unsigned int ntohl(unsigned int netlong);

unsigned short ntohs(unsigned short netshort);

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ°, всС ΠΎΠ½ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈ для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ со Π·Π½Π°ΠΊΠΎΠΌ.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ htonl() ΠΈ htons() ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ ΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ числа соотвСтствСнно ΠΈΠ· порядка Π±Π°ΠΉΡ‚ΠΎΠ² хоста Π² сСтСвой порядок Π±Π°ΠΉΡ‚ΠΎΠ². ПослСдниС Π΄Π²Π΅ ntohl() ΠΈ ntohs() Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ прСобразования Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… ΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… чисСл (ΠΈΠ· сСтСвого порядка Π² порядок хоста).

Π₯отя ΠΌΡ‹ использовали Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ Π² описаниях, Π½Π° самом Π΄Π΅Π»Π΅, это Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ. ОбС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ htonl() ΠΈ ntohl() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ значСния, Π° Π½Π΅ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ относятся ΠΊ Ρ‚ΠΈΠΏΡƒ long. Π’ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ°Ρ… ΠΎΠ±Π΅ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ значСния int, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Linux Π² настоящСС врСмя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа.

17.5.2. АдрСсация IPv4

БоСдинСния IPv4 ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· 4-Ρ… элСмСнтов (Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ хост, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚, ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ хост, ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚). Π”ΠΎ установки соСдинСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π΅Π³ΠΎ Ρ‡Π°ΡΡ‚ΡŒ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ хост ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ хост ΡΠ²Π»ΡΡŽΡ‚ΡΡ IPv4-адрСсами. IPv4-адрСса β€” это 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ (4-Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Π΅) числа, ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ для всСй установлСнной сСти. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΎΠ½ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ aaa.bbb.ccc.ddd, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт адрСса являСтся дСсятичным прСдставлСниСм ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π±Π°ΠΉΡ‚ΠΎΠ² адрСса ΠΌΠ°ΡˆΠΈΠ½Ρ‹. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ слСва число Π² адрСсС соотвСтствуСт самому Π·Π½Π°Ρ‡ΠΈΠΌΠΎΠΌΡƒ Π±Π°ΠΉΡ‚Ρƒ Π² адрСсС. Π’Π°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ для IPv4-адрСсов извСстСн ΠΊΠ°ΠΊ дСсятичноС прСдставлСниС с раздСлитСлями-Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ.

Π’ связи с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… TCP/IP ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, IP-Π½ΠΎΠΌΠ΅Ρ€ Π½Π΅ обСспСчиваСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ для соСдинСния Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС. НомСра ΠΏΠΎΡ€Ρ‚ΠΎΠ² β€” это 16-Π±ΠΈΡ‚Π½Ρ‹Π΅ числа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· сторон соСдинСния Π½Π° Π΄Π°Π½Π½ΠΎΠΌ хостС. ОбъСдинСниС IPv4-адрСса ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚Π° обСспСчиваСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ стороны соСдинСния Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠΉ сСти TCP/IP (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Internet являСтся Π΅Π΄ΠΈΠ½ΠΎΠΉ TCP/IP ΡΠ΅Ρ‚ΡŒΡŽ). Π”Π²Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ соСдинСния ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ ΠΏΠΎΠ»Π½ΠΎΠ΅ TCP-соСдинСниС, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄Π²Π΅ ΠΏΠ°Ρ€Ρ‹, состоящиС ΠΈΠ· IP-Π½ΠΎΠΌΠ΅Ρ€Π° ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚Π°, ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ TCP/IP соСдинСниС Π² сСти.

РаспрСдСлСниС Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎΡ€Ρ‚ΠΎΠ² для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² производится Π½Π° основС Ρ€Π°Π·Π΄Π΅Π»Π° стандартов Internet, извСстного ΠΊΠ°ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ утвСрТдаСтся АгСнтством ΠΏΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΈΠΌΠ΅Π½ ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² Internet (Internet Assigned Numbers Authority, LANA)[128]. ΠžΠ±Ρ‰ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ Internet, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ftp, telnet ΠΈ http, ΠΈΠΌΠ΅ΡŽΡ‚ свои Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ². Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ сСрвСров ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ слуТбы Π½Π° присвоСнных Π½ΠΎΠΌΠ΅Ρ€Π°Ρ…, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡ… Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡ‚ΠΈ. НСкоторыС сСрвСра Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π½Π° Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π½ΠΎΠΌΠ΅Ρ€Π°Ρ… ΠΏΠΎΡ€Ρ‚ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… слуТб Π½Π° ΠΎΠ΄Π½ΠΎΠΉ машинС[129]. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ² Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, систСма Linux просто Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ соотвСтствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… слуТбами) ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΠΎΡ€Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π°ΠΉΠ»Π° /etc/services.

ВсС Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ² ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ 0 Π΄ΠΎ 65 535; Π² систСмС Linux ΠΎΠ½ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π° Π΄Π²Π° класса. Π—Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΎΡ‚ 0 Π΄ΠΎ 1 024 ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ процСссами, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠ°ΠΊ root. Π­Ρ‚ΠΎ позволяСт клиСнтским ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌ ΠΈΠΌΠ΅Ρ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, запущСнная Π½Π° сСрвСрС, Π½Π΅ являСтся троянским ΠΊΠΎΠ½Π΅ΠΌ, Π°ΠΊΡ‚ΠΈΠ²ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°ΠΊΠΈΠΌ-Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ[130].

IPv4-адрСса хранятся Π² структурС struct sockaddr_in, которая опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

#include <sys/socket.h>

#include <netinet/in.h>


struct sockaddr_in {

 short int sin_family;        /* AF_INET */

 unsigned short int sin_port; /* Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° */

 struct in_addr sin_addr;     /* IP-адрСс */

}

ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ Ρ‡Π»Π΅Π½ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ AF_INET, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Ρ‡Ρ‚ΠΎ это IP-адрСс. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ‡Π»Π΅Π½ β€” это Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° Π² сСтСвом порядкС Π±Π°ΠΉΡ‚ΠΎΠ². ПослСдний элСмСнт β€” это IP-Π½ΠΎΠΌΠ΅Ρ€ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ TCP адрСса. IP-Π½ΠΎΠΌΠ΅Ρ€, хранящийся Π² sin_addr, Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ возмоТности прямого доступа.

Если хотя Π±Ρ‹ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… sin_port ΠΈΠ»ΠΈ sin_addr Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° Π±Π°ΠΉΡ‚Π°ΠΌΠΈ \0 (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ memset()), Ρ‚ΠΎ это ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° условиС "ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Ρ‡ΡŒ". Π‘Π΅Ρ€Π²Π΅Ρ€Π½Ρ‹Π΅ процСссы, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ бСспокоятся ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ IP-адрСс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для локального соСдинСния. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΎΠ½ΠΈ согласны ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ соСдинСния с Π»ΡŽΠ±Ρ‹ΠΌ адрСсом, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΡΡ Π½Π° Π΄Π°Π½Π½ΠΎΠΉ машинС. Если Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ трСбуСтся ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ соСдинСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ интСрфСйсС, Ρ‚ΠΎ ΠΏΡ€ΠΈ этом Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ адрСс. Π’Π°ΠΊΠΎΠΉ адрСс ΠΈΠ½ΠΎΠ³Π΄Π° называСтся нСустановлСнным, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Π½Π΅ прСдставляСт собой ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ адрСса соСдинСния (для Π½Π΅Π³ΠΎ трСбуСтся Π΅Ρ‰Π΅ IP-адрСс)[131].

17.5.3. АдрСсация IPv6

Π’ IPv6 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ хост, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚, ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ хост, ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚), Ρ‡Ρ‚ΠΎ ΠΈ Π² IPv4, ΠΈ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ² (16-Π±ΠΈΡ‚Π½Ρ‹Π΅ значСния).

IPv6-адрСса локального ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ хостов ΡΠ²Π»ΡΡŽΡ‚ΡΡ 128-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ (16-Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ) числами вмСсто 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… чисСл, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовались Π² IPv4. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… Π±ΠΎΠ»ΡŒΡˆΠΈΡ… адрСсов обСспСчиваСт ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ достаточным количСством адрСсов для Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ развития (ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ адрСс ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π°Ρ‚ΠΎΠΌΡƒ Π² ΠœΠ»Π΅Ρ‡Π½ΠΎΠΌ ΠŸΡƒΡ‚ΠΈ). На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΠΉ Ρ‚Ρ€Π°Ρ‚ΠΎΠΉ рСсурсов. Однако сСтСвыС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΊΠ»ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ Π½Π΅Π±Ρ€Π΅ΠΆΠ½ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ адрСсам ΠΈ Ρ€Π°ΡΡ‚Ρ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ ΠΈΡ… число Π²ΠΏΡƒΡΡ‚ΡƒΡŽ, поэтому Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ вСрсии IPv6 ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ 128-Π±ΠΈΡ‚Π½Ρ‹ΠΌ адрСсам сСйчас, Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ нСобходимости ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ адрСса Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

Аналогом дСсятичного прСдставлСния с раздСлитСлями-Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² IPv4, для вСрсии IPv6 являСтся прСдставлСниС с раздСлитСлями-двоСточиями. Как подсказываСт Π½Π°Π·Π²Π°Π½ΠΈΠ΅, двоСточия ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‚ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ Π±Π°ΠΉΡ‚ΠΎΠ² Π² адрСсС (вмСсто Ρ‚ΠΎΡ‡ΠΊΠΈ, которая отдСляСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Π°ΠΉΡ‚). Из-Π·Π° большой Π΄Π»ΠΈΠ½Ρ‹ IPv6-адрСса Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΉ (Π° Π½Π΅ Π² дСсятичной) Ρ„ΠΎΡ€ΠΌΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΈΡ… Π΄Π»ΠΈΠ½Ρƒ. НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ выглядит IPv6-адрСс Π² прСдставлСнии с раздСлитСлями-двоСточиями[132].