inf_sc_w3.doc

(98 KB) Pobierz
Przez sieć komputerową rozumiemy wszystko to, co umożliwia komputerom komunikowanie się ze sobą oraz współdzielenie zasobów (n

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











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ójfazowethree-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 MSSMaximum 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



 

ESTABLISHED

 

 

 

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

Zgłoś jeśli naruszono regulamin