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

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

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

IETF (Internet Engineering Task Force β€” Π³Ρ€ΡƒΠΏΠΏΠ°, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π°Ρ Π·Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ сСтСвых ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡) β€” это большоС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΠΎΠ΅ сообщСство сСтСвых Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΈ исслСдоватСлСй, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π² области развития Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π­Ρ‚ΠΎ сообщСство ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎ для всСх ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ….

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Ρ‹ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² RFC 2026 [13]. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ стандарты Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹, Π° Π½Π΅ интСрфСйсы API. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΄Π²Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° RFC (RFC 3493 [36] ΠΈ RFC 3542 [114]) ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ API сокСтов для ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° IP вСрсии 6. Π­Ρ‚ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ RFC, Π° Π½Π΅ стандарты, ΠΈ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ пСрСносимых ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ производитСлями, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΌΠΈ с Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΠΌΠΈ рСализациями IPv6. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСкстов стандартов Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΠΎ Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ вСрсии Π΅Π΄ΠΈΠ½ΠΎΠΉ спСцификации ΠΌΠ½ΠΎΠ³ΠΈΠ΅ API Π±Ρ‹Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ стандартизованы.

1.11. 64-разрядныС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹

Π‘ сСрСдины Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° 90-Ρ… Π³ΠΎΠ΄ΠΎΠ² развиваСтся тСндСнция ΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ Π½Π° 64-разрядныС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ 64-разрядноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС. Одной ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ являСтся Π±ΠΎΠ»Π΅Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ адрСсация Π²Π½ΡƒΡ‚Ρ€ΠΈ процСсса (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 64-разрядныС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ), которая Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π² случаС использования Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов памяти (Π±ΠΎΠ»Π΅Π΅ 232 Π±Π°ΠΉΡ‚). ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ модСль программирования для ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… 32-разрядных систСм Unix называСтся ILP32. Π•Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ†Π΅Π»Ρ‹Π΅ числа (I), Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа (L) ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ (P) Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ 32 Π±ΠΈΡ‚Π°. МодСль, которая ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ всС большСС распространСниС для 64-разрядных систСм Unix, называСтся LP64. Π•Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ 64 Π±ΠΈΡ‚Π° трСбуСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ… чисСл (L) ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ (P). Π’ Ρ‚Π°Π±Π». 1.5 приводится сравнСниС этих Π΄Π²ΡƒΡ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.


Π’Π°Π±Π»ΠΈΡ†Π° 1.5. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ количСства Π±ΠΈΡ‚ΠΎΠ² для хранСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Π΄Π°Π½Π½Ρ‹Ρ… Π² модСлях ILP32 ΠΈ LP64

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… МодСль ILP32 МодСль LP64 Char 8 8 Short 16 16 Int 32 32 Long 32 64 Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ 32 64

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программирования модСль LP64 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅ число. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ влияниС ΠΌΠΎΠ΄Π΅Π»ΠΈ LP64 Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ API.

