Tajna broń protokołu TCP: kontrola przepływu sieci i kontrola przeciążenia sieci

Niezawodność transportu TCP
Wszyscy znamy protokół TCP jako niezawodny protokół transportowy, ale w jaki sposób gwarantuje on niezawodność transportu?

Aby osiągnąć niezawodną transmisję, należy wziąć pod uwagę wiele czynników, takich jak uszkodzenie danych, ich utrata, duplikacja i nieuporządkowane fragmenty. Jeśli tych problemów nie da się rozwiązać, nie można osiągnąć niezawodnej transmisji.

Dlatego też protokół TCP wykorzystuje mechanizmy takie jak numer sekwencyjny, potwierdzenie odpowiedzi, kontrolę ponownego wysyłania, zarządzanie połączeniami i kontrolę okna, aby zapewnić niezawodną transmisję.

W tym artykule skupimy się na przesuwnym oknie, kontroli przepływu i kontroli przeciążenia TCP. Mechanizm retransmisji jest omówiony oddzielnie w następnej sekcji.

Kontrola przepływu sieciowego
Network Flow Control lub znany jako Network Traffic Control jest w rzeczywistości przejawem subtelnej relacji między producentami i konsumentami. Prawdopodobnie często spotykałeś się z tym scenariuszem w pracy lub na rozmowach kwalifikacyjnych. Jeśli zdolność produkcyjna producenta znacznie przekracza zdolność konsumpcyjną konsumenta, spowoduje to nieskończone wydłużanie się kolejki. W poważniejszym przypadku możesz wiedzieć, że gdy wiadomości RabbitMQ nagromadzą się zbyt mocno, może to spowodować pogorszenie wydajności całego serwera MQ. To samo dotyczy protokołu TCP; jeśli nie zostanie to sprawdzone, do sieci zostanie wprowadzonych zbyt wiele wiadomości, a konsumenci przekroczą swoje możliwości, podczas gdy producenci będą nadal wysyłać zduplikowane wiadomości, co znacznie wpłynie na wydajność sieci.

Aby rozwiązać ten problem, TCP zapewnia nadawcy mechanizm kontrolowania ilości wysyłanych danych na podstawie rzeczywistej pojemności odbiorczej odbiorcy, co jest znane jako kontrola przepływu. Odbiorca utrzymuje okno odbioru, podczas gdy nadawca utrzymuje okno wysyłania. Należy zauważyć, że te okna są przeznaczone tylko dla pojedynczego połączenia TCP i nie wszystkie połączenia współdzielą okno.

TCP zapewnia kontrolę przepływu za pomocą zmiennej dla okna odbioru. Okno odbioru daje nadawcy wskazówkę, ile miejsca w pamięci podręcznej jest jeszcze dostępne. Nadawca kontroluje ilość wysyłanych danych zgodnie z rzeczywistą pojemnością akceptacji odbiorcy.

Host odbiorcy powiadamia nadawcę o rozmiarze danych, które może odebrać, a nadawca wysyła do tego limitu. Ten limit to rozmiar okna, pamiętasz nagłówek TCP? Istnieje pole okna odbioru, które służy do wskazania liczby bajtów, które odbiorca jest w stanie lub chce odebrać.

Nadawca hosta będzie okresowo wysyłał pakiet sondy okna, który jest używany do wykrywania, czy odbiorca hosta jest nadal w stanie zaakceptować dane. Gdy bufor odbiorcy jest zagrożony przepełnieniem, rozmiar okna jest ustawiany na mniejszą wartość, aby nakazać nadawcy kontrolowanie ilości wysyłanych danych.

Oto diagram sterowania przepływem sieciowym:

Kontrola ruchu

Kontrola przeciążenia sieci
Przed wprowadzeniem kontroli przeciążenia musimy zrozumieć, że oprócz okna odbioru i okna wysyłania istnieje również okno przeciążenia, które jest głównie używane do rozwiązania problemu, z jaką szybkością nadawca rozpoczyna wysyłanie danych do okna odbioru. Dlatego okno przeciążenia jest również utrzymywane przez nadawcę TCP. Potrzebujemy algorytmu, który zdecyduje, ile danych jest odpowiednich do wysłania, ponieważ wysyłanie zbyt małej lub zbyt dużej ilości danych nie jest idealne, stąd koncepcja okna przeciążenia.

W poprzedniej kontroli przepływu sieciowego unikaliśmy sytuacji, w której nadawca wypełniał pamięć podręczną odbiorcy danymi, ale nie wiedzieliśmy, co dzieje się w sieci. Zazwyczaj sieci komputerowe znajdują się w środowisku współdzielonym. W rezultacie może wystąpić przeciążenie sieci z powodu komunikacji między innymi hostami.

Gdy sieć jest przeciążona, jeśli duża liczba pakietów jest nadal wysyłana, może to powodować problemy, takie jak opóźnienia i utrata pakietów. W tym momencie TCP ponownie prześle dane, ale retransmisja zwiększy obciążenie sieci, co spowoduje większe opóźnienia i więcej strat pakietów. Może to wpaść w błędne koło i stać się jeszcze większe.

