SEGMENT TCP CZ. I Numer portu źródłowego (ang. Source port), przeznaczenia (ang. Destination port) identyfikują aplikacje wysyłającą odbierającą dane, te dwie wielkości wraz adresami IP źródła i przeznaczenia umieszczonymi w nagłówku IP, jednoznacznie identyfikują każde połączenie Numer sekwencyjny (ang. Sequence number) identyfikuje bajt w strumieniu danych, przesyłanych między nadawcą a odbiorcą, który jest pierwszym bajtem w przesyłanym segmencie. Numer ten po osiągnięciu 2^32-1 rozpoczyna się znowu od zera Numer potwierdzenia zawiera kolejny numer sekwencyjny, którego nadejścia spodziewa się wysyłający potwierdzenie. Pole to jest ważne przy ustawieniu bitu ACK. Długość nagłówka (ang. Data offset) - pole podaje długość nagłówka w postaci słów 32 bitowych, typowy rozmiar bez opcji wynosi 20 bajtów.
SEGMENT TCP CZ. II Bity znaczników (ang. Flags): URG - wskaźnik ważności pola wskaźnika przynaglającego ACK - wskaźnik ważności pola numer potwierdzenia PSH - odbiorca powinien jak najszybciej przesłać dane do aplikacji RST - restart połączenia SYN - synchronizacja numerów sekwencyjnych w celu inicjalizacji połączenia FIN - zakończenie wysyłania danych Rozmiar okna (ang. Window) liczba bajtów, liczba bajtów poczynając od tego, który określony został przez pole numeru potwierdzenia, które odbiorca będzie w stanie zaakceptować Suma kontrolna (ang. Checksum) liczona dla danych jak i nagłówka, weryfikowana po stronie odbiorczej
SEGMENT TCP CZ. III Wskaźnik ważności (ang. Urgent pointer) - brane pod uwagę przy ustawieniu bitu URG, jest on dodatnim przesunięciem, które musi być dodane do pola numeru sekwencyjnego segmentu, aby uzyskać numer sekwencyjny ostatniego bajtu ważnych danych Opcje (ang. Options) może określać np. maksymalną długość segmentu MSS (ustalana przy nawiązaniu połączenia, maksymalny rozmiar segmentu jaki nadawca chce otrzymać), często określa również współczynnik rozmiaru okna (zwykle w bajtach, przy ustawieniu skala okna jest ustawiona na F wówczas rozmiar okna jest mnożony przez 2^F, przy czym maksymalnie F=14) oraz znaczniki czasu wykorzystywane przy pomiarze czasu dostarczania pakietu.
POŁĄCZENIA TCP Wydarzenie po stronie nadawcy Wysłanie pakietu 1 Komunikaty sieciowe Wydarzenie po po stronie odbiorcy Odebranie pakietu 1 Wydarzenie po stronie nadawcy Wysłanie pakietu 1 Uruchomienie zegara Komunikaty sieciowe Wydarzenie po po stronie odbiorcy Utrata pakietu Spodziewane przybycie pakietu Odebranie ACK1 Wysłanie ACK1 Spodziewane przybycie ACK Powinno zostać wysłane ACK Przekroczenie limitu czasowego Wysłanie pakietu 2 Odebranie pakietu 2 Retransmisja pakietu 1 Odebranie pakietu 1 Uruchomienie zegara Odebranie ACK2 Wysłanie ACK2 Odebranie ACK 1 Wysłanie ACK 1 Skasowanie zegara A. Protokół pozytywnie potwierdzający z retransmisją B. Przekroczenie limitów czasu i retransmisja przy utracie pakietu
NAWIĄZYWANIE POŁĄCZENIA TCP Proces nawiązania połączenia składa się z 3 kroków ( three way handshake ) : Strona, która wysyła zapytania (zwykle zwana klientem) nadaje segment SYN, określający numer portu serwera, z którym klient chce się połączyć, a także początkowy numer sekwencyjny klienta Serwer odpowiada, wysyłając własny segment SYN zawierający początkowy numer sekwencyjny serwera. Ponadto serwer potwierdza odebranie segmentu SYN klienta, wysyłając (ACK) z nadesłanym przez klienta INS plus jeden. Klient potwierdza nadesłany przez serwer segment SYN wysyłając ACK z INS serwera powiększony o jeden Klient Segment 1 Segment 3 SYN 10:10(0) <MSS 1024> Ack 100 Ack 11, ms<1042> Serwer Segment 2 Strona, która wysyła pierwszy SYN wykonuje tak zwane aktywne otwarcie. Druga strona, która odbiera SYN i wysyła w odpowiedzi segment SYN, wykonuje tak zwane pasywne otwarcie.
ZAKOŃCZENIE POŁĄCZENIA TCP Ponieważ połączenie TCP jest połączeniem full-duplex, to każdy z kierunków musi zostać zamknięty niezależnie. Odebranie FIN oznacza jedynie, że w tym kierunku połączenia nie będą płynęły już dane. TCP może nadal wysyłać dane po odebraniu FIN (połączenie półzamknięte). Klient Serwer Application close FIN Ack FIN EOF to application FIN Application close Ack FIN W celu pełnego zamknięcia połączenia druga strona musi wykonać podobną sekwencję operacji (FIN, oraz potwierdzenie ACK FIN).
MECHANIZM PRZUWNEGO OKNA W sterowaniu przepływem danych masowych jest wykorzystywany mechanizm przesuwnego okna (sliding window). Na rysunku liczby od 1 do 11 są numerami kolejnych bajtów. Okno, o którym informacje podaje odbiorca, nazywane jest oknem oferowanym (offered window) i pokrywa bajty od 4 do 9, co oznacza, że odbiorca potwierdził otrzymanie wszystkich bajtów od 1 do 3 włącznie i proponuje użycie oknao rozmiarze 6. Rozmiar okna jest uzależniony od potwierdzonego numeru sekwencyjnego. Nadawca liczy wielkość okna użytecznego (usable window), które określa, ile danych może być przesłanych natychmiast. O f e r o w a n e o k n o ( r o z g ł a s z a n e p r z e z o d b i o r c ę ) O k n o u ż y t e c z n e 1 2 3 4 5 6 7 8 9 1 0 1 1... W y s ł a n e i p o t w i e r d z o n e W y s ł a n e i n i e p o t w i e r d z o n e M o ż n a w y s ł a ć A S A P N i e m o ż n a w y s ł a ć d o p ó k i o k n o j e s t w r u c h u
MECHANIZM PRZUWNEGO OKNA - CD W miarę upływu czasu okno to rozszerza się w prawo o tyle, o ile pozwalają odebrane potwierdzenia przesłanych danych. Położenie prawej i lewej krawędzi okna zmienia jego wielkość. Do opisu ruchu prawej i lewej krawędzi używane są terminy: Okno zamyka się kiedy lewa krawędź zbliża się do prawej. Dzieje się tak wtedy, kiedy przesyłane dane są potwierdzane. Okno otwiera się - kiedy prawa krawędź odsuwa się w prawo, pozwalając na przesyłanie większej i ilości danych. Ma to miejsce, kiedy proces odbierający czyta potwierdzone dane, zwalnia miejsce w buforze wejściowym TCP. Okno kurczy się, kiedy prawa krawędź przysuwa się do lewej. Nie dopuszcza się takich sytuacji, ponieważ może to doprowadzić do otrzymania okna zerowego, wtedy nadawca przestaje wysyłać dane.
STEROWANIE OKNEM NADAWCA ODBIORCA 1000 1001 2400 2401 SN = 1001 SN = 1201 1000 1001 2400 2401 SN = 1401 1000 1601 2401 1000 1001 2001 2401 A = 1601, W = 1000 SN = 1601 SN = 1801 1600 1601 2600 2601 1600 1601 2001 2601 1600 1601 2600 2601 SN = 2001 SN = 2201 SN = 2401 A = 2601, W = 1400 1600 1601 2001 2601 2600 2601 4000 4001 1600 1601 4000 4001