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

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

Warstwa transportu. Mapa wykładu

Mapa wykładu. Poczta elektroniczna

Sieci komputerowe Warstwa transportowa

Selektywne powtarzanie (SP)

Protokoły sieciowe - TCP/IP

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

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

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

Klient-Serwer Komunikacja przy pomocy gniazd

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

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

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

Sieci komputerowe - Protokoły warstwy transportowej

MODEL WARSTWOWY PROTOKOŁY TCP/IP

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

Programowanie współbieżne i rozproszone

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

Warstwa transportowa. mgr inż. Krzysztof Szałajko

Przesyłania danych przez protokół TCP/IP

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

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

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

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

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

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

Sieci komputerowe - warstwa transportowa

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

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

PROTOKOŁY WARSTWY TRANSPORTOWEJ

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

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

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

Programowanie Sieciowe 1

Sieci Komputerowe Modele warstwowe sieci

Warstwa transportowa

Model OSI. mgr inż. Krzysztof Szałajko

Dr Michał Tanaś(

MODEL OSI A INTERNET

pasja-informatyki.pl

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

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

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

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

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

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Adresy w sieciach komputerowych

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

Podstawy sieci komputerowych

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

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

Sieci komputerowe. Wykład dr inż. Łukasz Graczykowski

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

Akademia Techniczno-Humanistyczna w Bielsku-Białej

Programowanie sieciowe

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

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

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

Selektywne powtarzanie (SP)

Architektura INTERNET

Protokoły sieciowe model ISO-OSI Opracował: Andrzej Nowak

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

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

Sieci komputerowe. -Sterownie przepływem w WŁD i w WT -WŁD: Sterowanie punkt-punkt p2p -WT: Sterowanie end-end e2e

Remote Quotation Protocol - opis

Stos TCP/IP Warstwa transportowa Warstwa aplikacji cz.1

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

Uniwersalny Konwerter Protokołów

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 - Wstęp do intersieci, protokół IPv4

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

SIECI KOMPUTEROWE wykład dla kierunku informatyka semestr 4 i 5

1. Model klient-serwer

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Akademickie Centrum Informatyki PS. Wydział Informatyki PS

Sieci komputerowe Mechanizmy sterowania przebiegiem sesji TCP w Internecie

Rok szkolny 2014/15 Sylwester Gieszczyk. Wymagania edukacyjne w technikum. SIECI KOMPUTEROWE kl. 2c

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15 Artur.Kalinowski@fuw.edu.

Test sprawdzający wiadomości z przedmiotu Systemy operacyjne i sieci komputerowe.

Laboratorium Sieci Komputerowych - 2

Sieci komputerowe. Wykład 1: Podstawowe pojęcia i modele. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Model sieci OSI, protokoły sieciowe, adresy IP

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

Opracowanie protokołu komunikacyjnego na potrzeby wymiany informacji w organizacji

LABORATORIUM SYSTEMY I SIECI TELEKOMUNIKACYJNE CZĘŚĆ 2 MODELOWANIE SIECI Z WYKORZYSTANIEM SYMULATORA NCTUNS

Sieci komputerowe Wykład

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

ARP Address Resolution Protocol (RFC 826)

Bazy Danych i Usługi Sieciowe

Laboratorium 6.7.2: Śledzenie pakietów ICMP

Sieci komputerowe - opis przedmiotu

MASKI SIECIOWE W IPv4

Sieci komputerowe - administracja

Transmisja danych multimedialnych. mgr inż. Piotr Bratoszewski

TCP/IP. Warstwa aplikacji. mgr inż. Krzysztof Szałajko

OSI Transport Layer. Network Fundamentals Chapter 4. Version Cisco Systems, Inc. All rights reserved. Cisco Public 1

1. W protokole http w ogólnym przypadku elementy odpowiedzi mają: a) Postać tekstu b) Postać HTML c) Zarówno a i b 2. W usłudze DNS odpowiedź

SIECI KOMPUTEROWE wykład dla kierunku informatyka semestr 4 i 5

Transkrypt:

Plan całości wykładu Wprowadzenie Warstwa aplikacji Warstwa transportu Warstwa sieci Warstwa łącza i sieci lokalne Podstawy ochrony informacji (2 wykłady) (2 wykłady) (2-3 wykłady) (2-3 wykłady) (3 wykłady) (2-3 wykłady) 3-1

