3-1. network data link physical. application transport. network data link physical 3-3. network data link physical. application transport

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

Warstwa transportu. Mapa wykładu

Mapa wykładu. Poczta elektroniczna

Selektywne powtarzanie (SP)

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

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. Wykład 5: Warstwa transportowa: TCP i UDP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Programowanie współbieżne i rozproszone

Mapa wykładu. 2.6 Poczta elektroniczna. 2.7 FTP 2.8 Dystrybucja zawartości. 2.9 Dzielenie plików P2P SMTP, POP3, IMAP

Sieci komputerowe - Protokoły warstwy transportowej

Klient-Serwer Komunikacja przy pomocy gniazd

Protokoły sieciowe - TCP/IP

Przykłady interfejsu TCP i UDP w Javie

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

Selektywne powtarzanie (SP)

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

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Sieci komputerowe - warstwa transportowa

Warstwa transportowa. mgr inż. Krzysztof Szałajko

Wykład 4: Protokoły TCP/UDP i usługi sieciowe. A. Kisiel,Protokoły TCP/UDP i usługi sieciowe

PROTOKOŁY WARSTWY TRANSPORTOWEJ

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

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

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

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

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

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

Przesyłania danych przez protokół TCP/IP

Dr Michał Tanaś(

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

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

pasja-informatyki.pl

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

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

Warstwa transportowa

Podstawowe typy serwerów

Stos TCP/IP Warstwa transportowa Warstwa aplikacji cz.1

Model OSI. mgr inż. Krzysztof Szałajko

Protokoły wspomagające. Mikołaj Leszczuk

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

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

Komunikacja z użyciem gniazd aplikacje klient-serwer

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ół IP. III warstwa modelu OSI (sieciowa) Pakowanie i adresowanie przesyłanych danych RFC 791 Pakiet składa się z:

Skąd dostać adres? Metody uzyskiwania adresów IP. Statycznie RARP. Część sieciowa. Część hosta

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

Wybrane działy Informatyki Stosowanej

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

Adresy URL. Zaawansowane technologie Javy 2019

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

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

Programowanie sieciowe

Aplikacja wielowątkowa prosty komunikator

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

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

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

Architektura INTERNET

Aby lepiej zrozumieć działanie adresów przedstawmy uproszczony schemat pakietów IP podróżujących w sieci.

1. Model klient-serwer

Sieci Komputerowe Modele warstwowe sieci

POŁĄCZENIE STEROWNIKÓW ASTRAADA ONE MIĘDZY SOBĄ Z WYKORZYSTANIEM PROTOKOŁU UDP. Sterowniki Astraada One wymieniają między sobą dane po UDP

Aplikacja wielow tkowa prosty komunikator

MODEL OSI A INTERNET

Akademia Techniczno-Humanistyczna w Bielsku-Białej

Programowanie rozproszone w języku Java

Remote Quotation Protocol - opis

JAVA I SIECI. MATERIAŁY:

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

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

Podstawy sieci komputerowych

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

Metody Metody, parametry, zwracanie wartości

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

Model sieci OSI, protokoły sieciowe, adresy IP

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Protokoły internetowe

Adresy w sieciach komputerowych

UDP vs TCP. Autor: Marcin Koczara IV FDS

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

Zadanie 2: transakcyjny protokół SKJ (2015)

Programowanie Sieciowe 1

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

Moduł 11.Warstwa transportowa i aplikacji Zadaniem warstwy transportowej TCP/IP jest, jak sugeruje jej nazwa, transport danych pomiędzy aplikacjami

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

Na podstawie: Kirch O., Dawson T. 2000: LINUX podręcznik administratora sieci. Wydawnictwo RM, Warszawa. FILTROWANIE IP

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

Mechanizmy pracy równoległej. Jarosław Kuchta

Warstwy i funkcje modelu ISO/OSI

Bazy Danych i Usługi Sieciowe

1 Moduł Diagnostyki Sieci

Sieci komputerowe i bazy danych

Sieci komputerowe: WYŻSZE WARSTWY MODELU OSI. Agata Półrola Katedra Informatyki Stosowanej UŁ

Java programowanie w sieci. java.net RMI

Java programowanie sieciowe

MASKI SIECIOWE W IPv4

Modyfikacja algorytmów retransmisji protokołu TCP.

Transmisja bezpołączeniowa i połączeniowa

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 Podstawowe pojęcia techniczne charakteryzujące dostęp do Internetu prędkość podłączenia opóźnienia straty Umowa SLA inne parametry dostępność

Transkrypt:

Warstwa Mapa wykładu Usługi warstwy Multipleksacja i demultipleksacja Transport bezpołączeniowy: UDP Zasady niezawodnej komunikacji danych Transport połączeniowy: struktura segmentu niezawodna komunikacja kontrola przepływu zarządzanie połączeniem Mechanizmy kontroli przeciążenia Kontrola przeciążenia w 1 2 Usługi i protokoły warstwy logiczna komunikacja pomiędzy procesami aplikacji działającymi na różnych hostach protokoły transportowe działają na systemach końcowych : dzieli komunikat aplikacji na segmenty, przekazuje segmenty do warstwy sieci : łączy segmenty w komunikat, który przekazuje do warstwy aplikacji więcej niż jeden protokół transportowy Internet: oraz UDP ale może też być SAP (NetWare) application transport application transport 3 Warstwy i sieci warstwa sieci: logiczna komunikacja pomiędzy hostami warstwa : logiczna komunikacja pomiędzy procesami korzysta z oraz uzupełnia usługi warstwy sieci Analogia: pracownicy firmy zamawiają pizzę procesy = pracownicy komunikaty = pizze hosty = firma i pizzeria protokół transportowy = zamawiający pracownik protokół sieci = doręczyciel pizzy 4 Protokoły transportowe Internetu niezawodna, uporządkowana komunikacja () kontrola przeciążenia kontrola przepływu tworzenie połączenia zawodna, nieuporządkowana komunikacja (UDP) proste rozszerzenie usługi best-effort IP niedostępne usługi: gwarancje maksymalnego opóźnienia gwarancje minimalnej przepustowości application transport application transport Mapa wykładu Usługi warstwy Multipleksacja i demultipleksacja Transport bezpołączeniowy: UDP Zasady niezawodnej komunikacji danych Transport połączeniowy: struktura segmentu niezawodna komunikacja kontrola przepływu zarządzanie połączeniem Mechanizmy kontroli przeciążenia Kontrola przeciążenia w 5 6 1

Multipleksacja/demultipleksacja Jak działa demultipleksacja Demultipleksacja u przekazywanie otrzymanych segmentów do właściwych gniazd = gniazdo aplikacji P3 sieci łącza fizyczna = proces P1 P1 aplikacji sieci łącza fizyczna host 1 host 2 Multipleksacja u nadawcy zbieranie danych z wielu gniazd, dodanie nagłówka (używanego później przy demultipleksacji) P2 P4 aplikacji host 3 sieci łącza fizyczna 7 host otrzymuje pakiety IP każdy pakiet ma adres IP nadawcy, adres IP każdy pakiet zawiera jeden segment warstwy każdy segment ma port nadawcy i (pamiętać: powszechnie znane numery portów dla określonych aplikacji) host używa adresu IP i portu żeby skierować segment do odpowiedniego gniazda 32 bity port nadawcy port inne pola nagłówka dane aplikacji (komunikat) format segmentu /UDP 8 Demultipleksacja bezpołączeniowa Demultipleksacja bezpołączeniowa (c.d.) Gniazda są tworzone przez podanie numeru portu: DatagramSocket mojegniazdo1 = new DatagramSocket(99111); DatagramSocket mojegniazdo2 = new DatagramSocket(99222); Gniazdo UDP jest identyfikowane przez parę: (adres IP, port ) Kiedy host otrzymuje segment UDP: sprawdza port w segmencie kieruje segment UDP do gniazda z odpowiednim numerem portu Datagramy IP z różnymi adresami IP lub portami nadawcy są kierowane do tego samego gniazda DatagramSocket gniazdoserwera = new DatagramSocket(6428); P2 klient IP: A PN: 9157 PO: 6428 PN: 6428 PO: 9157 P3 serwer IP: C PN: 6428 PO: 5775 Port nadawcy (PN) jest adresem zwrotnym. PN: 5775 PO: 6428 P1 P1 klient IP:B 9 10 Demultipleksacja połączeniowa Demultipleksacja połączeniowa (c.d) Gniazdo jest określane przez cztery wartości: adres IP nadawcy port nadawcy adres IP port Host odbierający używa wszystkich 4 wartości, żeby skierować segment do właściwego gniazda Uwaga: host sprawdza także 5 wartość: protokół Host serwera może obsługiwać wiele gniazd jednocześnie: każde gniazdo ma inne 4 wartości Serwery WWW mają oddzielne gniazda dla każdego klienta HTTP z nietrwałymi połączeniami wymaga oddzielnego gniazda dla każdego żądania P1 klient IP: A PN: 9157 PO: 80 IP-N: A IP-O: C P4 serwer IP: C P5 P6 P2 P1 P3 PN: 5775 PO: 80 IP-N: B IP-O: C PN: 9157 PO: 80 IP-N: B IP-O: C klient IP: B 11 12 2

Demultipleksacja połączeniowa i serwer wielowątkowy Porty komunikacyjne P1 klient IP: A PN: 9157 PO: 80 IP-N: A IP-O: C P4 serwer IP: C PN: 5775 PO: 80 IP-N: B IP-O:C PN: 9157 PO: 80 IP-N: B IP-O: C P2 P1 P3 klient IP: B Numer przydzielony przez system: 0 po wywołaniu bind system wybiera numer portu 1024-5000 (znaleźć go można po wywołaniu getsockname()) Porty zarezerwowane: 1-1023 Porty dobrze znane: 1-255 (/etc/services) Porty zwyczajowo zarezerwowane dla Unixa BSD: 256-511 Przydzielane przez rresvport: 512-1023 Porty wolne 1024-65535 13 14 Mapa wykładu Usługi warstwy Multipleksacja i demultipleksacja Transport bezpołączeniowy: UDP Zasady niezawodnej komunikacji danych Transport połączeniowy: struktura segmentu niezawodna komunikacja kontrola przepływu zarządzanie połączeniem Mechanizmy kontroli przeciążenia Kontrola przeciążenia w UDP: User Datagram Protocol [RFC 768] bez bajerów, odchudzony protokół transportowy Internetu usługa typu best effort, segmenty UDP mogą zostać: zgubione dostarczone do aplikacji w zmienionej kolejności bezpołączeniowy: nie ma inicjalizacji między nadawcą i odbiorcą UDP każdy segment UDP jest obsługiwany niezależnie od innych Czemu istnieje UDP? nie ma inicjalizacji połączenia (co może zwiększać opóźnienie) prosty: nie ma stanu połączenia u nadawcy ani mały nagłówek segmentu nie ma kontroli przeciążenia: UDP może słać dane tak szybko, jak chce 15 16 Więcej o UDP Długość segmentu UDP w bajtach Często używane do (z nagłówkiem) komunikacji strumieniowej tolerującej straty 32 bity port nadawcy port wrażliwej na opóźnienia Inne zastosowania UDP DNS długość suma kontrolna SNMP niezawodna komunikacja po UDP: dodać niezawodność w warstwie aplikacji Praca domowa Dane aplikacji (komunikat) Format segmentu UDP 17 Suma kontrolna UDP Cel: odkrycie błędów (n.p., odwróconych bitów) w przesłanym segmencie Nadawca: traktuje zawartość segmentu jako ciąg 16- bitowych liczb całkowitych suma kontrolna: dodawanie (i potem negacja sumy) zawartości segmentu wpisuje wartość sumy kontrolnej do odpowiedniego pola nagłówka UDP Odbiorca: oblicza sumę kontrolną odebranego segmentu sprawdza, czy obliczona suma kontrolna jest równa tej, która jest w nagłówku: NIE wykryto błąd TAK Nie wykryto błędu. Ale może błąd jest i tak? Wrócimy do tego. 18 3

sendpacket receivepacket infromuser Przykład sumy kontrolnej Uwaga Dodając liczby, reszta z dodawania najbardziej znaczących bitów musi zostać dodana do wyniku (zawinięta, przeniesiona na początek) Przykład: suma kontrolna dwóch liczb 16-bitowych zawinięcie suma suma kontrolna 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 19 na chwilę wracamy do Warstwy aplikacji 20 Mapa wykładu 2.1 Zasady budowy protokołów w. aplikacji 2.2 WWW i HTTP 2.3 DNS 2.4 Programowanie przy użyciu gniazd 2.5 Programowanie przy użyciu gniazd UDP 2.6 Poczta elektroniczna SMTP, POP3, IMAP 2.7 FTP 2.8 Dystrybucja zawartości Schowki Internetowe Sieci dystrybucji zawartości 2.9 Dzielenie plików P2P Programowanie gniazd UDP UDP: brak połączenia pomiędzy klientem i serwerem brak inicjalizacji połączenia nadaje każdemu pakietowi adres IP i port serwer musi pobrać adres IP, port nadawcy z otrzymanego pakietu UDP: wysyłane informacje mogą być gubione lub otrzymywane w innym porządku punkt widzenia programisty UDP udostępnia zawodną komunikację ciągów bajtów ( datagramów ) pomiędzy klientem i serwerem 21 22 Interakcja klient/serwer: UDP Przykład: Klient w Javie (UDP) Serwer (działa na hostid) Klient klawiatura monitor tworzy gniazdo, port=x, dla nadchodzących połączeń : serversocket = DatagramSocket(x) czyta komunikat z serversocket wysyła odpowiedź serversocket podając adres i port klienta tworzy gniazdo, clientsocket = DatagramSocket() Tworzy, adresuje (hostid, port=x), wysyła datagram z komunikatem przez clientsocket czyta odpowiedź z clientsocket zamyka clientsocket Proces klienta Wyjście: wysyła pakiet (przez, wysyłał strumień bajtów ) strumien wejsciowy pakiet UDP gniazdo clientsocket UDP klienta do sieci z sieci pakiet UDP gniazdo UDP Wejście: odbiera pakiet (przez odbierał strumień bajtów ) 23 24 4

Przykład: klient w Javie (UDP) Przykład: klient w Javie (UDP), c.d. Tworzy strumień wejściowy Tworzy gniazdo klienta Tłumaczy nazwę na adres IP używając DNS import java.io.*; import java.net.*; class UDPClient { public static void main(string args[]) throws Exception { BufferedReader infromuser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientsocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("hostname"); byte[] senddata = new byte[1024]; byte[] receivedata = new byte[1024]; String sentence = infromuser.readline(); senddata = sentence.getbytes(); 25 Tworzy datagram z danymi do wysłania, długością, adresem IP, portem Wysyła datagram do serwera Czyta datagram z serwera } DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, 9876); clientsocket.send(sendpacket); DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); clientsocket.receive(receivepacket); String modifiedsentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedsentence); clientsocket.close(); } 26 Przykład: serwer w Javie (UDP) Przykład: serwer w Javie (UDP), c.d. Tworzy gniazdo UDP na porcie 9876 Tworzy miejsce na otrzymany datagram Odbiera datagram import java.io.*; import java.net.*; class UDPServer { public static void main(string args[]) throws Exception { DatagramSocket serversocket = new DatagramSocket(9876); byte[] receivedata = new byte[1024]; byte[] senddata = new byte[1024]; while(true) { DatagramPacket receivepacket = new DatagramPacket(receiveData, receivedata.length); serversocket.receive(receivepacket); 27 Pobiera adres IP, numer portu, nadawcy pakietu Tworzy datagram do wysłania do klienta Wysyła datagram przez gniazdo } String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivepacket.getaddress(); int port = receivepacket.getport(); String capitalizedsentence = sentence.touppercase(); senddata = capitalizedsentence.getbytes(); DatagramPacket sendpacket = new DatagramPacket(sendData, senddata.length, IPAddress, port); serversocket.send(sendpacket); } } Koniec pętli "while", powrót i oczekiwanie na następny datagram 28 Mapa wykładu wracamy do Warstwy Usługi warstwy Multipleksacja i demultipleksacja Transport bezpołączeniowy: UDP Zasady niezawodnej komunikacji danych Transport połączeniowy: struktura segmentu niezawodna komunikacja kontrola przepływu zarządzanie połączeniem Mechanizmy kontroli przeciążenia Kontrola przeciążenia w 29 30 5

