2011-06-15 24 views
10

ifconfig 1.2.3.4 mtu 1492¿Las modificaciones de MTU afectan ambas direcciones?

Esto configurará MTU a 1492 para los paquetes entrantes, salientes o ambos? Creo que es solo para

+8

Es sorprendente cómo los programadores marcan esta cuestión como fuera de tema . El tamaño de MTU es muy importante para muchas cosas en programación, y saber cómo funciona, y por qué funciona así, creo que es muy bueno. Pero la mayoría de los programadores escriben cosas abstractas usando patrones de diseño sin siquiera querer entender cómo funcionan las cosas. Esta pregunta no se trata de cómo hacer una sopa o cocinar un pollo, esto es sobre lo que los programadores tratamos a diario, ¿cómo puede ser un tema fuera de lugar? –

+0

hall of fame Vlad – cateof

Respuesta

14

TLDR: Ambos. Solo transmitirá paquetes con una longitud de carga inferior o igual a ese tamaño. Del mismo modo, solo aceptará paquetes con una longitud de carga dentro de su MTU. Si un dispositivo envía un paquete más grande, debe responder con un mensaje ICMP inalcanzable (de gran tamaño).

El quid de la cuestión: Afinación la MTU para su dispositivo es útil porque otros saltos entre usted y su destino pueden encapsular el paquete en otra forma (por ejemplo, una VPN o PPPoE.) Esta capa alrededor de los resultados de paquetes en un paquete más grande que se envía a lo largo del cable. Si este nuevo paquete más grande excede el tamaño máximo de la capa, el paquete se dividirá en varios paquetes (en un mundo perfecto) o se descartará por completo (en el mundo real)

Como ejemplo práctico, Considere tener una computadora conectada a través de Ethernet a un módem ADSL que habla PPPoE a un ISP. Ethernet permite una carga útil de 1500 bytes, de los cuales 8 bytes serán utilizados por PPPoE. Ahora tenemos un total de 1492 bytes que pueden entregarse en un solo paquete a su ISP. Si enviara una carga útil de Ethernet de tamaño completo de 1500 bytes, su enrutador la "fragmentaría" y la dividiría en dos paquetes (uno con una carga útil de 1492 bytes y el otro con una carga útil de 8 bytes).

El problema surge cuando quieres enviar más datos a través de esta conexión, digamos que querías enviar 3000 bytes: tu computadora dividiría esto en función de tu MTU; en este caso, dos paquetes de 1500 bytes cada uno, y enviarlos a tu Módem ADSL que luego los dividiría para que pueda cumplir su MTU. Ahora sus datos de 3000 bytes se han fragmentado en cuatro paquetes: dos con una carga útil de 1492 bytes y dos con una carga útil de 8 bytes. Esto es obviamente ineficiente, solo necesitamos tres paquetes para enviar estos datos. Si su computadora ha sido configurada con la MTU correcta para la red, la enviaría como tres paquetes en primer lugar (dos paquetes de 1492 bytes y un paquete de 16 bytes).

Para evitar esta ineficiencia, muchas pilas IP se vuelven un poco en el encabezado IP llamado "Do not Fragment". En este caso, habríamos enviado nuestro primer paquete de 1500 bytes al módem ADSL y habría rechazado el paquete, respondiendo con un mensaje de Control de Internet (ICMP) que nos informa que nuestro paquete es demasiado grande. Entonces habríamos reintentado la transmisión con un paquete más pequeño. Esto se llama descubrimiento Path MTU. De manera similar, una capa más abajo, en la capa TCP, otro factor para evitar la fragmentación es la opción MSS (Tamaño máximo de segmento) donde ambos hosts responden con el paquete de tamaño máximo que pueden transferir sin fragmentar. Esto generalmente se calcula a partir de la MTU.

