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

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

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

ВпослСдствии ΠΎΡ‚ этих Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ² ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ создавали Π²ΠΏΠ΅Ρ‡Π°Ρ‚Π»Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ SCTP Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя, ΠΊΠ°ΠΊ TCP ΠΈΠ»ΠΈ UDP, ΠΏΡ€ΠΈ использовании сокСтов ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². На самом Π΄Π΅Π»Π΅ имСлось Π² Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ TCP ΠΈ UDP: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с нСсколькими адрСсатами Π½Π° транспортном ΡƒΡ€ΠΎΠ²Π½Π΅. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ (Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ» ΠΈ Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ») Ρ„ΠΎΠΊΡƒΡΠΈΡ€ΡƒΡŽΡ‚ нашС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΌ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² сокСтов.

НаконСц, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π²Ρ‚ΠΎΡ€Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ «нСсколько-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ» вмСсто Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ». Π­Ρ‚ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ взаимозамСняСмы.

Π‘ΠΎΠΊΠ΅Ρ‚ Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ»

Π”Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ сокСта Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для облСгчСния пСрСноса ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с TCP Π½Π° SCTP. Π•Π³ΠΎ модСль практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π° описанной Π² Π³Π»Π°Π²Π΅ 4. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ отличия, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слСдуСт ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ (Π² особСнности, ΠΏΡ€ΠΈ пСрСносС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ):

1. Π’сС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ сокСтов Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ эквивалСнтам SCTP. Π§Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ TCP_NODELAY ΠΈ TCP_MAXSEG, вмСсто ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слСдуСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ SCTP_NODELAY ΠΈ SCTP_MAXSEG.

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

3. ΠΠ΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ TCP-прилоТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π½ΠΎΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ для извСщСния собСсСдника ΠΎ ΠΊΠΎΠ½Ρ†Π΅ считываСмых Π΄Π°Π½Π½Ρ‹Ρ…. Для пСрСноса Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° SCTP потрСбуСтся ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ… Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сигнал ΠΎ ΠΊΠΎΠ½Ρ†Π΅ Π΄Π°Π½Π½Ρ‹Ρ… пСрСдавался Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ ΠΏΠΎΡ‚ΠΎΠΊΠ΅.

4. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ send ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ sendto ΠΈ sendmsg Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΡŽΡ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± адрСсС получатСля ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π΄ основным адрСсом собСсСдника (см. Ρ€Π°Π·Π΄Π΅Π» 2.8).

Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π² стилС Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ», Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ рис. 9.1. Π—Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹ΠΉ сСрвСр ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ сокСт, привязываСтся ΠΊ адрСсу, послС Ρ‡Π΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ подсоСдинСния ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Π² систСмном Π²Ρ‹Π·ΠΎΠ²Π΅ accept. Π§Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя запускаСтся ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ свой сокСт ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ установлСниС ассоциации с сСрвСром. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ отправляСт сСрвСру запрос, сСрвСр ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ этот запрос ΠΈ отправляСт свой ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. ВзаимодСйствиС продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π½Π΅ Π½Π°Ρ‡Π½Π΅Ρ‚ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ассоциации. ПослС закрытия ассоциации сСрвСр Π»ΠΈΠ±ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π»ΠΈΠ±ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ установлСния Π½ΠΎΠ²ΠΎΠΉ ассоциации. Из сравнСния с Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠΎΠΉ TCP (см. рис. 4.1) становится ясно, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΠΌΠ΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· сокСт SCTP Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ» осущСствляСтся ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅.

Рис. 9.1. ВрСмСнная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° для сокСта SCTP Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ»

Π‘ΠΎΠΊΠ΅Ρ‚ SCTP Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ» являСтся IP-сокСтом (сСмСйство AF_INET ΠΈΠ»ΠΈ AF_INET6) со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° SOCK_STREAM ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° IPPROTO_SCTP.

Π‘ΠΎΠΊΠ΅Ρ‚ Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ»

Π‘ΠΎΠΊΠ΅Ρ‚ Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» Π΄Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ прилоТСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ сСрвСр, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ большого количСства дСскрипторов сокСтов. Один дСскриптор для Ρ‚Π°ΠΊΠΎΠ³ΠΎ сСрвСра Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ нСсколько ассоциаций, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ сокСту UDP, способному ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‚ мноТСства ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ². Для обращСния ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ассоциации, установлСнной для сокСта Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ассоциации прСдставляСт собой Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° sctp_assoc_t (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это Ρ†Π΅Π»ΠΎΠ΅ число). Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° скрываСтся ΠΎΡ‚ прилоТСния, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠ½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ссли Ρ‚ΠΎΡ‚ Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π» прСдоставлСн ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ядром.

ΠŸΡ€ΠΈ написании прилоТСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ сокСты Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, рСкомСндуСтся ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Ρ…:

1. ΠšΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π°ΡΡΠΎΡ†ΠΈΠ°Ρ†ΠΈΡŽ, ΠΎΠ½Π° автоматичСски закрываСтся ΠΈ Π½Π° сторонС сСрвСра. ΠŸΡ€ΠΈ этом ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ всС свСдСния ΠΎ состоянии ассоциации Π² ядрС.

2. Π’олько ΠΏΡ€ΠΈ использовании Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ ΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΌ ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… чСтырСхэтапного рукопоТатия (см. ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.3).

