Sieci komputerowe wykład 3.
Warstwa transportowa: TCP i UDP.
TCP – Transmission Control Protocol.
RFC 793.
Oprogramowanie TCP tworzy połączenia (connection) między dwoma procesami z jednoczesną dwukierunkową transmisją.
Proces 2,
IP2,
Port2
Proces 1,
IP1,
Port1
Wejście
Wyjście
Połączenie TCP
TCP łączy dwa punkty końcowe, które są identyfikowane przez parę: nr IP oraz nr portu. Połączenie identyfikowane jest przez cztery liczby: dwa numery IP oraz dwa numery portów. Dzięki temu można np. realizować serwery współbieżne działające z tymi samymi numerami portów (wyjaśnienie na wykładzie).
Pomiędzy procesami wymieniany jest strumień 8-bitowych tzw. oktetów (bajtów). Stąd mówi się o usłudze strumienia bajtów. W strumieniu nie są umieszczane automatycznie żadne znaczniki rekordów. Bajty wysyłane są w segmentach (por. poprzedni wykład), porcjami, ale aplikacja docelowa nie jest w stanie określić wielkości poszczególnych porcji w źródle.
Ważne cechy TCP:
· Partnerzy (komunikujące się procesy) tworzą połączenie z wykorzystaniem mechanizmu uzgodnienia (uzgadnianie trójfazowe – three-way handshake).
· Zamknięcie połączenia odbywa się z wykorzystaniem mechanizmu uzgodnienia, podczas którego partnerzy wyrażają zgodę na zamkniecie połączenia.
· TCP zapewnia sterowanie przepływem. Informuje partnera o tym ile bajtów danych może od niego przyjąć (okno oferowane – advertized window). Rozmiar okna jest równy rozmiarowi wolnego miejsca w buforze odbiorcy. Rozmiar ten zmienia się dynamicznie. Zero oznacza, że nadawca musi zaczekać, aż program użytkowy odbierze dane z bufora.
· Dane dzielone są na fragmenty, które według TCP mają najlepszy do przesłania rozmiar. Jednostka przesyłania danych nazywa się segmentem.
· TCP zapewnia niezawodność połączenia.
Mechanizmy niezawodności:
Potwierdzanie otrzymania segmentów z mechanizmem zegara. Odebrany segment musi być potwierdzony przez odbiorcę przez wysłanie segmentu potwierdzającego. Jeśli potwierdzenie nie nadejdzie w odpowiednim czasie, segment zostanie przesłany powtórnie. Czas oczekiwania zmienia się dynamicznie i zależy od stanu sieci (obciążenia).
Sumy kontrolne. Jeśli segment zostanie nadesłany z niepoprawna sumą kontrolną, to jest odrzucany i nie jest przesyłane potwierdzenie odbioru (w nadziei, że nadawca po odczekaniu odpowiedniego czasu prześle utracony segment jeszcze raz).
Przywracanie kolejności nadchodzących segmentów. Segmenty mogą nadchodzić w kolejności innej niż zostały wysłane, oprogramowanie TCP przywraca prawidłową kolejność przed przekazaniem do aplikacji.
Odrzucanie zdublowanych danych (pakietów). Może się zdarzyć, że pakiet zostanie przesłany powtórnie, ale pierwszy pakiet nie zaginie i do odbiorcy dotrą dwa. Wówczas jeden z pakietów należy odrzucić.
Porty – numery.
IANA (Internet Assigned Numbers Authority).
RFC 1700.
ftp://ftp.isi.edu/in-notes/iana/assignments/port-numbers
0..65535.
IANA
1..1023 – porty ogólnie znane
1024..49151 – zarejestrowane
41152 ..65535 – dynamiczne (efemeryczne) lub prywatne.
(W Unix BSD 1..1023 zarezerwowane, 1024-5000 efemeryczne, 5001-65535 nieuprzywilejowane).
Powszechne usługi w implementacjach TCP/IP:
Nazwa Port TCP i UDP RFC
echo 7 862 serwer zwraca wszystko co wysyła klient
discard 9 863 serwer odrzuca wszystko
daytime 13 867 data i czas
chargen 19 864 TCP generuje nieprzerwany ciąg znaków do zakończenia połączenia, UDP generuje ciąg o losowej długości
time 37 868 czas – liczba sekund od 01-01-1990 UTC
telnet 23
ssh 22
http 80
ftp 21
Segment TCP, nagłówek segmentu.
nagłówek TCP
dane TCP
nagłówek IP
Enkapsulacja segmentu TCP w datagramie IP.
0 15 16 31
16-bitowy numer portu źródłowego
16-bitowy numer portu docelowego
4-bajtowy numer sekwencji pierwszego oktetu w strumieniu danych.
4-bajtowy numer potwierdzenia
4-bitowa długość nagłówka
Rezerwa (6 bitów) – zera
URG
ACK
PSH
RST
SYN
FIN
16-bitowy rozmiar okna
16 bitowa suma kontrolna TCP
16 bitowy wskaźnik ważności
Opcje (jeśli są)
Dane (jeśli są)
Dodatkowe objaśnienia:
Numer sekwencji. Dla segmentu ze znacznikiem SYN w pole wpisuje się numer sekwencji początkowej, tzw. ISN (Initial Sequence Number). Pierwszy oktet danych ma numer ISN+1. ISN jest ustalany na podstawie licznika 32 bitowego [zakres 0..232-1]. RFC 793 określa, że numer ISN powinien rosnąć co 4 mikrosekundy. W praktycznych implementacjach jest inaczej, np. zwiększanie o 64000 co pół sekundy. Co kilka godzin licznik się zeruje.
Numer potwierdzenia jest ważny tylko przy włączonym znaczniku ACK. Jest to kolejny numer bajtu, którego spodziewa się wysyłający potwierdzenie.
Długość nagłówka (w protokole pole to jest określone jako przesunięcie danych). Wielkość nagłówka wyrażona w liczbie bloków 4-bajtowych.
Znaczniki (będą wyjaśniane dokładnie później):
URG – wskaźnik ponaglenia,
ACK – segment potwierdzenia,
PSH – segment „push” – wypchnięcie danych,
RST – zresetowanie połączenia,
SYN – synchronizacja,
FIN – nadawca zakończył przesyłanie danych.
Rozmiar okna. Oznacza liczbę bajtów, które odbiorca chce zaakceptować (poczynając od bajtu o numerze podanym w polu numer potwierdzenia).
Suma kontrolna. Liczona dla nagłówka i danych, z użyciem pseudonagłówka liczona tak jak w UDP (wyjaśnienie przy UDP).
Wskaźnik ważności. Dodatnie przesunięcie, które musi być dodane do pola przesunięcia sekwencyjnego aby uzyskać numer ostatniego bajtu ważnych danych.
Opcje. Rodzaj opcji (bajt), długość opcji (bajt), opcja. Najważniejsza opcja to MSS – Maximum Segment Size. Może być uzyskana jako MTU (Maximum Transmission Unit) minus rozmiar nagłówka IP oraz TCP. Dla MSS rodzaj opcji określony jast liczbą 2, długość opcji wynosi 4 (cały wpis), dwa kolejne bajty to wartość MSS. Przykładowo dla Ethernetu MTU=1500, stąd MSS=1500 – 40 = 1460 (40 bajtowy minimalny rozmiar nagłówków IP i TCP). Wartość domyślna MSS (jeśli nie podany) wynosi 536. MSS podawany jest w segmencie SYN.
Nawiązywanie i zamykanie połączenia, przesyłanie danych.
klient serwer
otwarcie bierne
LISTEN
otwarcie aktywne
SYN SENT
SYN, j, mss=1460
SYN RECVD
SYN k, ACK j+1, mss=1024
ESTABLISHED
ACK k+1
dane: żądanie
Opóźnione potwierdzanie
(„piggyback – jazda na barana”)
dane: odpowiedź /
ew. ACK dla żądania
ACK dla odpowiedzi
zamknięcie aktywne
FIN WAIT-1
FIN m
CLOSE WAIT zamknięcie bierne
ACK m+1
FIN WAIT-2
LAST ACK
FIN n
TIME WAIT
ACK n...
adanis