Warstwa transportowa. Warstwa transportowa. Enkapsulacja. Zapewnienie niezawodnego przesyłania danych /wg ISO/ Transmisja bezpołączeniowa

Podobne dokumenty
Sieci komputerowe 1 DSRG

Protokoły sieciowe - TCP/IP

SEGMENT TCP CZ. II. Suma kontrolna (ang. Checksum) liczona dla danych jak i nagłówka, weryfikowana po stronie odbiorczej

Sieci komputerowe Warstwa transportowa

Sieci komputerowe. Zajęcia 3 c.d. Warstwa transportu, protokoły UDP, ICMP

Klient-Serwer Komunikacja przy pomocy gniazd

Sieci komputerowe - Protokoły warstwy transportowej

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ

PROTOKOŁY WARSTWY TRANSPORTOWEJ

Programowanie współbieżne i rozproszone

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Sieci komputerowe. Wykład 7: Transport: protokół TCP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Przesyłania danych przez protokół TCP/IP

Sieci komputerowe - warstwa transportowa

Iteracyjny serwer TCP i aplikacja UDP

Sieci Komputerowe Modele warstwowe sieci

Podstawy Transmisji Danych. Wykład IV. Protokół IPV4. Sieci WAN to połączenia pomiędzy sieciami LAN

Sieci komputerowe. Wykład 5: Warstwa transportowa: TCP i UDP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Model OSI. mgr inż. Krzysztof Szałajko

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej

Stos protokołów TCP/IP (ang. Transmission Control Protocol/Internet Protocol)

Programowanie Sieciowe 1

Warstwa transportowa. mgr inż. Krzysztof Szałajko

Unicast jeden nadawca i jeden odbiorca Broadcast jeden nadawca przesyła do wszystkich Multicast jeden nadawca i wielu (podzbiór wszystkich) odbiorców

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Sieci komputerowe. Protokoły warstwy transportowej. Wydział Inżynierii Metali i Informatyki Przemysłowej. dr inż. Andrzej Opaliński.

Programowanie Sieciowe 1

TCP/IP formaty ramek, datagramów, pakietów...

Gniazda UDP. Bartłomiej Świercz. Łódź, 3 kwietnia Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda UDP

Gniazda surowe. Bartłomiej Świercz. Łódź,9maja2006. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda surowe

Programowanie sieciowe

Gniazda BSD. Procesy w środowisku sieciowym. Gniazda podstawowe funkcje dla serwera. Gniazda podstawowe funkcje dla klienta

Podstawowe protokoły transportowe stosowane w sieciach IP cz.1

Podstawowe typy serwerów

Programowanie przy użyciu gniazdek

Warstwa transportowa

Sieci Komputerowe. Wykład 1: TCP/IP i adresowanie w sieci Internet

Sieci Komputerowe Protokół TCP

MODEL OSI A INTERNET

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

Transport. część 1: niezawodny transport. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

Programowanie sieciowe

Zestaw ten opiera się na pakietach co oznacza, że dane podczas wysyłania są dzielone na niewielkie porcje. Wojciech Śleziak

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Transport. część 3: kontrola przeciążenia. Sieci komputerowe. Wykład 8. Marcin Bieńkowski

pasja-informatyki.pl

Sieci komputerowe w sterowaniu informacje ogólne, model TCP/IP, protokoły warstwy internetowej i sieciowej

Protokoły wspomagające. Mikołaj Leszczuk

Podstawowe protokoły transportowe stosowane w sieciach IP cz.2

Akademia Techniczno-Humanistyczna w Bielsku-Białej

Transport. część 3: kontrola przeciążenia. Sieci komputerowe. Wykład 8. Marcin Bieńkowski

Połączenie logiczne Zestawienie połączenia Zerwanie połączenia Niezawodne Np. TCP

Protokół IP. III warstwa modelu OSI (sieciowa) Pakowanie i adresowanie przesyłanych danych RFC 791 Pakiet składa się z:

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ

Transmisja bezpołączeniowa i połączeniowa

Gniazda BSD implementacja w C#

Zarządzanie ruchem w sieci IP. Komunikat ICMP. Internet Control Message Protocol DSRG DSRG. DSRG Warstwa sieciowa DSRG. Protokół sterujący