Zatem TCP nie może ignorować tego, co dzieje się w sieci. Gdy sieć jest przeciążona, TCP poświęca się, redukując ilość wysyłanych danych.

Dlatego proponuje się kontrolę przeciążenia, której celem jest uniknięcie wypełnienia całej sieci danymi od nadawcy. Aby regulować ilość danych, które nadawca powinien wysłać, TCP definiuje koncepcję zwaną oknem przeciążenia. Algorytm kontroli przeciążenia dostosuje rozmiar okna przeciążenia zgodnie ze stopniem przeciążenia sieci, aby kontrolować ilość danych wysyłanych przez nadawcę.

Czym jest okno przepełnienia? Co to ma wspólnego z oknem wysyłania?

Okno przeciążenia to zmienna stanu utrzymywana przez nadawcę, która określa ilość danych, jaką nadawca może wysłać. Okno przeciążenia zmienia się dynamicznie w zależności od poziomu przeciążenia sieci.

Okno wysyłania to uzgodniony rozmiar okna między nadawcą a odbiorcą, który wskazuje ilość danych, jaką odbiorca może odebrać. Okno przeciążenia i okno wysyłania są powiązane; okno wysyłania jest zwykle równe minimalnemu przeciążeniu i oknom odbioru, czyli swnd = min(cwnd, rwnd).

Okno przeciążenia cwnd zmienia się następująco:

Jeżeli w sieci nie występuje przeciążenie, tzn. nie występuje przekroczenie limitu czasu retransmisji, okno przeciążenia ulega wydłużeniu.

Jeżeli w sieci występuje przeciążenie, okno przeciążenia ulega skróceniu.

Nadawca ustala, czy sieć jest przeciążona, obserwując, czy pakiet potwierdzenia ACK został odebrany w określonym czasie. Jeśli nadawca nie otrzyma pakietu potwierdzenia ACK w określonym czasie, uznaje się, że sieć jest przeciążona.

Oprócz okna przeciążenia, nadszedł czas na omówienie algorytmu kontroli przeciążenia TCP. Algorytm kontroli przeciążenia TCP składa się z trzech głównych części:

Powolny start:Początkowo okno przeciążenia cwnd jest stosunkowo małe, a nadawca zwiększa je wykładniczo, aby szybko dostosować się do przepustowości sieci.
Unikanie zatorów:Gdy okno przeciążenia przekroczy określony próg, nadawca zwiększa okno przeciążenia liniowo, aby spowolnić tempo wzrostu okna przeciążenia i uniknąć przeciążenia sieci.
Szybka regeneracja:Jeśli wystąpi przeciążenie, nadawca dzieli okno przeciążenia na pół i przechodzi w stan szybkiego odzyskiwania, aby określić lokalizację odzyskiwania sieci na podstawie otrzymanych duplikatów potwierdzeń, a następnie kontynuuje zwiększanie okna przeciążenia.

Powolny start
Gdy połączenie TCP jest nawiązywane, okno przeciążenia cwnd jest początkowo ustawione na minimalną wartość MSS (maksymalny rozmiar segmentu). W ten sposób początkowa szybkość wysyłania wynosi około MSS/RTT bajtów/sekundę. Rzeczywista dostępna przepustowość jest zwykle znacznie większa niż MSS/RTT, więc TCP chce znaleźć optymalną szybkość wysyłania, co można osiągnąć za pomocą slow-start.

W procesie powolnego startu wartość okna przeciążenia cwnd zostanie zainicjowana na 1 MSS, a za każdym razem, gdy zostanie potwierdzony przesłany segment pakietu, wartość cwnd zostanie zwiększona o jeden MSS, tj. wartość cwnd stanie się równa 2 MSS. Następnie wartość cwnd zostanie podwojona dla każdej pomyślnej transmisji segmentu pakietu itd. Konkretny proces wzrostu pokazano na poniższym rysunku.

 Kontrola przeciążenia sieci

Jednak tempo wysyłania nie zawsze może rosnąć; wzrost musi się kiedyś skończyć. Więc kiedy kończy się wzrost tempa wysyłania? Slow-start zazwyczaj kończy wzrost tempa wysyłania na jeden z kilku sposobów:

Pierwszym sposobem jest przypadek utraty pakietów podczas procesu wysyłania powolnego startu. Gdy następuje utrata pakietów, TCP ustawia okno przeciążenia nadawcy cwnd na 1 i ponownie uruchamia proces powolnego startu. W tym momencie wprowadza się koncepcję progu powolnego startu ssthresh, którego wartość początkowa jest połową wartości cwnd, która generuje utratę pakietów. Oznacza to, że gdy wykryte zostanie przeciążenie, wartość ssthresh jest połową wartości okna.