Zasady niezawodnej komunikacji danych Ważne w warstwie aplikacji, i łącza Jeden z najważniejszych tematów w dziedzinie sieci! warstwa wyższa warstwa niezawodna Proces nadawcy dane Proces kanał niezawodny dane npk_send() dane Niezawodny protokół transportowy () zpk_send() pakiet deliver_data() Niezawodny protokół transportowy () npk_recv() dane pakiet Niezawodna komunikacja (npk) npk_send(): wywoływany przez wyższą warstwę. Przekazuje dane do przesłania do warstwa niezawodna npk_send dane Niezawodny protokół transportowy () zpk_send pakiet dane pakiet deliver_data(): wywoływany przez npk. Przekazuje dane do wyższej warstwy deliver_data Niezawodny protokół transportowy () npk_recv warstwa niższa a) udostępniana usługa kanał zawodny b) implementacja usługi charakterystyka zawodnego kanału określa złożoność niezawodnego protokołu komunikacji (npk) 31 warstwa niższa zpk_send(): wywoływany przez npk. Wysyła pakiet przez zawodny kanał do kanał zawodny npk_rcv(): wywoływany przez niższą warstwę, gdy pakiet zostanie odebrany po stronie 32 Niezawodna komunikacja: początki Co zrobimy: stopniowo zaprojektujemy nadawcę i odbiorcę niezawodnego protokołu komunikacji (npk) komunikacja danych tylko w jedną stronę ale dane kontrolne w obie strony! użyjemy automatów skończonych (AS) do specyfikacji nadawcy, Npk1.0: niezawodna komunikacja przez niezawodny kanał używany kanał jest w pełni niezawodny nie ma błędów bitowych pakiety nie są tracone oddzielne AS dla nadawcy, : wysyła dane przez kanał odbiera dane z kanału stan: w określonym stanie, następny stan jest jednoznacznie określony przez następne zdarzenie stan 1 zdarzenie powodujące zmianę stanu czynności wykonywane przy zmianie stanu zdarzenie (lub brak: ) czynności (lub brak: ) stan 2 packet = make_pkt(data) zpk_send(packet) npk_rcv(packet) extract (packet,data) 33 34 Npk2.0: kanał z błędami bitowymi kanał może zmieniać bity w pakiecie suma kontrolna pozwala rozpoznać błędy bitowe pytanie: jak naprawić błąd: potwierdzenia (ang. acknowledgement, ACKs): zawiadamia nadawcę, że pakiet jest dotarł bez błędu negatywne potwierdzenia (NAKs): zawiadamia nadawcę, że pakiet ma błędy retransmituje pakiet po otrzymaniu NAK nowe mechanizmy w npk2.0: rozpoznawanie błędów informacja zwrotna od : komunikaty kontrolne (ACK,NAK) -> npk2.0: specyfikacja AS snkpkt = make_pkt(data, checksum) isack(rcvpkt) ACK lub NAK isnak(rcvpkt) zpk_send(sndpkt ) corrupt(rcvpkt) zpk_send(nak) notcorrupt(rcvpkt) zpk_send(ack) 35 36 6

