2011-01-07 9 views
6

Sto leggendo su implementazioni di UDP affidabile (cioè invio di pacchetti ACK e invio di pacchetti non ACK nuovamente).Affidabile metodo UDP e ACK domanda

Dei due modelli principali che sembrano trovare arround rete:

  1. client invia un ACK per ogni pacchetto ricevuto con la sequenza di quel pacchetto. Il server presuppone che il pacchetto non viene recapitato a meno che non riceva un ACK.

  2. Il client invia un pacchetto ACK con le sequenze dei pacchetti che si ritiene manchino. Il server assume che il pacchetto sia consegnato a meno che non riceva un ACK dal client dicendo che manca una sequenza, quindi invia nuovamente i pacchetti richiesti (mancanti).

In breve, in 1. i client inviano la sequenza dei pacchetti ricevuti, mentre in 2. il client invia la sequenza dei pacchetti mancanti.

Basta chiedersi quali sono i pro/contro di ciascun metodo e quale è più mainstream (presumo 1, ma 2 sembra un metodo molto intelligente poiché presumibilmente la maggior parte dei pacchetti arriva e solo alcuni di solito vengono persi).

EDIT: Un breve esempio su entrambi i metodi:

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

Quindi cosa succede se nel metodo due, il pacchetto ack dei client che dice che manca qualcosa non viene mai consegnato? – villintehaspam

+0

Da quello che ho capito, nel metodo 2 c'è un ACK che dice "nessun pacchetto mancante qui (e il seq ricevuto più alto è 532)" ... quindi se il server invia 1 pacchetto e nessun ACK è recevitato allora quel pacchetto viene nuovamente inviato. i pacchetti ACK nel metodo 2 di solito vengono inviati periodicamente .. agendo in modo molto simile a un ping, credo che – Radu094

+0

Allora potresti forse chiarire un po 'di più sulle differenze? Quindi, il metodo 1 esegue l'accesso in modo esplicito ai pacchetti, ogni volta che viene raggiunto un nuovo seq no (quindi potrebbe essere un ack per più di un pacchetto) e il metodo 2 esegue l'accesso periodico dei pacchetti anziché mai esplicitamente? – villintehaspam

risposta

5

# 2 è noto anche come ACK Negativo, alias NAK, è un punto di vista ottimistico di un trasporto. Ciò significa che la bilancia è migliore quando il trasporto funziona correttamente.

# 1 è un punto di vista pessimistico e presuppone un trasporto che spesso fallisce.

TCP utilizza gli ACK perché esiste una fondamentale dipendenza dal controllo della congestione per eliminare i pacchetti per eseguire il traffic shaping per creare una rete equa. I canali UDP affidabili utilizzano in genere i NAK perché si utilizza un flusso ad alta velocità medio o basso affidabile con requisiti di bassa latenza durante la fase di blocco tipica di un'implementazione di base di ACK.

Nota se si sale di un gradino più in alto e si vede che la gestione delle sottoscrizioni supera un canale UDP affidabile, non esiste un chiaro vincitore per l'utilizzo di ACK o NAK. Il mondo dei dati di mercato ha dimostrato l'uso di entrambe le tecnologie ad alta velocità su reti ad alta capacità. Gli ACK hanno il vantaggio, con gli abbonamenti, di non aver bisogno di una complicata risincronizzazione dopo un errore di rete, tuttavia si vedrà un picco consistente di utilizzo della rete e della CPU quando ogni host emette un nuovo abbonamento.