2012-04-27 36 views
5

He estado escribiendo un programa que utiliza un protocolo de detención y espera sobre UDP para enviar paquetes a través de LAN y también a través de WAN. Recientemente, he estado probando mi programa y me he dado cuenta de que la tasa de pérdida de paquetes es mayor para paquetes más grandes (aproximadamente 64k bytes). Intuitivamente, esto tiene sentido, pero ¿cuáles son las razones reales para esto?UDP Tamaño de paquete y pérdida de paquetes

Respuesta

7

Los paquetes UDP mayores que MTU size de la red que los lleva se dividirán automáticamente en varios paquetes y luego serán reensamblados por el destinatario. Si cualquiera de esos múltiples subpaquetes se descarta, el receptor eliminará el resto de ellos también.

Entonces, por ejemplo, si envía un paquete UDP de 63k y pasa por Ethernet, se dividirá en más de 47 paquetes "fragmentos" (porque la MTU de Ethernet es de 1500 bytes, pero algunos se usan para UDP encabezados, etc., por lo que la cantidad de espacio de datos de usuario disponible en un paquete UDP es menor que eso). El receptor solo "verá" ese paquete UDP si todos los más de 47 paquetes de fragmentos logran pasar. Si solo uno de esos paquetes de fragmentos se descarta, toda la operación falla.

+0

No puede enviar un paquete de 64k. La carga útil UDP máxima es 65507 bytes. – EJP

+4

Bueno, si vamos a elegir nits, un paquete UDP con una carga útil de 65507 bytes tiene 65535 bytes de largo (incluidos los encabezados), un byte corto de 64 Kb. Pero en aras de la precisión, cambiaré mi ejemplo a 63k. –

+0

El efecto de esto es una pequeña cantidad de pérdida de paquetes puede afectar significativamente el rendimiento. En este ejemplo, si tuviera un 2% de pérdida de paquete, * aproximadamente * en promedio, perdería el 50% de sus paquetes, lo que provocaría una disminución significativa en el rendimiento. Ver: http://stackoverflow.com/a/19057666/84206 – AaronLS

0

Bueno, las redes de datos están lejos de ser confiables; los paquetes se caen todo el tiempo. Enrutadores sobrecargados, búferes completos y paquetes corruptos son algunas de las razones. Como UDP no tiene capacidades de control de flujo, no puede ralentizar si, por ejemplo, el extremo receptor está sobrecargado.

Como explicó Jeremy, cuanto mayor sea la carga útil, más paquetes se dividirán y, por lo tanto, habrá una mayor posibilidad de perder algunos de ellos.

UDP se usa en los casos en que un paquete descartado aquí no afecte a nada o casos en los que necesite algo para llegar a tiempo o no llegue a nada. (VOIP, transmisión de video, etc.)

-1

Todo se trata de la fragmentación y desfragmentación de IP. Paquete más que MTU sería fragmentado y tiene que ser desfragmentado en el host final, también hay posibilidades de que los fragmentos se fragmenten nuevamente en la ruta y que de nuevo puedan agregar la demora. a veces, si algún elemento N/W está configurado para el filtrado de la capa 4, entonces desfragmenta (no el host final) aplica reglas y luego vuelve a generar y reenviar. Ése es el motivo por el que la aplicación que necesita rendimiento siempre intenta enviar datos con el tamaño < = (MTU-ETHHDR-IPHDR)

Cuestiones relacionadas