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
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.
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.)
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)
- 1. Promedio de pérdida de paquetes UDP y reordenación de paquetes
- 2. Tamaño del paquete vacío UDP y TCP?
- 3. enviando y recibiendo paquetes UDP usando Java?
- 4. Envío de paquetes UDP en C#
- 5. Recepción de paquetes en UDP
- 6. ¿Se están cayendo los paquetes Winsock UDP?
- 7. asegurando el orden de paquetes en UDP
- 8. Paquetes udp actuales longitud de cola
- 9. Envío de paquetes UDP desde el iPhone
- 10. ¿Por qué Socket.BeginReceive pierde paquetes de UDP?
- 11. paquetes de difusión UDP a través de las subredes
- 12. ¿puedo leer exactamente un paquete UDP de un socket?
- 13. Desechar el paquete UDP entrante sin leer
- 14. ¿Cómo encontrar la pérdida de paquetes en Wireshark?
- 15. ¿Cómo obtener TTL de un paquete UDP en Java?
- 16. Fragmentación de IP UDP y MTU
- 17. python/dpkt: Averigüe si el paquete es un paquete tcp o un paquete udp,
- 18. Recepción en tiempo real de paquetes UDP con QNX RTOS
- 19. Conector en bruto de Python que escucha paquetes UDP; sólo la mitad de los paquetes recibidos
- 20. ¿Por qué traceroute envía paquetes UDP y no ICMP?
- 21. envío de paquetes UDP desde el núcleo de Linux
- 22. Cómo generar paquetes Tcp, ip y Udp en Python?
- 23. ¿Google Talk usa paquetes udp o tcp?
- 24. Pregunta confiable del método UDP y ACK
- 25. UDP sendto() y recvfrom() tamaño máximo de búfer
- 26. Uso de netcat para enviar un paquete UDP sin enlace
- 27. Transmisión y respuesta de UDP UDP
- 28. Java DatagramPacket (UDP) Tamaño máximo de búfer de envío/recv
- 29. solución udp proxy simple
- 30. Android nunca recibe el paquete UDP
No puede enviar un paquete de 64k. La carga útil UDP máxima es 65507 bytes. – EJP
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. –
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