npk2.0: działanie bez błędów npk2.0: działanie z błędami snkpkt = make_pkt(data, checksum) ACK lub NAK isnak(rcvpkt) zpk_send(sndpkt ) corrupt(rcvpkt) zpk_send(nak) snkpkt = make_pkt(data, checksum) ACK lub NAK isnak(rcvpkt) zpk_send(sndpkt ) corrupt(rcvpkt) zpk_send(nak) isack(rcvpkt) isack(rcvpkt) notcorrupt(rcvpkt) zpk_send(ack) notcorrupt(rcvpkt) zpk_send(ack) 37 38 npk2.0 ma fatalny błąd! npk2.1:, obsługuje błędne ACK/NAK Co się stanie, gdy ACK/NAK będzie miał błąd? nie wie, co się stało u! nie można po prostu zawsze retransmitować: możliwe jest wysłanie pakietu podwójnie (duplikatu). Obsługa duplikatów: dodaje numer sekwencyjny do każdego pakietu retransmituje aktualny pakiet, jeśli ACK/NAK ma błąd wyrzuca (nie przekazuje wyżej) zduplikowane pakiety wstrzymaj i czekaj Nadawca wysyła jeden pakiet, potem czeka na odpowiedź && notcorrupt(rcvpkt) && isack(rcvpkt) ( corrupt(rcvpkt) isnak(rcvpkt) ) sndpkt = make_pkt(0, data, checksum) ACK lub NAK numer=1 ACK lub NAK numer=1 sndpkt = make_pkt(1, data, checksum) ( corrupt(rcvpkt) isnak(rcvpkt) ) && notcorrupt(rcvpkt) && isack(rcvpkt) 39 40 npk2.1:, obsługuje błędne ACK/NAK (corrupt(rcvpkt) sndpkt = make_pkt(nak, chksum) not corrupt(rcvpkt) && has_seq1(rcvpkt) sndpkt = make_pkt(ack, chksum) notcorrupt(rcvpkt) && has_seq0(rcvpkt) sndpkt = make_pkt(ack, chksum) Czekaj na wyw. Czekaj na wyw. numer=1 notcorrupt(rcvpkt) && has_seq1(rcvpkt) sndpkt = make_pkt(ack, chksum) (corrupt(rcvpkt) sndpkt = make_pkt(nak, chksum) not corrupt(rcvpkt) && has_seq0(rcvpkt) sndpkt = make_pkt(ack, chksum) 41 npk2.1: dyskusja Nadawca: Dodaje numer sekwencyjny do pakietu Dwa numery (0,1) wystarczą. Dlaczego? musi sprawdzać, czy ACK/NAK jest poprawny dwa razy więcej stanów (niż w npk2.0) stan musi pamiętać aktualny numer sekwencyjny (0 lub 1) Odbiorca: musi sprawdzać, czy odebrany pakiet jest duplikatem stan wskazuje, czy oczekuje numeru sekwencyjnego 0, czy 1 uwaga: może nie wiedzieć czy ostatni ACK/NAK został poprawnie odebrany przez nadawcę 42 7

npk2.2: protokół bez negatywnych potwierdzeń (NAK) ta sama funkcjonalność co w npk2.1, używając tylko zwykłych potwierdzeń (ACK) zamiast NAK, wysyła ACK za ostatni poprawnie odebrany pakiet musi dodać numer sekwencyjny pakietu, który jest potwierdzany powtórne ACK u nadawcy powoduje tę samą czynność co NAK: retransmisję ostatnio wysłanego pakietu 43 npk2.2: fragmenty nadawcy, (corrupt(rcvpkt) has_seq1(rcvpkt)) sndpkt = make_pkt(0, data, checksum) fragment AS nadawcy fragment AS ACK notcorrupt(rcvpkt) && has_seq1(rcvpkt) sndpkt = make_pkt(ack1, chksum) ( corrupt(rcvpkt) isack(rcvpkt,1) ) && notcorrupt(rcvpkt) && isack(rcvpkt,0) 44 npk3.0: kanał z błędami oraz stratami Nowe założenie: używany kanał może gubić pakiety (z danymi lub ACK) suma kontrolna, numery sekwencyjne, potwierdzenia, retransmisje będą pomocne, ale nie wystarczą Podejście: czeka przez rozsądny czas na potwierdzenie ACK retransmituje, jeśli nie otrzyma ACK w tym czasie jeśli pakiet (lub ACK) jest tylko opóźniony, ale nie stracony: retransmisja będzie duplikatem, ale za pomocą numerów sekwencyjnych już to obsługujemy musi określić numer sekwencyjny pakietu, który jest potwierdzany wymagany jest licznik czasu 45 npk3.0 && notcorrupt(rcvpkt) && isack(rcvpkt,1) stop_timer timeout && ( corrupt(rcvpkt) isack(rcvpkt,0) ) Czekaj na ACK numer=1 sndpkt = make_pkt(0, data, checksum) Czekaj na ACK numer=1 sndpkt = make_pkt(1, data, checksum) ( corrupt(rcvpkt) isack(rcvpkt,1) ) timeout && notcorrupt(rcvpkt) && isack(rcvpkt,0) stop_timer 46 npk3.0 w działaniu npk3.0 w działaniu wyślij odbierz wyślij odbierz wyślij odbierz wyślij odbierz odbierz wyślij odbierz ACK 1 wyślij ACK 1 działanie bez strat wyślij odbierz odbierz wyślij odbierz wyślij odbierz ACK 1 wyślij timeout, retransmituj (strata) ACK 1 działanie ze stratą pakietu wyślij odbierz odbierz pkt 2 wyślij odbierz wyślij ACK 2 działanie ze stratą ACK wyślij ACK 1 odbierz timeout, retransmituj (strata) odbierz ACK 1 odbierz ACK 1 wyślij pkt 2 pkt 2 odbierz pkt 2 wyślij ACK 2 odbierz wyślij timeout, retransmituj ACK 1 odbierz ACK 1 wyślij pkt 2 ACK 1 wyślij odbierz Nic się nie za wczesny timeout dzieje! odbierz wykryj duplikat odbierz wyślij 47 48 8

Wydajność npk3.0 npk3.0: działanie wyślij i czekaj npk3.0 działa, ale wydajność ma bardzo kiepską przykład: link 1 Gb/s, opóźnienie k-k 15 ms, pakiet 1KB: pierwszy bit pakietu wysłany, t =0 ostatni bit pakietu wysłany, t = L / R T transmisji = L (rozmiar pakietu w b) R (przepustowość, b/s) = 8kb/pkt 10 9 b/s = 8 mikros. RTT pierwszy bit odebrany ostatni bit odebrany, wyślij ACK W nadawcy = L / R RTT + L / R =.008 30.008 = 0.00027 microsec W nadawcy : wykorzystanie procent czasu, w jakim nadaje pakiet rozmiaru 1KB co 30 ms -> przepustowość 33kB/s przez łącze 1 Gb/s protokół ogranicza wykorzystanie fizycznych zasobów łącza! ACK odebrane, wyślij następny pakiet, t = RTT + L / R W nadawcy = L / R RTT + L / R =.008 30.008 = 0.00027 microsec 49 50 Protokoły "wysyłające grupowo" Wysyłanie grupowe: wysyła wiele pakietów bez czekania na potwierdzenie trzeba zwiększyć zakres numerów sekwencyjnych trzeba mieć bufor u nadawcy i/lub Wysyłanie grupowe: zwiększone wykorzystanie pierwszy bit pakietu wysłany, t =0 ostatni bit pakietu wysłany, t = L / R RTT ACK odebrane, wyślij następny pakiet, t = RTT + L / R pierwszy bit odebrany ostatni bit odebrany, wyślij ACK ostatni bit 2giego pakietu odebrany, wyślij ACK ostatni bit 3ciego pakietu odebrany, wyślij ACK Dwa podstawowe rodzaje protokołów wysyłania grupowego: wróć o N, selektywne powtarzanie W nadawcy = 3 * L / R RTT + L / R =.024 30.008 Trzykrotnie zwiększone wykorzystanie! = 0.0008 microsecon 51 52 Wróć o N (WN) Nadawca: k bitów na numer sekwencyjny w nagłówku pakietu wysyła okno co najwyżej N kolejnych, niepotwierdzonych pakietów początek okna (pocz_okn) następny numer sekwencyjny (nast_num) rozmiar okna: N już potwierdzony wysłany, nie potwierdzony gotowy, nie wysłany nie gotowy ACK(n): potwierdza wszystkie pakiety aż do (i łącznie z) pakietem o numerze sekwencyjnym n - skumulowany ACK może otrzymywać duplikaty potwierdzeń (patrz ) potrzebny jest zegar jeden dla całego okna timeout: retransmisja wszystkich niepotwierdzonych pakietów w oknie, czyli od pocz_okn do nast_num 53 WN: rozszerzony AS nadawcy pocz_okn=1 nast_num=1 && corrupt(rcvpkt) npk_send(dane) if (nast_num < pocz_okn+n) { sndpkt[nast_num] = make_pkt(nast_num, dane, suma_kontr) zpk_send(sndpkt[nast_num]) if (pocz_okn == nast_num) nast_num++ } else refuse_data(dane) Czekaj notcorrupt(rcvpkt) timeout zpk_send(sndpkt[pocz_okn]) zpk_send(sndpkt[pocz_okn+1]) zpk_send(sndpkt[nast_num-1]) pocz_okn = numer_ack(rcvpkt) + 1 If (pocz_okn == nast_num) stop_timer else 54 9

WN: rozszerzony AS default expectedseqnum=1 Czekaj sndpkt = make_pkt(expectedseqnum,ack,chksum) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) sndpkt = make_pkt(expectedseqnum,ack,chksum) expectedseqnum++ tylko ACK: zawsze wysyła ACK dla ostatniego poprawnie odebranego pakietu spośród pakietów odebranych w kolejności może generować zduplikowane ACK trzeba pamiętać tylko expectedseqnum pakiety nie w kolejności: są wyrzucane -> nie ma buforowania u! Wysyłane jest ponownie ACK z numerem sekwencyjnym ostatniego pakiety odebranego w kolejności 55 WN w działaniu N = 4 pierwsze okno przesuwanie okna po ACK retransmisje odbierz wyślij pkt 4 wyślij wyślij odbierz wyślij wyślij pkt 2 pkt 2 odbierz wyślij ACK (strata) 1 wyślij pkt pkt 3 3 czekaj ACK 1 pkt 4 odbierz pkt 3 i odrzuć go! odbierz pkt4 odbierz ACK 1 i odrzuć go! wyślij pkt pkt 5 5 odbierz pkt5 timeout pkt 2 wyślij pkt 2 wyślij pkt 3 wyślij pkt 4 wyślij pkt 5 pkt 2 pkt 3 pkt 4 pkt 5 i odrzuć go! odbierz pkt 2 wyślij ACK 2 odbierz pkt 3 wyślij ACK 3 56 Selektywne powtarzanie (SP) selektywnie potwierdza poprawnie odebrane pakiety buforuje pakiety, gdy potrzeba, w celu uporządkowania przed przekazaniem warstwie wyższej retransmituje tylko pakiety, dla których nie odebrał ACK ma zegar dla każdego niepotwierdzonego, wysłanego pakietu. okno nadawcy N kolejnych numerów sekwencyjnych określa, jakie pakiety mogą być wysłane bez potwierdzenia SP: okna nadawcy i początek okna (pocz_okna następny numer ) sekwencyjny (nast_num) już potwierdzony rozmiar okna: N rozmiar okna: N wysłany, nie potwierdzony potwierdzony, w buforze oczekiwany, nie otrzymany gotowy, nie wysłany nie używany gotowy do odebrania nie używany 57 58 SP: i dane od wyższej warstwy: jeśli w oknie jest wolny numer sekwencyjny, wyślij pakiet timeout(n): retransmituj pakiet n, ustaw ponownie zegar ACK(n) pakietu w oknie: zaznacz pakiet jako odebrany i wyłącz zegar jeśli n jest początkiem okna, przesuń okno do następnego niepotwierdzonego pakietu pakiet n z okna wyślij ACK(n) nie w kolejności: do bufora w kolejności: przekaż (także przekaż uporządkowane pakiety z bufora), przesuń okno do następnego nieodebranego pakietu pakiet n z N pakietów przed oknem potwierdź ACK(n) wszystkie inne pakiety: ignoruj SP w działaniu wysłany pkt0 wysłany pkt1 wysłany pkt2 wysłany pkt3, pełne okno odebr. ACK0, wysł. pkt4 odebr. ACK1, wysł. pkt5 timeout, retransmisja pkt2 odebr. ACK3, nic nie wysłane (strata) odebr. pkt0, przekazany, wysł. ACK0 odebr. pkt1, przekazany, wysł. ACK1 odebr. pkt3, buforowany, wysł. ACK3 odebr. pkt4, buforowany, wysł. ACK4 odebr. pkt5, buforowany, wysł. ACK5 odebr. pkt2, przekazane pkt2, pkt3, pkt4, pkt5, wysł. ACK3 59 60 10

Mapa wykładu Usługi warstwy Multipleksacja i demultipleksacja Transport bezpołączeniowy: UDP Zasady niezawodnej komunikacji danych Transport połączeniowy: struktura segmentu niezawodna komunikacja kontrola przepływu zarządzanie połączeniem Mechanizmy kontroli przeciążenia Kontrola przeciążenia w 62 gniazdo : Przegląd RFC: 793, 1122, 1323, 2018, 2581 koniec-koniec: jeden, jeden niezawodny, uporządkowany strumień bajtów: nie ma granic komunikatów wysyłający grupowo: kontrola przeciążeń i przepływu określają rozmiar okna bufory u nadawcy i aplikacja pisze dane bufor nadawcy segment aplikacja czyta dane bufor komunikacja "full duplex": dwukierunkowy przepływ danych na tym samym połączeniu MRS: maksymalny rozmiar segmentu połączeniowe: inicjalizacja (wymiana komunikatów kontrolnych) połączenia przed komunikacją danych kontrola przepływu: nie "zaleje" gniazdo 63 Struktura segmentu URG: pilne dane (zwykle nie używane) ACK: numer ACK używane PSH: wypchnij dane RST, SYN, FIN: zarządzanie połączeniem (polecenia nawiązania i zamknięcia) Internetowa suma kontrolna (jak w UDP) 32 bity port nadawcy # port # numer sekwencyjny numer potwierdzenia dług. nie nagł. używ. U A P R S F Okno suma kontrolna Wsk. na pilne dane Opcje (zmienna długość) dane aplikacji (zmienna długość) licząc według bajtów danych (nie segmentów!) ilość bajtów, jakie przyjmie 64 : numery sekwencyjne i potwierdzenia Numery sekwencyjne: numer w "strumieniu bajtów" pierwszego bajtu danych segmentu Potwierdzenia: numer sekwencyjny następnego bajtu oczekiwanego od drugiej strony kumulatywny ACK Pytanie: jak traktuje segmenty nie w kolejności O: specyfikacja tego nie określa: decyduje implementacja Użytkownik wpisuje C Host A host A potwierdza odbiór C otrzymanego od hosta B Host B prosty scenariusz telnet Host B potwierdza C, wysyła z powrotem C czas 65 : czas powrotu (RTT) i timeout : czas powrotu (RTT) i timeout Pytanie: jak ustalić timeout dla? dłuższe niż RTT ale RTT jest zmienne za krótki: za wczesny timeout niepotrzebne retransmisje za długi: wolna reakcja na stratę segmentu Pytanie: jak estymować RTT? MierzoneRTT: czas zmierzony od wysłania segmentu do odbioru ACK ignorujemy retransmisje MierzoneRTT będzie zmienne, chcemy mieć "gładsze" estymowane RTT średnia z wielu ostatnich pomiarów, nie tylko aktualnego MierzoneRTT EstymowaneRTT = (1- )*EstymowaneRTT + *MierzoneRTT Wykładnicza średnia ruchoma wpływ starych pomiarów maleje wykładniczo typowa wartość parametru: = 0.125 66 67 11

RTT (milliseconds) Przykład estymacji RTT: : czas powrotu (RTT) i timeout 350 300 250 RTT: gaia.cs.umass.edu to fantasia.eurecom.fr Ustawianie timeout EstymowaneRTT dodać margines błędu im większa zmienność MierzoneRTT, tym większy margines błędu najpierw ocenić, o ile MierzoneRTT jest oddalone od EstymowaneRTT: 200 BłądRTT = (1-)*BłądRTT + * MierzoneRTT - EstymowaneRTT 150 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 time (seconnds) Ustalanie wielkości timeout: (zwykle, = 0.25) Timeout = EstymowaneRTT + 4*BłądRTT SampleRTT Estimated RTT 68 69 Mapa wykładu Niezawodna komunikacja Usługi warstwy Multipleksacja i demultipleksacja Transport bezpołączeniowy: UDP Zasady niezawodnej komunikacji danych Transport połączeniowy: struktura segmentu niezawodna komunikacja kontrola przepływu zarządzanie połączeniem Mechanizmy kontroli przeciążenia Kontrola przeciążenia w tworzy usługę NPK na zawodnej komunikacji IP Wysyłanie grupowe segmentów Kumulowane potwierdzenia używa pojedynczego zegara do retransmisji Retransmisje są powodowane przez: zdarzenia timeout duplikaty ACK Na razie rozważymy prostszego nadawcę : ignoruje duplikaty ACK ignoruje kontrolę przeciążenia i przepływu 70 71 12