Nag艂贸wek TCP
Analiza p贸l nag艂贸wka TCP: numery sekwencji/ACK, flagi, okno, suma kontrolna, MSS i opcje.
Wprowadzenie: Szczeg贸艂owa Instrukcja Obs艂ugi dla Danych
Kontynuuj膮c nasz膮 analogi臋 z protoko艂u TCP, je艣li pakiet IP jest g艂贸wn膮 kopert膮, kt贸ra dostarcza wiadomo艣膰 do w艂a艣ciwego budynku (komputera), to nag艂贸wek TCP jest szczeg贸艂owym, wielocz臋艣ciowym formularzem instrukcji do艂膮czonym do zawarto艣ci wewn膮trz. Formularz ten nie tylko okre艣la nadawc臋 i odbiorc臋; zawiera bogactwo informacji kontrolnych, kt贸re zarz膮dzaj膮 ca艂ym cyklem 偶ycia konwersacji, zapewniaj膮c jej niezawodno艣膰, uporz膮dkowanie i wydajno艣膰.
Zanim jakiekolwiek dane aplikacji zostan膮 wys艂ane, oprogramowanie TCP na komputerze wysy艂aj膮cym konstruuje ten nag艂贸wek. Nag艂贸wek jest do艂膮czany na pocz膮tku fragmentu danych aplikacji (艂adunku), tworz膮c jednostk臋 znan膮 jako segment TCP. Ten kompletny segment jest nast臋pnie przekazywany do warstwy IP, kt贸ra opakowuje go w nag艂贸wek IP, tworz膮c pakiet gotowy do podr贸偶y przez sie膰.
Zrozumienie ka偶dego pola nag艂贸wka TCP jest jak nauka gramatyki i s艂ownictwa niezawodno艣ci sieciowej. Ka偶de pole rozwi膮zuje konkretny problem zwi膮zany z porz膮dkowaniem, wykrywaniem b艂臋d贸w, kontrol膮 przep艂ywu i zarz膮dzaniem po艂膮czeniem.
Og贸lna Struktura Nag艂贸wka TCP
Nag艂贸wek TCP ma standardow膮 struktur臋. Jego podstawowy rozmiar to 20 bajt贸w (160 bit贸w), ale mo偶e by膰 wi臋kszy, je艣li do艂膮czone s膮 pola opcjonalne, maksymalnie do 60 bajt贸w. Nag艂贸wek jest zorganizowany jako seria p贸l, z kt贸rych ka偶de ma sta艂y rozmiar i okre艣lone przeznaczenie.
Przeanalizujmy ka偶de z tych p贸l jedno po drugim, od g贸ry do do艂u, zgodnie z diagramem.
Port 殴r贸d艂owy i Port Docelowy
Te dwa pola s膮 najbardziej podstawowymi komponentami adresuj膮cymi w nag艂贸wku TCP.
- Port 殴r贸d艂owy (16 bit贸w): To pole identyfikuje numer portu aplikacji, kt贸ra wys艂a艂a segment na maszynie 藕r贸d艂owej. Gdy aplikacja kliencka, taka jak przegl膮darka internetowa, inicjuje po艂膮czenie, system operacyjny przypisuje jej tymczasowy, z zakresu dynamicznego. Ten numer jest umieszczany w polu portu 藕r贸d艂owego, aby serwer wiedzia艂, dok膮d odes艂a膰 swoj膮 odpowied藕.
- Port Docelowy (16 bit贸w): To pole identyfikuje numer portu aplikacji, kt贸ra ma odebra膰 segment na maszynie docelowej. W przypadku aplikacji serwerowych jest to zazwyczaj zwi膮zany ze standardow膮 us艂ug膮, np. port 443 dla bezpiecznego serwera WWW (HTTPS).
Razem, kombinacja 藕r贸d艂owego adresu IP, portu 藕r贸d艂owego, docelowego adresu IP i portu docelowego tworzy unikalny identyfikator dla konkretnego po艂膮czenia TCP, pozwalaj膮c pojedynczemu serwerowi obs艂ugiwa膰 tysi膮ce po艂膮cze艅 klienckich jednocze艣nie.
Numer Sekwencyjny (32 bity)
Jest to jedno z najwa偶niejszych p贸l zapewniaj膮cych niezawodno艣膰 i uporz膮dkowane dostarczanie danych przez TCP. Wyobra藕 sobie ca艂y strumie艅 danych, kt贸ry aplikacja chce wys艂a膰, jako jeden bardzo d艂ugi dokument tekstowy. TCP numeruje ka偶dy pojedynczy bajt w tym dokumencie.
Pole Numer Sekwencyjny w danym segmencie zawiera numer pierwszego bajtu danych w 艂adunku tego segmentu. Na przyk艂ad, je艣li segment zawiera 100 bajt贸w danych, a jego numer sekwencyjny to 501, oznacza to, 偶e ten segment przenosi bajty od 501 do 600 z ca艂ego strumienia danych.
32-bitowy rozmiar tego pola jest celowo du偶y. Pozwala TCP na ponumerowanie do bajt贸w, czyli 4 Gigabajt贸w, zanim numery b臋d膮 musia艂y si臋 zawin膮膰 i zacz膮膰 od nowa. Ten du偶y zakres jest niezb臋dny w szybkich sieciach, aby zapobiec zjawisku zwanemu zawini臋ciem numer贸w sekwencyjnych, gdzie stary pakiet z poprzedniego cyklu m贸g艂by zosta膰 omy艂kowo wzi臋ty za nowy.
Podczas nawi膮zywania po艂膮czenia (tr贸jetapowe uzgadnianie), zar贸wno klient, jak i serwer wymieniaj膮 si臋 losowym Pocz膮tkowym Numerem Sekwencyjnym (ISN). Wszystkie kolejne numery sekwencyjne w konwersacji s膮 inkrementowane od tego punktu startowego.
Numer Potwierdzenia (32 bity)
To pole jest odpowiednikiem Numeru Sekwencyjnego i jest mechanizmem potwierdzania pomy艣lnego odbioru danych. Jest ono wa偶ne tylko wtedy, gdy ustawiona jest flaga kontrolna ACK.
Warto艣膰 pola Numer Potwierdzenia wskazuje numer sekwencyjny nast臋pnego bajtu, kt贸rego nadawca oczekuje od drugiej strony. Potwierdzenie to jest kumulatywne. Na przyk艂ad, je艣li odbiorca odsy艂a numer potwierdzenia 750, potwierdza tym samym, 偶e pomy艣lnie i poprawnie otrzyma艂 wszystkie bajty danych a偶 do numeru sekwencyjnego 749, i jest teraz gotowy na bajt 750.
Ten system kumulatywnych potwierdze艅 jest wydajny, ale mo偶e prowadzi膰 do niejednoznaczno艣ci, je艣li pojedynczy segment zostanie utracony. Je艣li segmenty 1, 2 i 4 dotr膮, ale segment 3 zaginie, odbiorca b臋dzie wci膮偶 potwierdza艂 numer sekwencyjny pocz膮tku segmentu 3, a偶 ten nie dotrze. Bardziej zaawansowane opcje, takie jak Selektywne Potwierdzenie (SACK), mog膮 rozwi膮za膰 ten problem.
D艂ugo艣膰 Nag艂贸wka (4 bity)
To pole, czasami nazywane Przesuni臋ciem Danych (Data Offset), jest niezb臋dne, poniewa偶 nag艂贸wek TCP nie zawsze ma sta艂y rozmiar. Podstawowy rozmiar to 20 bajt贸w, ale mo偶e by膰 rozszerzony przez pole Opcje TCP. To 4-bitowe pole okre艣la ca艂kowit膮 d艂ugo艣膰 nag艂贸wka w 32-bitowych s艂owach (jednostkach 4-bajtowych).
Minimalna warto艣膰 tego pola to 5, co odpowiada obowi膮zkowemu 20-bajtowym nag艂贸wkowi . Maksymalna warto艣膰 to 15, co odpowiada maksymalnemu rozmiarowi nag艂贸wka 60 bajt贸w . To pole informuje komputer odbieraj膮cy, gdzie dok艂adnie ko艅czy si臋 nag艂贸wek i zaczynaj膮 si臋 w艂a艣ciwe dane aplikacji.
Zarezerwowane (3 bity)
To 3-bitowe pole (w starszych diagramach czasem pokazywane jako wi臋ksze, zanim niekt贸re bity zosta艂y przeznaczone na inne cele) jest od艂o偶one do przysz艂ego wykorzystania. Zgodnie ze standardami, musi by膰 ustawione na zero przez nadawc臋 i ignorowane przez odbiorc臋. Jego celem jest umo偶liwienie przysz艂ych rozszerze艅 protoko艂u bez naruszania kompatybilno艣ci wstecznej.
Flagi Kontrolne (9 bit贸w)
Ta kolekcja jednobitowych flag dzia艂a jak zestaw w艂膮cznik贸w/wy艂膮cznik贸w, kt贸re kontroluj膮 stan i zachowanie po艂膮czenia TCP. Ka偶da flaga, gdy jest ustawiona na 1, aktywuje okre艣lon膮 funkcj臋. Dziewi臋膰 flag to: NS, CWR, ECE, URG, ACK, PSH, RST, SYN i FIN.
NS (Nonce Sum): Jednobitowa flaga u偶ywana w eksperymentalnym mechanizmie kontroli przeci膮偶enia, aby chroni膰 przed przypadkowym lub z艂o艣liwym ukrywaniem powiadomie艅 o przeci膮偶eniu.
CWR (Congestion Window Reduced): Ustawiana przez nadawc臋, aby wskaza膰, 偶e zmniejszy艂 on swoj膮 szybko艣膰 wysy艂ania w odpowiedzi na otrzymanie segmentu z flag膮 ECE.
ECE (ECN-Echo): U偶ywana w . Ustawiana przez odbiorc臋, aby poinformowa膰 nadawc臋, 偶e otrzyma艂 sygna艂 o przeci膮偶eniu sieci od routera.
URG (Urgent): Wskazuje, 偶e pole Wska藕nik Pilno艣ci jest wa偶ne. Flaga ta sygnalizuje, 偶e niekt贸re dane w segmencie s膮 pilne i powinny by膰 przetworzone przez aplikacj臋 odbiorcz膮 jak najszybciej, omijaj膮c normalny bufor danych.
ACK (Acknowledgment): Wskazuje, 偶e pole Numer Potwierdzenia jest wa偶ne. Prawie wszystkie pakiety wysy艂ane po pocz膮tkowym pakiecie SYN b臋d膮 mia艂y t臋 flag臋 ustawion膮.
PSH (Push): 呕膮danie od nadawcy do odbiorcy. Gdy jest ustawione, m贸wi odbiorczemu stosowi TCP, aby natychmiast przepchn膮艂 dane otrzymane w tym segmencie do oczekuj膮cej aplikacji, bez czekania na zape艂nienie bufora. Jest to przydatne w aplikacjach interaktywnych, takich jak Telnet.
RST (Reset): Natychmiastowe zako艅czenie po艂膮czenia w odpowiedzi na b艂膮d. Jest to gwa艂towny spos贸b zako艅czenia sesji, na przyk艂ad, je艣li jedna strona otrzyma pakiet dla po艂膮czenia, kt贸re ju偶 nie istnieje, lub w przypadku b艂臋du krytycznego.
SYN (Synchronize): U偶ywana tylko w pierwszym jednym lub dw贸ch pakietach tr贸jetapowego uzgadniania w celu ustanowienia po艂膮czenia. Synchronizuje pocz膮tkowe numery sekwencyjne mi臋dzy dwoma hostami.
FIN (Finish): U偶ywana do eleganckiego zako艅czenia po艂膮czenia, gdy nadawca nie ma wi臋cej danych do wys艂ania. Sygnalizuje rozpocz臋cie czteroetapowego uzgadniania w celu zamkni臋cia po艂膮czenia.
Rozmiar Okna (16 bit贸w)
To pole jest rdzeniem mechanizmu kontroli przep艂ywu w TCP. Okre艣la liczb臋 bajt贸w, pocz膮wszy od bajtu wskazanego w polu Numer Potwierdzenia, kt贸r膮 nadawca tego segmentu jest obecnie w stanie przyj膮膰.
W istocie odbiorca m贸wi: M贸j bufor odbiorczy ma X bajt贸w wolnego miejsca, wi臋c prosz臋 nie wysy艂aj mi wi臋cej ni偶 X bajt贸w, dop贸ki nie dam ci nowej aktualizacji. Zapobiega to zalaniu wolnego odbiorcy przez szybkiego nadawc臋. Poniewa偶 pole ma 16 bit贸w, maksymalny rozmiar okna, kt贸ry mo偶na og艂osi膰, to 65 535 bajt贸w. Sta艂o si臋 to w膮skim gard艂em w nowoczesnych, szybkich sieciach dalekiego zasi臋gu, co doprowadzi艂o do opracowania opcji TCP Skala Okna.
Suma Kontrolna (16 bit贸w)
Pole sumy kontrolnej s艂u偶y do podstawowego wykrywania b艂臋d贸w. Nadawca oblicza 16-bitow膮 warto艣膰 sumy kontrolnej na podstawie zawarto艣ci nag艂贸wka TCP, danych aplikacji i specjalnego pseudo-nag艂贸wka. Odbiorca wykonuje to samo obliczenie. Je艣li wyniki si臋 r贸偶ni膮, odbiorca wie, 偶e segment zosta艂 uszkodzony w tranzycie i go odrzuca.
Pseudo-nag艂贸wek to koncepcyjna struktura zawieraj膮ca 藕r贸d艂owy adres IP, docelowy adres IP, numer protoko艂u (6 dla TCP) i d艂ugo艣膰 segmentu TCP. W艂膮czenie adres贸w IP do oblicze艅 sumy kontrolnej stanowi wa偶ne zabezpieczenie: pomaga wykry膰 przypadki, w kt贸rych pakiet zosta艂 b艂臋dnie dostarczony przez warstw臋 IP do niew艂a艣ciwego hosta lub protoko艂u.
Wska藕nik Pilno艣ci (16 bit贸w)
To pole jest wa偶ne tylko wtedy, gdy ustawiona jest flaga URG. Jest to 16-bitowe przesuni臋cie od bie偶膮cego numeru sekwencyjnego, kt贸re wskazuje na ostatni bajt pilnych danych. Pozwala to systemowi odbiorczemu szybko znale藕膰 i dostarczy膰 dane pozapasmowe do aplikacji, na przyk艂ad polecenie przerwania, jak Ctrl+C w zdalnej sesji terminalowej, bez konieczno艣ci czekania w normalnym buforze danych.
Opcje TCP (Zmienna D艂ugo艣膰) i Wype艂nienie
Podstawowy 20-bajtowy nag艂贸wek TCP zapewnia podstawow膮 funkcjonalno艣膰, ale nowoczesne sieci wymagaj膮 dodatkowych funkcji. Pole Opcje pozwala na t臋 rozszerzalno艣膰. Mo偶e mie膰 do 40 bajt贸w d艂ugo艣ci. Je艣li u偶ywane s膮 opcje, pole D艂ugo艣膰 Nag艂贸wka b臋dzie mia艂o warto艣膰 wi臋ksz膮 ni偶 5.
Niekt贸re z najwa偶niejszych opcji to:
- Maksymalny Rozmiar Segmentu (MSS): Jest to jedna z najcz臋stszych opcji, wymieniana podczas tr贸jetapowego uzgadniania. Ka偶da strona u偶ywa jej do og艂oszenia najwi臋kszego fragmentu danych (segmentu), jaki jest w stanie przyj膮膰. Pomaga to unikn膮膰 fragmentacji IP, kt贸ra mo偶e degradowa膰 wydajno艣膰 sieci.
- Skala Okna: Rozwi膮zuje ograniczenie 16-bitowego pola Rozmiar Okna. Jest to wsp贸艂czynnik skaluj膮cy (pot臋ga 2), kt贸ry mno偶y warto艣膰 w polu Rozmiar Okna, pozwalaj膮c na znacznie wi臋ksze okna odbiorcze (do 1 Gigabajta), co jest kluczowe dla osi膮gni臋cia wysokiej przepustowo艣ci w sieciach o du偶ym iloczynie przepustowo艣ci i op贸藕nienia.
- Selektywne Potwierdzenie (SACK): Pozwala odbiorcy na potwierdzenie nieci膮g艂ych blok贸w otrzymanych danych. Jest to znacznie bardziej wydajne ni偶 standardowe kumulatywne ACK, gdy z jednego okna danych zaginie wiele pakiet贸w.
- Znaczniki Czasu: Dodaje informacje o czasie do ka偶dego segmentu, co pomaga w dok艂adniejszych obliczeniach Czasu Obiegu (RTT) i zapewnia kolejny mechanizm ochrony przed zawini臋ciem numer贸w sekwencyjnych (PAWS - Protection Against Wrapped Sequence numbers).
Na koniec, Wype艂nienie jest u偶ywane, aby zapewni膰, 偶e ca艂kowita d艂ugo艣膰 nag艂贸wka jest wielokrotno艣ci膮 4 bajt贸w. Poniewa偶 niekt贸re opcje nie ko艅cz膮 si臋 na granicy 4 bajt贸w, dodaje si臋 bajty zerowe jako wype艂nienie, aby uzupe艂ni膰 ostatnie 32-bitowe s艂owo nag艂贸wka.