2011-01-07 10 views
6

Czytałem o implementacjach niezawodnego UDP (tj. Wysyłanie pakietów ACK i ponowne wysyłanie pakietów nie-ACKed).Niezawodne pytanie metody UDP i ACK

Spośród dwóch głównych wzorców wydaje mi się znaleźć arround netto:

  1. Klient wysyła ACK dla każdego odebranego pakietu z sekwencją tego pakietu. Serwer zakłada, że ​​pakiet jest niedoręczony, chyba że otrzyma potwierdzenie ACK.

  2. Klient wysyła pakiet ACK z sekwencjami pakietów, które ich zdaniem nie istnieją. Serwer zakłada, że ​​pakiet jest dostarczany, dopóki nie otrzyma potwierdzenia od klienta mówiąc, że brakuje sekwencji, a następnie ponownie wysyła żądane (brakujące) pakiety.

W skrócie, w 1. klienci wysyłają sekwencję odebranych pakietów, natomiast w 2. klient wysyła sekwencję brakujących pakietów.

Zastanawiasz się, jakie są plusy i minusy każdej metody i która z nich jest bardziej popularna (zakładam 1, ale 2 wydaje się być bardzo sprytną metodą, ponieważ prawdopodobnie większość pakietów przybywa, a tylko kilka z nich jest zwykle traconych).

EDIT: Krótki przykład na obu metod:

Method 1: Server sends: 1,2,3,4,5 
Client received: 1,3,5,4 
Client sends back: ACK 1, ACK 3, ACK 5, ACK 4 
Server resends: 2.. maybe more if ACK packets were lost 


Method 2: 
Server sends 1,2,3,4,5,6,7,8 
Client receives: 1,3,2,5,7 
Client Sends :ACK (lowest continuous 3,highest received 7, seem to be missing 4,6) 
Server resends: 4,6,8 
+0

A co jeśli w metodzie drugiej pakiet AC klientów, który twierdzi, że czegoś brakuje, nigdy nie jest dostarczany? – villintehaspam

+0

Z tego co rozumiem, w metodzie 2 znajduje się ACK z informacją "brak brakujących pakietów tutaj (i najwyższy otrzymany seq to 532)" ... więc jeśli serwer wyśle ​​1 pakiet i nie zostanie odebrany żaden ACK, to pakiet ten jest ponownie wysyłany. pakiety ACK w metodzie 2 są zwykle wysyłane okresowo. Działając bardzo podobnie do pingów. Przypuszczam, że – Radu094

+0

. Czy mógłbyś wyjaśnić nieco więcej różnic? Tak więc metoda 1 zgłasza jawnie pakiety, za każdym razem, gdy osiąga nowe seq no (może to być potwierdzenie dla więcej niż jednego pakietu), a metoda 2 pakietuje okresowo zamiast tego i nigdy jawnie? – villintehaspam

Odpowiedz

5

# 2 jest również znany jako negatywne NAK ACK, aka, jest to optymistyczne punktu widzenia transportu. Oznacza to, że skaluje się lepiej, gdy transport działa poprawnie.

# 1 jest pesymistycznym punktem widzenia i zakłada, że ​​transport często zawodzi.

TCP używa ACK, ponieważ istnieje fundamentalna zależność od kontroli przeciążenia, aby zrzucić pakiety, aby wykonać kształtowanie ruchu w celu utworzenia uczciwej sieci. Wiarygodne kanały UDP zwykle używają NAK, ponieważ używasz niezawodnego szybkiego lub średniego strumienia o niskiej szybkości z wymogiem niskiego opóźnienia ponad krok blokady typowej dla podstawowej implementacji ACK.

Uwaga, jeśli podniesiesz o krok wyżej i spojrzysz na zarządzanie subskrypcjami powiedzonek powyżej niezawodnego kanału UDP, nie ma wyraźnego zwycięzcy dla użycia ACK lub NAK. Świat danych rynkowych udowodnił, że obie technologie korzystają z dużych prędkości w sieciach o dużej przepustowości. ACK mają tę zaletę, że subskrypcje nie wymagają skomplikowanej ponownej synchronizacji po awarii sieci, ale widać spójny szczyt użycia sieci i procesora, gdy każdy host wydaje ponowną subskrypcję.