2011-01-07 14 views
6

Estoy leyendo acerca de implementaciones de UDP confiable (es decir, envío de paquetes ACK y reenvío de paquetes no acreditados de nuevo).Pregunta confiable del método UDP y ACK

de los dos patrones principales que parecen encontrar cerca de la red:

  1. cliente envía un ACK para cada paquete recibido con la secuencia de ese paquete. El servidor asume que el paquete no se ha entregado a menos que reciba un ACK.

  2. El cliente envía un paquete ACK con las secuencias de los paquetes que cree que faltan. El servidor asume que el paquete se entrega a menos que reciba un ACK del cliente diciendo que le falta una secuencia, luego vuelve a enviar los paquetes solicitados (faltantes).

En resumen, en 1. los clientes envían la secuencia de los paquetes recibidos, mientras que en 2. el cliente envía la secuencia de los paquetes faltantes.

Me pregunto cuáles son los pros/contras de cada método y cuál es más convencional (supongo que 1, pero 2 parece ser un método muy inteligente ya que la mayoría de los paquetes llegan y solo unos pocos se pierden).

EDIT: Un ejemplo corto en ambos métodos:

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

¿Qué ocurre si en el método dos, el paquete de confirmación del cliente que dice que falta algo nunca se entrega? – villintehaspam

+0

Por lo que entiendo, en el método 2 hay un ACK que dice 'no faltan paquetes aquí (y el más alto recibido es 532)' ... así que si el servidor envía 1 paquete y no se recibe ACK, entonces ese paquete se vuelve a enviar. los paquetes de ACK en el método 2 generalmente se envían periódicamente ... actuando como un ping Supongo que – Radu094

+0

¿Podría aclarar un poco más sobre las diferencias? Entonces, el método 1 ack paquetes explícitamente, siempre que se alcance un nuevo seq no (por lo tanto, podría ser una respuesta para más de un paquete) y el método 2 acepta paquetes periódicamente y nunca explícitamente? – villintehaspam

Respuesta

5

# 2 es también conocido como ACK negativo, también conocido como NAK, es un punto de vista optimista de un transporte. Eso significa que las escalas son mejores cuando el transporte está funcionando correctamente.

# 1 es un punto de vista pesimista y supone que un transporte con frecuencia fallará.

TCP usa ACK porque hay una dependencia fundamental en el control de la congestión para descartar paquetes y realizar la configuración del tráfico para crear una red justa. Los canales UDP confiables suelen utilizar NAK porque está utilizando una transmisión de alta o baja velocidad de alta velocidad confiable con requisitos de baja latencia en el paso de bloqueo típico de una implementación básica de ACK.

Nota: si sube un escalón más alto y observa la gestión de suscripciones por encima de un canal UDP confiable, no hay un ganador claro para el uso de ACK o NAK. El mundo de datos de mercado ha demostrado el uso de ambas tecnologías a alta velocidad en redes de alta capacidad. Los ACK tienen la ventaja, con las suscripciones, de que no necesita una resincronización complicada después de un error de red, sin embargo, verá un pico constante de uso de la red y la CPU cuando cada host emita una nueva suscripción.