Plan czasowy wykładu i ćwiczeń start zadania programistyczne (łącznie 16 punktów) kolokwium (24 punktów) zadania programistyczne i zaliczenie ćwiczeń egzamin (60 punktów) 3-2

Zadanie dodatkowe! Do zarobienia 5 punktów: wygrywa najlepsza odpowiedź w terminie Termin: do końca doby, w którym zostało ogłoszone (24h) Zadanie: do jakich sieci zagranicznych jest podłączony Internet w Polsce? znaleźć jak najwięcej sieci. Dla każdej z nich, pokazać ścieżkę (wynik traceroute) oraz napisać, jaka organizacja zarządza systemem autonomicznym. do jakiej sieci zagranicznej Internet w Polsce został podłączony po raz pierwszy w historii? 3-3

Literatura do warstwy transportu Rozdział 3, Computer Networking: A Top-Down Approach Featuring the Internet, wydanie 2 lub 3, J. Kurose, K. Ross, Addison-Wesley, 2004 Rozdziały 3.5, 6.2, 8.3, Sieci komputerowe podejście systemowe, L. Peterson, B. Davie, Wyd. Nakom, Poznań, 2000 Rozdziały 17, 18, 20, 21, Biblia TCP/IP, tom 1, R. Stevens, Wyd. RM, Warszawa, 1998 3-4

Warstwa transportu Cele: zrozumienie podstawowych mechanizmów transportowych: multipleksacja/demult ipleksacja niezawodna komunikacja kontrola przepływu kontrola przeciążenia poznanie mechanizmów transportowych Internetu UDP: transport bezpołączeniowy TCP: transport połączeniowy kontrola przeciążenia TCP 3-5

Mapa wykładu Usługi warstwy transportu Multipleksacja i demultipleksacja Transport bezpołączeniowy: UDP Zasady niezawodnej komunikacji danych Transport połączeniowy: TCP struktura segmentu niezawodna komunikacja kontrola przepływu zarządzanie połączeniem Mechanizmy kontroli przeciążenia Kontrola przeciążenia w TCP 3-6

Usługi i protokoły warstwy transportu logiczna komunikacja pomiędzy procesami aplikacji działającymi na różnych hostach protokoły transportowe działają na systemach końcowych nadawca: dzieli komunikat aplikacji na segmenty, przekazuje segmenty do warstwy sieci odbiorca: łączy segmenty w komunikat, który przekazuje do warstwy aplikacji więcej niż jeden protokół transportowy Internet: TCP oraz UDP application transport network data link physical network data link physical logical end-end transport network data link physical network data link physical network data link physical network data link physical application transport network data link physical 3-7

Warstwy transportu i sieci warstwa sieci: logiczna komunikacja pomiędzy hostami warstwa transportu: 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 3-8

Protokoły transportowe Internetu niezawodna, uporządkowana komunikacja (TCP) 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 network data link physical network data link physical logical end-end transport network data link physical network data link physical network data link physical network data link physical application transport network data link physical 3-9

Mapa wykładu Usługi warstwy transportu Multipleksacja i demultipleksacja Transport bezpołączeniowy: UDP Zasady niezawodnej komunikacji danych Transport połączeniowy: TCP struktura segmentu niezawodna komunikacja kontrola przepływu zarządzanie połączeniem Mechanizmy kontroli przeciążenia Kontrola przeciążenia w TCP 3-10

Multipleksacja/demultipleksacja Demultipleksacja u odbiorcy przekazywanie otrzymanych segmentów do właściwych gniazd Multipleksacja u nadawcy zbieranie danych z wielu gniazd, dodanie nagłówka (używanego później przy demultipleksacji) = gniazdo = proces aplikacji P3 P1 P1 aplikacji P2 P4 aplikacji transportu sieci łącza transportu sieci łącza transportu sieci łącza fizyczna fizyczna host 1 host 2 host 3 fizyczna 3-11

Jak działa demultipleksacja host otrzymuje pakiety IP każdy pakiet ma adres IP nadawcy, adres IP odbiorcy każdy pakiet zawiera jeden segment warstwy transportu każdy segment ma port nadawcy i odbiorcy (pamiętać: powszechnie znane numery portów dla określonych aplikacji) host używa adresu IP i portu żeby skierować segment do odpowiedniego gniazda port nadawcy 32 bity port odbiorcy inne pola nagłówka dane aplikacji (komunikat) format segmentu TCP/UDP 3-12