Komunikacja sieciowa - interfejs gniazd

Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998

Architektura INTERNET

Dr Michał Tanaś(

Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark

Transport. część 3: kontrola przeciążenia. Sieci komputerowe. Wykład 8. Marcin Bieńkowski

Selektywne powtarzanie (SP)

1. Model klient-serwer

ISO/OSI TCP/IP SIECI KOMPUTEROWE

Sieci komputerowe Mechanizmy sterowania przebiegiem sesji TCP w Internecie

Plan całości wykładu 3-1

Laboratorium 6.7.2: Śledzenie pakietów ICMP

Wybrane działy Informatyki Stosowanej

Instytut Teleinformatyki

UDP vs TCP. Autor: Marcin Koczara IV FDS

Projektowanie oprogramowania systemów KOMUNIKACJA SIECIOWA I SYSTEMY RPC

Tryb bezpołączeniowy (datagramowy)

Stos TCP/IP Warstwa transportowa Warstwa aplikacji cz.1

5. Model komunikujących się procesów, komunikaty

Konfiguracja sieci, podstawy protokołów IP, TCP, UDP, rodzaje transmisji w sieciach teleinformatycznych

Gniazda BSD. komunikacja bezpołączeniowa

Enkapsulacja RARP DANE TYP PREAMBUŁA SFD ADRES DOCELOWY ADRES ŹRÓDŁOWY TYP SUMA KONTROLNA 2 B 2 B 1 B 1 B 2 B N B N B N B N B Typ: 0x0835 Ramka RARP T

Protokół TCP (RFC 793)

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ ADRESACJA W SIECIACH IP. WSTĘP DO SIECI INTERNET Kraków, dn. 24 października 2016r.

Sieci komputerowe wykłady Protokoły TCP i UDP. Adresowanie komunikatów. Adresowanie komunikatów c.d. Porty protokołów. Porty protokołów c.d.

Plan wykładu. Warstwa sieci. Po co adresacja w warstwie sieci? Warstwa sieci

Sieci Komputerowe i Technologie Internetowe (SKiTI)

Adresy w sieciach komputerowych

Sieci komputerowe - Wstęp do intersieci, protokół IPv4

Protokoły internetowe

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

System operacyjny UNIX Internet. mgr Michał Popławski, WFAiIS

1 Moduł Diagnostyki Sieci

Model sieci OSI, protokoły sieciowe, adresy IP

Bazy Danych i Usługi Sieciowe

SSL (Secure Socket Layer)

Plan wykładu. Warstwa sieci. Po co adresacja w warstwie sieci? Warstwa sieci

Warstwy i funkcje modelu ISO/OSI

Warstwa sieciowa. Model OSI Model TCP/IP. Aplikacji. Aplikacji. Prezentacji. Sesji. Transportowa. Transportowa

Podstawy sieci komputerowych

Transkrypt:

Warstwa transportowa Warstwa 4 modelu OSI Warstwa 3 modelu TCP/IP warstwa aplikacji warstwa prezentacji warstwa sesji warstwa transportowa warstwa sieci warstwa łącza danych warstwa fizyczna warstwa aplikacji API API API warstwa transportowa warstwa sieci warstwa łącza Warstwa transportowa Enkapsulacja 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 nagłówek ramki nagłówek Ethernet nagłówek pakietu nagłówek IP nagłówek w. transportowej dane w. trans. dane pakietu dane ramki nagłówek TCP o g o n 14 B 20 B 20 B dane TCP dane pakietu dane ramki 4 B

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: nagłówek Ethernet nagłówek IP nagłówek TCP o g o n Rozmiar segmentu TCP 1 B Narzut nagłówków 5800% Wymagane pasmo dla sieci ~ 3,8 Mb/s 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 nagłówek Ethernet nagłówek IP nagłówek TCP dane (1460B) dane (58 B) o g o n 58 B 1460 B 100% ~ 4% 128 kb/s ~ 66 kb/s Port: abstrakcyjny punkt docelowy identyfikowany za pomocą dodatniej liczby całkowitej Porty Multipleksacja / demultipleksacja segmentów Proces B Proces A Proces C Proces D Port 1 Port 2 Port 3 Port 4 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ść! Protokół warstwy 4 Protokół warstwy 3 Numery portów dla różnych protokołów warstwy 4 mogą się powtarzać.

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 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 Porty Porty a połączenia Możliwe jest więcej, niż jedno połączenie na port... np. trudno sobie wyobrazić, by SMTP zmieniał port dla każdego połączenia 100.100.100.100 (1029) 200.200.200.200 (80) SERWER 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ę. 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)

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) socket bind listen accept connect send[to] recv[from] Gniazda BSD 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. Gniazda BSD 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_SEQPET warstwa protokół gniazdo kanałowa surowe IPIMP 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

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. Gniazda BSD socket tworzy gniazdo; serw./kli. bind 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. Deskryptor Rozmiar Zero lub kolejki kod gniazda błędu żądań połączenia maks. 5 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) 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)

