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

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

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

Листинг 10.7. Π‘Π΅Ρ€Π²Π΅Ρ€, Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π°ΡΡΠΎΡ†ΠΈΠ°Ρ†ΠΈΡŽ послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π°

//sctp/sctpserv03.c

25 for (;;) {

26  len = sizeof(struct sockaddr_in);

27  rd_sz = Sctp_recvmsg(sock_fd, readbuf, sizeof(readbuf),

28   (SA*)&cliaddr, &len, &sri, &msg_flags);

29  if (stream_increment) {

30   sri.sinfo_stream++;

31   if (sri.sinfo_stream >=

32    sctp_get_no_strms(sock_fd, (SA*)&cliaddr, len))

33    sri.sinfo_stream = 0;

34  }

35  Sctp_sendmsg(sock_fd, readbuf, rd_sz,

36   (SA*)&cliaddr, len,

37   sri.sinfo_ppid,

38   (sri.sinfo_flags | MSG_EOF), sri.sinfo_stream, 0, 0);

39 }

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΠΎΡ‚Π²Π΅Ρ‚Π° с Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ ассоциации

38 Π˜Π·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° сСрвСра состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ добавляСм Ρ„Π»Π°Π³ MSG_EOF ΠΊ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ Ρ„Π»Π°Π³Π°ΠΌ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ sctp_sendmsg ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ логичСского Π˜Π›Π˜. Благодаря этому сСрвСр Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π°ΡΡΠΎΡ†ΠΈΠ°Ρ†ΠΈΡŽ послС подтвСрТдСния доставки сообщСния.

Листинг 10.8. ΠšΠ»ΠΈΠ΅Π½Ρ‚, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ассоциации

//sctp/sctpclient02.c

25 if (echo_to_all == 0)

26  sctpstr_cli(stdin, sock_fd, (SA*)&servaddr, sizeof(servaddr));

27 else

28  sctpstr_cli_echoall(stdin, sock_fd, (SA*)&servaddr,

29   sizeof(servaddr));

30 strcpy(byemsg, "goodbye");

31 Sctp_sendmsg(sock_fd, byemsg, strlen(byemsg),

32  (SA*)&servaddr, sizeof(servaddr), 0, MSG_ABORT, 0, 0, 0);

33 Close(sock_fd);

АварийноС Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ассоциации

30-32 ΠšΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ сообщСниС ΠΎΠ± Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ассоциации, Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ошибкой. Π—Π°Ρ‚Π΅ΠΌ функция sctp_sendmsg вызываСтся с Ρ„Π»Π°Π³ΠΎΠΌ MSG_ABORT. ΠŸΡ€ΠΈ этом отправляСтся порция Π΄Π°Π½Π½Ρ‹Ρ… ABORT, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΌΡƒ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ ассоциации. Π’ ΠΏΠΎΡ€Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ошибки ΠΈ сообщСниС (Β«goodbyeΒ») Π² ΠΏΠΎΠ»Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ошибки Π²Ρ‹ΡˆΠ΅Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ уровня.

Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ дСскриптора сокСта

33 Π₯отя ассоциация ΠΈ Π±Ρ‹Π»Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°, дСскриптор сокСта всС Ρ€Π°Π²Π½ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ связанныС с Π½ΠΈΠΌ систСмныС рСсурсы.

10.8. РСзюмС

ΠœΡ‹ ΠΈΠ·ΡƒΡ‡ΠΈΠ»ΠΈ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра SCTP ΠΎΠ±Ρ‰ΠΈΠΌ объСмом ΠΎΠΊΠΎΠ»ΠΎ 150 строк ΠΊΠΎΠ΄Π°. ОбС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ с сокСтами SCTP Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ». Π‘Π΅Ρ€Π²Π΅Ρ€ Π±Ρ‹Π» написан Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ стилС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ‚Π°ΠΊΠΈΠΌΠΈ сокСтами. Он считывал сообщСния ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Π» Π½Π° Π½ΠΈΡ… ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΡƒ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΈ, ΠΈΠ»ΠΈ ΠΏΠΎ ΠΏΠΎΡ‚ΠΎΠΊΡƒ с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ исслСдовали ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ блокирования ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ особСнности ситуации ΠΈ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ использованиС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² SCTP для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. ПослС этого ΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· мноТСства ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² сокСта, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для управлСния ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ SCTP. НаконСц, ΠΌΡ‹ снова ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ сСрвСра ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ассоциации.

Π£Π³Π»ΡƒΠ±Π»Π΅Π½Π½ΠΎΠ΅ исслСдованиС SCTP Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ Π² Π³Π»Π°Π²Π΅ 23.

