Sieci komputerowe 1
Sieci komputerowe 2 Warstwa transportowa Warstwa 4 modelu OSI Warstwa 3 modelu TCP/IP warstwa aplikacji warstwa prezentacji warstwa aplikacji warstwa sesji warstwa transportowa warstwa sieci warstwa łącza danych warstwa fizyczna API API API warstwa transportowa warstwa sieci warstwa łącza
Sieci komputerowe 3 Warstwa transportowa Zapewnienie niezawodnego przesyłania danych /wg ISO/ Transmisja połączeniowa nawiązywanie połączenia uzgadnianie parametrów połączenia wysyłanie danych wysokopriorytetowych Transmisja bezpołączeniowa
Sieci komputerowe 4 Enkapsulacja nagłówek ramki nagłówek pakietu nagłówek w. transportowej dane w. trans. dane pakietu dane ramki nagłówek Ethernet nagłówek IP nagłówek TCP o g o n 14 B 20 B 20 B dane pakietu dane ramki dane TCP 4 B
Sieci komputerowe 5 Enkapsulacja Narzut enkapsulacji może mieć duży wpływ na wielkość generowanego strumienia danych Przykładowo dla enkapsulacji Ethernet/IP/TCP oraz strumienia danych 64 kb/s: Rozmiar segmentu TCP Narzut nagłówków Wymagane pasmo dla sieci nagłówek Ethernet nagłówek IP nagłówek TCP o g o n 1 B 5800% ~ 3,8 Mb/s nagłówek Ethernet nagłówek IP nagłówek TCP dane (58 B) o g o n 58 B 100% 128 kb/s dane (1460B) 1460 B ~ 4% ~ 66 kb/s
Sieci komputerowe 6 Porty Właściwie każdy współczesny komputer jest (może być) wyposażony w system operacyjny pozwalający na uruchamianie wielu zadań jednocześnie Identyfikacja procesów: numery problemy: numery procesów zmieniają się np. przy restarcie, zmiana numerów punktów docelowych musiałaby być sygnalizowana innym hostom,... rozwiązanie: schemat adresacji procesów wewnątrz każdego hosta Port: abstrakcyjny punkt docelowy identyfikowany za pomocą dodatniej liczby całkowitej
Sieci komputerowe 7 Porty Multipleksacja / demultipleksacja segmentów Proces A Proces B Proces C Proces D Port 1 Port 2 Port 3 Port 4 Protokół warstwy 4 Protokół warstwy 3
Sieci komputerowe 8 Porty Dostęp do portów może być: synchroniczny: przetwarzanie jest wstrzymane na czas komunikacji, asynchroniczny: bez przerywania przetwarzania Zazwyczaj dane przychodzące na dany port są buforowane. Dzięki temu: dane przychodzące na port zanim proces obsługujący może je przetworzyć nie są tracone, czas oczekiwania procesu na dane może zostać skrócony. UWAGA! Bufory mają ograniczoną długość! Numery portów dla różnych protokołów warstwy 4 mogą się powtarzać.
Sieci komputerowe 9 Porty - programowanie Asocjacja jest to piątka: (protokół, adres lokalny, proces lokalny, adres obcy, proces obcy) Półasocjacja inaczej gniazdo (socket) to trójka: lub (protokół, adres lokalny, proces lokalny) (protokół, adres obcy, proces obcy) W przypadku protokołów TCP i UDP procesy identyfikowane są przez numery portów określone w nagłówku
Sieci komputerowe 10 Porty Zestaw dobrze znanych portów określa porty, z którymi mogą łączyć się klienci (RFC 1700) np.: 21 FTP 23 Telnet 25 Mail (SMTP) 80 HTTP Porty efemeryczne krótkotrwałe, określane przez moduł warstwy transportowej a na czas połączenia
Sieci komputerowe 11 Porty Możliwe jest więcej, niż jedno połączenie na port... np. trudno sobie wyobrazić, by SMTP zmieniał port dla każdego połączenia Usługa docelowa może obsługiwać jednocześnie wielu ów, gdyż dialog między nimi (połączenie) jest identyfikowany przez końce połączeń (ang. endpoints). Pozwala to różnym om na jednoczesne łączenie się na ten sam port a realizującego daną usługę.
Sieci komputerowe 12 Porty a połączenia 100.100.100.100 (1029) 200.200.200.200 (80) SERWER 150.150.150.150 (1920) Protokół Adr. lok. Proc. lok. Adr. zd. Proc. zd. Połączenie 1: (TCP, 200.200.200.200, 80, 100.100.100.100, 1029) Połączenie 2: (TCP, 200.200.200.200, 80, 150.150.150.150, 1920)
Sieci komputerowe 13 Interfejs programisty Interfejsy niskiego poziomu gniazda BSD (UNIX, Linux) Transport Layer Interface TLI (UNIX, Linux) winsock (Microsoft) Interfejsy wysokiego poziomu java.net (Sun) biblioteka MFC (Microsoft)
Sieci komputerowe 14 Gniazda BSD socket bind listen accept connect send[to] recv[from] tworzy gniazdo; serw./kli. wiąże adres i proces z gniazdem; serw.[/kli.] tworzy kolejkę zgłoszeń; serw. oczekuje na zgłoszenie; serw. ustanawia połączenie; kli. wysyła dane; serw./kli. pobiera dane; serw./kli.
Sieci komputerowe 15 Gniazda BSD int socket(int family, tworzy int type, gniazdo; int protocol) serw./kli. bind wiąże adres i proces z gniazdem; serw.[/kli.] listen tworzy kolejkę zgłoszeń; serw. Rodzina Rodzaj Deskryptor gniazda: protokołu, adresów: gniazda np. sockfd dla AF_INET: accept AF_UNIX SOCK_STREAM IPPROTO_UDP oczekuje protokoły gniazdo protokół na wewnętrzne zgłoszenie; strumieniowe UDP Unixa serw. AF_INET IPPROTO_TCP protokoły Internetu connect SOCK_DGRAM protokół ustanawia gniazdo połączenie; datagramowe TCP kli. AF_NS IPPROTO_ICMP SOCK_RAW protokoły protokół gniazdo Xeroxa surowe ICMP NS AF_IMPLINK IPPROTO_RAW SOCK_SEQPACKET warstwa protokół gniazdo kanałowa surowe IPIMP
Sieci komputerowe 16 Gniazda BSD socket tworzy gniazdo; serw./kli. int bind(int sockfd, wiąże struct adres sockaddr i proces *myaddr, z gniazdem; int addrlen) serw.[/kli.] listen accept connect tworzy kolejkę zgłoszeń; serw. oczekuje na zgłoszenie; serw. ustanawia Deskryptor gniazda połączenie; kli. Określa Struktura Zero lub rozmiar kod zawierająca błędu struktury adres, myaddr właściwy danemu protokołowi
Sieci komputerowe 17 Gniazda BSD socket tworzy gniazdo; serw./kli. bind wiąże adres i proces z gniazdem; serw.[/kli.] int listen(int sockfd, tworzy int backlog) kolejkę zgłoszeń; serw. accept oczekuje na zgłoszenie; serw. connect ustanawia połączenie; kli. Deskryptor Rozmiar Zero lub kolejki kod gniazda błędu żądań połączenia maks. 5
Sieci komputerowe 18 socket bind Gniazda BSD tworzy gniazdo; serw./kli. Deskryptor Adres a, gniazda którego a żądanie zostało przyjęte wiąże adres i proces z gniazdem; serw.[/kli.] listen tworzy kolejkę zgłoszeń; serw. int accept(int sockfd, oczekuje struct na sockaddr zgłoszenie; *peer, serw. connect int *addrlen) ustanawia połączenie; kli.
Sieci komputerowe 19 Gniazda BSD socket tworzy gniazdo; serw./kli. bind wiąże adres i proces z gniazdem; serw.[/kli.] listen tworzy kolejkę zgłoszeń; serw. accept oczekuje na zgłoszenie; serw. int connect(int sockfd, ustanawia struct połączenie; sockaddr *servaddr, kli. int addrlen)
Sieci komputerowe 20 Gniazda BSD int write(int sockfd, char *buf, int nbytes) int send(int sockfd, char *buf, int nbytes, int flags) int sendto(int sockfd, char *buf, int nbytes, int flags, struct sockaddr *to, int addrlen) int read(int sockfd, char *buf, int nbytes) int recv(int sockfd, char *buf, int nbytes, int flags) int recvfrom(int sockfd, char *buf, int nbytes, int flags, struct sockaddr *from, int *addrlen)
Sieci komputerowe 21 Użycie funkcji interfejsu gniazd połączeniowy socket bind listen accept blokuje oczekując na zgłoszenie recv send ustanowienie połączenia dane - żądanie dane - odpowiedź socket connect send recv
Sieci komputerowe 22 Użycie funkcji interfejsu gniazd bezpołączeniowy socket bind recvfrom blokuje aż do otrzymania danych przetwarza dane sendto dane - żądanie dane - odpowiedź socket bind sendto recvfrom blokuje aż do otrzymania danych przetwarza dane
Sieci komputerowe 23 Interfejs wysokopoziomowy Serwer import java.net.*; import java.io.*; Klient import java.net.*; import java.io.*; [...] ServerSocket s_s = new ServerSocket(port); [...] Socket s = new Socket(s_ip_addr,s_port); [...] Socket s = s_s.accept(); OuptutStream out = s.getoutputstream(); InputStream in = s.getinputstream(); [...] [...] OuptutStream out = s.getoutputstream(); InputStream in = s.getinputstream(); [...]
Sieci komputerowe 24 Rodzaje protokołów Połączeniowy nawiązywanie połączenia transmisja danych zamykanie połączenia Większe możliwości (zapewnienie, że dane dotrą do celu itp.) Bezpołączeniowy tylko transmisja... Mniejsze narzuty na informacje kontrolne
Sieci komputerowe 25 Transmission Control Protocol Oczekiwanie warstw wyższych (i programistów :-) ): możliwość przesyłania strumieni danych bez konieczności wpisywania w każdy program obsługi błędów na maszynie odbiorcy ma się pojawić dokładnie taki sam ciąg oktetów, jak wysłany przez nadawcę
Sieci komputerowe 26 Transmission Control Protocol Połączeniowy nawiązywanie połączenia (zestawienie obwodu wirtualnego) złudzenie istnienia obwodu jest realizowane za pomocą mechanizmów kontrolnych TCP zamykanie połączenia każde połączenie ma dokładnie dwa końce za pomocą połączenia możliwa jest transmisja w obie strony (full-duplex) przy okazji do danych da się dokleić informacje kontrolne połączenia są buforowane w sposób niewidoczny dla aplikacji (powód: narzuty enkapsulacji)
Sieci komputerowe 27 Transmission Control Protocol Niezawodny potwierdzenia odbioru (ang. positive acknowledgement) retransmisje kontrola przepływu danych suma kontrolna dla nagłówka i danych porządkowanie kolejności segmentów usuwanie segmentów zdublowanych
Sieci komputerowe 28 Transmission Control Protocol Co specyfikuje protokół TCP? format danych, procedury inicjalizacji i zamknięcia połączeń, procedury upewnienia się, że dane dotarły, sposób rozróżniania odbiorców, sposoby reagowania na błędy Czego protokół TCP nie specyfikuje? interfejsu programisty (API)
Sieci komputerowe 29 Nagłówek TCP Nagłówek ma rozmiar 20 bajtów + opcje długość (4) numer portu źródła (16) zarezerw. (6) suma kontrolna (16) numer sekwencyjny (32) numer potwierdzenia (32) flagi (6) opcje (?) dane numer portu przeznaczenia (16) rozmiar okna (16) wskaźnik ważności (16)
Sieci komputerowe 30 Flagi TCP SYN ACK FIN RST URG PSH synchronizacja numerów sekwencyjnych (ang. Initial Sequence Number ISN) pole potwierdzenia (ang. acknowledgment) zawiera aktualny numer potwierdzenia zakończenie (ang. finish) przesyłania danych zresetowanie (ang. reset) połączenia dane pilne (ang. urgent) począwszy od wskaźnika ważności przekazanie danych do aplikacji najszybciej jak to możliwe (ang. push)
Sieci komputerowe 31 Suma kontrolna Obliczanie sumy kontrolnej dla nagłówka, danych oraz pseudonagłówka adres źródła (32) adres przeznaczenia (32) nieużywane = 0 (8) protokół = 6 (8) długość segmentu TCP (16) Nagłówek Dane
Sieci komputerowe 32 Suma kontrolna Do czego służy jeszcze jedna suma kontrolna? warstwa 2: poprawność ramki, ew. korekta, warstwa 3: poprawność nagłówka pakietu, warstwa 4: poprawność pseudonagłówka, nagłówka segmentu oraz przesyłanych danych Pseudonagłówek pozwala na zweryfikowanie, czy ramka dostarczona przez warstwę 3 rzeczywiście jest adresowany do danego odbiorcy Uwaga: ten sposób obliczania sumy kontrolnej oznacza, że protokół warstwy 4 korzysta z danych warstwy 3, co nie do końca jest zgodne z modelem OSI
Sieci komputerowe 33 Opcje Maksymalny rozmiar segmentu (ang. Maximum Segment Size MSS) im większe segmenty tym wydajniejsze przesyłanie danych należy unikać fragmentacji pakietów IP duże segmenty mają niekorzystny wpływ np. na transmisje danych w czasie rzeczywistym Skalowanie okna Znacznik czasowy określanie RTT
Sieci komputerowe 34 Przykład połączenia Serwer tworzy gniazdo np. (tcp, *, 23) i oczekuje na połączenie od a (pasywne otwarcie) Serwer 123.45.67.89 (tcp, *, 23) Klient 12.34.56.78
Sieci komputerowe 35 Przykład połączenia Klient łączy się z em, otwierając połączenie poleceniem connect (aktywne otwarcie) connect(123.45.67.89:23) Serwer 123.45.67.89 (tcp, *, 23) Klient 12.34.56.78
Sieci komputerowe 36 Przykład połączenia Moduł TCP tworzy gniazdo a z efemerycznym numerem portu np. 1234 Serwer 123.45.67.89 (tcp, *, 23) Klient 12.34.56.78 (tcp, 12.34.56.78, 1234)
Sieci komputerowe 37 Przykład połączenia Serwer otrzymuje zgłoszenie od a Moduł TCP tworzy unikalną asocjację: (tcp, 123.45.67.89, 23, 12.34.56.78, 1234) Serwer 123.45.67.89 (tcp, 123.45.67.89, 23) Klient 12.34.56.78 (tcp, 12.34.56.78, 1234)
Sieci komputerowe 38 Schemat stanów TCP LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT CLOSE FIN» CLOSE FIN»»SYN+ACK ACK»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close typowe przejście a typowe przejście a przejście nietypowe timeout
Sieci komputerowe 39 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK»
Sieci komputerowe 40 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK»
Sieci komputerowe 41 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» LISTEN
Sieci komputerowe 42 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» LISTEN
Sieci komputerowe 43 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN n SYN SENT LISTEN
Sieci komputerowe 44 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n LISTEN
Sieci komputerowe 45 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n LISTEN
Sieci komputerowe 46 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n LISTEN
Sieci komputerowe 47 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n LISTEN SYN m + ACK SYN RCVD
Sieci komputerowe 48 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n SYN m + ACK LISTEN LISTEN
Sieci komputerowe 49 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n LISTEN SYN m + ACK LISTEN
Sieci komputerowe 50 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n LISTEN SYN m + ACK LISTEN
Sieci komputerowe 51 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n LISTEN SYN m + ACK LISTEN ACK
Sieci komputerowe 52 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n LISTEN SYN m + ACK LISTEN ACK
Sieci komputerowe 53 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n LISTEN SYN m + ACK ACK LISTEN
Sieci komputerowe 54 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n LISTEN SYN m + ACK ACK LISTEN
Sieci komputerowe 55 Nawiązanie połączenia LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n LISTEN SYN m + ACK ACK LISTEN
Sieci komputerowe 56 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout
Sieci komputerowe 57 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout
Sieci komputerowe 58 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN
Sieci komputerowe 59 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN
Sieci komputerowe 60 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN ACK CLOSE WAIT
Sieci komputerowe 61 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN ACK CLOSE WAIT
Sieci komputerowe 62 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN ACK CLOSE WAIT FIN WAIT 2
Sieci komputerowe 63 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN ACK CLOSE WAIT FIN WAIT 2
Sieci komputerowe 64 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN ACK CLOSE WAIT FIN WAIT 2 FIN LAST ACK
Sieci komputerowe 65 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN ACK CLOSE WAIT FIN WAIT 2 FIN LAST ACK
Sieci komputerowe 66 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN ACK CLOSE WAIT FIN WAIT 2 TIME WAIT ACK FIN LAST ACK
Sieci komputerowe 67 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN ACK CLOSE WAIT FIN WAIT 2 TIME WAIT FIN ACK LAST ACK
Sieci komputerowe 68 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN ACK CLOSE WAIT FIN WAIT 2 TIME WAIT FIN ACK LAST ACK
Sieci komputerowe 69 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN ACK CLOSE WAIT FIN WAIT 2 TIME WAIT FIN ACK LAST ACK
Sieci komputerowe 70 Zamknięcie połączenia CLOSE FIN»»FIN ACK» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT CLOSE WAIT CLOSE FIN» LAST ACK passive close timeout FIN WAIT 1 FIN ACK CLOSE WAIT FIN WAIT 2 TIME WAIT FIN ACK LAST ACK
Sieci komputerowe 71 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» LISTEN
Sieci komputerowe 72 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN n LISTEN
Sieci komputerowe 73 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n SYN m LISTEN
Sieci komputerowe 74 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n SYN m LISTEN SYN SENT
Sieci komputerowe 75 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n SYN m LISTEN SYN SENT
Sieci komputerowe 76 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n SYN m LISTEN SYN SENT SYN m, ACK n+1
Sieci komputerowe 77 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN n, ACK m+1 LISTEN SYN n SYN SENT SYN m SYN m, ACK n+1 SYN RCVD
Sieci komputerowe 78 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN RCVD SYN n SYN m SYN m, ACK n+1 SYN n, ACK m+1 LISTEN SYN SENT SYN RCVD
Sieci komputerowe 79 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN RCVD SYN n SYN m SYN m, ACK n+1 SYN n, ACK m+1 LISTEN SYN SENT SYN RCVD
Sieci komputerowe 80 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN RCVD SYN n SYN m SYN m, ACK n+1 SYN n, ACK m+1 LISTEN SYN SENT SYN RCVD
Sieci komputerowe 81 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN RCVD SYN n SYN m SYN m, ACK n+1 SYN n, ACK m+1 LISTEN SYN SENT SYN RCVD
Sieci komputerowe 82 Jednoczesne otwarcie LISTEN CLOSE CONNECT SYN» CLOSE»SYN SYN+ACK» LISTEN SYN RCVD»RST»SYN SYN+ACK» SEND SYN» SYN SENT»SYN+ACK ACK» SYN SENT SYN RCVD SYN n SYN m SYN m, ACK n+1 SYN n, ACK m+1 LISTEN SYN SENT SYN RCVD
Sieci komputerowe 83 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout host A host B
Sieci komputerowe 84 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout host A FIN n host B
Sieci komputerowe 85 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout host A FIN m FIN n host B FIN WAIT 1
Sieci komputerowe 86 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout host A host B FIN WAIT 1 FIN m FIN n FIN WAIT 1
Sieci komputerowe 87 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout FIN WAIT 1 host A host B FIN m FIN n FIN WAIT 1
Sieci komputerowe 88 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout host A FIN WAIT 1 ACK n+1 FIN m FIN n host B FIN WAIT 1
Sieci komputerowe 89 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout host A host B FIN n FIN WAIT 1 FIN m FIN WAIT 1 ACK n+1 CLOSING ACK m+1
Sieci komputerowe 90 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout FIN WAIT 1 host A FIN m FIN n host B FIN WAIT 1 CLOSING ACK n+1 ACK m+1 CLOSING
Sieci komputerowe 91 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout FIN WAIT 1 host A FIN m FIN n host B FIN WAIT 1 CLOSING ACK n+1 ACK m+1 CLOSING
Sieci komputerowe 92 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout FIN WAIT 1 host A FIN m FIN n host B FIN WAIT 1 CLOSING ACK n+1 ACK m+1 CLOSING TIME WAIT
Sieci komputerowe 93 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout FIN WAIT 1 host A FIN m FIN n host B FIN WAIT 1 CLOSING ACK n+1 ACK m+1 TIME WAIT CLOSING TIME WAIT
Sieci komputerowe 94 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout FIN WAIT 1 host A FIN m FIN n host B FIN WAIT 1 CLOSING ACK n+1 ACK m+1 TIME WAIT CLOSING TIME WAIT
Sieci komputerowe 95 Jednoczesne zamknięcie CLOSE FIN» active close FIN WAIT 1 FIN WAIT 2»FIN ACK»»FIN+ACK ACK»»FIN ACK» CLOSING TIME WAIT timeout FIN WAIT 1 host A FIN m FIN n host B FIN WAIT 1 CLOSING ACK n+1 ACK m+1 TIME WAIT CLOSING TIME WAIT
Sieci komputerowe 96 Przesyłanie danych Przesyłanie danych masowych przesuwane okna powolny start Przesyłanie danych interaktywnych algorytm Nagle a opóźnione potwierdzenie Eliminacja syndromu głupiego okna
Sieci komputerowe 97 Przesuwane okno Zapobiega przeciążeniu odbiorcy odbiorca określa ile danych jest w stanie przyjąć szybki nadawca musi poczekać, aż odbiorca otworzy dla niego okno Zasada działania ogłoszenie okna zamykanie (wysyłanie danych) otwieranie (odbieranie danych) kurczenie się (zabronione) Rozmiar okna przesyłany jest w każdym potwierdzeniu i określa stan zapełnienia bufora odbiorcy
Sieci komputerowe 98 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 okno 4096 nadawca SYN SYN + ACK, win 4096 ACK odbiorca
Sieci komputerowe 99 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 nadawca SYN SYN + ACK, win 4096 ACK 1 odbiorca 1:1024, ACK 1
Sieci komputerowe 100 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 nadawca SYN SYN + ACK, win 4096 ACK 1 odbiorca 1:1024, ACK 1 1025:2048, ACK 1
Sieci komputerowe 101 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 nadawca SYN SYN + ACK, win 4096 ACK 1 odbiorca 1:1024, ACK 1 1025:2048, ACK 1 2049:3072, ACK 1
Sieci komputerowe 102 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 okno 4096 nadawca SYN SYN + ACK, win 4096 ACK 1 odbiorca 1:1024, ACK 1 1025:2048, ACK 1 2049:3072, ACK 1 ACK 2049, win 4096
Sieci komputerowe 103 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 okno 3072 nadawca SYN SYN + ACK, win 4096 ACK 1 odbiorca 1:1024, ACK 1 1025:2048, ACK 1 2049:3072, ACK 1 ACK 2049, win 4096 ACK 3073, win 3072
Sieci komputerowe 104 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 nadawca SYN SYN + ACK, win 4096 ACK 1 odbiorca 1:1024, ACK 1 1025:2048, ACK 1 2049:3072, ACK 1 ACK 2049, win 4096 ACK 3073, win 3072 3073:4096, ACK 1
Sieci komputerowe 105 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 okno 4096 nadawca SYN + ACK, win 4096 ACK 1 odbiorca 1:1024, ACK 1 1025:2048, ACK 1 2049:3072, ACK 1 ACK 2049, win 4096 ACK 3073, win 3072 3073:4096, ACK 1 ACK 4097, win 4096
Sieci komputerowe 106 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 nadawca ACK 1 odbiorca 1:1024, ACK 1 1025:2048, ACK 1 2049:3072, ACK 1 ACK 2049, win 4096 ACK 3073, win 3072 3073:4096, ACK 1 ACK 4097, win 4096 4097:5120, ACK 1
Sieci komputerowe 107 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 nadawca odbiorca 1:1024, ACK 1 1025:2048, ACK 1 2049:3072, ACK 1 ACK 2049, win 4096 ACK 3073, win 3072 3073:4096, ACK 1 ACK 4097, win 4096 4097:5120, ACK 1 5121:6144, ACK 1
Sieci komputerowe 108 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 nadawca odbiorca 1025:2048, ACK 1 2049:3072, ACK 1 ACK 2049, win 4096 ACK 3073, win 3072 3073:4096, ACK 1 ACK 4097, win 4096 4097:5120, ACK 1 5121:6144, ACK 1 6145:7168, ACK 1
Sieci komputerowe 109 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 okno 4096 nadawca 2049:3072, ACK 1 ACK 2049, win 4096 ACK 3073, win 3072 odbiorca 3073:4096, ACK 1 ACK 4097, win 4096 4097:5120, ACK 1 5121:6144, ACK 1 6145:7168, ACK 1 ACK 6145, win 4096
Sieci komputerowe 110 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 nadawca odbiorca ACK 2049, win 4096 ACK 3073, win 3072 3073:4097, ACK 1 ACK 4097, win 4096 4097:5121, ACK 1 5121:6145, ACK 1 6145:7169, ACK 1 ACK 6145, win 4096 7169:8192, ACK 1
Sieci komputerowe 111 Przesuwane okno 1024 1024 1024 1024 1024 1024 1024 1024 nadawca ACK 3073, win 3072 odbiorca 3073:4097, ACK 1 ACK 4097, win 4096 4097:5121, ACK 1 5121:6145, ACK 1 6145:7169, ACK 1 ACK 6145, win 4096 7169:8193, ACK 1 ACK 8193, win 4096
Sieci komputerowe 112 Przesuwane okno Problem: okno o rozmiarze 0 możliwe jest zakleszczenie, gdy zginie ogłoszenie o niezerowym rozmiarze okna Rozwiązanie: nadawca co jakiś czas próbkuje zerowe okno Dane pilne (z ustawioną flagą URG) są wysyłane mimo zerowego rozmiaru okna tego typu dane są niejako poza głównym strumieniem transmisyjnym
Sieci komputerowe 113 Max. długość okna a przepustowość TCP Nadawca P= 64KB/(RTT + TT) Odbiorca 64KB Całe max okno 16bitów = 64K RTT TT Czas ACK, window 64K Opcja TCP Rozwiązanie: Skalowanie okna = mnożnik 16 bitowy = max okno 2 32
Sieci komputerowe 114 Powolny start Natychmiastowe zapełnienie całego okna może prowadzić do powstawania zatorów Nadawca określa okno przeciążenia cwnd (ang. congestion window) tj. ilość segmentów, które będzie wysyłał Powolny start kontrola przepływu przez nadawcę Wielkość okna kontrola przepływu przez odbiorcę Początkowo cwnd = 1 Zwiększanie cwnd o 1 po otrzymaniu ACK
Sieci komputerowe 115 Powolny start Przy stwierdzeniu przeciążenia (przekroczenie czasu oczekiwania na potwierdzenie) cwnd jest zmniejszane dwukrotnie (o ile cwnd > 1 segment) przy powtarzających się stratach cwnd maleje wykładniczo Następnie znowu każdy potwierdzony segment powoduje zwiększanie cwnd o 1 aż do momentu, gdy cwnd przyjmie wartość równą połowie wartości, przy której wystąpiło przeciążenie. Wtedy cwnd zaczyna rosnąć wolniej (jest zwiększane o 1 tylko wtedy, gdy wszystkie segmenty w oknie zostały potwierdzone).
Sieci komputerowe 116 Powolny start Liczba wysyłanych bajtów = Minimum { Sending window, Congestion window } Powolny start jest uaktywniany po każdym Timeout
Sieci komputerowe 117 Powolny start Congestion window Timeout 32 Próg 1 L 16 8 4 Próg 2 =1/2 L ½ L 2 4 6 8 10 Numer pakietu
Sieci komputerowe 118 Przesyłanie danych interaktywnych Opóźnione potwierdzenie Algorytm Nagle a Dla efektywności protokołu TCP kluczowe znaczenie ma możliwość wysyłania dużych bloków danych Kompromis pomiędzy czasem reakcji a efektywnością
Sieci komputerowe 119 Kto jest odpowiedzialny za wielkość bloków danych? Nadawca: wysyła znak po znaku Opóźnione potwierdzenie Nagle s algorythm Odbiorca: odbiera znak po znaku Silly window syndrome
Sieci komputerowe 120 Opóźnione potwierdzenie wyłączone włączone naciśnięcie klawisza A naciśnięcie klawisza A
Sieci komputerowe 121 Opóźnione potwierdzenie wyłączone włączone naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt
Sieci komputerowe 122 Opóźnione potwierdzenie wyłączone włączone naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt potwierdzenie bajta
Sieci komputerowe 123 Opóźnione potwierdzenie wyłączone włączone naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt potwierdzenie bajta echo echo
Sieci komputerowe 124 Opóźnione potwierdzenie wyłączone włączone naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt potwierdzenie bajta 1 bajt echo potwierdzenie + 1 bajt echo
Sieci komputerowe 125 Opóźnione potwierdzenie wyłączone włączone naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt potwierdzenie bajta echo 1 bajt potwierdzenie + 1 bajt echo potwierdzenie bajta
Sieci komputerowe 126 Opóźnione potwierdzenie wyłączone włączone naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt potwierdzenie bajta echo 1 bajt potwierdzenie + 1 bajt echo potwierdzenie bajta
Sieci komputerowe 127 Opóźnione potwierdzenie wyłączone włączone naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt potwierdzenie bajta echo 1 bajt potwierdzenie + 1 bajt echo potwierdzenie bajta potwierdzenie bajta
Sieci komputerowe 128 Algorytm Nagle a Zastosowanie: Nadawca wysyła dane w postaci pojedynczych bajtów (małych bloków). Algorytm: wyślij pierwszy bajt, oczekuj na potwierdzenie, wyślij zebrane bajty, Samoregulacja Oszczędność łącza, szczególnie dla wolnych sieci rozległych
Sieci komputerowe 129 Algorytm Nagle a naciśnięcie N naciśnięcie N szybkie łącze (LAN) wolne łącze (WAN) :~> rlogin :~> _ :~> rlogin :~> _
Sieci komputerowe 130 Algorytm Nagle a naciśnięcie N 1 bajt (N) naciśnięcie N 1 bajt (N) szybkie łącze (LAN) wolne łącze (WAN) :~> rlogin :~> _ :~> rlogin :~> _
Sieci komputerowe 131 Algorytm Nagle a szybkie łącze (LAN) naciśnięcie N 1 bajt (N) potwierdzenie (N) + echo (N) naciśnięcie N 1 bajt (N) wolne łącze (WAN) :~> rlogin :~> n_ :~> rlogin :~> _
Sieci komputerowe 132 Algorytm Nagle a szybkie łącze (LAN) naciśnięcie N naciśnięcie A 1 bajt (N) potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) naciśnięcie N naciśnięcie A 1 bajt (N) wolne łącze (WAN) :~> rlogin :~> n_ :~> rlogin :~> _
Sieci komputerowe 133 Algorytm Nagle a szybkie łącze (LAN) naciśnięcie N naciśnięcie A 1 bajt (N) potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) potwierdzenie (A) + echo (A) naciśnięcie N naciśnięcie A 1 bajt (N) potwierdzenie (N) + echo (N) wolne łącze (WAN) :~> rlogin :~> na_ :~> rlogin :~> _
Sieci komputerowe 134 Algorytm Nagle a szybkie łącze (LAN) naciśnięcie N naciśnięcie A naciśnięcie G 1 bajt (N) potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) potwierdzenie (A) + echo (A) potwierdzenie echa + 1 bajt (G) naciśnięcie N naciśnięcie A naciśnięcie G 1 bajt (N) potwierdzenie (N) + echo (N) wolne łącze (WAN) :~> rlogin :~> na_ :~> rlogin :~> n_
Sieci komputerowe 135 Algorytm Nagle a szybkie łącze (LAN) naciśnięcie N naciśnięcie A naciśnięcie G 1 bajt (N) potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) potwierdzenie (A) + echo (A) potwierdzenie echa + 1 bajt (G) potwierdzenie (G) + echo (G) naciśnięcie N 1 bajt (N) naciśnięcie A potwierdzenie (N) + echo (N) naciśnięcie G potwierdzenie echa + 2 bajty (AG) wolne łącze (WAN) :~> rlogin :~> nag_ :~> rlogin :~> n_
Sieci komputerowe 136 Algorytm Nagle a szybkie łącze (LAN) naciśnięcie N naciśnięcie A naciśnięcie G naciśnięcie L 1 bajt (N) potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) potwierdzenie (A) + echo (A) potwierdzenie echa + 1 bajt (G) potwierdzenie (G) + echo (G) potwierdzenie echa + 1 bajt (L) naciśnięcie N 1 bajt (N) naciśnięcie A potwierdzenie (N) + echo (N) naciśnięcie G potwierdzenie echa + 2 bajty (AG) naciśnięcie L wolne łącze (WAN) :~> rlogin :~> nag_ :~> rlogin :~> n_
Sieci komputerowe 137 Algorytm Nagle a szybkie łącze (LAN) naciśnięcie N naciśnięcie A naciśnięcie G naciśnięcie L 1 bajt (N) potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) potwierdzenie (A) + echo (A) potwierdzenie echa + 1 bajt (G) potwierdzenie (G) + echo (G) potwierdzenie echa + 1 bajt (L) potwierdzenie (L) + echo (L) naciśnięcie N 1 bajt (N) naciśnięcie A potwierdzenie (N) + echo (N) naciśnięcie G potwierdzenie echa + 2 bajty (AG) naciśnięcie L wolne łącze (WAN) :~> rlogin :~> nagl_ :~> rlogin :~> n_
Sieci komputerowe 138 Algorytm Nagle a szybkie łącze (LAN) naciśnięcie N naciśnięcie A naciśnięcie G naciśnięcie L naciśnięcie E 1 bajt (N) potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) potwierdzenie (A) + echo (A) potwierdzenie echa + 1 bajt (G) potwierdzenie (G) + echo (G) potwierdzenie echa + 1 bajt (L) potwierdzenie (L) + echo (L) potwierdzenie echa + 1 bajt (E) naciśnięcie N 1 bajt (N) naciśnięcie A potwierdzenie (N) + echo (N) naciśnięcie G potwierdzenie echa + 2 bajty (AG) naciśnięcie L potwierdzenie (AG) + echo (AG) naciśnięcie E wolne łącze (WAN) :~> rlogin :~> nagl_ :~> rlogin :~> n_
Sieci komputerowe 139 Algorytm Nagle a szybkie łącze (LAN) naciśnięcie N naciśnięcie A naciśnięcie G naciśnięcie L naciśnięcie E 1 bajt (N) potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) potwierdzenie (A) + echo (A) potwierdzenie echa + 1 bajt (G) potwierdzenie (G) + echo (G) potwierdzenie echa + 1 bajt (L) potwierdzenie (L) + echo (L) potwierdzenie echa + 1 bajt (E) naciśnięcie N 1 bajt (N) naciśnięcie A potwierdzenie (N) + echo (N) naciśnięcie G potwierdzenie echa + 2 bajty (AG) naciśnięcie L potwierdzenie (AG) + echo (AG) naciśnięcie E wolne łącze (WAN) potwierdzenie (E) + echo (E) :~> rlogin :~> nagle_ :~> rlogin :~> nag_
Sieci komputerowe 140 Algorytm Nagle a szybkie łącze (LAN) naciśnięcie N naciśnięcie A naciśnięcie G naciśnięcie L naciśnięcie E 1 bajt (N) potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) potwierdzenie (A) + echo (A) potwierdzenie echa + 1 bajt (G) potwierdzenie (G) + echo (G) potwierdzenie echa + 1 bajt (L) potwierdzenie (L) + echo (L) potwierdzenie echa + 1 bajt (E) naciśnięcie N 1 bajt (N) naciśnięcie A potwierdzenie (N) + echo (N) naciśnięcie G potwierdzenie echa + 2 bajty (AG) naciśnięcie L potwierdzenie (AG) + echo (AG) naciśnięcie E wolne łącze (WAN) potwierdzenie (E) + echo (E) potwierdzenie echa + 2 bajty (LE) :~> rlogin :~> nagle_ :~> rlogin :~> nag_
Sieci komputerowe 141 Syndrom głupiego okna Problem: Odbiorca odczytuje bufor bajt po bajcie (małymi blokami) Odbiorca ogłasza niewielkie okna zamiast poczekać na opróżnienie bufora Nadawca wysyła niewielkie segmenty, zamiast większych bloków danych danych
Sieci komputerowe 142 Syndrom Głupiego Okna Pełny bufor odbiorcy Aplikacja odczytuje 1 B Miejsce na jeden bajt Okno zostaje zwiększone o 1 B Przychodzi wiadomość z 1B
Sieci komputerowe 143 Syndrom głupiego okna Rozwiązanie: Odbiorca czeka z otwarciem okna, aż możliwe będzie powiększenie go o MSS lub o połowę rozmiaru bufora odbiorcy Clark s solution
Sieci komputerowe 144 Clark+ Nagle Nadawca transmituje dane, gdy może wysłać: cały segment danych MSS co najmniej połowę rozmiaru bufora odbiorcy dowolną ilość danych pod warunkiem, że potwierdzone zostały wszystkie wysłane segmenty (przy włączonym alg. Nagle a)
Sieci komputerowe 145 Zegary TCP Retransmission Timer zegar odmierzający Timeout; czas oczekiwania jest zmienny (retransmisja z adaptacją) Persistence Timer Keepalive Timer zapobiega zakleszczeniu w sytuacji zgubienia pakietu zwiększającego okno pozwala na sprawdzenie aktywności drugiej strony połączenia
Sieci komputerowe 146 Retransmission Timer RTT = α RTT stare + (1-α) M M czas otrzymania potwierdzenia ( nowe RTT) α = 7/8 Sposób 1 Prawdopodobieństwo 0.3 0.2 0.1 Timeout = β RTT, gdzie zalecane β=2 10 20 30 [ms] Round Trip Time Sposób 2 (alg. Jacobsona) D= α D + (1- α) RTT M Timeout = RTT + 4 D
Sieci komputerowe 147 Retransmission Timer cd. Dynamiczna estymacja RTT jest przeprowadzana wg. Algorytmu Karna W sytuacji braku potwierdzenia nie jest zmieniane RTT lecz zwiększa się Timeout 2 dwa razy (zazwyczaj). Ponowne wysłanie może spowodować niejednoznaczność, które ACK odpowiada ostatniemu wysłaniu. Dlatego nie zmienia się RTT na podstawie czasów zmierzonych dla retransmitowanych segmentów.
Sieci komputerowe 148 Persistence Timer nadawca odbiorca Oczekiwanie na okno ACK, window 0 ACK, window n Przekroczenie Persistence Timer zapytanie o okno
Sieci komputerowe 149 Zastosowania Przesyłanie danych wrażliwych na gubienie pakietów dane interaktywne: Telnet, SSH, mysz w X-Windows itp. dane masowe: FTP, Mail, News itp. Nie pozwala na transmisję grupową (ang. multicasting) dokładnie dwa końce połączenia
Sieci komputerowe 150 User Datagram Protocol Bardzo prosty bezpołączeniowy protokół warstwy transportowej szybki(małe narzuty) zawodny nie zawiera żadnych komunikatów potwierdzających przyjęcie pakietu bądź informujących o jego zagubieniu, nie gwarantuje, że dane zostaną dostarczone do procesu docelowego w kolejności wysłania, pakiety danych mogą być zduplikowane, nie zawiera żadnego mechanizmu kontroli prędkości przesyłania danych pomiędzy hostami. Proces docelowy musi sobie radzić ze wszystkimi wymienionymi zjawiskami.
Sieci komputerowe 151 Nagłówek UDP Nagłówek ma rozmiar 8 bajtów Suma kontrolna jest nieobowiązkowa (0 = brak sumy) gdyby suma po wyliczeniu wyniosła 0, zapisuje się ją jako 0xFFFF (stosowany jest kod U1) numer portu źródła (16 b) długość datagramu (16 b) numer portu przeznaczenia (16 b) suma kontrolna (16 b) dane
Sieci komputerowe 152 Suma kontrolna Obliczanie sumy kontrolnej dla nagłówka, danych oraz pseudonagłówka adres źródła (32) adres przeznaczenia (32) nieużywane = 0 (8) protokół = 17 (8) długość datagramu UDP (16) Nagłówek Dane
Sieci komputerowe 153 Zastosowania Transmisje grupowe Transmisje w czasie rzeczywistym Przesyłanie danych mniej wrażliwych na gubienie pakietów Przesyłanie w sieci LAN NFS, DNS Uwaga: Częstym błędem programistów jest testowanie programów wykorzystujących UDP tylko w sieci lokalnej (o niskim stopniu zawodności). Programy takie uruchomione w sieci rozległej mogą zachowywać się zupełnie inaczej!
Sieci komputerowe 154 Literatura W.R. Stevens Biblia TCP/IP, t. 1, 2 W.R. Stevens Programowanie zastosowań sieciowych w systemie UNIX D. Comer TCP/IP t.2 www.iana.org/assignments/port-numbers lub RFC 1700 RFC 2001, 2018, 2581, 2582, 3042