Sobes.tech
Junior

Jak działa protokół TCP?

sobes.tech AI

Odpowiedź od AI

TCP (Transmission Control Protocol) jest protokołem warstwy transportowej, zapewniającym niezawodną, połączeniową dostawę danych.

Kluczowe aspekty działania:

  1. Uchwyt trójstronny (Three-way Handshake):

    • Klient wysyła pakiet SYN (Synchronize) z początkowym numerem sekwencji (ISN).
    • Serwer otrzymuje SYN, wysyła SYN-ACK (Synchronize-Acknowledge) zawierający swój ISN i potwierdzenie (ACK) ISN klienta (numer potwierdzenia = client ISN + 1).
    • Klient otrzymuje SYN-ACK, wysyła ACK potwierdzający ISN serwera (numer potwierdzenia = server ISN + 1).
    • Połączenie jest ustanowione, można przesyłać dane.
  2. Strumieniowa transmisja danych: Dane są przesyłane jako ciągły strumień bajtów, a nie jako oddzielne pakiety. TCP segmentuje strumień danych na segmenty do przesłania.

  3. Numeracja sekwencji (Sequence Numbers): Każdy bajt w strumieniu danych ma unikalny numer. Segmenty zawierają numer pierwszego bajtu, który zawierają (numer sekwencji), oraz numer potwierdzenia (acknowledgement number), wskazujący na następny bajt, którego oczekuje nadawca.

  4. Potwierdzenia (Acknowledgements - ACK): Odbiorca wysyła ACK, aby poinformować nadawcę, które dane zostały pomyślnie odebrane. Jeśli nadawca nie otrzyma ACK w określonym czasie (timeout), ponownie wysyła segment.

  5. Kontrola błędów (Error Control): Sumy kontrolne (checksums) są używane do sprawdzania integralności danych. Jeśli segment jest uszkodzony, jest odrzucany, a nadawca oczekuje na timeout lub duplikat ACK, aby ponownie wysłać.

  6. Kontrola przepływu (Flow Control): Mechanizm zapobiegający przeciążeniu bufora odbiorcy. Odbiorca informuje nadawcę o rozmiarze swojego okna odbioru w pakietach ACK. Nadawca może wysłać tylko tyle danych, ile wskazuje okno.

  7. Kontrola przeciążenia (Congestion Control): Mechanizm do określenia dostępnej przepustowości sieci i dynamicznego regulowania szybkości przesyłania danych, aby uniknąć przeciążenia. Zawiera algorytmy takie jak slow start, congestion avoidance, fast retransmit i fast recovery.

  8. Zamykanie połączenia: Zazwyczaj używa się czterowstopniowego uścisku dłoni:

    • Jedna strona wysyła pakiet FIN (Finish).
    • Druga strona wysyła ACK dla FIN.
    • Druga strona wysyła własny FIN (po zakończeniu przesyłania swoich pozostałych danych).
    • Pierwsza strona wysyła ACK dla tego FIN.
    • Połączenie jest zamknięte.

Struktura segmentu TCP:

Pole Rozmiar (bajty) Opis
Port źródłowy 2 Port nadawcy
Port docelowy 2 Port odbiorcy
Numer sekwencji 4 Numer pierwszego bajtu w segmencie
Numer potwierdzenia 4 Numer następnego oczekiwanego bajtu
Offset danych / Długość nagłówka 4 bity Długość nagłówka TCP
Zarezerwowane 6 bitów Zarezerwowane
Flagi (Bity kontrolne) 6 bitów URG, ACK, PSH, RST, SYN, FIN
Rozmiar okna 2 Rozmiar okna odbiorcy
Suma kontrolna 2 Suma kontrolna nagłówka i danych
Wskaźnik pilny 2 Wskazuje na dane pilne (jeśli URG ustawione)
Opcje Zmienna Dodatkowe opcje
Wypełnienie (Padding) Zmienna Do wyrównania nagłówka
Dane Zmienna Przesyłane dane
// Flagi (Bity kontrolne):
// URG: Pole wskaźnika pilnego jest istotne
// ACK: Pole potwierdzenia jest istotne
// PSH: Funkcja push
// RST: Reset połączenia
// SYN: Synchronizacja numerów sekwencji
// FIN: Brak więcej danych od nadawcy