Użycie funkcji interfejsu gniazd połączeniowy Użycie funkcji interfejsu gniazd bezpołączeniowy socket bind socket bind listen accept blokuje oczekując na zgłoszenie recv send ustanowienie połączenia dane - żądanie dane - odpowiedź socket connect send recv recvfrom blokuje aż do otrzymania danych przetwarza dane sendto dane - żądanie dane - odpowiedź socket bind sendto recvfrom blokuje aż do otrzymania danych przetwarza dane Interfejs wysokopoziomowy Rodzaje protokołów Serwer import java.net.*; import java.io.*; [...] ServerSocket s_s = new ServerSocket(port); Klient import java.net.*; import java.io.*; [...] Socket s = new Socket(s_ip_addr,s_port); Połączeniowy nawiązywanie połączenia transmisja danych zamykanie połączenia Większe możliwości (zapewnienie, że dane dotrą do celu itp.) [...] Socket s = s_s.accept(); OuptutStream out = s.getoutputstream(); InputStream in = s.getinputstream(); [...] [...] OuptutStream out = s.getoutputstream(); InputStream in = s.getinputstream(); [...] Bezpołączeniowy tylko transmisja... Mniejsze narzuty na informacje kontrolne

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ę 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) 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 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)

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) SYN RST URG PSH Flagi TCP 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) Suma kontrolna Obliczanie sumy kontrolnej dla nagłówka, danych oraz pseudonagłówka nieużywane = 0 (8) adres źródła (32) adres przeznaczenia (32) protokół = 6 (8) Nagłówek Dane długość segmentu TCP (16) 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

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 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 Przykład połączenia Klient łączy się z em, otwierając połączenie poleceniem connect (aktywne otwarcie) Przykład połączenia Moduł TCP tworzy gniazdo a z efemerycznym numerem portu np. 1234 connect(123.45.67.89:23) Serwer 123.45.67.89 Klient 12.34.56.78 Serwer 123.45.67.89 Klient 12.34.56.78 (tcp, *, 23) (tcp, *, 23) (tcp, 12.34.56.78, 1234)

Przykład połączenia Schemat stanów TCP 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)»+» typowe przejście a typowe przejście a przejście nietypowe WAIT passive close Nawiązanie połączenia Nawiązanie połączenia

Nawiązanie połączenia Nawiązanie połączenia Nawiązanie połączenia Nawiązanie połączenia

Nawiązanie połączenia Nawiązanie połączenia Nawiązanie połączenia Nawiązanie połączenia SYN m + SYN m +

Nawiązanie połączenia Nawiązanie połączenia SYN m + SYN m + Nawiązanie połączenia Nawiązanie połączenia SYN m + SYN m +

Nawiązanie połączenia Nawiązanie połączenia SYN m + SYN m + Nawiązanie połączenia Zamknięcie połączenia»+» WAIT passive close SYN m +

Zamknięcie połączenia Zamknięcie połączenia»+» WAIT passive close»+» WAIT passive close Zamknięcie połączenia Zamknięcie połączenia»+» WAIT passive close»+» WAIT passive close WAIT

Zamknięcie połączenia Zamknięcie połączenia»+» WAIT passive close»+» WAIT passive close WAIT WAIT Zamknięcie połączenia Zamknięcie połączenia»+» WAIT passive close»+» WAIT passive close WAIT WAIT

