Transport

Opcje TCP

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

Wprowadzenie: Rozszerzanie Nagłówka TCP

Standardowy nagłówek TCP ma 20 bajtów i zawiera pola potrzebne do podstawowej obsługi połączenia. Współczesne sieci światłowodowe, satelitarne i mobilne oferują wysoką przepustowość, a część z nich ma także duże opóźnienia. Podstawowe pola nie wystarczają wtedy do efektywnego wykorzystania dostępnego pasma przy dużym iloczynie przepustowości i opóźnienia.

Projektanci TCP przewidzieli mechanizm rozszerzalności w postaci pola Opcje TCP. Ta przestrzeń o zmiennej długości znajduje się na końcu podstawowego nagłówka. Pozwala dodawać funkcje bez zmiany jego obowiązkowych pól.

Opcje TCP to dodatkowe informacje, które mogą być dołączone do segmentu TCP, aby włączyć funkcje, które nie są częścią oryginalnej specyfikacji. Opcje te są negocjowane między nadawcą a odbiorcą, zazwyczaj podczas początkowego . Opcja może być używana po uzgodnieniu, jeśli pozwala na to jej specyfikacja. Implementacja TCP ignoruje nieobsługiwaną opcję zawierającą pole długości. Opcje TCP zajmują najwyżej 40 bajtów, ponieważ podstawowy nagłówek nie może przekroczyć 60 bajtów. Niektóre opcje są negocjowane w SYN, a inne mogą pojawiać się w późniejszych segmentach. Zapewnia to współdziałanie implementacji i rozszerza TCP o funkcje używane w połączeniach o dużej przepustowości.

Jak Formatowane Są Opcje TCP

Pole Opcje może zawierać wiele opcji, jedna po drugiej. Każda opcja ma format Typ-Długość-Wartość (TLV), z wyjątkiem zdefiniowanych opcji jednobajtowych.

  • 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), są wyjątkami od struktury TLV. Koniec Listy Opcji oznacza zakończenie listy, a Brak Operacji służy do wyrównania kolejnych pól. Wyrównanie do granicy 4 bajtów może ułatwiać przetwarzanie, lecz opcje nie muszą zaczynać się na takiej granicy. Odbiorca odczytuje długość każdej opcji, a po zakończeniu listy traktuje pozostałe miejsce jako wypełnienie nagłówka.

Szczegółowy Opis Powszechnie Używanych Opcji TCP

Typowe opcje TCP określają maksymalny rozmiar segmentu, skalują okno odbiorcze, wskazują selektywnie potwierdzone dane i przenoszą znaczniki czasu.

1. Maksymalny Rozmiar Segmentu (MSS) - Ograniczanie Fragmentacji

Opcja Maksymalny Rozmiar Segmentu (MSS) (Rodzaj=2, Długość=4) jest wysyłana w segmentach SYN. Każda strona używa jej do ogłoszenia największej ilości danych TCP, jaką jest gotowa przyjąć w jednym segmencie.

Cel: Jej głównym celem jest unikanie . Sieci fizyczne, które tworzą internet (w tym Ethernet), mają limit największej ramki, jaką mogą przenieść, znany jako Maksymalna Jednostka Transmisji (MTU). Na ścieżce Ethernet IPv4 z MTU 1500 bajtów segment TCP, który po dodaniu nagłówka IP przekracza MTU ścieżki, może wymagać podziału pakietu przez router na mniejsze części. Routery IPv6 nie dzielą tranzytowych pakietów, dlatego ograniczenia MTU ścieżki nadal mają znaczenie. Fragmentacja jest nieefektywna i należy jej unikać.

Negocjacja: Opcja MSS jest wysyłana w segmencie SYN. Każda strona ogłasza największy segment danych, który jest gotowa odebrać. Dla IPv4 bez dodatkowych opcji przykład z MTU 1500 bajtów daje 1500−20−20=14601500 - 20 - 20 = 1460 bajtów. Wysyłany segment musi mieścić się w ograniczeniach wynikających z MSS drugiej strony, lokalnego MTU i ścieżki. Opcje TCP zwiększają rozmiar nagłówka, więc pozostawiają mniej miejsca w pakiecie na dane. Nie wynika z tego uniwersalna zasada używania mniejszej z dwóch ogłoszonych wartości w każdym kierunku.

MSS określa liczbę bajtów danych TCP, natomiast pełny pakiet IP obejmuje również nagłówki. Nadawca uwzględnia także lokalne MTU, MTU ścieżki oraz miejsce zajmowane przez nagłówki TCP i IP wraz z opcjami.

2. Skala Okna - Obsługa Dużego BDP