Drugim sposobem jest bezpośrednie skorelowanie z wartością progu powolnego startu ssthresh. Ponieważ wartość ssthresh stanowi połowę wartości okna, gdy wykryte zostanie przeciążenie, utrata pakietów może wystąpić przy każdym podwojeniu, gdy cwnd jest większe niż ssthresh. Dlatego najlepiej jest ustawić cwnd na ssthresh, co spowoduje, że TCP przełączy się w tryb kontroli przeciążenia i zakończy powolny start.

Ostatnim sposobem, w jaki powolny start może się zakończyć, jest wykrycie trzech redundantnych potwierdzeń. Wówczas protokół TCP wykonuje szybką retransmisję i przechodzi do stanu odzyskiwania. (Jeśli nie jest jasne, dlaczego wykryto trzy pakiety ACK, zostanie to wyjaśnione osobno w części poświęconej mechanizmowi retransmisji.)

Unikanie zatorów
Gdy TCP wchodzi w stan kontroli przeciążenia, cwnd jest ustawiany na połowę progu przeciążenia ssthresh. Oznacza to, że wartość cwnd nie może być podwajana za każdym razem, gdy odbierany jest segment pakietu. Zamiast tego przyjmowane jest stosunkowo konserwatywne podejście, w którym wartość cwnd jest zwiększana tylko o jeden MSS (maksymalna długość segmentu pakietu) po zakończeniu każdej transmisji. Na przykład, nawet jeśli potwierdzonych zostanie 10 segmentów pakietu, wartość cwnd wzrośnie tylko o jeden MSS. Jest to liniowy model wzrostu i ma on również górną granicę wzrostu. Gdy następuje utrata pakietów, wartość cwnd jest zmieniana na MSS, a wartość ssthresh jest ustawiana na połowę cwnd. Lub też zatrzyma wzrost MSS, gdy zostaną odebrane 3 redundantne odpowiedzi ACK. Jeśli trzy redundantne potwierdzenia są nadal odbierane po podzieleniu wartości cwnd na pół, wartość ssthresh jest rejestrowana jako połowa wartości cwnd i wchodzi się w stan szybkiego odzyskiwania.

Szybka regeneracja
W stanie Fast Recovery wartość okna przeciążenia cwnd jest zwiększana o jeden MSS za każdy odebrany nadmiarowy ACK, czyli ACK, który nie nadchodzi w kolejności. Ma to na celu wykorzystanie segmentów pakietów, które zostały pomyślnie przesłane w sieci, aby poprawić wydajność transmisji tak bardzo, jak to możliwe.

Gdy nadejdzie ACK utraconego segmentu pakietu, TCP zmniejsza wartość cwnd, a następnie przechodzi w stan unikania przeciążenia. Ma to na celu kontrolowanie rozmiaru okna przeciążenia i uniknięcie dalszego zwiększania przeciążenia sieci.

Jeśli po stanie kontroli przeciążenia nastąpi przekroczenie limitu czasu, stan sieci staje się poważniejszy, a TCP migruje ze stanu unikania przeciążenia do stanu powolnego startu. W tym przypadku wartość okna przeciążenia cwnd jest ustawiona na 1 MSS, maksymalna długość segmentu pakietu, a wartość progu powolnego startu ssthresh jest ustawiona na połowę cwnd. Celem tego jest ponowne stopniowe zwiększanie rozmiaru okna przeciążenia po odzyskaniu sieci, aby zrównoważyć szybkość transmisji i stopień przeciążenia sieci.

Streszczenie
Jako niezawodny protokół transportowy, TCP implementuje niezawodny transport według numeru sekwencyjnego, potwierdzenia, kontroli retransmisji, zarządzania połączeniami i kontroli okna. Wśród nich mechanizm kontroli przepływu kontroluje ilość danych wysyłanych przez nadawcę zgodnie z rzeczywistą pojemnością odbiorczą odbiorcy, co pozwala uniknąć problemów z przeciążeniem sieci i pogorszeniem wydajności. Mechanizm kontroli przeciążenia zapobiega wystąpieniu przeciążenia sieci poprzez dostosowanie ilości danych wysyłanych przez nadawcę. Koncepcje okna przeciążenia i okna wysyłania są ze sobą powiązane, a ilość danych u nadawcy jest kontrolowana poprzez dynamiczne dostosowywanie rozmiaru okna przeciążenia. Powolny start, unikanie przeciążenia i szybkie odzyskiwanie to trzy główne części algorytmu kontroli przeciążenia TCP, które dostosowują rozmiar okna przeciążenia za pomocą różnych strategii w celu dostosowania do pojemności i stopnia przeciążenia sieci.

W następnej sekcji szczegółowo przeanalizujemy mechanizm retransmisji TCP. Mechanizm retransmisji jest ważną częścią TCP, aby osiągnąć niezawodną transmisję. Zapewnia niezawodną transmisję danych poprzez retransmisję utraconych, uszkodzonych lub opóźnionych danych. Zasada implementacji i strategia mechanizmu retransmisji zostaną przedstawione i przeanalizowane szczegółowo w następnej sekcji. Bądź na bieżąco!


Czas publikacji: 24-02-2025