Π’ ANSI Π‘ Π²Π²Π΅Π΄Π΅Π½ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… size_t, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc (количСство Π±Π°ΠΉΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ данная функция выдСляСт Π² памяти для размСщСния ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ read ΠΈ write (число считываСмых ΠΈΠ»ΠΈ записываСмых Π±Π°ΠΉΡ‚ΠΎΠ²). Π’ 32-разрядной систСмС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° size_t являСтся 32-разрядным, Π½ΠΎ Π² 64-разрядной систСмС ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ 64-разрядным, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСимущСство большСй ΠΌΠΎΠ΄Π΅Π»ΠΈ адрСсации. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² 64-разрядной систСмС, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, size_t Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ unsigned long (Ρ†Π΅Π»ΠΎΠ΅ число Π±Π΅Π· Π·Π½Π°ΠΊΠ°, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π΅ 32 разряда). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ сСтСвого интСрфСйса API являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΏΠΎ POSIX.1g Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, содСрТащиС Ρ€Π°Π·ΠΌΠ΅Ρ€ структур адрСсов сокСта, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ size_t (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² функциях bind ΠΈ connect). НСкоторыС поля структуры XTI Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π»ΠΈ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… long (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, структуры t_info ΠΈ t_opthdr). Если Π±Ρ‹ стандарты ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, Π² ΠΎΠ±ΠΎΠΈΡ… случаях 32-разрядныС значСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ 64-разрядными ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ с ΠΌΠΎΠ΄Π΅Π»ΠΈ ILP32 Π½Π° LP64. Π’ ΠΎΠ±ΠΎΠΈΡ… случаях Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ нСобходимости Π² 64-разрядных Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…: Π΄Π»ΠΈΠ½Π° структуры адрСсов сокСта Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ максимум нСсколько сотСн Π±Π°ΠΉΡ‚ΠΎΠ², Π° использованиС Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… long для ΠΏΠΎΠ»Π΅ΠΉ структуры XTI Π±Ρ‹Π»ΠΎ просто ошибкой.

РСшСниС состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Π±ΠΎΡ€ΡŒΠ±Ρ‹ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ API сокСтов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… socklen_t для записи Π΄Π»ΠΈΠ½Ρ‹ структур адрСсов сокСтов, a XTI ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… t_scalar_t ΠΈ t_uscalar_t. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ эти 32-разрядныС значСния Π½Π΅ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π½Π° 64-разрядныС, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ упрощаСтся двоичная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с Π½ΠΎΠ²Ρ‹ΠΌΠΈ 64-разрядными систСмами для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, скомпилированных ΠΏΠΎΠ΄ 32-разрядныС систСмы.

1.12. РСзюмС

Π’ листингС 1.1 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ, хотя ΠΈ простой, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ TCP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ врСмя ΠΈ Π΄Π°Ρ‚Ρƒ с Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ сСрвСра. Π’ листингС 1.5 прСдставлСна полная вСрсия сСрвСра. На этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… вводятся ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΈ понятия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π°Π»Π΅Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. Наш ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π±Ρ‹Π» зависим ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, ΠΈ ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ Π΅Π³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ использовал IPv6. Но ΠΏΡ€ΠΈ этом ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ всСго лишь Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’ Π³Π»Π°Π²Π΅ 11 ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят Π½Π°ΠΌ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, Π½Π΅ зависимый ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°. Π­Ρ‚ΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» IPv6. По Ρ…ΠΎΠ΄Ρƒ ΠΊΠ½ΠΈΠ³ΠΈ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠΈ, созданныС Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 1.4, для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° нашСго ΠΊΠΎΠ΄Π°, хотя ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ возвращСния ошибки. ВсС ΠΈΠΌΠ΅Π½Π° Π½Π°ΡˆΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-ΠΎΠ±Π΅Ρ€Ρ‚ΠΎΠΊ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Π·Π°Π³Π»Π°Π²Π½ΠΎΠΉ Π±ΡƒΠΊΠ²Ρ‹.

Π’Ρ€Π΅Ρ‚ΡŒΡ вСрсия Π΅Π΄ΠΈΠ½ΠΎΠΉ спСцификации Unix, извСстная Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ нСсколькими Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ названиями (ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ Π΅Π΅ просто «БпСцификация POSIXΒ»), прСдставляСт собой Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ слияния Π΄Π²ΡƒΡ… стандартов, осущСствлСнного The Austin Group.

Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… интСрСсуСт история сСтСвого программирования Π² Unix, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ развития Unix, Π° история TCP/IP ΠΈ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° прСдставлСна Π² ΠΊΠ½ΠΈΠ³Π΅ [106].

УпраТнСния

1. ΠŸΡ€ΠΎΠ΄Π΅Π»Π°ΠΉΡ‚Π΅ всС шаги, описанныС Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ€Π°Π·Π΄Π΅Π»Π° 1.9, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ вашСй сСти.

2. ΠžΡ‚Ρ‹Ρ‰ΠΈΡ‚Π΅ исходный ΠΊΠΎΠ΄ для ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² тСкстС (см. прСдисловиС). ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ протСстируйтС ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹, прСдставлСнный Π² листингС 1.1. ЗапуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ нСсколько Ρ€Π°Π·, задавая ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ IP- адрСса Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС.

3. Π—Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ socket, прСдставлСнной Π² листингС 1.1, Π½Π° 9999. ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ запуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π§Ρ‚ΠΎ происходит? НайдитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ errno, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹Π΄Π°Π½Π½ΠΎΠΉ ошибкС. Как Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ этой ошибкС?

4. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ листинг 1.1: помСститС Π² Ρ†ΠΈΠΊΠ» while счСтчик, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, сколько Ρ€Π°Π· функция read Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, большСС нуля. Π’Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ запуститС Π½ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ-ΠΊΠ»ΠΈΠ΅Π½Ρ‚.

5. Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚Π΅ листинг 1.5 ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π‘Π½Π°Ρ‡Π°Π»Π° помСняйтС Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sin_port, с 13 Π½Π° 9999. Π—Π°Ρ‚Π΅ΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write Π½Π° цикличСский, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ функция write вызываСтся для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки. ΠžΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ сСрвСр ΠΈ запуститС Π΅Π³ΠΎ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π—Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ упраТнСния (Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ выводится счСтчик ΠΏΠ΅Ρ€Π΅Π΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹), ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π°, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sin_port, с 13 Π½Π° 9999. ЗапуститС этот ΠΊΠ»ΠΈΠ΅Π½Ρ‚, Π·Π°Π΄Π°Π² Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки IP-адрСс ΡƒΠ·Π»Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹ΠΉ сСрвСр. КакоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ клиСнтского счСтчика Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ? Если это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ сСрвСр Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ….

Π“Π»Π°Π²Π° 2

Вранспортный ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ: TCP, UDP ΠΈ SCRIPT

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

Π’ этой Π³Π»Π°Π²Π΅ приводится ΠΎΠ±Π·ΠΎΡ€ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² сСмСйства TCP/IP, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π½Π° всСм протяТСнии ΠΊΠ½ΠΈΠ³ΠΈ. Наша Ρ†Π΅Π»ΡŒ β€” ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ эти ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния сСтСвого программирования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Ρ‚ΡŒ ссылки Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ описания фактичСского устройства, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ истории ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ².

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ транспортном ΡƒΡ€ΠΎΠ²Π½Π΅: ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Ρ… TCP, UDP ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ управлСния ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Stream Control Transmission Protocol, SCRIPT). Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, построСнных ΠΏΠΎ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π»ΠΈΠ±ΠΎ TCP, Π»ΠΈΠ±ΠΎ UDP. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ транспортного уровня, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» сСтСвого уровня IP β€” Π»ΠΈΠ±ΠΎ IPv4, Π»ΠΈΠ±ΠΎ IPv6. Π₯отя ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ IPv4 ΠΈΠ»ΠΈ IPv6 нСпосрСдствСнно, минуя транспортный ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, эта тСхнология (ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ сокСты) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ€Π΅ΠΆΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ Π΄Π°Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС IPv4 ΠΈ IPv6 наряду с ICMPv4 ΠΈ ICMPv6 Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ А.

UDP прСдставляСт собой простой ΠΈ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ TCP являСтся слоТным ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ. SCRIPT Ρ‚ΠΎΠΆΠ΅ обСспСчиваСт Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ, ΠΊΠ°ΠΊ ΠΈ TCP, Π½ΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ этого ΠΎΠ½ позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ сообщСний, обСспСчиваСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ мноТСствСнной адрСсации Π½Π° транспортном ΡƒΡ€ΠΎΠ²Π½Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΈ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ. НуТно ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ сСрвисы ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ прилоТСниям транспортныС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ, Π° Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.