El problema aquí surge cuando los firewalls mal configurados dejan caer todo el tráfico ICMP. Cuando se conecta a (digamos) un servidor web, crea una sesión TCP y envía que está dispuesto a aceptar paquetes TCP basados ​​en su MTU de 1500 bytes (ya que está conectado a través de ethernet a su enrutador). el servidor quería enviarle muchos datos, los dividiría en fragmentos que (cuando se combinan con los encabezados TCP e IP) salieron a cargas útiles de 1500 bytes y se las enviarían a usted. Su ISP recibiría uno de estos y luego trataría de envolverlo en un paquete PPPoE para enviarlo a su módem ADSL, pero sería demasiado grande para enviarlo. Por lo tanto, respondería con un ICMP inalcanzable, lo que (en un mundo perfecto) haría que la computadora remota redujera el tamaño de su MSS para la conexión y la retransmisión.Sin embargo, si hubiera un cortafuegos roto en el camino, el servidor web extranjero nunca llegaría a este mensaje ICMP y este paquete nunca llegaría hasta usted.

Al configurar su MTU en su dispositivo ethernet es deseable enviar los marcos de tamaño correcto a su módem ADSL (para evitar que le pida retransmitir con un marco más pequeño), pero es crítico influir en el tamaño del MSS que envía a control remoto hosts al construir conexiones TCP.

+0

También me gustaría saber si el MTU alguna vez se transmite al próximo salto o si siempre se calcula utilizando los errores ICMP. En caso de que se transmita explícitamente, ¿qué protocolo se usa para esto? – PeterT

+3

MTU solo se deriva de la capa de conexión (es decir, 1500 bytes para tramas Ethernet) y luego se actualiza en base a los errores ICMP (Path MTU discovery). –

+0

ICMP frag-needed puede incluir la MTU deseada. – ninjalj

0

entrante Es la unidad de transmisión máxima, por lo que definitivamente establece el tamaño de paquete máximo de salida. No estoy seguro de si rechazará los paquetes entrantes más grandes que el MTU.

+3

esto es lo que estoy pidiendo ... – cateof

10

ifconfig ... mtu <value> establece la MTU para las cargas útiles de capa2 enviadas a la interfaz, y rechazará las cargas útiles de capa2 más grandes recibidas en esta interfaz. Usted debe asegurarse de que su MTU coincida en ambos lados de un enlace de Ethernet; usted no debería tienen valores de mtu no coincidentes en cualquier lugar en el mismo ethernet broadcast domain. Tenga en cuenta que los encabezados de Ethernet no están incluidos en la MTU que está configurando.

Además, ifconfigno se ha mantenido en linux para las edades y es old and deprecated; lamentablemente, las distribuciones de Linux todavía lo incluyen porque temen romper las secuencias de comandos antiguas. Esto tiene el efecto muy negativo de alentar a las personas a seguir usándolo. Usted debe estar utilizando la familia de comandos iproute2:

[[email protected] ~]$ sudo ip link set mtu 1492 eth0 
[[email protected] ~]$ ip link show eth0 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1492 qdisc mq state UP qlen 1000 
    link/ether 00:1e:c9:cd:46:c8 brd ff:ff:ff:ff:ff:ff 
[[email protected] ~]$ 
2

grandes paquetes entrantes pueden ser dejados en base al tamaño de la MTU de la interfaz.

Por ejemplo, la MTU 1500 predeterminada en Linux 2.6 CentOS (probado con controlador de Ethernet: Controlador de Intel Corporation 80003ES2LAN Gigabit Ethernet (cobre) (rev 01)) descarta los paquetes Jumbo> 1504. Los errores aparecen en ifconfig y hay indicaciones rx_long_length_errors para esto en la salida ethtool -S. El aumento de MTU indica que los paquetes Jumbo deben ser compatibles. El umbral para cuando a caer los paquetes en función de su tamaño es demasiado grande parece depender de MTU (-4096, -8192, etc.)

Oren

Cuestiones relacionadas