2 void
3 dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
4 {
5 int n;
6 char sendline[MAXLINE], recvline[MAXLINE + 1];
7 Connect(sockfd, (SA*)pservaddr, servlen);
8 while (Fgets(sendline, MAXLINE, fp) != NULL) {
9 Write(sockfd, sendline, strlen(sendline));
10 n = Read(sockfd, recvline, MAXLINE);
11 recvline[n] = 0; /* Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ Π½ΡΠ»Ρ */
12 Fputs(recvline, stdout);
13 }
14 }
ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ β ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ connect ΠΈ Π·Π°ΠΌΠ΅Π½Π° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ sendto ΠΈ recvfrom Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ write ΠΈ read. Π€ΡΠ½ΠΊΡΠΈΡ dg_cli ΠΎΡΡΠ°Π΅ΡΡΡ Π½Π΅ Π·Π°Π²ΠΈΡΡΡΠ΅ΠΉ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° Π½Π΅ Π²Π½ΠΈΠΊΠ°Π΅Ρ Π² ΡΡΡΡΠΊΡΡΡΡ Π°Π΄ΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ connect. ΠΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ main ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 8.3, ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠΎΠΉ ΠΆΠ΅.
ΠΡΠ»ΠΈ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ·Π»Π΅ macosx, Π·Π°Π΄Π°Π² IP-Π°Π΄ΡΠ΅Ρ ΡΠ·Π»Π° freebsd4 (ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π½Π°Ρ ΡΠ΅ΡΠ²Π΅Ρ Π½Π° ΠΏΠΎΡΡΠ΅ 9877), ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄:
macosx % udpcli04 172.24.37.94
hello, world
read error: Connection refused
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ ΠΌΡ Π·Π°ΠΌΠ΅ΡΠ°Π΅ΠΌ, β ΠΌΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΎΡΠΈΠ±ΠΊΡ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΏΠ΅ΡΠ²ΡΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΡΡΠΎΠΉ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ ICMP ΠΎΡ ΡΠ·Π»Π° ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠΎ ΠΊΠΎΠ³Π΄Π° ΠΊΠ»ΠΈΠ΅Π½Ρ TCP Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ connect, Π·Π°Π΄Π°Π²Π°Ρ ΡΠ·Π΅Π» ΡΠ΅ΡΠ²Π΅ΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅ Π·Π°ΠΏΡΡΠ΅Π½ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΡΠ½ΠΊΡΠΈΡ connect Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ connect Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΡΠ΅Ρ ΡΡΠ°ΠΏΠ½ΠΎΠ³ΠΎ ΡΡΠΊΠΎΠΏΠΎΠΆΠ°ΡΠΈΡ TCP, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎΡ ΠΏΠ°ΠΊΠ΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΌΠ΅Π½ΡΠ° RST ΠΎΡ ΡΠΎΠ±Π΅ΡΠ΅Π΄Π½ΠΈΠΊΠ° (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 4.3).
Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 8.8 ΠΏΠΎΠΊΠ°Π·Π°Π½ Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ tcpdump.
ΠΠΈΡΡΠΈΠ½Π³ 8.8. ΠΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ tcpdump ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ dg_cli
macosx % tcpdump
01 0.0 macosx.51139 > freebsd4 9877:udp 13
02 0.006180 ( 0.0062) freebsd4 > macosx: icmp: freebsd4 udp port 9877 unreachable
Π ΡΠ°Π±Π». A.5 ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ ICMP ΡΠ΄ΡΠΎ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΡΠΈΠ±ΠΊΠ΅ ECONNREFUSED, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π²ΡΠ²ΠΎΠ΄Ρ ΡΡΡΠΎΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Connection refused (Π ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ ΠΎΡΠΊΠ°Π·Π°Π½ΠΎ) ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ err_sys.
ΠΠ ΠΠΠΠ§ΠΠΠΠΠ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π΅ Π²ΡΠ΅ ΡΠ΄ΡΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ICMP ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠΌΡ ΡΠΎΠΊΠ΅ΡΡ UDP, ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π² ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. ΠΠ±ΡΡΠ½ΠΎ ΡΠ΄ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΡ ΠΎΡ ΠΠ΅ΡΠΊΠ»ΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΡΡ ΠΎΡΠΈΠ±ΠΊΡ, Π° ΡΠ΄ΡΠ° System V β Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠΌ ΡΠΎΡ ΠΆΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π° ΡΠ·Π»Π΅ Solaris 2.4 ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ connect ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠΌΡΡ Ρ ΡΠ·Π»ΠΎΠΌ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅ Π·Π°ΠΏΡΡΠ΅Π½ Π½Π°Ρ ΡΠ΅ΡΠ²Π΅Ρ, ΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ tcpdump ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° ICMP ΠΎ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΏΠΎΡΡΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΠ·Π»ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π½ΠΎ Π²ΡΠ·Π²Π°Π½Π½Π°Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ read Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ. ΠΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡ Π±ΡΠ»Π° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° Π² Solaris 2.5. UnixWare Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ AIX, Digital Unix, HP-UX ΠΈ Linux Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ.
8.13. ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π² UDP
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, ΠΊΠ°ΠΊ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π² UDP. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ dg_cli ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΠΎΡΠΏΡΠ°Π²Π»ΡΠ»Π° ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ. ΠΠ½Π° Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΈΡΠ°ΡΡ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π²Π²ΠΎΠ΄Π°. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 8.9 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΡ 2000 Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ UDP ΠΏΠΎ 1400 Π±Π°ΠΉΡ ΠΊΠ°ΠΆΠ΄Π°Ρ.
ΠΠΈΡΡΠΈΠ½Π³ 8.9. Π€ΡΠ½ΠΊΡΠΈΡ dg_cli, ΠΎΡΡΡΠ»Π°ΡΡΠ°Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ ΡΠ΅ΡΠ²Π΅ΡΡ
//udpcliserv/dgcliloop1.c
1 #include "unp.h"
2 #define NDG 2000 /* ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ */
3 #define DGLEN 1400 /* Π΄Π»ΠΈΠ½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ */
4 void
5 dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
6 {
7 int i;
8 char sendline[DGLEN];
9 for (i = 0; i < NDG; i++) {
10 Sendto(sockfd, sendline, DGLEN, 0, pservaddr, servlen);
11 }
12 }
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠ΅ΡΠ²Π΅Ρ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠ°Π» Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ ΠΈ ΡΡΠΈΡΠ°Π» ΡΠΈΡΠ»ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ. Π‘Π΅ΡΠ²Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡ. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 8.10 ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½ΠΎΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ dg_echo. ΠΠΎΠ³Π΄Π° ΠΌΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π½Π° ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ (ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ ΡΠΈΠ³Π½Π°Π»Π° SIGINT ΠΏΡΠΎΡΠ΅ΡΡΡ), ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΈΡΠ»ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ.
ΠΠΈΡΡΠΈΠ½Π³ 8.10. Π€ΡΠ½ΠΊΡΠΈΡ dg_echo, ΡΡΠΈΡΠ°ΡΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ
//udpcliserv/dgecholoop1.c
1 #include "unp.h"
2 static void recvfrom_int(int);
3 static int count;
4 void
5 dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen)
6 {
7 socklen_t len;
8 char mesg[MAXLINE];
9 Signal (SIGINT, recvfrom_int);
10 for (;;) {
11 len = clilen;
12 Recvfrom(sockfd, mesg, MAXLINE, 0, pcliaddr, &len);
13 count++;
14 }
15 }
16 static void
17 recvfrom_int(int signo)
18 {
19 printf("\nreceived %d datagrams\n", count);
20 exit(0);
21 }
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΡΠ²Π΅Ρ Π½Π° ΡΠ·Π»Π΅ freebsd, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ SPARCStation. ΠΠ»ΠΈΠ΅Π½Ρ ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π² Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ RS/6000 Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ aix. ΠΠ½ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Ρ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ Π½Π°ΠΏΡΡΠΌΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠΌ Ethernet Π½Π° 100 ΠΠ±ΠΈΡ/Ρ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ netstat -s Π½Π° ΡΠ·Π»Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π΄ΠΎ, ΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΠ°Ρ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ ΠΌΡ ΠΏΠΎΡΠ΅ΡΡΠ»ΠΈ. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 8.11 ΠΏΠΎΠΊΠ°Π·Π°Π½ Π²ΡΠ²ΠΎΠ΄ ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΠΈΡΡΠΈΠ½Π³ 8.11. ΠΡΠ²ΠΎΠ΄ Π½Π° ΡΠ·Π»Π΅ ΡΠ΅ΡΠ²Π΅ΡΠ°
freebsd % netstat -s -p udp
udp:
71208 datagrams received
0 with incomplete header
0 with bad data length field
0 with bad checksum
0 with no checksum
832 dropped due to no socket
16 broadcast/multicast datagrams dropped due to no socket
1971 dropped due to full socket buffers
0 not for hashed pcb
68389 delivered
137685 datagrams output
freebsd % udpserv06 Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π½Π°Ρ ΡΠ΅ΡΠ²Π΅Ρ
ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΡΡΠ»Π°Π΅Ρ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ
^C Π΄Π»Ρ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π²Π²ΠΎΠ΄ΠΈΠΌ Π½Π°Ρ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ
freebsd % netstat -s -Ρ udp
udp
73208 datagrams received
0 with incomplete header
0 with bad data length field
0 with bad checksum
0 with no checksum
832 dropped due to no socket
16 broadcast/multicast datagrams dropped due to no socket
3941 dropped due to full socket buffers
0 not for hashed pcb
68419 delivered
137685 datagrams output
ΠΠ»ΠΈΠ΅Π½Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΠ» 2000 Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ, Π½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅-ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎ ΡΠΎΠ»ΡΠΊΠΎ 30 ΠΈΠ· Π½ΠΈΡ , ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ ΠΏΠΎΡΠ΅ΡΡ 98%. ΠΠΈ ΡΠ΅ΡΠ²Π΅Ρ, Π½ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΈ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ ΠΏΠΎΡΠ΅ΡΡΠ½Ρ. ΠΠ°ΠΊ ΠΌΡ ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ, UDP Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ β ΠΎΠ½ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ΅Π½. ΠΠ°ΠΊ ΠΌΡ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ UDP Π½Π΅ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΡΠ΄Π° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½ΠΈΡΡ Π±ΡΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ.
ΠΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π²ΡΠ²ΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ netstat, ΡΠΎ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΎΠ±ΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ·Π»ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ° (Π½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ) ΡΠ°Π²Π½ΠΎ 2000 (73 208 β 71 208). Π‘ΡΠ΅ΡΡΠΈΠΊ dropped due to full socket buffers (ΠΎΡΠ±ΡΠΎΡΠ΅Π½ΠΎ ΠΈΠ·-Π·Π° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΡΡΠ΅ΡΠΎΠ² ΡΠΎΠΊΠ΅ΡΠ°) ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ Π±ΡΠ»ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ UDP ΠΈ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΡΠΈΠ΅ΠΌΠ½ΡΠΉ Π±ΡΡΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅Π³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° Π±ΡΠ» ΠΏΠΎΠ»ΠΎΠ½ [128, Ρ. 775]. ΠΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ 1970 (3941 β 1971), ΡΡΠΎ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ ΡΡΠ΅ΡΡΠΈΠΊΠ° Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ (30), Π΄Π°Π΅Ρ 2000 Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ·Π»ΠΎΠΌ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠ΅ΡΡΠΈΠΊ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ, ΠΎΡΠ±ΡΠΎΡΠ΅Π½Π½ΡΡ ΠΈΠ·-Π·Π° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ°, Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ netstat ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ Π½Π° Π²ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, Π½Π° ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΡΡΡ UDP) ΡΡΠΎ Π²Π»ΠΈΡΠ΅Ρ.
Π§ΠΈΡΠ»ΠΎ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΎ. ΠΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π½Π°Π³ΡΡΠ·ΠΊΠ° ΡΠ΅ΡΠΈ, Π·Π°Π³ΡΡΠΆΠ΅Π½Π½ΠΎΡΡΡ ΡΠ·Π»Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ·Π»Π° ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΡΠ»ΠΈ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠΌ ΡΠΎΡ ΠΆΠ΅ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅ΡΠ²Π΅Ρ, Π½ΠΎ Π½Π° ΡΡΠΎΡ ΡΠ°Π· ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Sun, Π° ΡΠ΅ΡΠ²Π΅Ρ Π½Π° Π±ΡΡΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ RS/6000, Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ Π½Π΅ ΡΠ΅ΡΡΡΡΡΡ.
aix % udpserv06
^? ΠΏΠΎΡΠ»Π΅ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π²Π²ΠΎΠ΄ΠΈΠΌ Π½Π°Ρ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ
received 2000 datagrams
ΠΡΠΈΠ΅ΠΌΠ½ΡΠΉ Π±ΡΡΠ΅Ρ ΡΠΎΠΊΠ΅ΡΠ° UDP
Π§ΠΈΡΠ»ΠΎ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ UDP, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ UDP, Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π΅Π³ΠΎ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΠΎΠΊΠ΅ΡΠ° SO_RCVBUF, ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 7.5. Π FreeBSD ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° UDP ΡΠ°Π²Π΅Π½ 42 080 Π±Π°ΠΉΡ, ΡΡΠΎ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ 30 ΠΈΠ· Π½Π°ΡΠΈΡ 1400-Π±Π°ΠΉΡΠΎΠ²ΡΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ. ΠΡΠ»ΠΈ ΠΌΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ°, ΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ. Π Π»ΠΈΡΡΠΈΠ½Π³Π΅ 8.12 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ dg_echo ΠΈΠ· Π»ΠΈΡΡΠΈΠ½Π³Π° 8.10, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΡΠΈΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° Π΄ΠΎ 240 ΠΠ±Π°ΠΉΡ. ΠΡΠ»ΠΈ ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠΌ ΡΡΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Sun, Π° ΠΊΠ»ΠΈΠ΅Π½Ρ β Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ RS/6000, ΡΠΎ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 103. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π»ΠΈΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π±ΡΡΠ΅ΡΠ°, Π·Π°Π΄Π°Π½Π½ΡΠΌ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΡΠ½ΠΎ, ΡΡΠΎ ΠΌΡ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.