2010-10-13 9 views
8

Un poco de historia.¿Qué tan grande es un marco de paquete IP incluyendo los encabezados?

Estoy escribiendo una aplicación que usa UDP. La aplicación se ejecutará en una LAN (no en Internet). He estado asumiendo que si mi MTU es 1500, entonces esa es la capacidad de pago UDP, pero estoy no estoy seguro de si el encabezado UDP también debe encajar en eso.

Sospecho que si envío un paquete UDP con una carga útil de 1500 bytes y la MTU de la máquina es de 1500 bytes ¿terminará enviando dos paquetes?

Buscar en Internet una respuesta clara aquí parece más difícil de lo que debería ser, he visto información contradictoria.

+0

Bastante seguro de que le dará la fragmentación. Sin embargo, puedes usar Wireshark para ver esto con seguridad. –

+0

Gracias, sí wireshark no estaba mostrando mucho porque estoy desarrollando de forma aislada. loopback MTU es 16436! – Matt

+0

Gracias a todos, y gracias por los enlaces. Eran mejores que los que encontré en google. – Matt

Respuesta

9
------------------------------------------------------------------------------ 
|Ethernet | IPv4   |UDP | Data     |Ethernet checksum| 
------------------------------------------------------------------------------ 
    14 bytes 20 bytes  8 bytes x bytes    4 bytes 
      \ (w/o options)        /
      \___________________________________________/ 
           | 
          MTU 

Si su MTU es de 1500, tiene 1500-20-8 = 1472 bytes para los datos.

  • Si lo excede, los paquetes estarán fragmentados, es decir. dividir en más paquetes.
  • Puede haber más capas involucradas, p. 4 byte a vlan header si estás en la parte superior de vlan ethernet.
  • Algunos enrutadores entre usted y el destino pueden agregar más capas.
+1

AFAIK la MTU NO incluye el encabezado Ethernet y el CRC32 posterior (que omitió), pero es la carga efectiva de Ethernet, donde debe restar la sobrecarga del protocolo IP. – Lucero

+0

Gracias, eso es lo que sospechaba, pero no estaba seguro. – Matt

+0

@Lucero Sí, es posible que tenga razón, según la capa en la que defina el MTU. MTU de un datagrama de IP en este caso, supongo. – nos

2

Tal vez este artículo ayuda: http://sd.wareonearth.com/~phil/net/overhead/

+0

Gracias, un enlace muy útil. Las tasas de rendimiento para gig-e son útiles. Estoy logrando 760 GB/s en hardware que no es de servidor, así que creo que no es tan malo. Pero, si configuro mis datos de paquete correctamente, puede mejorar. – Matt

3

Sí, su ejemplo no cabría en un marco.

La carga de datos de ethernet es de 1500 bytes. IPv4 requiere un mínimo de 20 bytes para su encabezado. Alternativamente, IPv6 requiere un mínimo de 40 bytes. UDP requiere 8 bytes para su encabezado. Eso deja 1472 bytes (ipv4) o 1452 (ipv6) para sus datos.

Más información:

-1

lo tanto, aquí es cómo funciona. Ethernet restringe el flujo de datos a 1500 bytes por fotograma, incluso si tiene un conducto de grasa de 100 megas. Para utilizar realmente la velocidad de línea, a través de su aplicación UDP, necesitará usar/mover a tramas jumbo de ethernet que pueden soportar hasta 9000 bytes por trama. Además, si observas netflix/youtube y otros protocolos de transmisión, prueban tu enlace antes de que comiencen a transmitir. Lo que esencialmente hacen es enviarles algunos datos y calcular/promediar la velocidad del enlace antes de que descarguen la transmisión. Básicamente también usan UDP, pero con un tamaño de paquete muy grande. Supongo que más de 1500 bytes seguro.

+0

Eso se llama descubrimiento MTU de ruta y no tiene nada que ver con mi pregunta original. No tiene sentido publicar su respuesta dado que la pregunta fue respondida adecuadamente hace más de 1 año. Piense con cuidado antes de publicar. – Matt

Cuestiones relacionadas