УпраТнСния

1. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π² листингС 10.1, Ссли SCTP Π²Π΅Ρ€Π½Π΅Ρ‚ сообщСниС ΠΎΠ± ошибкС? Каким ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ нСдостаток ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹?

2. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли сСрвСр Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ, Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ² Π½Π° сообщСния? ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΠ± этом событии?

3. Π’ листингС 10.7 Π² строкС 22 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ out_sz устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ 800 Π±Π°ΠΉΡ‚. Как Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅? БущСствуСт Π»ΠΈ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°?

4. ΠšΠ°ΠΊ повлияСт Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Нагла (см. Ρ€Π°Π·Π΄Π΅Π» 7.10) Π½Π° нашСго ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈΠ· листинга 10.7? НС Π»ΡƒΡ‡ΡˆΠ΅ Π»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Нагла для этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹? Π’ΠΎΠΏΠ»ΠΎΡ‚ΠΈΡ‚Π΅ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра.

5. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ 10.6 ΠΌΡ‹ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ слСдуСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄ΠΎ установки ассоциации. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС?

6. ΠšΠΎΠ³Π΄Π° ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΎ количСствС ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², ΠΌΡ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для сокСтов Ρ‚ΠΈΠΏΠ° Β«ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ количСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Ρ‚Π°ΠΊ? (Подсказка: Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ с сообщСниями.)

7. ΠŸΠΎΡ‡Π΅ΠΌΡƒ сСрвСр ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ассоциации? Опасно Π»ΠΈ это?

8. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ 10.7 ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ сСрвСр Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ стал Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π°ΡΡΠΎΡ†ΠΈΠ°Ρ†ΠΈΡŽ послС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сообщСния. Π’Ρ‹Π·ΠΎΠ²Π΅Ρ‚ Π»ΠΈ это ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹? Π₯ΠΎΡ€ΠΎΡˆΠ΅Π΅ Π»ΠΈ это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ прилоТСния?

Π“Π»Π°Π²Π° 11

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½ ΠΈ адрСсов

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

Π’ΠΎ всСх ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΌΡ‹ использовали числСнныС адрСса ΡƒΠ·Π»ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 206.6.226.33) ΠΈ числСнныС Π½ΠΎΠΌΠ΅Ρ€Π° ΠΏΠΎΡ€Ρ‚ΠΎΠ² для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сСрвСров (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΡ€Ρ‚ 13 для стандартного сСрвСра Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π΄Π°Ρ‚Ρ‹ ΠΈ ΠΏΠΎΡ€Ρ‚ 9877 для нашСго эхо-сСрвСра). Однако ΠΏΠΎ ряду сообраТСний ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° вмСсто чисСл: Π²ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΈΠΌΠ΅Π½Π° ΠΏΡ€ΠΎΡ‰Π΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ, Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Ссли числСнный адрСс помСняСтся, имя ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ, ΠΈ Π²-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, с ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π½Π° IPv6 числСнныС адрСса становятся Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π»ΠΈΠ½Π½Π΅Π΅, Ρ‡Ρ‚ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ошибки ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ адрСса Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Π’ этой Π³Π»Π°Π²Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΠΈ адрСсов: gethostbyname ΠΈ gethostbyaddr для прСобразования ΠΈΠΌΠ΅Π½ ΡƒΠ·Π»ΠΎΠ² ΠΈ IP-адрСсов, ΠΈ getservbyname ΠΈ getservbyport для прСобразования ΠΈΠΌΠ΅Π½ слуТб ΠΈ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΏΠΎΡ€Ρ‚ΠΎΠ². Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΌΡ‹ рассмотрим Π΄Π²Π΅ нСзависимыС ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getaddrinfo ΠΈ getnameinfo, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ IP-адрСсами ΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡƒΠ·Π»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ слуТб ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΏΠΎΡ€Ρ‚ΠΎΠ².

11.2. БистСма Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½

БистСма Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½ (Domain Name System, DNS) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго для сопоставлСния ΠΈΠΌΠ΅Π½ ΡƒΠ·Π»ΠΎΠ² ΠΈ IP-адрСсов. Имя ΡƒΠ·Π»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ простым (simple name), Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ solaris ΠΈΠ»ΠΈ bsdi, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π½Ρ‹ΠΌ Π΄ΠΎΠΌΠ΅Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ (fully qualified domain name, FQDN), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ solaris.unpbook.com..

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