Opcja Skala Okna (Rodzaj=3, Długość=3) służy do obejścia ograniczenia 16-bitowego pola Rozmiar Okna w nagłówku TCP, które bez skalowania pozwala ogłosić najwyżej 65 535 bajtów (około 64 KiB). Taka wartość może być niewystarczająca w szybkich sieciach o dużych opóźnieniach.

Cel: Opcja wspiera wysoką przepustowość połączeń o dużym Iloczynie Przepustowości i Opóźnienia (BDP). BDP określa, ile danych może znajdować się w tranzycie na ścieżce. Gdy ogłoszone okno jest mniejsze niż BDP, nadawca musi czekać na potwierdzenia i nie wykorzystuje całego pasma. Skala okna pozwala ogłosić większą wartość.

Negocjacja: Opcja musi być wysłana w początkowym pakiecie SYN. Zawiera jednobajtowy współczynnik od 0 do 14, określający przesunięcie w lewo wartości 16-bitowego pola Rozmiar Okna. Współczynnik 7 oznacza pomnożenie przez 272^7, czyli 128. Każda strona negocjuje własny współczynnik dla kierunku danych od drugiej strony. Wartość ogłoszona w późniejszym segmencie jest interpretowana z użyciem skali uzgodnionej w SYN. Pozwala to uzyskać okno odbiorcze do około 1 GiB.

Pole okna w segmencie SYN nie jest skalowane. Opcja Skala Okna w segmencie bez SYN jest ignorowana, dlatego późniejsze ogłoszenia używają skali dopiero po jej uzgodnieniu podczas ustanawiania połączenia.

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. Wspiera dwa główne zastosowania.

Po uzgodnieniu opcja jest wysyłana w segmentach z danymi i potwierdzeniami. TSval przenosi znacznik czasu nadawcy, a TSecr odsyła wartość drugiej strony, gdy ustawiona jest flaga ACK.

  • 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 . Znaczniki pozwalają powiązać próbkę RTT z konkretnym segmentem i ograniczają niejednoznaczność występującą przy pomiarze segmentu oraz jego ACK. Nadal trzeba uwzględnić zasady pomiaru RTO i zegarów znaczników czasu.
  • Ochrona przed Zawiniętymi Numerami Sekwencyjnymi (PAWS): W bardzo szybkich sieciach 32-bitowe numery sekwencyjne mogą zawinąć się (przejść od 232−12^{32}-1 z powrotem do 0), zanim opóźniony segment z poprzedniego cyklu dotrze do odbiorcy. Algorytm PAWS porównuje znaczniki czasu i może odrzucić segment ze znacznikiem starszym od ostatnio zaakceptowanego, zgodnie z regułami RFC 7323. Chroni to przed częścią starych duplikatów.

4. SACK (Potwierdzenie Selektywne) - Odzyskiwanie po Wielu Stratach

Standardowy TCP używa potwierdzeń kumulatywnych, co może być nieefektywne, gdy z jednego okna danych zaginie wiele segmentów. Mechanizm Potwierdzenia Selektywnego (SACK) pozwala dokładniej opisać odebrane zakresy i ułatwia odzyskiwanie danych w takim scenariuszu.

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. SACK-Permitted zezwala na SACK, lecz sama opcja SACK przenosi dopiero konkretne zakresy.

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 i opcję SACK informującą o odebraniu zakresu 4-5. Nadawca otrzymuje wtedy informację o brakującym zakresie i może retransmitować segment 3, bez ponownego wysyłania segmentów już odebranych. Skuteczność zależy od obsługi SACK przez obie strony oraz algorytmu retransmisji.

Opcja SACK z nn blokami zajmuje 8n+28n+2 bajtów. Przestrzeń opcji o rozmiarze 40 bajtów pozwala więc przenieść najwyżej cztery bloki, a ich liczba jest mniejsza, gdy miejsce zajmują także znaczniki czasu.

5. TCP Fast Open (TFO) - Skrócenie Ustanawiania Połączenia

W krótkotrwałych połączeniach dane aplikacji zwykle czekają na zakończenie trójetapowego uzgadniania, co dodaje co najmniej jeden RTT. Opcja TCP Fast Open (TFO) (Rodzaj=34) pozwala w powtarzanych połączeniach przesłać dane w pakiecie SYN.

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

TFO może usunąć jeden RTT oczekiwania na dane aplikacji w powtarzanym połączeniu, lecz nie oznacza zerowego czasu całego ustanawiania TCP. Dane w SYN mogą zostać odtworzone, więc należy ograniczać je do operacji bezpiecznych przy powtórzeniu. Przy nieprawidłowym ciasteczku serwer wraca do zwykłego uzgadniania i nie akceptuje danych SYN. RFC 7413 opisuje TFO jako rozwiązanie eksperymentalne.

Powiązane artykuły