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