TCP TCP TCP
Wszyscy znamy protokół TCP jako niezawodny protokół transportu, ale w jaki sposób zapewnia niezawodność transportu?
Aby osiągnąć wiarygodną transmisję, należy wziąć pod uwagę wiele czynników, takich jak uszkodzenie danych, strata, duplikacja i odłamki poza zamówieniem. Jeśli tych problemów nie można rozwiązać, nie można osiągnąć wiarygodnej transmisji.
Dlatego TCP wykorzystuje mechanizmy takie jak numer sekwencji, odpowiedź na potwierdzenie, ponowne kontrola, zarządzanie połączeniem i kontrola okien w celu osiągnięcia wiarygodnej transmisji.
W tym artykule skupimy się na przesuwanym oknie, kontroli przepływu i kontroli przekrwienia TCP. Mechanizm retransmisji jest objęty osobno w następnym rozdziale.
Kontrola przepływu sieci
Kontrola przepływu sieci lub znana jako kontrola ruchu sieciowego jest w rzeczywistości manifestacją subtelnej relacji między producentami a konsumentami. Prawdopodobnie spotykałeś ten scenariusz w pracy lub w wywiadach. Jeśli zdolność producenta do produkcji znacznie przekracza zdolność konsumenta do konsumpcji, spowoduje wzrost kolejki na czas nieokreślony. W poważniejszym przypadku możesz wiedzieć, że gdy wiadomości Rabbitmq są zbyt mocno gromadzą się, może to spowodować degradację wydajności całego serwera MQ. To samo dotyczy TCP; Jeśli pozostanie niezaznaczona, zbyt wiele wiadomości zostanie umieszczonych w sieci, a konsumenci przekroczą ich pojemność, podczas gdy producenci będą nadal wysyłać zduplikowane wiadomości, które znacznie wpłyną na wydajność sieci.
Aby zająć się tym zjawiskiem, TCP zapewnia nadawcy mechanizm kontrolowania ilości danych wysłanych na podstawie rzeczywistej pojemności odbioru odbiornika, znanego jako kontrola przepływu. Odbiornik utrzymuje okno odbierania, podczas gdy nadawca utrzymuje okno wysyłania. Należy zauważyć, że te okna są tylko dla pojedynczego połączenia TCP, a nie wszystkie połączenia udostępniają okno.
TCP zapewnia kontrolę przepływu za pomocą zmiennej dla okna od odbierania. Okno odbierania daje nadawcy wskazanie, ile przestrzeni pamięci podręcznej jest nadal dostępnych. Nadawca kontroluje ilość danych wysyłanych zgodnie z rzeczywistą zdolnością akceptacyjną odbiornika.
Host odbiornika powiadamia nadawcę o wielkości danych, które może odbierać, a nadawca wysyła do tego limitu. Ten limit to rozmiar okna, pamiętasz nagłówek TCP? Istnieje pole okna od odbierania, które służy do wskazania liczby bajtów, które odbiornik jest w stanie lub chce otrzymać.
Host nadawcy okresowo wyśle pakiet sondy okiennej, który służy do wykrycia, czy host odbiorczy jest nadal w stanie przyjąć dane. Gdy bufor odbiornika jest zagrożony przepełnieniem, rozmiar okna jest ustawiony na mniejszą wartość, aby poinformować nadawcy do kontrolowania ilości wysłanych danych.
Oto schemat kontroli przepływu sieci:
Kontrola zatorów sieciowych
Przed wprowadzeniem kontroli przeciążenia musimy zrozumieć, że oprócz okna odbioru i okna wysyłania istnieje również okno zatorowe, które służy głównie do rozwiązania problemu po stawce, w jakiej szybkość nadawca zaczyna wysyłać dane do okna odbioru. Dlatego okno zatorowe jest również utrzymywane przez nadawcę TCP. Potrzebujemy algorytmu, aby zdecydować, ile danych jest odpowiednie, ponieważ wysłanie zbyt mało lub zbyt dużej ilości danych nie jest idealne, stąd koncepcja okna zatoru.
W poprzedniej kontroli przepływu sieci uniknęliśmy nadawcy wypełniania pamięci podręcznej odbiorcy danymi, ale nie wiedzieliśmy, co się dzieje w sieci. Zazwyczaj sieci komputerowe są w wspólnym środowisku. W rezultacie może wystąpić przeciążenie sieciowe z powodu komunikacji między innymi hostami.
Gdy sieć jest zatłoczona, jeśli nadal wysyłana jest duża liczba pakietów, może to powodować takie problemy, jak opóźnienie i utrata pakietów. W tym momencie TCP retransmituje dane, ale retransmisja zwiększy obciążenie w sieci, co spowoduje większe opóźnienia i więcej strat pakietów. Może to dostać się do błędnego cyklu i staje się coraz większy.
Zatem TCP nie może zignorować tego, co dzieje się w sieci. Kiedy sieć jest zatłoczona, TCP poświęca się poprzez zmniejszenie ilości wysyłanych danych.
Dlatego proponowana jest kontrola przeciążenia, która ma na celu uniknięcie wypełnienia całej sieci danych od nadawcy. Aby uregulować ilość danych, które nadawca powinien wysłać, TCP definiuje koncepcję zwaną oknem zatorowym. Algorytm kontroli przeciążenia dostosuje rozmiar okna zatoru zgodnie ze stopniem zatorów sieci, aby kontrolować ilość danych wysyłanych przez nadawcę.
Co to jest okno zatorowe? Co to ma wspólnego z oknem wysyłania?
Okno przeciążenia to zmienna stanu utrzymana przez nadawcę, która określa ilość danych, które nadawca może wysłać. Okno przeciążenia zmienia się dynamicznie w zależności od poziomu przeciążenia sieci.
Okno wysyłania jest uzgodnionym rozmiarem okna między nadawcą a odbiornikiem, który wskazuje ilość danych, które odbiornik może odbierać. Okno przeciążenia i okno wysyłania są powiązane; Okno wysyłania jest zwykle równe minimum zatorów i okien odbiorczych, to znaczy SWND = min (Cwnd, Rwnd).
Okno zatorowe CWND zmienia się w następujący sposób:
Jeśli nie ma zatorów w sieci, tj. Nie ma czasu retransmisji, wzrasta okno zatorowe.
Jeśli w sieci występuje zator, okno zatorowe zmniejsza się.
Nadawca określa, czy sieć jest zatłoczona, obserwując, czy pakiet potwierdzenia ACK jest odbierany w określonym czasie. Jeśli nadawca nie otrzyma pakietu potwierdzenia ACK w określonym czasie, uważa się, że sieć jest zatłoczona.
Oprócz okna zatorów nadszedł czas, aby omówić algorytm kontroli przeciążenia TCP. Algorytm kontroli przeciążenia TCP składa się z trzech głównych części:
Powolny start:Początkowo okno zatorowe CWND jest stosunkowo niewielkie, a nadawca zwiększa okno zatorowe wykładniczo, aby szybko dostosować się do pojemności sieci.
Unikanie zatorów:Po oknie zatoru przekracza określony próg, nadawca zwiększa okno zatoru w sposób liniowy, aby spowolnić szybkość wzrostu okna zatorowego i uniknąć przeciążenia sieci.
Szybkie odzyskiwanie:Jeśli nastąpi zator, nadawca ociska okno zatorów i wchodzi do stanu szybkiego odzyskiwania, aby określić lokalizację odzyskiwania sieci za pośrednictwem otrzymanych duplikatów ACK, a następnie nadal zwiększa okno zatorów.
Powolny start
Po ustaleniu połączenia TCP 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 bajtów MSS/RTT/Second. Rzeczywista dostępna przepustowość jest zwykle znacznie większa niż MSS/RTT, więc TCP chce znaleźć optymalną szybkość wysyłania, którą można osiągnąć za pomocą powolnego startowania.
W procesie powolnego startowania wartość okna zatoru CWND zostanie zainicjowana do 1 MSS, a za każdym razem, gdy przesyłany segment pakietów zostanie uznany, wartość CWND zostanie zwiększona o jeden MSS, to znaczy wartość CWND stanie się 2 MSS. Następnie wartość CWND jest podwojona dla każdej udanej transmisji segmentu pakietu i tak dalej. Specyficzny proces wzrostu pokazano na poniższym rysunku.
Jednak wskaźnik wysyłania nie zawsze może rosnąć; Wzrost musi kiedyś się skończyć. Więc kiedy kończy się tempo wysyłania? Powolne start zazwyczaj kończy wzrost szybkości wysyłania na jeden z kilku sposobów:
Pierwszym sposobem jest przypadek utraty pakietu podczas procesu wysyłania wolnego startu. Gdy nastąpi utrata pakietu, TCP ustawia okno zatorowi nadawcy na 1 na 1 i ponownie uruchamia proces powolnego uruchomienia. W tym momencie wprowadzono koncepcję SSTHresh z powolnym startem, którego wartość początkowa wynosi połowę wartości CWND, która generuje utratę pakietu. Oznacza to, że po wykryciu zatorów wartość SSTHresh wynosi połowę wartości okna.
Drugim sposobem jest bezpośrednie skorelowanie z wartością powolnego progu SSTHRESH. Ponieważ wartość SSTHresh wynosi połowę wartości okna po wykryciu zatorów, utrata pakietu może wystąpić z każdym podwojeniem, gdy CWND jest większa niż SSTHresh. Dlatego najlepiej ustawić CWND na SSTHRESH, co spowoduje przełączenie TCP w tryb kontroli przeciążenia i zakończenie powolnego startowania.
Ostatnim sposobem, w jaki powolny start może się zakończyć, jest wykrycie trzech zbędnych ACK, TCP wykonuje szybką retransmisję i wchodzi w stan odzyskiwania. (Jeśli nie jest jasne, dlaczego istnieją trzy pakiety ACK, zostaną to wyjaśnione osobno w mechanizmie retransmisji).
Unikanie zatorów
Gdy TCP wchodzi w stan kontroli przeciążenia, CWND jest ustawiony na połowę progu progu przeciążenia. Oznacza to, że wartości CWND nie można podwoić za każdym razem, gdy odbierany jest segment pakietów. Zamiast tego przyjmuje się 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 potwierdzono 10 segmentów pakietów, wartość CWND wzrośnie tylko o jeden MSS. Jest to liniowy model wzrostu i ma również górną granicę wzrostu. Gdy nastąpi utrata pakietu, wartość CWND jest zmieniana na MSS, a wartość SSTHresh jest ustawiona na połowę CWND. Lub zatrzyma także wzrost MSS, gdy otrzymają 3 zbędne odpowiedzi ACK. Jeżeli trzy zbędne ACK są nadal odbierane po zmniejszeniu o połowę wartość CWND, wartość SSTHRESH jest rejestrowana jako połowa wartości CWND i wprowadzono stan szybkiego odzyskiwania.
Szybkie odzyskiwanie
W stanie szybkiego odzyskiwania wartość okna zatoru CWND jest zwiększana o jeden MSS dla każdego otrzymanego zbędnego ACK, to znaczy ACK, który nie przychodzi w sekwencji. Ma to na celu wykorzystanie segmentów pakietów, które zostały pomyślnie przesłane w sieci, aby w jak największym stopniu poprawić wydajność transmisji.
Gdy nadejdzie ACK utraconego segmentu pakietów, TCP zmniejsza wartość CWND, a następnie wchodzi w stan unikania zatorów. Ma to na celu kontrolowanie wielkości okna zatorów i uniknięcie dalszego zwiększenia przeciążenia sieci.
Jeśli limit czasu nastąpi po stanie kontroli przeciążenia, stan sieci staje się poważniejszy, a TCP migruje ze stanu unikania zatłoczenia do stanu powolnego startowania. W tym przypadku wartość okna zatoru CWND jest ustawiona na 1 MSS, maksymalną długość segmentu pakietu, a wartość sshresh progu powolnego startowego jest ustawiona na połowę CWND. Celem tego jest ponowne zwiększenie wielkości okna zatoru po odzyskaniu sieci w celu zrównoważenia szybkości transmisji i stopnia zatorów sieci.
Streszczenie
Jako niezawodny protokół transportu TCP implementuje niezawodny transport według numeru sekwencji, potwierdzenia, kontroli retransmisji, zarządzania połączeniem i kontroli okien. Wśród nich mechanizm kontroli przepływu kontroluje ilość danych wysyłanych przez nadawcę zgodnie z rzeczywistą pojemnością odbiorczą, co pozwala uniknąć problemów zatorów i degradacji wydajności. Mechanizm kontroli przeciążenia pozwala uniknąć wystąpienia zatorów sieci poprzez dostosowanie ilości danych wysyłanych przez nadawcę. Pojęcia okna zatorów i okna wysyłania są ze sobą powiązane, a ilość danych u nadawcy jest kontrolowana przez dynamiczne dostosowanie rozmiaru okna zatorowego. Powolne start, unikanie zatorów i szybkie odzyskiwanie to trzy główne części algorytmu kontroli przeciążenia TCP, które dostosowują rozmiar okna zatoru poprzez różne strategie dostosowywania się do pojemności i stopnia zatorów sieci.
W następnej sekcji szczegółowo zbadamy mechanizm retransmisji TCP. Mechanizm retransmisji jest ważną częścią TCP w celu osiągnięcia wiarygodnej transmisji. Zapewnia wiarygodną transmisję danych poprzez retransmijanie utraconych, uszkodzonych lub opóźnionych danych. Zasada wdrażania i strategia mechanizmu retransmisji zostaną wprowadzone i szczegółowo przeanalizowane w następnej sekcji. Czekać na dalsze informacje!
Czas po: 24-2025 lutego