Domanda

sto leggendo su implementazioni di UDP affidabile (es. Invio di pacchetti ACK e rispedizione di nuovo i pacchetti non-ACK).

Tra i due modelli principali che sembrano trovare arround la rete:

  1. client invia un ACK per ciascun pacchetto ricevuto con la sequenza di quel pacchetto. Server presuppone pacchetto è non consegnato se non riceve un ACK.

  2. client invia un pacchetto ACK con le sequenze dei pacchetti che ritiene mancano. Server presuppone pacchetto viene consegnato a meno che non riceve un ACK dal client dire che manca una sequenza, poi ritrasmette nuovamente i pacchetti (mancanti) richiesto.

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

Basta chiedersi quali sono i pro / contro di ciascun metodo, e che uno è più mainstream (presumo 1, ma 2 sembra un metodo molto intelligente dal assumably maggior parte dei pacchetti non arrivano e solo pochi di solito sono 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
È stato utile?

Soluzione

2 # è anche conosciuto come ACK Negativo, alias NAK, si tratta di un punto di vista ottimistico di un trasporto. Ciò significa che è meglio scale quando il trasporto funziona correttamente.

1 # è un punto di vista pessimista e assume un trasporto frequentemente fallire.

TCP utilizza ACK perché non v'è la dipendenza fondamentale sul controllo di congestione per eliminare i pacchetti per eseguire traffic shaping per creare una rete equo. canali UDP affidabili in genere utilizzano NAK perché si sta utilizzando un mezzo ad alta velocità affidabile o flusso basso tasso con il requisito per la bassa latenza sul passo di blocco tipico di un'implementazione di base ACK.

Nota se si salire più in alto di un passo e guardare la gestione delle sottoscrizioni per esempio sopra un canale UDP affidabile non v'è alcun chiaro vincitore per ACK o NAK utilizzo. Il mondo dei dati di mercato ha dimostrato l'uso di entrambe le tecnologie ad alta velocità su reti ad alta capacità. ACK hanno il vantaggio, con gli abbonamenti, che non è necessario un complicato risincronizzazione dopo un guasto di rete, ma si vedrà un picco consistente di utilizzo della rete e CPU quando ogni questioni ospitanti un re-iscrizione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top