Zamknięcie połączenia Zamknięcie połączenia»+» WAIT passive close»+» WAIT passive close WAIT WAIT Zamknięcie połączenia Zamknięcie połączenia»+» WAIT passive close»+» WAIT passive close WAIT WAIT

Zamknięcie połączenia Zamknięcie połączenia»+» WAIT passive close»+» WAIT passive close WAIT WAIT Jednoczesne otwarcie Jednoczesne otwarcie

Jednoczesne otwarcie Jednoczesne otwarcie SYN m SYN m Jednoczesne otwarcie Jednoczesne otwarcie SYN m SYN m SYN m, n+1

Jednoczesne otwarcie Jednoczesne otwarcie, m+1 SYN m SYN m, n+1 SYN m SYN m, n+1, m+1 Jednoczesne otwarcie Jednoczesne otwarcie SYN m SYN m SYN m, n+1 SYN m, n+1, m+1, m+1

Jednoczesne otwarcie Jednoczesne otwarcie SYN m SYN m SYN m, n+1 SYN m, n+1, m+1, m+1 Jednoczesne zamknięcie Jednoczesne zamknięcie»+»»+» host A host B host A n host B

Jednoczesne zamknięcie Jednoczesne zamknięcie»+»»+» host A host B host A host B m n m n Jednoczesne zamknięcie Jednoczesne zamknięcie»+»»+» host A host B host A host B m n n+1 m n

Jednoczesne zamknięcie Jednoczesne zamknięcie»+»»+» host A host B n m n+1 m+1 host A m n n+1 m+1 host B Jednoczesne zamknięcie Jednoczesne zamknięcie»+»»+» host A host B host A host B m n m n n+1 m+1 n+1 m+1

Jednoczesne zamknięcie Jednoczesne zamknięcie»+»»+» host A host B host A host B m n m n n+1 m+1 n+1 m+1 Jednoczesne zamknięcie Przesyłanie danych»+» host A n m host B Przesyłanie danych masowych przesuwane okna powolny start Przesyłanie danych interaktywnych algorytm Nagle a opóźnione potwierdzenie Eliminacja syndromu głupiego okna n+1 m+1

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) Przesuwane okno okno 4096 nadawca odbiorca SYN SYN +, win 4096 Rozmiar okna przesyłany jest w każdym potwierdzeniu i określa stan zapełnienia bufora odbiorcy Przesuwane okno Przesuwane okno nadawca SYN odbiorca nadawca SYN odbiorca SYN +, win 4096 SYN +, win 4096 1 1 1:1024, 1 1:1024, 1 1025:2048, 1

Przesuwane okno Przesuwane okno okno 4096 nadawca SYN odbiorca nadawca SYN odbiorca SYN +, win 4096 SYN +, win 4096 1 1 1:1024, 1 1:1024, 1 1025:2048, 1 1025:2048, 1 2049:3072, 1 2049:3072, 1 2049, win 4096 Przesuwane okno Przesuwane okno okno 3072 nadawca SYN odbiorca nadawca SYN odbiorca SYN +, win 4096 SYN +, win 4096 1 1 1:1024, 1 1:1024, 1 1025:2048, 1 1025:2048, 1 2049:3072, 1 2049:3072, 1 2049, win 4096 2049, win 4096 3073, win 3072 3073, win 3072 3073:4096, 1

Przesuwane okno Przesuwane okno okno 4096 nadawca odbiorca nadawca odbiorca SYN +, win 4096 1 1 1:1024, 1 1:1024, 1 1025:2048, 1 1025:2048, 1 2049:3072, 1 2049:3072, 1 2049, win 4096 2049, win 4096 3073, win 3072 3073, win 3072 3073:4096, 1 3073:4096, 1 4097, win 4096 4097, win 4096 4097:5120, 1 Przesuwane okno Przesuwane okno nadawca odbiorca nadawca odbiorca 1:1024, 1 1025:2048, 1 2049:3072, 1 2049, win 4096 3073, win 3072 3073:4096, 1 4097, win 4096 4097:5120, 1 5121:6144, 1 1025:2048, 1 2049:3072, 1 2049, win 4096 3073, win 3072 3073:4096, 1 4097, win 4096 4097:5120, 1 5121:6144, 1 6145:7168, 1

