networking - friedrichshafen - ¿Cómo encontrar el paquete UDP más grande que puedo enviar sin fragmentar?
mtu friedrichshafen (4)
Además de todas las respuestas anteriores, citando el classic :
IPv4 e IPv6 definen el tamaño mínimo del búfer de reensamblado , el tamaño mínimo de datagrama que se garantiza que cualquier implementación debe admitir. Para IPv4, esto es 576 bytes. IPv6 aumenta esto a 1.280 bytes.
Esto significa que quiere limitar el tamaño de su datagrama a menos de 576 si trabaja en Internet público y solo controla un lado del intercambio, eso es lo que hacen la mayoría de los protocolos estándar basados en UDP.
También tenga en cuenta que PMTU es una propiedad dinámica de la ruta. Esta es una de las cosas que TCP trata para usted. A menos que esté listo para volver a implementar gran cantidad de lógica de secuenciación, temporización y retransmisión, use TCP para cualquier red crítica. Benchmark, test, profile, es decir, demostrar que TCP es su cuello de botella, solo entonces considere UDP.
Necesito saber cuál es el paquete UDP más grande que puedo enviar a otra computadora sin fragmentación.
Este tamaño se conoce comúnmente como MTU (Maximum Transmission Unit). Supuestamente, entre 2 computadoras, habrá muchos enrutadores y módems que pueden tener diferentes MTU.
Leí que la implementación TCP en Windows encuentra automáticamente la MTU máxima en una ruta.
También estaba experimentando, y descubrí que la MTU máxima desde mi computadora a un servidor era de 57712 bytes + encabezado. Cualquier cosa por encima de eso fue descartada. Mi computadora está en una LAN, ¿no se supone que la MTU tiene alrededor de 1500 bytes?
Este es un tema interesante para mí. Quizás algunos resultados prácticos puedan ser de interés cuando se entregan datos fragmentados de UDP en Internet a través de UDP, y con una velocidad de transmisión de 1 paquete por segundo, los datos continúan apareciendo con una pérdida de paquetes mínima de hasta 2K. Más de esto y comienzas a tener problemas, pero regularmente entregamos paquetes de más de 1600 bytes sin problemas, esto es a través de las redes móviles GPRS y WAN en todo el mundo. En ~ 1K suponiendo que la señal es estable (¡no!) Se obtiene una baja pérdida de paquetes.
Curiosamente, no es un paquete extraño, sino a menudo una borrascosa de paquetes durante unos segundos, lo que presumiblemente es el motivo por el cual las llamadas VoIP simplemente colapsan ocasionalmente.
Lo siguiente no responde su pregunta directamente, pero puede encontrarla interesante; dice que los paquetes IP pueden desmontarse / reensamblarse y, por lo tanto, ser más grandes que el límite en los medios subyacentes (por ejemplo, Ethernet de 1500 bytes): Resolver problemas de Fragmentación IP, MTU, MSS y PMTUD con GRE e IPSEC
Más sobre este tema:
- Re: La fragmentación UDP dice que debes usar ICMP en lugar de UDP para descubrir MTU
- Path MTU Discovery dice que una conexión TCP podría incluir la negociación implícita de MTU a través de ICMP
No sé cómo generar ICMP a través de una API en Windows: en un momento se propuso tal API, y fue controvertida porque la gente argumentó que haría más fácil escribir software que implemente la funcionalidad de denegación de servicio al generar una avalancha de Mensajes ICMP.
No, parece que está implementado: ver, por ejemplo, las preguntas más frecuentes de Winsock Programmer. Ejemplos: Ping: Método de sockets crudos .
Entonces, para descubrir MTU, genere paquetes ping con el indicador ''do not fragment''.
Tal vez haya una API más fácil que esta, no sé; pero espero haberte dado a entender el (los) protocolo (s) subyacente (s).
Su propia MTU está disponible en el registry , pero la MTU en la práctica va a la MTU más pequeña en la ruta entre su máquina y el destino. Es variable y solo puede determinarse empíricamente. Hay una serie de RFCs muestran cómo determinarlo.
Los LAN pueden tener internamente valores de MTU muy grandes, ya que el hardware de red suele ser homogéneo o al menos administrado centralmente.