2012-03-30 9 views

Odpowiedz

7

Krótka odpowiedź jest taka, że ​​każdy pakiet zawiera informacje o przesunięciu (ukryte jako numer kolejny), określając, gdzie w strumieniu leży jego ładunek.

Załóżmy, że nastąpiło: odebrano pakiet 1, pakiet 2 nie został odebrany, a pakiet 3 i 4 zostały odebrane. W tym momencie odbierający stos TCP wie, gdzie skopiować zawartość pakietów 3 i 4 na buforze i wie, że nadal nie otrzymał wcześniejszych danych, więc udostępni dane z pakietu 1 do odczytu, ale nie zrobi tego pakiet 3 lub 4 dane dostępne do momentu otrzymania pakietu 2.

Przesyłanie stosu TCP zasadniczo nie czeka na potwierdzenia dla pojedynczego pakietu przed wysłaniem następnego, ale jeśli nie otrzyma potwierdzenia dla danego pakietu (a pakiety ACK mogą i są połączone w jeden pakiet dla zwiększenia wydajności), będzie retransmitować go do momentu otrzymania potwierdzenia ACK.

Dokładna sekwencja zdarzeń zależy od warunków sieciowych, implementacji stosu TCP, wybranych zasad TCP, opcji gniazd i innych czynników.

4

pakiety TCP mają kolejne numery (bajt przesunięcia od początku, z pamięci) oraz komunikaty ACK uznać, że konkretny przesunięcie został odebrany:

enter image description here

Więc może skończyć się w takiej sytuacji :

data 1 (10 bytes)   -> 
          <- ack (10, data1) 
data 2 (15 bytes)   -> 
data 3 (10 bytes)   -> 
data 4 (8 bytes)   -> 
          <- ack (25, data1/2/3) 
          <- ack (33, data1/2/3/4) 

innymi słowy, nadawca może nadal wysyłać niezależnie od potwierdzeń aż do momentu, gdy jego bufory są pełne (ma zachować niepotwierdzonych pakietów w przypadku potrzebne do ich ponownego przesyłania).

To "rozłączenie" pomiędzy wysyłaniem a potwierdzaniem może znacznie przyspieszyć przepływ danych.

Po stronie odbiorcy pakiety mogą być nieczynne i przechowywane, dopóki coś nie zostanie dostarczone na wyższe poziomy w kolejności.

Na przykład, jeśli data 3 przybył przed data 2, koniec przyjmowania będzie trzymać się go aż data 2 przybył, następnie oboje będą wysyłane w górę dla dostawy.

Powiązane problemy