3. Π’Ρ‹Π·ΠΎΠ² sendto, sendmsg ΠΈΠ»ΠΈ sctp_sendmsg для адрСсата, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΅Ρ‰Π΅ Π½Π΅ установлСна ассоциация, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ открытия, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ создана новая ассоциация с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ адрСсом. Π­Ρ‚ΠΎ происходит Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ΅Π΅ send, ΠΏΠ΅Ρ€Π΅Π΄ этим Π²Ρ‹Π·Π²Π°Π»ΠΎ для Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ сокСта Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ listen, запросив пассивноС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅.

4. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sendto, sendmsg ΠΈ sctp_sendmsg, Π½ΠΎ Π½Π΅ send ΠΈ write. (Если Π²Ρ‹ создали сокСт Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ» Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ sctp_peeloff, Ρ‚ΠΎ send ΠΈ write Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ.)

5. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ основной адрСс получатСля, Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ систСмой Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ установки ассоциации (Ρ€Π°Π·Π΄Π΅Π» 2.8), Ссли Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ процСсс Π½Π΅ установит Ρ„Π»Π°Π³ MSG_ADDR_OVER Π² структурС sctp_sndrcvinfo. Для этого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sendmsg с Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ sctp_sendmsg.

6. Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ событиях для ассоциации ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π½Π΅ трСбуСтся ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ эти увСдомлСния, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° сокСта SCTP_EVENTS. (Одно ΠΈΠ· мноТСства ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ SCTP обсуТдаСтся Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 9.14.) По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ СдинствСнным Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ событиСм являСтся sctp_data_io_event. Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ Π½Π΅ΠΌ пСрСдаСтся Π² Π²ΠΈΠ΄Π΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ recvmsg ΠΈ sctp_recvmsg. Π­Ρ‚ΠΎ относится ΠΊ сокСтам ΠΎΠ±ΠΎΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².

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

Когда интСрфСйс API сокСтов SCTP находился Π½Π° стадии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, для сокСтов Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±Ρ‹Π»ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π΅Ρ‰Π΅ ΠΈ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ± установкС ассоциации. Π’ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… вСрсиях Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ API говорится ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для сокСтов ΠΎΠ±ΠΎΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ всС увСдомлСния, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ sctp_data_io_event. Однако Π½Π΅ всС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ этому ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΡŽ. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌ Ρ‚ΠΎΠ½ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ увСдомлСния ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ Π² явном Π²ΠΈΠ΄Π΅. Благодаря этому Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡŽ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ ΠΎΠ½ этого Ρ…ΠΎΡ‡Π΅Ρ‚, Π² любой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС.

Випичная врСмСнная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° для сокСта Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½Π° рис. 9.2. Π‘Π½Π°Ρ‡Π°Π»Π° запускаСтся сСрвСр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт сокСт, привязываСт Π΅Π³ΠΎ ΠΊ адрСсу, Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ listen для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ассоциации, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ sctp_recvmsg ΠΈ приостанавливаСтся Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ сообщСния. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ сокСт ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sctp_sendto, которая нСявно ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ Π°ΡΡΠΎΡ†ΠΈΠ°Ρ†ΠΈΡŽ ΠΈ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ чСтырСхэтапного рукопоТатия. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ запрос, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΈ отсылаСт свой ΠΎΡ‚Π²Π΅Ρ‚. ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚ сСрвСра ΠΈ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ сокСт, Ρ‚Π΅ΠΌ самым закрывая ΠΈ Π°ΡΡΠΎΡ†ΠΈΠ°Ρ†ΠΈΡŽ. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ оТиданию ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ сообщСния.

Рис. 9.2. ВрСмСнная Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ сокСта Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ»

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ рассматриваСтся ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр, ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сообщСния, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· нСсколько ассоциаций. SCTP позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сокСт Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ sctp_peeloff (см. Ρ€Π°Π·Π΄Π΅Π» 9.12) для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ- ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ сСрвСра.

1. Π€ΡƒΠ½ΠΊΡ†ΠΈΡ sctp_peeloff позволяСт Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π°ΡΡΠΎΡ†ΠΈΠ°Ρ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ»Π³ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ сСанс связи) ΠΈΠ· сокСта Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ сокСт Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ».

2. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ сокСт Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΏΠΎΡ‚ΠΎΠΊΡƒ ΠΈΠ»ΠΈ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠΌΡƒ процСссу (ΠΊΠ°ΠΊ Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сСрвСра).

3. ΠžΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сообщСния ΠΎΡ‚ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ассоциаций Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅.

Π‘ΠΎΠΊΠ΅Ρ‚ SCTP Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» являСтся IP-сокСтом (сСмСйство AF_INET ΠΈΠ»ΠΈ AF_INET6) со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° SOCK_SEQPACKET ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° IPPROTO_SCTP.

9.3. Ѐункция sctp_bindx

Π‘Π΅Ρ€Π²Π΅Ρ€ SCTP ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ подмноТСству IP-адрСсов ΡƒΠ·Π»Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ Π·Π°ΠΏΡƒΡ‰Π΅Π½. Π‘Π΅Ρ€Π²Π΅Ρ€Ρ‹ TCP ΠΈ UDP ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π»ΠΈΠ±ΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ, Π»ΠΈΠ±ΠΎ ΠΊΠΎ всСм адрСсам ΡƒΠ·Π»Π°, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ адрСсов. Ѐункция sctp_bindx Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΌ, прСдоставляя Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ сокСт SCTP с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ адрСсами.