protokoły transportowe

Transkrypt

protokoły transportowe
Połączeniowe Mechanizmy
Protokołu Transportu
Połączenie logiczne
Zestawienie połączenia
Zerwanie połączenia
Niezawodne
Np. TCP
Niezawodna, Uporządkowana
Usługa Sieciowa
Przyjmijmy dowolną długość wiadomości
Przyjmijmy właściwie 100% pewność
dostarczenia przez sieć
np. niezawodna sieć pakietowa oparta na X.25
np. frame relay przy użyciu kontrolnego protokołu
LAPF
np. IEEE 802.3 przy użyciu usługi połączeniowej LLC
Usługa transportu jest protokołem dwukońcowym (end-to-end) pomiędzy dwoma
systemami w tej samej sieci
Zagadnienia w Prostym
Protokole Transportu
Adresowanie
Multipleksowanie
Kontrola strumienia danych
Zestawianie i zrywanie połączenia
Adresowanie
Docelowy użytkownik określony przez :
Identyfikacja użytkownika
⌧Zwykle host, port
• Nazywana gniazdem (socket) w TCP
⌧Port reprezentuje konkretną usługę transportu (TS) użytkownika
Identyfikacja jednostki transportu
⌧Zwykle tylko jedna na jednego hosta
⌧Jeśli więcej niż jedna to zwykle jedna danego typu
• Wybrać protokół transportu (TCP, UDP)
Adres hosta
⌧Podłączona karta sieciowa
⌧W internecie adres IP
Numer sieci
Szukanie Adresów
Cztery metody
Adres znany od razu
⌧np. zestaw danych karty sieciowej
Dobrze znane adresy
Serwer nazw
Wysyłanie żądania procesu na dobrze znany adres
Multipleksowanie
Wielu użytkowników używa tego samego
protokołu transportu
Użytkownicy identyfikowani przez numer portu
bądź punkt dostępu do usługi (SAP)
Multipleksować można także usługi sieciowe
np. multipleksowanie jednego wirtualnego połączenia
X.25 do kilku użytkowników protokołu transportu
⌧X.25 obciąża za czas korzystania z wirtualnego połączenia
Kontrola Strumienia Danych
Dłuższe opóźnienie pomiędzy jednostkami
transportu niż właściwy czas przesłania
Opóźnienie w wymianie informacji o kontroli
strumienia
Różne wartości opóźnień
Trudno używać pola odliczania (timeout)
Strumień musi być kontrolowany, ponieważ:
Odbiorca może nie nadążać
Jednostka transportu po stronie odbiorcy może nie
nadążać
Kończy się wypełnieniem bufora
Jak radzić sobie z
wymaganiami strumienia (1)
Nic nie robić
Segmenty które zalewają odbiorcę są odrzucane
Nadawca nie otrzyma ACK i powtórzy transmisję
⌧Dalsze zwiększenie napływu danych
Odrzucenie kolejnych segmentów
Niezręczne
Multipleksowane połączenia są kontrolowane na
jednym, zagregowanym strumieniu
Jak radzić sobie z
wymaganiami strumienia(2)
Używać protokołu przesuwającego okna o
stałym rozmiarze
Analogicznie do protokołów warstwy liniowej
Działa dobrze na stosunkowo niezawodnej sieci
⌧Nieodebranie ACK jest tratowane jako sygnał kontroli
strumienia danych
Nie działa dobrze na nieefektywnej sieci
⌧Nie można rozróżnić pomiędzy zgubionym segmentem, a
kontrolą strumienia
Użyć schemat kredytu
Schemat Kredytu
Większa kontrola w niezawodnych sieciach
Bardziej efektywna w zawodnych sieciach
Rozszczepia kontrolę strumienia i ACK
Można wysłać ACK z pozwoleniem na dalszy strumień
danych bądź bez
Każdy oktet ma numer sekwencyjny
Każdy segment ma zawarty w nagłówku numer
sekwencyjny, numer ACK i wielkość okna
Użycie Pól w Nagłówku
Kiedy wysyłamy segment, numer sekwencyjny
to numer pierwszego oktetu w tym segmencie
ACK zawiera AN=i, W=j (numer ACK, rozmiar
okna)
Wszystkie oktety do SN=i-1 są potwierdzone
Następny jest spodziewany oktet i
Zezwolenie na wysłanie dodatkowego okna W=j
oktetów
i.e. Oktety do i+j-1
Alokacja Kredytu
Perspektywy Nadania i Odbioru
Zestawianie i zrywanie
połączenia
Zezwolić by każdy koniec połączenia wiedział o
drugim końcu
Negocjacja opcjonalnych parametrów
Pociąga za sobą przypisanie zasobów jednostek
transportu
Przez wzajemne przypisanie
Diagram Stanu Połączenia
Zestawianie Połączenia
Nie Słucha
Odrzucić z RST (Reset)
Zakolejkować żądanie dopóki odpowiednia
komenda otwarcia nie zostanie wysłana
Zasygnalizować użytkownikowi pilne żądanie
May replace passive open with accept
Zrywanie Połączenia
Oba lub jeden koniec
Przez obustronne porozumienie
Nagłe zerwanie
Lub grzeczne odłączenie
Stan oczekiwania zamknięcia musi przyjmować dane
dopóki FIN nie zostanie odebrane
Zakończenie połączenia
Gwałtowne zerwanie ze stratą danych
Zakończenie połączenia
Problem dwóch armii
Strona Zrywająca
Użytkownik wysyła żądanie zamknięcia sesji
(Close)
Jednostka transportu wysyła FIN, żądając
zakończenia połączenia
Połączenie ustawione w trybie FIN WAIT
Kontynuowanie odbierania i wysyłania danych
Powstrzymanie się od wysyłania danych
Kiedy otrzyma FIN, jednostka transportu
informuje użytkownika i zamyka sesję
Strona nie Zrywająca
FIN otrzymany
Poinformowanie użytkownika o umieszczeniu
połączenia w stanie CLOSE WAIT
Kontynuacja wysyłania danych od użytkownika
Użytkownik wydaje komendę CLOSE
Jednostka transportu wysyła FIN
Połączenie rozłączone
Wszystkie pozostałe dane są wysyłane przez
obie strony
Obie strony zgadzają się na zamknięcie sesji
Zakończenie połączenia
6-14, a, b
(a) Normalny przypadek zakończenia przez potrójny uścisk
(b) Zaginiony końcowy ACK
Zakończenie połączenia
6-14, c,d
(c) Utrata odpowiedzi
(d) Utrata odpowiedzi i powtórzenia ządania rozłączenia.
Niepewna Usługa Sieciowa
Np.
Internet poprzez IP,
frame relay poprzez LAPF
IEEE 802.3 poprzez niepotwierdzane,
bezpołączeniowe LLC
Segmenty mogą zaginąć
Segmenty mogą dojść nie w kolejności
Problemy
Kolejność dostarczenia
Strategia retransmisji
Wykrywanie duplikatów
Kontrola strumienia danych
Zestawianie połączenia
Zrywanie połączenia
Odzyskiwanie połączenia po awarii
Kolejność Dostarczania Danych
Segmenty mogą dojść nie w kolejności
Numerowanie segmentów sekwencyjnie
TCP numeruje każdy oktet sekwencyjnie
Segmenty są numerowane numerem pierwszego
oktetu w danym segmencie
Strategia Retransmisji
Segmenty uszkodzone w czasie transmisji
Segmenty nie dotarły
Nadawca nie wie o defekcie
Odbiorca musi potwierdzić poprawny odbiór
Używanie kumulacyjnego potwierdzania
Ograniczony czas oczekiwania na ACK inicjuje
retransmisje
Wartość Licznika
Stały licznik
Oparty na zrozumienia zachowania sieci
Nie przystosowuje się do zmieniających się realiów
Zbyt krótki powoduje zbyt częste retransmisje
Zbyt długi i odpowiedź na zagubione segmenty wolna
Powinien być trochę dłuższy niż czas transmisji w obie strony
Schemat adaptacyjny
Może nie potwierdzić od razu
Może nie odróżnić potwierdzenia segmentu oryginalnego i
retransmitowanego
Warunki mogą zmienić się nagle
Wykrywanie Duplikatów
Jeśli ACK zaginął segment jest wysyłany ponownie
Odbiorca musi rozpoznawać duplikaty
Duplikat otrzymany przed zerwaniem połączenia
Odbiorca uznaje ACK za zagubiony i wysyła ACK znów
Nadawca nie może się zagubić w mnogości potwierdzeń
Przestrzeń numerów sekwencyjnych wystarczająco duża, by nie
powtórzyć się podczas „czasu życia” segmentu
Duplikat otrzymany po zerwaniu połączenia
Niewłaściwa
Detekcja
Duplikatu
Kontrola Strumienia Danych
Przypisanie kredytu
Problem jeśli AN=i, W=0 okno zamknięcia
Wyślij AN=i, W=j by otworzyć, ale segment
zostaje zagubiony
Nadawca myśli, że okno zamknięte, a odbiorca
że otwarte
Używanie licznika okna
Jeśli się wyzeruje, wysłać cokolwiek
Może być retransmisja poprzedniego segmentu
Zestawianie Połączenia
Dwustronne „uściśnięcie dłoni”
A wysyła SYN, B odpowiada wysyłając SYN
Zagubiony SYN obsługiwany przez retransmisję
⌧Może doprowadzić do duplikatów SYN
Ignorowanie duplikatów SYN jeśli już połączony
Zagubione lub opóźnione segmenty mogą powodować
problemy z połączeniem
Segment ze starych połączeń
Zacząć numerowanie segmentów za poprzednim ostatnim
⌧Używać SYN i
⌧Trzeba potwierdzić by załączyć i
⌧Potrójne „uściśnięcie dłoni
Dwustronny
„Uścisk”
Stary
Segment
Danych
Dwustronny „Uścisk”:
Przestarzały Segment SYN
Potrójny
„Uścisk”
Diagram
Stanów
Potrójny
„Uścisk”
Przykłady
Zrywanie Połączenia
Jednostka w stanie CLOSE WAIT wysyła ostatni segment
danych i zaraz potem FIN
FIN dociera przed danymi
Odbiorca akceptuje FIN
Zamyka połączenie
Traci ostatni segment danych
Kojarzenie numeru sekwencyjnego z FIN
Odbiorca czeka na wszystkie segmenty przed numerem
sekwencyjnym FIN
Strata segmentów i przestarzałych segmentów
Trzeba wyraźnie ACK FIN
Łagodne Zerwanie
Wysłanie FIN i, odebranie AN i
Otrzymanie FIN j, wysłanie AN j
Poczekać dwukrotny maksymalny czas życia
segmentu
Odzyskiwanie Połączenia po
Awarii
Po awarii wszystkie informacje o stanie giną
Połączenie jest połowicznie otwarte
Strona która nie uległa awarii myśli że wciąż jest połączona
Zamykanie połączenia używając licznika
Czekać na ACK przez (time out) * (ilość retransmisji)
Kiedy się wyzeruje zamknąć połączenie i poinformować
użytkownika
Wysłanie RST i w odpowiedni na jakikolwiek segment i
Użytkownik musi sam zdecydować czy łączyć się
ponownie
Problemy z zagubionymi danymi i duplikatami
TCP & UDP
Transmission Control Protocol (TCP)
Zorientowany połączeniowo
RFC 793
User Datagram Protocol (UDP)
Bezpołączeniowy
RFC 768
Usługi TCP
Pewna komunikacja pomiędzy dwoma procesami na
różnych hostach
Przez różnorodne pewne i niepewne sieci i intersieci
Dwa rodzaje usługi
„Wypchnięcie” (push) strumienia danych
⌧Użytkownik TCP może wymagać przesłania wszystkich danych aż
do flagi push
⌧Odbiorca będzie wysyłał w ten sam sposób
⌧Nie trzeba czekać na zapełnienie bufora
Pilny sygnał danych
⌧Wskazuje na nadchodzący strumień pilnych danych
⌧Użytkownik decyduje jak się z nim obchodzić
Nagłówek TCP
Nagłówek segmentu TCP (2)
Pseudonagłówek zawarty w obliczeniach sumy
kontrolnej TCP
Obiekty przekazywane do IP
TCP przekazuje parę parametrów do IP
Kolejność
Normalne/niskie opóźnienie
Normalna/wysoka przepustowość
Normalna/wysoka niezawodność
Bezpieczeństwo
Co robi warstwa IP w praktyce ?
Nagłówek TCP – pola cd.
Data offset – inaczej długość nagłówka TCP – w wierszach 32 bitowych
Wskaźnik pilności – wskazuje miejsce w segmencie ( o ustawionym bicie
URG) gdzie kończą się pilne dane
Opcje:
MSS – Maximum segment size ( 536 oktetów danych) – minimum z
dwóch propozycji – obecnie bardziej zaawansowane algorytmy
Skala okna ( RFC 1323) – w 64 KB jednostkach - mnożone przez 216
⌧Sieci gigabitowe, pojemność łącza
Selective Repeat – zamiast Go-Back-N, NAK, też SACK.
Znacznik czasu – opcja stosowana w szybkich sieciach
⌧zabezpiecza też przed „inkarnacją” starych segmentów lub ich duplikatów
no nowego połączenia –
⌧do tego służy głównie zakładane przez implementacje TCP wartości MSL (
maximum segment lifetime)
⌧Pierwsze MSL = 2 minuty !!!! , czas „przekręcenia licznika” dla łącza 45
Mbps – 12 minut , ale dla 2,4 Gbps - 12 sekund
⌧Time_wait (czekanie na spóźnionych) – licznik czasu zamknięcia połączenia
= 2*MSL ( było na diagramie stanów )
Mechanizmy TCP (1)
Zestawianie połączenia
Potrójny „uścisk dłoni”
Pomiędzy parą portów
Jeden port może łączyć się z wieloma odbiorcami
Transfer danych
Logiczny strumień oktetów (bajtów), a nie wiadomości
(segmentów)
Oktety numerowane modulo 232
Kontrola strumienia poprzez przypisywanie kredytu od odbiorcy
w postaci ilości oktetów
Dane buforowane u nadawcy i odbiorcy
Mechanizmy TCP (2)
Zrywanie połączenia
Łagodne zamknięcie sesji
Użytkownik TCP wysyła komendę CLOSE
Jednostka transportu ustawia flagę FIN w ostatnim
wysyłanym segmencie
Nagłe zerwanie poprzez komendę ABORT
⌧Jednostka porzuca próby wysyłania i odbioru danych
⌧Segment RST wysyłany
Opcje Polityki Implementacji
Wyślij
Dostarcz
Zaakceptuj
Retransmituj
Potwierdź
Wyślij
Jeśli bez push lub close jednostka TCP nadaje
wg własnego uznania
Dane buforowane w buforze transmisji
Można tworzyć segment z paczki danych
Można oczekiwać na konkretną ilość danych
Dostarcz
W przypadku braku push, dostarcz dane wg
uznania
Można dostarczać w kolejności otrzymywania
segmentów
Można buforować dane z więcej niż jednego
segmentu
Akceptuj
Segmenty mogą nie dotrzeć w kolejności
W kolejności
Akceptuj segmenty tylko w kolejności
Odrzuć segmenty nie w kolejności
W oknach
Akceptuj wszystkie segmenty w zasięgu okna odbioru
Retransmituj
TCP trzyma kolejkę segmentów wysłanych ale
nie potwierdzonych
TCP retransmituje jeśli nie potwierdzone w
przeciągu danego czasu
Tylko pierwszy
Całą paczkę (zawartość okna)
Indywidualnie
Potwierdzenie
Natychmiastowe
Kumulacyjne
Liczniki czasu
Czas retransmisji
Czas ponowne połączenia ( reconnection)
Czas okna ( window) –maksymalny czas miedzy segmentami
ACK/kredyt
Retransmisji SYN – ponowna próba nawiązania połączenia
Licznik bezustanny – zamyka połączenie po braku potwierdzeń
segmentów
Licznik nieaktywności – zamyka połączenie gdy nie ma
segmentów z obu stron
Kontrola Przeciążeń
RFC 1122, Wymagania dla hostów internetowych
Zarządzanie licznikiem retransmisji (RTO –
retransmission timeout)
Oszacuj czas dwustronnej transmisji (RTT) poprzez obserwację
tendencji opóźnień
Ustawić czas licznika na trochę powyżej oszacowanego
Prosta średnia dla RTT
Średnia wykładnicza dla RTT
Oszacowanie wariancji RTT (algorytm Jacobsona)
⌧RTT_new=a*RTT_old + (1-a)*RTT_przybyłe, a=7/8
⌧RTO=b*RTT , b=2
⌧Odchylenie D=aD_old + (1-a)*|RTT-RTT_przybyłe|
⌧RTO= RTT + 4 * D
⌧ Co z potwierdzeniami duplikatów – trudności w określeniu RTT , i
co robić z czasem retransmisji ? Rozwiązuje to Karn -
Zarządzanie zegarami w TCP
(a) Gęstość prawdopodobieństwa czasów przybycia Ack w
warstwei liniowej ( LAN)
(b) jw. dla TCP (sieć rozległa – Internet)
Wykładnicze Korekcje RTO
Ponieważ licznik jest funkcją przeciążenia
(odrzucony pakiet lub długi RTT), utrzymywanie
RTO na tym samym poziomie jest nieuzasadnione
RTO jest zwiększane z każdym retransmitowanym
segmentem
RTO = q*RTO
Z reguły q=2
Binarna korekcja wykładnicza
Karn w TCP/IP, w niepewnych sieciach radiowych
Algorytm Karn’a
Jeśli segment jest retransmitowany, otrzymany ACK
może być uznany:
Za pierwszą kopię segmentu
⌧RTT dłuższy niż spodziewany
Za drugą kopię
Nie ma sposobu by je odróżnić
Nie mierzyć RTT dla retransmitowanych segmentów
Obliczać korekcję kiedy zachodzi retransmisja
Używać korekcji RTO ( wykładniczej) dopóki nie
nadejdzie ACK za segment nie retransmitowany
Zarządzanie Oknem
„Powolny start”
⌧Okno dozwolone = MIN[kredyt, cwnd]
⌧Zacząć połączenie z cwnd=1 (cwnd – okno przeciążeniowe)
⌧Zwiększać cwnd za każdym ACK, do jakiegoś max
⌧To znaczy, że start jest szybki – bo wykładniczy – 1,2,4,8, etc.
⌧Pierwotnie zwany „soft start” ☺
Dynamiczne dopasowywanie okna w czasie przeciążenia
⌧Kiedy licznik się wyzeruje
⌧Ustawić górną granicę „powolnego startu” do połowy obecnego okna
przeciążenia (cwnd)
• ssthresh=cwnd/2
⌧Ustawić cwnd = 1 i „powolny start” dopóki cwnd=ssthresh
• Zwiększać cwnd o 1 dla każdego otrzymanego ACK
⌧Dla cwnd >=ssthresh, zwiększyć cwnd o 1 dla każdego mierzonego RTT –
stan unikania przeciążenia
Dlaczego TCP w ten sposób kontroluje przeciążenia ?
⌧Przepełnienie buforów jako prawdopodobna przyczyną utraty segmentów
Okno kredytowe w TCP
Zarządzanie oknem w TCP.
TCP Kontrola przeciążeń
Przykład algorytmu unikania przeciążeń w Internecie (powolny start)
Polityka transmisji w TCP
Syndrom „głupiego okna”
Zapobieganiu syndromu
„głupiego okna”
Rozwiązanie Clark’a
Wysyłać update okna – po osiągnięciu MSS, lub połowa buforu
(co mniejsze)
Po stronie nadawcy – też nie wysyłać zbyt małych segmentów
Aplikacje typu telnet
Wysłanie jednego znaku, ACK, update okna po przesłaniu
danych do aplikacji, echo znaku
Łącznie 4 segmenty ( 162 bajty IP i TCP)
Swoboda po stronie nadawcy i odbiorcy
⌧Opoźnianie wysyłania ACK i aktualizacji okna
⌧Algorytm Nagle’a
• Po stronie nadawcy – wysłanie pierwszego bajtu i dalej buforowanie aż
do otrzymania potwierdzenia
• Stosowany szeroko, ale w X- windows lepiej nie używać – ruchy myszy
Oba rozwiązania mogą pracować razem
Nadawca nie wysyła małych segmentów ( Nagle), a odbiorca ich
nie żąda ( Clark)
UDP
User datagram protocol
RFC 768
Bezpołączeniowa usługa dla procedur poziomu
aplikacji
Niepewna
Dostarczenie i kontrola duplikatów nie gwarantowana
Zmniejszona redundancja(overhead)
Zastosowanie wzrasta
Dlaczego ?
Użycie UDP
Wewnętrzne zbieranie danych
tftp
Zewnętrzne szerzenie (rozgłaszanie) danych
RIP
Żądanie-odpowiedź
DNS
Aplikacje czasu rzeczywistego (real-time)
RTP
Tunelowanie
L2TP, ISAKMP
Nagłówek UDP
Dobrze znane porty
Porty UDP
7 – echo
11 – systat
19 – chargen
53 – nameserver ( DNS)
69 – tftp
123 – NTP – network time protocol
Porty TCP
20 – ftp –data
21 – ftp
23 – telnet
22 – ssh
25 – smtp
53 –DNS
Porty TCP cd.
79 – finger
80 – http
110 – POP
139 – Netbios SSN
143 - IMAP
/etc/services
telnet host port
Pasywne i aktywne otwarcie połączeń TCP
Porty do 1023 i wyżej do ... ?
Interfejs gniazd ( socket)
Co się dzieje jeśli brak otwarcia pasywnego ?
ICMP , RST w TCP (czasami)
Real-Time Transport Protocol
(a) Pozycja RTP w stosie protokołów ( warstw)
(b) Zagnieżdzenia pakietów
Nagłówek RTP
Nagłówek RTP
Inne protokoły transportowe
• Problemy TCP w sieciach zawodnych (bezprzewodowych)
• Pośredni TCP ( i-TCP), indirect, split
• Dzieli połączenie TCP – narusza semantykę end-to-end ( a NAT ?)
• Snoop TCP ( podsłuchujący)
• Buforowanie, eliminacja duplikatów potwierdzeń
• Nadal End-to-End,
• Opcje SACK
• Protokół UDP – nie rozwiązuje tych problemów
• Przeniesienie do warstwy aplikacji
• Transakcyjny TCP – T/TCP
• Skrócenie procedury uruchamiania aplikacji typu żądanie – odpowiedź
• Efektywność bliska UDP, ale niezawodność w warstwie transportowej
• SCTP – Stream Control Transmission Protocol
• Strumień wielu ( multihoming) pakietów (chunks)
• Możliwości bezsekwencyjnego dostarczania, potwierdzenia SACK
Wydajność sieci
• Zagadnienie sieci gigabitowych
•
•
•
•
Czas transmisji pakietu
Czas propagacji i RTT
Pojemność
Wielkość okna
• update okna odbiorcy
• opcje okna w TCP
• Mechanizmy potwierdzania
• Go-Back-N , SACK
• Przetwarzanie pakietów w węzłach, u nadawcy i odbiorcy
• Implementacje
• Rozwój sieci i komputerów – przepustowość vs. moc obliczeniowa
• 56 kbs vs 5 Gbs – 106
• Niedoszacowanie rozwoj sieci
• IP v6 –
• Szybsze przetwarzanie
• „duży” nadmiar nagłówków
• ATM - ?

Podobne dokumenty