Demultipleksacja bezpołączeniowa 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 odbiorcy, port odbiorcy) Kiedy host otrzymuje segment UDP: sprawdza port odbiorcy 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 3-13

Demultipleksacja bezpołączeniowa (c.d.) DatagramSocket gniazdoserwera = new DatagramSocket(6428); P2 P3 P1P1 PN: 6428 PO: 9157 PN: 6428 PO: 5775 PN: 9157 PN: 5775 klient IP: A PO: 6428 serwer IP: C PO: 6428 klient IP:B Port nadawcy (PN) jest adresem zwrotnym. 3-14

Demultipleksacja połączeniowa Gniazdo TCP jest określane przez cztery wartości: adres IP nadawcy port nadawcy adres IP odbiorcy port odbiorcy 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 TCP 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 3-15

Demultipleksacja połączeniowa (c.d) P1 P4 P5 P6 P2 P1P3 PN: 5775 PO: 80 IP-N: B IP-O: C PN: 9157 PN: 9157 klient IP: A PO: 80 IP-N: A IP-O: C serwer IP: C PO: 80 IP-N: B IP-O: C klient IP: B 3-16

Demultipleksacja połączeniowa i serwer wielowątkowy P1 P4 P2 P1P3 PN: 5775 PO: 80 IP-N: B IP-O:C PN: 9157 PN: 9157 klient IP: A PO: 80 IP-N: A IP-O: C serwer IP: C PO: 80 IP-N: B IP-O: C klient IP: B 3-17

Porty komunikacyjne 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 3-18

Mapa wykładu Usługi warstwy transportu Multipleksacja i demultipleksacja Transport bezpołączeniowy: UDP Zasady niezawodnej komunikacji danych Transport połączeniowy: TCP struktura segmentu niezawodna komunikacja kontrola przepływu zarządzanie połączeniem Mechanizmy kontroli przeciążenia Kontrola przeciążenia w TCP 3-19

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 odbiorcy mały nagłówek segmentu nie ma kontroli przeciążenia: UDP może słać dane tak szybko, jak chce 3-20

Więcej o UDP Długość segmentu UDP w bajtach Często używane do (z nagłówkiem) komunikacji strumieniowej tolerującej straty wrażliwej na opóźnienia Inne zastosowania UDP DNS SNMP niezawodna komunikacja po UDP: dodać niezawodność w warstwie aplikacji Praca domowa port nadawcy długość 32 bity Dane aplikacji (komunikat) port odbiorcy suma kontrolna Format segmentu UDP 3-21

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 nadawca 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. 3-22

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 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 zawinięcie suma suma kontrolna 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 3-23

Mapa wykładu Usługi warstwy transportu Multipleksacja i demultipleksacja Transport bezpołączeniowy: UDP Zasady niezawodnej komunikacji danych Transport połączeniowy: TCP struktura segmentu niezawodna komunikacja kontrola przepływu zarządzanie połączeniem Mechanizmy kontroli przeciążenia Kontrola przeciążenia w TCP 3-24

Zasady niezawodnej komunikacji danych Ważne w warstwie aplikacji, transportu i łącza Jeden z najważniejszych tematów w dziedzinie sieci! warstwa wyższa Proces nadawcy dane Proces odbiorcy dane kanał niezawodny npk_send() dane deliver_data() dane warstwa niezawodna Niezawodny protokół transportowy (nadawca) zpk_send() pakiet Niezawodny protokół transportowy (odbiorca) npk_recv() pakiet 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) 3-25

Niezawodna komunikacja (npk) npk_send(): wywoływany przez wyższą warstwę. Przekazuje dane do przesłania do odbiorcy deliver_data(): wywoływany przez npk. Przekazuje dane do wyższej warstwy npk_send dane dane deliver_data warstwa niezawodna Niezawodny protokół transportowy (nadawca) Niezawodny protokół transportowy (odbiorca) zpk_send pakiet pakiet npk_recv warstwa niższa nadawca kanał zawodny odbiorca zpk_send(): wywoływany przez npk. Wysyła pakiet przez zawodny kanał do odbiorcy npk_rcv(): wywoływany przez niższą warstwę, gdy pakiet zostanie odebrany po stronie odbiorcy 3-26

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, odbiorcy zdarzenie powodujące zmianę stanu czynności wykonywane przy zmianie stanu stan: w określonym stanie, następny stan jest jednoznacznie określony przez następne zdarzenie stan 1 zdarzenie (lub brak: Λ) czynności (lub brak: Λ) stan 2 3-27

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, odbiorcy: nadawca wysyła dane przez kanał odbiorca odbiera dane z kanału Czekaj na wywołanie z góry npk_send(data) packet = make_pkt(data) zpk_send(packet) Czekaj na wywołanie z dołu npk_rcv(packet) extract (packet,data) deliver_data(data) nadawca odbiorca 3-28

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): odbiorca zawiadamia nadawcę, że pakiet jest dotarł bez błędu negatywne potwierdzenia (NAKs): odbiorca zawiadamia nadawcę, że pakiet ma błędy nadawca retransmituje pakiet po otrzymaniu NAK nowe mechanizmy w npk2.0: rozpoznawanie błędów informacja zwrotna od odbiorcy: komunikaty kontrolne (ACK,NAK) odbiorca->nadawca 3-29

npk2.0: specyfikacja AS npk_send(data) snkpkt = make_pkt(data, checksum) zpk_send(sndpkt) Czekaj na wywołanie z góry npk_rcv(rcvpkt) && isack(rcvpkt) Λ nadawca Czekaj na ACK lub NAK npk_rcv(rcvpkt) && isnak(rcvpkt) zpk_send(sndpkt ) odbiorca npk_rcv(rcvpkt) && corrupt(rcvpkt) zpk_send(nak) Czekaj na wywołanie z dołu npk_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) zpk_send(ack) 3-30

npk2.0: działanie bez błędów npk_send(data) snkpkt = make_pkt(data, checksum) zpk_send(sndpkt) Czekaj na wywołanie z góry Czekaj na ACK lub NAK npk_rcv(rcvpkt) && isnak(rcvpkt) zpk_send(sndpkt ) npk_rcv(rcvpkt) && corrupt(rcvpkt) zpk_send(nak) npk_rcv(rcvpkt) && isack(rcvpkt) Λ Czekaj na wywołanie z dołu npk_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) zpk_send(ack) 3-31

npk2.0: działanie z błędami npk_send(data) snkpkt = make_pkt(data, checksum) zpk_send(sndpkt) Czekaj na wywołanie z góry Czekaj na ACK lub NAK npk_rcv(rcvpkt) && isnak(rcvpkt) zpk_send(sndpkt ) npk_rcv(rcvpkt) && corrupt(rcvpkt) zpk_send(nak) npk_rcv(rcvpkt) && isack(rcvpkt) Λ Czekaj na wywołanie z dołu npk_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) zpk_send(ack) 3-32

npk2.0 ma fatalny błąd! Co się stanie, gdy ACK/NAK będzie miał błąd? nadawca nie wie, co się stało u odbiorcy! nie można po prostu zawsze retransmitować: możliwe jest wysłanie pakietu podwójnie (duplikatu). Obsługa duplikatów: nadawca dodaje numer sekwencyjny do każdego pakietu nadawca retransmituje aktualny pakiet, jeśli ACK/NAK ma błąd odbiorca wyrzuca (nie przekazuje wyżej) zduplikowane pakiety wstrzymaj i czekaj Nadawca wysyła jeden pakiet, potem czeka na odpowiedź odbiorcy 3-33

npk2.1: nadawca, obsługuje błędne ACK/NAK npk_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt) Λ npk_rcv(rcvpkt) && ( corrupt(rcvpkt) isnak(rcvpkt) ) zpk_send(sndpkt) npk_send(data) sndpkt = make_pkt(0, data, checksum) zpk_send(sndpkt) Czekaj na wywołanie z góry numer=0 Czekaj na ACK lub NAK numer=1 npk_send(data) Czekaj na ACK lub NAK numer=0 Czekaj na wywołanie z góry numer=1 sndpkt = make_pkt(1, data, checksum) zpk_send(sndpkt) npk_rcv(rcvpkt) && ( corrupt(rcvpkt) isnak(rcvpkt) ) zpk_send(sndpkt) npk_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt) Λ 3-34

npk2.1: odbiorca, obsługuje błędne ACK/NAK npk_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(nak, chksum) zpk_send(sndpkt) npk_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt) sndpkt = make_pkt(ack, chksum) zpk_send(sndpkt) npk_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, chksum) zpk_send(sndpkt) Czekaj na wyw. z dołu numer=0 Czekaj na wyw. z dołu numer=1 npk_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack, chksum) zpk_send(sndpkt) npk_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(nak, chksum) zpk_send(sndpkt) npk_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) sndpkt = make_pkt(ack, chksum) zpk_send(sndpkt) 3-35

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: odbiorca może nie wiedzieć czy ostatni ACK/NAK został poprawnie odebrany przez nadawcę 3-36

npk2.2: protokół bez negatywnych potwierdzeń (NAK) ta sama funkcjonalność co w npk2.1, używając tylko zwykłych potwierdzeń (ACK) zamiast NAK, odbiorca wysyła ACK za ostatni poprawnie odebrany pakiet odbiorca 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 3-37

npk2.2: fragmenty nadawcy, odbiorcy npk_rcv(rcvpkt) && (corrupt(rcvpkt) has_seq1(rcvpkt)) zpk_send(sndpkt) npk_send(data) sndpkt = make_pkt(0, data, checksum) zpk_send(sndpkt) Czekaj na wywołanie z góry numer=0 Czekaj na wywołanie z dołu fragment AS nadawcy fragment AS odbiorcy Czekaj na ACK numer=0 numer=0 npk_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ack1, chksum) zpk_send(sndpkt) npk_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,1) ) zpk_send(sndpkt) npk_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,0) Λ 3-38

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: nadawca 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 odbiorca musi określić numer sekwencyjny pakietu, który jest potwierdzany wymagany jest licznik czasu 3-39

npk3.0 nadawca npk_rcv(rcvpkt) Λ npk_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,1) stop_timer timeout zpk_send(sndpkt) start_timer npk_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,0) ) Λ Czekaj na wywołanie z góry numer=0 npk_send(data) sndpkt = make_pkt(0, data, checksum) zpk_send(sndpkt) start_timer Czekaj na ACK numer=1 npk_send(data) Czekaj na ACK numer=0 npk_rcv(rcvpkt) && ( corrupt(rcvpkt) isack(rcvpkt,1) Λ ) Czekaj na stop_timer wywołanie z góry numer=1 sndpkt = make_pkt(1, data, checksum) zpk_send(sndpkt) start_timer timeout zpk_send(sndpkt) start_timer npk_rcv(rcvpkt) && notcorrupt(rcvpkt) && isack(rcvpkt,0) npk_rcv(rcvpkt) Λ 3-40

npk3.0 w działaniu nadawca odbiorca nadawca odbiorca pkt 0 wyślij pkt 0 odbierz pkt 0 wyślij pkt 0 pkt 0 odbierz pkt 0 odbierz ACK 0 wyślij pkt 1 ACK 0 pkt 1 wyślij ACK 0 odbierz ACK 0 wyślij pkt 1 ACK 0 pkt 1 (strata) wyślij ACK 0 ACK 1 odbierz pkt 1 wyślij ACK 1 timeout, retransmituj odbierz ACK 1 wyślij pkt 0 pkt 0 pkt 1 pkt 1 ACK 0 odbierz pkt 0 wyślij ACK 0 odbierz ACK 1 wyślij pkt 0 ACK 1 pkt 0 odbierz pkt 1 wyślij ACK 1 ACK 0 odbierz pkt 2 wyślij ACK 0 działanie bez strat działanie ze stratą pakietu 3-41

npk3.0 w działaniu nadawca odbiorca nadawca odbiorca wyślij pkt 0 pkt 0 odbierz pkt 0 wyślij pkt 0 pkt 0 odbierz pkt 0 odbierz ACK 0 wyślij pkt 1 ACK 0 timeout, retransmituj (strata) pkt 1 pkt 1 odbierz ACK 1 wyślij pkt 2 pkt 1 ACK 1 pkt 2 ACK 2 wyślij ACK 0 ACK 1 odbierz pkt 1 wyślij ACK 1 działanie ze stratą ACK odbierz pkt 1 wyślij ACK 1 odbierz pkt 2 wyślij ACK 2 odbierz ACK 0 wyślij pkt 1 timeout, retransmituj pkt 1 ACK 1 odbierz ACK 1 wyślij pkt 2 ACK 1 ACK 0 ACK 0 pkt 1 pkt 1 za wczesny timeout pkt 0 wyślij ACK 0 odbierz pkt 1 wyślij ACK 1 odbierz pkt 1 wykryj duplikat wyślij ACK 1 odbierz pkt 0 wyślij ACK 0 Nic się nie dzieje! 3-42

Wydajność npk3.0 npk3.0 działa, ale wydajność ma bardzo kiepską przykład: link 1 Gb/s, opóźnienie k-k 15 ms, pakiet 1KB: T transmisji = L (rozmiar pakietu w b) R (przepustowość, b/s) = 8kb/pkt 10 9 b/s = 8 mikros. W nadawcy = L / R RTT + L / R =.008 30.008 = 0.00027 microsec W nadawcy : wykorzystanie procent czasu, w jakim nadawca nadaje pakiet rozmiaru 1KB co 30 ms -> przepustowość 33kB/s przez łącze 1 Gb/s protokół ogranicza wykorzystanie fizycznych zasobów łącza! 3-43

npk3.0: działanie wyślij i czekaj pierwszy bit pakietu wysłany, t =0 ostatni bit pakietu wysłany, t = L / R nadawca odbiorca RTT pierwszy bit odebrany ostatni bit odebrany, wyślij ACK ACK odebrane, wyślij następny pakiet, t = RTT + L / R W nadawcy = L / R RTT + L / R =.008 30.008 = 0.00027 microsec 3-44

Protokoły "wysyłające grupowo" Wysyłanie grupowe: nadawca wysyła wiele pakietów bez czekania na potwierdzenie trzeba zwiększyć zakres numerów sekwencyjnych trzeba mieć bufor u nadawcy i/lub odbiorcy Dwa podstawowe rodzaje protokołów wysyłania grupowego: wróć o N, selektywne powtarzanie 3-45

Wysyłanie grupowe: zwiększone wykorzystanie nadawca 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 odbiorca 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 Trzykrotnie zwiększone wykorzystanie! W nadawcy = 3 * L / R RTT + L / R =.024 30.008 = 0.0008 microsecon 3-46

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) już potwierdzony gotowy, nie wysłany wysłany, nie potwierdzony nie gotowy rozmiar okna: N ACK(n): potwierdza wszystkie pakiety aż do (i łącznie z) pakietem o numerze sekwencyjnym n - skumulowany ACK może otrzymywać duplikaty potwierdzeń (patrz odbiorca) potrzebny jest zegar jeden dla całego okna timeout: retransmisja wszystkich niepotwierdzonych pakietów w oknie, czyli od pocz_okn do nast_num 3-47

WN: rozszerzony AS nadawcy Λ pocz_okn=1 nast_num=1 npk_rcv(rcvpkt) && 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) start_timer nast_num++ } else refuse_data(dane) Czekaj timeout start_timer zpk_send(sndpkt[pocz_okn]) zpk_send(sndpkt[pocz_okn+1]) zpk_send(sndpkt[nast_num-1]) npk_rcv(rcvpkt) && notcorrupt(rcvpkt) pocz_okn = numer_ack(rcvpkt) + 1 If (pocz_okn == nast_num) stop_timer else start_timer 3-48

WN: rozszerzony AS odbiorcy default zpk_send(sndpkt) Λ expectedseqnum=1 Czekaj sndpkt = make_pkt(expectedseqnum,ack,chksum) npk_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(expectedseqnum,ack,chksum) zpk_send(sndpkt) 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 odbiorcy! Wysyłane jest ponownie ACK z numerem sekwencyjnym ostatniego pakiety odebranego w kolejności 3-49

WN w działaniu N = 4 pierwsze okno przesuwanie okna po ACK nadawca odbierz ACK 0 wyślij pkt 4 ACK 0 odbiorca wyślij pkt pkt 0 0 odbierz pkt wyślij pkt pkt 1 0 1 wyślij ACK 0 wyślij pkt 2 pkt 2 odbierz pkt 1 (strata) wyślij ACK 1 wyślij pkt pkt 3 3 czekaj odbierz ACK 1 ACK 1 pkt 4 odbierz pkt 3 i odrzuć go! wyślij ACK 1 odbierz pkt4 i odrzuć go! wyślij ACK 1 retransmisje wyślij pkt 5 pkt 5 odbierz pkt 5 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! wyślij ACK 1 odbierz pkt 2 wyślij ACK 2 odbierz pkt 3 wyślij ACK 3 3-50