Przesuwane okno Przesuwane okno okno 4096 nadawca odbiorca nadawca odbiorca 2049:3072, 1 2049, win 4096 3073, win 3072 3073:4096, 1 4097, win 4096 4097:5120, 1 5121:6144, 1 6145:7168, 1 6145, win 4096 2049, win 4096 3073, win 3072 3073:4097, 1 4097, win 4096 4097:5121, 1 5121:6145, 1 6145:7169, 1 6145, win 4096 7169:8192, 1 Przesuwane okno nadawca odbiorca 3073, win 3072 3073:4097, 1 4097, win 4096 4097:5121, 1 5121:6145, 1 6145:7169, 1 6145, win 4096 7169:8193, 1 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 8193, win 4096

64KB Całe max okno 16bitów = 64K Czas Opcja TCP Max. długość okna a przepustowość TCP Nadawca RTT P= 64KB/(RTT + TT), window 64K Odbiorca TT 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 Rozwiązanie: Skalowanie okna = mnożnik 16 bitowy = max okno 2 32 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). Powolny start Liczba wysyłanych bajtów = Minimum { Sending window, Congestion window } Powolny start jest uaktywniany po każdym Timeout

Congestion window 32 Powolny start Timeout Próg 1 L Przesyłanie danych interaktywnych Opóźnione potwierdzenie Algorytm Nagle a 16 8 4 Próg 2 =1/2 L ½ L 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ą 2 4 6 8 10 Numer pakietu Kto jest odpowiedzialny za wielkość bloków danych? Nadawca: wysyła znak po znaku Opóźnione potwierdzenie Nagle s algorythm naciśnięcie klawisza A Opóźnione potwierdzenie wyłączone naciśnięcie klawisza A włączone Odbiorca: odbiera znak po znaku Silly window syndrome

Opóźnione potwierdzenie Opóźnione potwierdzenie wyłączone włączone wyłączone włączone naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt potwierdzenie bajta Opóźnione potwierdzenie Opóźnione potwierdzenie wyłączone włączone wyłączone włączone naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt potwierdzenie bajta potwierdzenie bajta echo echo 1 bajt echo potwierdzenie + 1 bajt echo

Opóźnione potwierdzenie Opóźnione potwierdzenie wyłączone włączone wyłączone włączone naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt naciśnięcie klawisza A 1 bajt potwierdzenie bajta potwierdzenie bajta echo 1 bajt potwierdzenie + 1 bajt echo echo 1 bajt potwierdzenie + 1 bajt echo potwierdzenie bajta potwierdzenie bajta Opóźnione potwierdzenie Algorytm Nagle a naciśnięcie klawisza A wyłączone włączone Zastosowanie: Nadawca wysyła dane w postaci pojedynczych bajtów (małych bloków). Algorytm: 1 bajt potwierdzenie bajta naciśnięcie klawisza A 1 bajt echo 1 bajt potwierdzenie + 1 bajt potwierdzenie bajta potwierdzenie bajta echo wyślij pierwszy bajt, oczekuj na potwierdzenie, wyślij zebrane bajty, Samoregulacja Oszczędność łącza, szczególnie dla wolnych sieci rozległych

Algorytm Nagle a Algorytm Nagle a szybkie łącze (LAN) wolne łącze (WAN) szybkie łącze (LAN) wolne łącze (WAN) :~> rlogin :~> _ :~> rlogin :~> _ :~> rlogin :~> _ :~> rlogin :~> _ Algorytm Nagle a Algorytm Nagle a szybkie łącze (LAN) potwierdzenie (N) + echo (N) wolne łącze (WAN) szybkie łącze (LAN) naciśnięcie A potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) naciśnięcie A wolne łącze (WAN) :~> rlogin :~> n_ :~> rlogin :~> _ :~> rlogin :~> n_ :~> rlogin :~> _