Π’ тСхничСском ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ FQDN ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ часто ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΊΠΎΠ½Ρ†Π΅. Π’ΠΎΡ‡ΠΊΠ° сообщаСт Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚Π΅Π»ΡŽ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ имя являСтся Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ провСдСния поиска Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌ Π²Π΅Ρ€Ρ…Π½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим Ρ‚ΠΎΠ»ΡŒΠΊΠΎ основы DNS, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π°ΠΌ для сСтСвого программирования. Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ, ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ вопроса, ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π³Π»Π°Π²Π΅ 14 [111] ΠΈ ΠΊ [1]. ДополнСния, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Π΅ для IPv6, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Ρ‹ Π² RFC 1886 [121].

Записи рСсурсов

Записи Π² DNS Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ записями рСсурсов (resource records, RR). Нас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ нСсколько Ρ‚ΠΈΠΏΠΎΠ² RR.

β–  Π. Π—Π°ΠΏΠΈΡΡŒ Ρ‚ΠΈΠΏΠ° А ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ имя ΡƒΠ·Π»Π° Π² 32-разрядный адрСс IPv4. Π’ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ записи DNS для ΡƒΠ·Π»Π° freebsd Π² Π΄ΠΎΠΌΠ΅Π½Π΅ unpbook.com, пСрвая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… β€” это запись Ρ‚ΠΈΠΏΠ° А:

freebsd IN А    12.106.32.254

        IN AAAA 3ffe:b80:1f8d:1:a00:20ff:fea7:686b

        IN MX   5 freebsd.unpbook.com.

        IN MX   10 mailhost.unpbook.com.

β–  AAAA. Π—Π°ΠΏΠΈΡΡŒ Ρ‚ΠΈΠΏΠ° AAAA, называСмая Β«Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ А» (quad А), ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ имя ΡƒΠ·Π»Π° Π² 128-разрядный адрСс IPv6. НазваниС Β«Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ А» ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ΡΡ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ 128-разрядный адрСс Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Ρ€Π°Π·Π° большС 32-разрядного адрСса.

β–  PTR. Π—Π°ΠΏΠΈΡΡŒ PTR (pointer records β€” запись указатСля) ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ IP-адрСс Π² имя ΡƒΠ·Π»Π°. Π§Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° адрСса IPv4 Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π±Π°ΠΉΡ‚ прСобразуСтся Π² дСсятичноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ASCII (0-255), Π° Π·Π°Ρ‚Π΅ΠΌ добавляСтся in-addr.arpa. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠ°ΡΡΡ строка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² запросС PTR.

32 ΠΏΠΎΠ»ΡƒΠ±Π°ΠΉΡ‚Π° 128-разрядного адрСса IPv6 Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΠ±Π°ΠΉΡ‚ прСобразуСтся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ASCII (0-9, a-f) ΠΈ добавляСтся ΠΊ ip6.arpa.

НапримСр, Π΄Π²Π΅ записи PTR для нашСго ΡƒΠ·Π»Π° freebsd Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

254.32.106.12 in-addr.arpa

b.6.8.6.7.a.e.f.f.f.0.2.0.0.a.0.1.0.0.0.d.8.f.1.0.8.b.0.e.f.f.3.ip6.arpa

β–  MX. Π—Π°ΠΏΠΈΡΡŒ Ρ‚ΠΈΠΏΠ° MX (Mail Exchange Record) опрСдСляСт, Ρ‡Ρ‚ΠΎ ΡƒΠ·Π΅Π» выступаСт Π² Ρ€ΠΎΠ»ΠΈ Β«ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ сСрвСра» для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для ΡƒΠ·Π»Π° solaris прСдоставлСно Π΄Π²Π΅ записи Ρ‚ΠΈΠΏΠ° MX. ΠŸΠ΅Ρ€Π²Π°Ρ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 5, вторая β€” 10. Когда сущСствуСт мноТСство записСй Ρ‚ΠΈΠΏΠ° MX, ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² порядкС прСдпочтСния начиная с наимСньшСго значСния.

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

ΠœΡ‹ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΊΠ½ΠΈΠ³ΠΈ записСй Ρ‚ΠΈΠΏΠ° MX, Π½ΠΎ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ ΠΎ Π½ΠΈΡ…, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ.

β–  CNAME. АббрСвиатура CNAME ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «каноничСскоС имя» (canonical name). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ записи ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для присвоСния ΠΈΠΌΠ΅Π½ распространСнным слуТбам, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ ftp ΠΈ www. ΠŸΡ€ΠΈ использовании ΠΈΠΌΠ΅Π½ слуТб вмСсто Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡƒΠ·Π»Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ слуТбы Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ·Π΅Π» становится ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ΠΌ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ). НапримСр, для нашСго ΡƒΠ·Π»Π° linux каноничСскими ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ записи: