Opcje TCP

Rozszerzenia operacyjne: MSS, Window Scale, Timestamps, SACK Permitted, Selective ACK, Fast Open.

Wprowadzenie: Modernizacja Maszynowni

Standardowy 20-bajtowy nagłówek TCP jest jak podstawowa deska rozdzielcza samochodu z lat 70. Zapewnia wszystkie niezbędne kontrolki, aby dotrzeć z punktu A do B: prędkość, poziom paliwa i kontrolki ostrzegawcze. To było w pełni wystarczające dla dróg wczesnego internetu. Jednak w miarę ewolucji internetu w globalny system superautostrad z szybkimi łączami światłowodowymi, połączeniami satelitarnymi i sieciami mobilnymi, podstawowa deska rozdzielcza TCP stała się niewystarczająca. Oryginalny projekt nie potrafił efektywnie obsłużyć ogromnej przepustowości i długich opóźnień nowoczesnych sieci.

Aby temu zaradzić, projektanci TCP zawarli w nim genialny mechanizm rozszerzalności: pole Opcje TCP. Ta przestrzeń o zmiennej długości na końcu standardowego nagłówka działa jak port akcesoriów dla protokołu. Pozwala na uaktualnianie TCP o nowe funkcje i możliwości bez konieczności przeprojektowywania całego protokołu od zera.

Opcje TCP to dodatkowe informacje, które mogą być dołączone do segmentu TCP, aby włączyć zaawansowane funkcje, które nie są częścią oryginalnej specyfikacji. Opcje te są negocjowane między nadawcą a odbiorcą, zazwyczaj podczas początkowego . Jeśli obie strony rozumieją i zgadzają się na użycie określonej opcji, może ona być używana przez cały czas trwania połączenia. Jeśli jedna strona nie obsługuje danej opcji, jest ona po prostu ignorowana. Zapewnia to kompatybilność wsteczną. Opcje TCP odegrały kluczową rolę w umożliwieniu protokołowi adaptacji i rozwoju przez dziesięciolecia, wprowadzając funkcje niezbędne dla dzisiejszego, wydajnego internetu.

Jak Formatowane Są Opcje TCP

Pole Opcje może zawierać wiele opcji, jedna po drugiej. Każda opcja ma prosty format: Typ-Długość-Wartość (TLV).

  • Rodzaj (1 bajt): Liczba identyfikująca typ opcji. Na przykład, Rodzaj=2 oznacza opcję Maksymalnego Rozmiaru Segmentu.
  • Długość (1 bajt): Całkowita długość opcji w bajtach, włączając w to pola Rodzaj i Długość. Na przykład, opcja MSS ma długość 4 bajty.
  • Wartość (Zmienna długość): Rzeczywiste dane związane z opcją. Długość tego pola wynosi 'Długość - 2' bajty.

Dwie specjalne jednobajtowe opcje, Koniec Listy Opcji (Rodzaj=0) i Brak Operacji (Rodzaj=1), nie stosują się do struktury TLV. 'Brak Operacji' jest używany jako wypełnienie, aby wyrównać początek następnej opcji do granicy 4 bajtów, co poprawia wydajność przetwarzania.

Szczegółowy Opis Kluczowych Opcji TCP

Kilka opcji stało się tak ważnych, że są teraz używane w prawie każdym połączeniu TCP. Przyjrzyjmy się najważniejszym z nich.

1. Maksymalny Rozmiar Segmentu (MSS) - Unikanie Fragmentacji

Opcja Maksymalny Rozmiar Segmentu (MSS) (Rodzaj=2, Długość=4) jest najczęstszą opcją TCP. Jest używana podczas trójetapowego uzgadniania, aby każda strona mogła zadeklarować największą ilość danych, jaką jest gotowa przyjąć w jednym segmencie TCP.

Cel: Jej głównym celem jest unikanie . Sieci fizyczne, które tworzą internet (jak Ethernet), mają limit największej ramki, jaką mogą przenieść, znany jako Maksymalna Jednostka Transmisji (MTU). Dla Ethernetu standardowe MTU wynosi 1500 bajtów. Jeśli TCP próbuje wysłać segment, który po opakowaniu w nagłówek IP jest większy niż MTU łącza, router na ścieżce będzie musiał sfragmentować pakiet na mniejsze części. Fragmentacja jest nieefektywna i należy jej unikać.

Negocjacja: W swoim początkowym pakiecie SYN klient zazwyczaj oblicza swój MSS, biorąc MTU swojego interfejsu wychodzącego (np. 1500 bajtów dla Ethernetu) i odejmując rozmiar nagłówków IP i TCP (zwykle po 20 bajtów). Zatem, 15002020=14601500 - 20 - 20 = 1460 bajtów. Serwer robi to samo. Obie strony będą następnie używać mniejszej z dwóch ogłoszonych wartości MSS przez cały czas trwania połączenia. Uzgadniając rozmiar segmentu, który mieści się bez problemu w MTU sieci, TCP zapewnia, że jego segmenty mogą podróżować od końca do końca bez bycia dzielonymi przez routery.

2. Skala Okna - Poszerzanie Autostrady

Opcja Skala Okna (Rodzaj=3, Długość=3) została stworzona, aby przezwyciężyć ograniczenia oryginalnego 16-bitowego pola Rozmiar Okna w nagłówku TCP, które ograniczało okno odbiorcze do 65 535 bajtów (64 KB). Jest to niewystarczające dla nowoczesnych, szybkich sieci o dużych opóźnieniach.

Cel: Umożliwia TCP osiągnięcie wysokiej przepustowości w połączeniach o dużym Iloczynie Przepustowości i Opóźnienia (BDP). BDP informuje, ile danych może znajdować się "w drodze" na ścieżce sieciowej w danym momencie. Jeśli ogłoszone okno odbiorcze jest mniejsze niż BDP, nadawca będzie zmuszony zatrzymać się i czekać na potwierdzenia, nie mogąc w pełni wykorzystać dostępnej przepustowości. Opcja Skala Okna pozwala na znacznie większe okno odbiorcze, efektywnie poszerzając rurę, aby pasowała do BDP.

Negocjacja: Ta opcja musi być wysłana w początkowym pakiecie SYN przez stronę, która chce z niej korzystać. Opcja zawiera jednobajtowy współczynnik skali, który jest liczbą od 0 do 14. Ten współczynnik reprezentuje liczbę przesunięć bitowych w lewo. Rzeczywisty rozmiar okna odbiorczego jest obliczany przez wzięcie 16-bitowej wartości z pola Rozmiar Okna nagłówka i przesunięcie jej w lewo o uzgodniony współczynnik skali. Na przykład współczynnik skali 7 oznacza pomnożenie wartości okna przez 272^7, czyli 128. Pozwala to na okna odbiorcze o rozmiarze do około 1 Gigabajta. Jeśli tylko jedna strona wyśle tę opcję, skalowanie jest włączone tylko dla danych płynących w jej kierunku.

3. Znaczniki Czasu - Mierzenie Czasu i Ochrona Danych

Opcja Znaczniki Czasu (Rodzaj=8, Długość=10) dodaje dwa 32-bitowe pola znaczników czasu do nagłówka TCP. Służy dwóm kluczowym celom.

  • Dokładny Pomiar RTT (RTTM): Nadawca umieszcza swój bieżący znacznik czasu w pierwszym polu (TSval). Odbiorca, po otrzymaniu segmentu, odsyła tę dokładną wartość w drugim polu (TSecr) swojego segmentu potwierdzającego. Kiedy nadawca otrzyma odesłaną wartość, może odjąć ją od swojego bieżącego zegara, aby uzyskać bardzo precyzyjny i jednoznaczny pomiar . Jest to bardziej niezawodne niż oryginalna metoda mierzenia czasu dla segmentu i jego ACK, ponieważ nie jest podatne na opóźnione ACK ani retransmisje.
  • Ochrona przed Zawiniętymi Numerami Sekwencyjnymi (PAWS): W bardzo szybkich sieciach możliwe jest, że 32-bitowe numery sekwencyjne zawiną się (przejdą od 23212^{32}-1 z powrotem do 0) tak szybko, że opóźniony pakiet z poprzedniego cyklu dotrze i zostanie omyłkowo zaakceptowany przez bieżące połączenie. Algorytm PAWS używa rosnących znaczników czasu, aby odrzucać takie stare, zduplikowane pakiety. Jeśli segment dotrze ze znacznikiem czasu, który jest starszy niż ostatni otrzymany dla tego połączenia, jest on odrzucany, co zapewnia solidną ochronę przed tym rzadkim, ale potencjalnie szkodliwym scenariuszem.

4. SACK (Potwierdzenie Selektywne) - Precyzyjne Odzyskiwanie po Błędach

Standardowy TCP używa systemu potwierdzeń kumulatywnych, co może być nieefektywne, gdy z jednego okna danych zaginie wiele segmentów. Mechanizm Potwierdzenia Selektywnego (SACK) radykalnie poprawia wydajność odzyskiwania w takich scenariuszach.

Negocjacja: Aby włączyć tę funkcję, zarówno klient, jak i serwer muszą dołączyć opcję SACK-Permitted (Rodzaj=4, Długość=2) w swoich początkowych pakietach SYN podczas trójetapowego uzgadniania. Potwierdza to, że obie strony rozumieją i są gotowe używać SACK.

Działanie: Po włączeniu, jeśli odbiorca otrzyma segment spoza kolejności, wysyła zduplikowane ACK jak zwykle. Jednakże w polu Opcje tego zduplikowanego ACK dołącza teraz opcję SACK (Rodzaj=5, Zmienna Długość). Ta opcja zawiera jeden lub więcej bloków, z których każdy określa początkowy i końcowy numer sekwencyjny ciągłego bloku danych, który został pomyślnie odebrany.

Na przykład, jeśli odbiorca otrzymał segmenty 1-2 oraz 4-5, ale brakuje mu segmentu 3, będzie wysyłał zduplikowane ACK dla segmentu 3, ale z opcją SACK informującą: Otrzymałem dane z zakresu 4-5. Daje to nadawcy precyzyjną mapę dziur w buforze odbiorcy, pozwalając mu retransmitować tylko konkretne brakujące segmenty, zamiast polegać na powolnych timeoutach lub retransmitować segmenty, które już zostały odebrane.

5. TCP Fast Open (TFO) - Przyspieszanie Połączeń

Jednym z głównych źródeł opóźnień w krótkotrwałych połączeniach internetowych jest trójetapowe uzgadnianie, które wymaga pełnego obiegu (RTT), zanim jakiekolwiek dane będą mogły być wysłane. Opcja TCP Fast Open (TFO) (Rodzaj=34) to stosunkowo nowe rozszerzenie, zaprojektowane w celu wyeliminowania tej kary RTT dla powtarzających się połączeń.

Działanie:

  1. Przy pierwszym połączeniu z serwerem proces przebiega normalnie. Jednak serwer generuje specjalne kryptograficzne ciasteczko i wysyła je do klienta. Klient przechowuje to ciasteczko w pamięci podręcznej.
  2. Przy kolejnych połączeniach z tym samym serwerem, klient dołącza to ciasteczko do swojego początkowego pakietu SYN. Wraz z pakietem SYN, klient może natychmiast wysłać pewne dane aplikacji (np. żądanie HTTP GET).
  3. Serwer waliduje ciasteczko. Jeśli jest ono prawidłowe, akceptuje dane, które przybyły z pakietem SYN, i natychmiast przekazuje je do aplikacji, nawet przed nadejściem trzeciej części uzgadniania (końcowego ACK).

Pozwalając na wysyłanie danych w pierwszym pakiecie, TFO skutecznie redukuje czas nawiązywania połączenia do zera RTT dla powracających użytkowników, co może znacznie poprawić czas ładowania stron internetowych.

    Opcje TCP | Teleinf Edu