Algorytm Nagle a Algorytm Nagle a szybkie łącze (LAN) naciśnięcie A potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) potwierdzenie (A) + echo (A) naciśnięcie A potwierdzenie (N) + echo (N) wolne łącze (WAN) szybkie łącze (LAN) naciśnięcie A naciśnięcie G potwierdzenie (N) + echo (N) potwierdzenie echa + 1 bajt (A) potwierdzenie (A) + echo (A) potwierdzenie echa + 1 bajt (G) naciśnięcie A naciśnięcie G potwierdzenie (N) + echo (N) wolne łącze (WAN) :~> rlogin :~> na_ :~> rlogin :~> _ :~> rlogin :~> na_ :~> rlogin :~> n_ Algorytm Nagle a Algorytm Nagle a szybkie łącze (LAN) naciśnięcie A naciśnięcie G 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 A potwierdzenie (N) + echo (N) naciśnięcie G potwierdzenie echa + 2 bajty (AG) wolne łącze (WAN) szybkie łącze (LAN) naciśnięcie A naciśnięcie G naciśnięcie L 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 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_ :~> rlogin :~> nag_ :~> rlogin :~> n_

Algorytm Nagle a Algorytm Nagle a szybkie łącze (LAN) naciśnięcie A naciśnięcie G naciśnięcie L 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 A potwierdzenie (N) + echo (N) naciśnięcie G potwierdzenie echa + 2 bajty (AG) naciśnięcie L wolne łącze (WAN) szybkie łącze (LAN) naciśnięcie A naciśnięcie G naciśnięcie L naciśnięcie E 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 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_ :~> rlogin :~> nagl_ :~> rlogin :~> n_ Algorytm Nagle a Algorytm Nagle a szybkie łącze (LAN) naciśnięcie A naciśnięcie G naciśnięcie L naciśnięcie E 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 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) szybkie łącze (LAN) naciśnięcie A naciśnięcie G naciśnięcie L naciśnięcie E 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 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 (E) + echo (E) potwierdzenie echa + 2 bajty (LE) :~> rlogin :~> nagle_ :~> rlogin :~> nag_ :~> rlogin :~> nagle_ :~> rlogin :~> nag_

Problem: Syndrom głupiego okna Odbiorca odczytuje bufor bajt po bajcie (małymi blokami) Syndrom Głupiego Okna Pełny bufor odbiorcy Aplikacja odczytuje 1 B Odbiorca ogłasza niewielkie okna zamiast poczekać na opróżnienie bufora Miejsce na jeden bajt Okno zostaje zwiększone o 1 B Nadawca wysyła niewielkie segmenty, zamiast większych bloków danych danych Przychodzi wiadomość z 1B 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+ 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) Clark s solution

Zegary TCP Retransmission Timer Retransmission Timer Persistence Timer zegar odmierzający Timeout; czas oczekiwania jest zmienny (retransmisja z adaptacją) zapobiega zakleszczeniu w sytuacji zgubienia pakietu zwiększającego okno RTT = α RTT stare + (1-α) M M czas otrzymania potwierdzenia ( nowe RTT) α = 7/8 Sposób 1 Prawdopodobieństwo 0.3 0.2 0.1 Keepalive Timer pozwala na sprawdzenie aktywności drugiej strony połączenia Timeout = β RTT, gdzie zalecane β=2 Sposób 2 (alg. Jacobsona) 10 20 30 [ms] Round Trip Time D= α D + (1- α) RTT M Timeout = RTT + 4 D Retransmission Timer cd. Persistence Timer Dynamiczna estymacja RTT jest przeprowadzana wg. Algorytmu Karna nadawca odbiorca 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 odpowiada ostatniemu wysłaniu. Dlatego nie zmienia się RTT na podstawie czasów zmierzonych dla retransmitowanych segmentów. Oczekiwanie na okno Przekroczenie Persistence Timer, window 0 zapytanie o okno, window n

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 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. 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) dane numer portu przeznaczenia (16 b) suma kontrolna (16 b) Suma kontrolna Obliczanie sumy kontrolnej dla nagłówka, danych oraz pseudonagłówka nieużywane = 0 (8) adres źródła (32) adres przeznaczenia (32) protokół = 17 (8) Nagłówek Dane długość datagramu UDP (16)

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! 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