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

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

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

21-23 ΠšΠ»ΠΈΠ΅Π½Ρ‚ блокируСтся ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ получСния эхо-ΠΎΡ‚Π²Π΅Ρ‚Π° сСрвСра.

ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ эхо-ΠΎΡ‚Π²Π΅Ρ‚Π°

24-26 ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° экран ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ ΠΎΡ‚ сСрвСра сообщСниС, вмСстС с Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ сообщСния Π² этом ΠΏΠΎΡ‚ΠΎΠΊΠ΅. ПослС этого ΠΊΠ»ΠΈΠ΅Π½Ρ‚ возвращаСтся Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Ρ†ΠΈΠΊΠ»Π°, оТидая, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²Π΅Π΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ строку.

Запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠœΡ‹ запустили эхо-сСрвСр SCTP Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅ΠΌ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ FreeBSD. ΠšΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΡ€ΠΈ запускС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ IP-адрСс сСрвСра.

freebsd4% sctpclient01 10.1.1.5

[0]Hello                                     ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСния ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ 0

From str:1 seq:0 (assoc:0xc99e15a0):[0]Hello Π­Ρ…ΠΎ-ΠΎΡ‚Π²Π΅Ρ‚ сСрвСра Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ 1

[4]Message two                               ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСния ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ 4

From str:5 seq:0 (assoc.0xc99e15a0):[4]Message two   Π­Ρ…ΠΎ-ΠΎΡ‚Π²Π΅Ρ‚ сСрвСра

                                                     Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ 5

[4]Message three                             ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСния ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ 4

From str:5 seq:1 (assoc 0xc99e15a0):[4]Message three Π­Ρ…ΠΎ-ΠΎΡ‚Π²Π΅Ρ‚ сСрвСра

                                                     Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ 5

^D                                           Π’Π²ΠΎΠ΄ символа EOF

freebsd4%

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отправляСт сообщСния ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ 0 ΠΈ 4, Π° сСрвСр ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π΅ΠΌΡƒ ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ 1 ΠΈ 5. ИмСнно Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ оТидаСтся Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° наш сСрвСр запускаСтся Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ порядковый Π½ΠΎΠΌΠ΅Ρ€ сообщСния ΠΏΠΎ пятому ΠΏΠΎΡ‚ΠΎΠΊΡƒ увСличился Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΏΡ€ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ сообщСния, ΠΊΠ°ΠΊ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ.

10.5. Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ

Наш сСрвСр позволяСт ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ тСкстовыС сообщСния ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². ΠŸΠΎΡ‚ΠΎΠΊ SCTP β€” это вовсС Π½Π΅ ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚ΠΎΠ², ΠΊΠ°ΠΊ Π² TCP. Π­Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ сообщСний, упорядочСнных Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ассоциации. ΠŸΠΎΡ‚ΠΎΠΊΠΈ с собствСнным порядком ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (head-of-line blocking), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π² TCP.

Π‘Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠΎΡ‚Π΅Ρ€Π΅ сСгмСнта TCP ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° Π½ΠΈΠΌ сСгмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ удСрТиваСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΡƒΡ‚Ρ€Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ сСгмСнт Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ адрСсатом. Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ° доставки ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… сСгмСнтов Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹. Π­Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ нСобходимая функция, которая, ΠΊ соТалСнию, ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ нСдостатками. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ сСмантичСски нСзависимыС сообщСния ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ соСдинСнию TCP. НапримСр, Π²Π΅Π±-сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ Ρ‚Ρ€ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ для отобраТСния Π½Π° экранС. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π½Π° экран ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, сСрвСр ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ сначала Ρ‡Π°ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ изобраТСния, Π·Π°Ρ‚Π΅ΠΌ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΈ Ρ‡Π°ΡΡ‚ΡŒ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ повторяСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° всС Ρ‚Ρ€ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли потСряСтся сСгмСнт TCP, относящийся ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ? ΠšΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠΉ сСгмСнт Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈ доставлСн Π΅ΠΌΡƒ. Π—Π°Π΄Π΅Ρ€ΠΆΠ°Π½Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ всС Ρ‚Ρ€ΠΈ изобраТСния, хотя сСгмСнт относился Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ… (ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ). Π­Ρ‚Ρƒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ рис. 10.2.

Рис. 10.2. ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Ρ‚Ρ€Π΅Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ TCP-соСдинСнию


ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

Π₯отя HTTP Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ½Π°Ρ‡Π΅, Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Ρ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ этого ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ SCP [108] ΠΈ SMUX [33], ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΎΠΏΠΈΡΠ°Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Π΅Ρ€Ρ… TCP. Π­Ρ‚ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ TCP-соСдинСниями, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ состоянии [123]. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ созданиС ΠΎΠ΄Π½ΠΎΠ³ΠΎ TCP-соСдинСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ изобраТСния (ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ HTTP) позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ блокирования, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ соСдинСнию приходится Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ врСмя Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ обращСния ΠΈ доступной пропускной способности. ΠŸΠΎΡ‚Π΅Ρ€Ρ сСгмСнта, относящСгося ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ соСдинСнию (ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π·Π°Ρ‚ΠΎΡ€Π° Π½Π° Π»ΠΈΠ½ΠΈΠΈ) Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ замСдлСнию ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ соСдинСниям. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ совокупноС использованиС Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… сСтСй ΠΏΠ°Π΄Π°Π΅Ρ‚.

Для прилоТСния Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅, Ссли Π±Ρ‹ транспортный ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π²Π΅Π» сСбя ΠΈΠ½Π°Ρ‡Π΅. Π’ ΠΈΠ΄Π΅Π°Π»Π΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сСгмСнты ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ сСгмСнты Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ сСгмСнт ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π½Π΅ Π±Ρ‹Π» утСрян вовсС.

ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ SCTP позволяСт свСсти ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ. На рис. 10.3 ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ процСсс ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Ρ‚Ρ€Π΅Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. На этот Ρ€Π°Π· сСрвСр ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ блокируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π° Π²Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π±Π΅Π· ΠΏΠΎΠΌΠ΅Ρ…. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ доставляСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ восстановлСн порядок сСгмСнтов.

Рис. 10.3. ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Ρ‚Ρ€Π΅Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ SCTP

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ привСсти ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ нашСго ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ sctpstr_cli_echoall, листинг 10.4), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ устранСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ SCTP. Новая функция Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° sctpstr_cli Π·Π° Ρ‚Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ большС Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ указания Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ‚ΠΎΠΊΠ° Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ сообщСнии. Ѐункция ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ сообщСниС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠΎ всСм ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ, количСство ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… опрСдСляСтся константой SERV_MAX_SCTP_STRM. ПослС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΆΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄Π° всСх ΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹Ρ… сообщСний сСрвСра. Запуская сСрвСр, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΅ΠΌΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ сСрвСр Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° сообщСния ΠΏΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ приходят. Π­Ρ‚ΠΎ позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ ΠΈ порядок ΠΈΡ… прибытия.

Листинг 10.4. Ѐункция sctp_strcliecho

 1 #include "unp.h"


 2 #define SCTP_MAXLINE 800


 3 void

 4 sctpstr_cli_echoall(FILE *fp, int sock_fd, struct sockaddr to,

 5  socklen_t tolen)

 6 {

 7  struct sockaddr_in peeraddr;

 8  struct sctp_sndrcvinfo sri;

 9  char sendline[SCTP_MAXLlNE], recvline[SCTP_MAXLINE];

10  socklen_t len;

11  int rd_sz, i, strsz;

12  int msg_flags;


13  bzero(sendline, sizeof(sendline));

14  bzero(&sri, sizeof(sri));

15  while (fgets(sendline, SCTP_MAXLINE - 9, fp) != NULL) {

16   strsz = strlen(sendline);

17   if (sendline[strsz-1] == '\n') {

18    sendline[strsz-1] = '\0';

19    strsz--;

20   }

21   for (i=0; i<SERV_MAX_SCTP_STRM; i++) {

22    snprintf(sendline + strsz, sizeof(sendline) - strsz,

23     ".msg %d", i);

24    Sctp_sendmsg(sock_fd, sendline, sizeof(sendline),

25     to, tolen, 0, 0, i, 0, 0);

26   }

27   for (i =0; i < SERV_MAX_SCTP_STRM; i++) {

28    len = sizeof(peeraddr);

29    rd_sz = Sctp_recvmsg(sock_fd, recvline, sizeof(recvline),

30     (SA*)&peeraddr, &len, &sri, &msg_flags);

31    printf("From str:%d seq:%d (assoc:0x%x)",

32     sri.sinfo_stream, sri.sinfo_ssn,

33     (u_int)sri, sinfo_assoc_id);

34    printf("%.*s\n", rd_sz, recvline);

35   }

36  }

37 }

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ структур Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π²Π²ΠΎΠ΄Π°

13-15 ΠšΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ структуру sri, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΡƒΡŽ для настройки ΠΏΠΎΡ‚ΠΎΠΊΠ°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ обнуляСт Π±ΡƒΡ„Π΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ считываСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄. Π—Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² основной Ρ†ΠΈΠΊΠ», Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡΡΡŒ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ fgets.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° сообщСния

16-20 ΠšΠ»ΠΈΠ΅Π½Ρ‚ опрСдСляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ сообщСния ΠΈ удаляСт символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки, Ссли Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ находится Π² ΠΊΠΎΠ½Ρ†Π΅ Π±ΡƒΡ„Π΅Ρ€Π°.

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° сообщСния ΠΏΠΎ всСм ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌ

21-26 ΠšΠ»ΠΈΠ΅Π½Ρ‚ отсылаСт сообщСниС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sctp_sendmsg. ΠŸΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ΡΡ всС содСрТимоС Π±ΡƒΡ„Π΅Ρ€Π° Π΄Π»ΠΈΠ½ΠΎΠΉ SCTP_MAXLINE. ΠŸΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ сообщСния ΠΊ Π½Π΅ΠΌΡƒ добавляСтся строка .msg, ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ впослСдствии ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ порядок получСния сообщСний ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с порядком ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСний. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отправляСт сообщСния ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ количСству ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π½Π΅ провСряя, сколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±Ρ‹Π»ΠΎ согласовано с сСрвСром. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСний Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡΡ с ошибкой, Ссли количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ сниТСно ΠΏΠΎ запросу собСсСдника.

ΠŸΠ Π˜ΠœΠ•Π§ΠΠΠ˜Π•

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ссли ΠΎΠΊΠ½Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ слишком ΠΌΠ°Π»Ρ‹. Если ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠ° собСсСдника слишком ΠΌΠ°Π»ΠΎ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π°, ΠΏΠΎΠΊΠ° ΠΎΠ½ Π½Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ всС сообщСния, сСрвСр Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ освобоТдСния Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΎΠ±Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ SCTP зависнут. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ рассчитана Π½Π° ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅. Она ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° лишь для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ блокирования ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ Π² ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅.