Cómo configurar un mtu grande (linux)

Cómo configurar un mtu grande (linux)

Tengo una conexión Ethernet gigabit desde mi computadora portátil a mi enrutador y una conexión ipv6 a Internet que funciona. Puedo recibir paquetes muy grandes de sitios de Internet, con tamaños de hasta al menos 10000 bytes (según Wireshark). (editar: resulta ser la 'descarga de recepción genérica' de Linux) Sin embargo, cuando intento enviar algo, mi computadora local se fragmenta justo por debajo de 1500 bytes para ipv6. (En ipv4, puedo enviar paquetes tcp a Internet de al menos 1514 bytes, puedo hacer ping con paquetes hasta el mtu configurado de 6128, pero están bloqueados).

Estoy en ubuntu 12.04. Configuré un mtu para mi eth0 de 6128 (el máximo que acepta), tanto usando ip link set dev eth0 mtu 6128como en la interfaz gráfica del subprograma NetworkManager, y reinicié la conexión. ip link show eth0muestra que los 6128 mtu están efectivamente configurados. ip -6 routemuestra que ninguna de las rutas que conoce el núcleo tiene un mtu configurado. Puedo hacer ping a través de ipv4 con paquetes de hasta 6128 bytes (aunque no obtengo respuestas), pero cuando lo hago ping6 myrouter -c3 -s1500 -Mdorecibo respuestas de errordesde mi propia computadoradiciendo que los paquetes son demasiado grandes y que el mtu es 1480. He confirmado con Wireshark que no se pone nada en el cable y que las respuestas las genera mi propia computadora.

Entonces, ¿cómo consigo que mi computadora use el mtu más grande?

Respuesta1

Lo que estás viendo probablemente no sean fotogramas gigantes. Después de todo, algo así como el 99,9% de Internet se ejecuta en una MTU de 1500 bytes o menos. Probablemente sea solo su núcleo o tarjeta de red la que fusiona los paquetes.

Lo hace utilizando una función generalmente llamada Descarga de recepción genérica (GRO) o Descarga de recepción grande (LRO). La forma en que esto funciona es que los paquetes dentro de un único flujo se identifican y fusionan, luego se envían a la pila TCP/IP. Esto puede ahorrar una cantidad significativa de ciclos de CPU, ya que reduce la cantidad de viajes de ida y vuelta a la pila.

Pruebe esto: ethtool -K $INTERFACE gro off

Lo que desactiva esta función y hace que Wirehark sea más feliz (aunque no su CPU)

Aún podría usar MTU más altos localmente, pero ya no le permitirá comprar mucho precisamente debido a características como esta y, por supuesto, a un hardware cada vez más rápido. También puede ser una pesadilla de gestión. Hay muchos controladores y hardware con errores, y distintos grados de compatibilidad con la configuración de MTU a través de DHCP o RA en los sistemas operativos. Como desea que todos los dispositivos en un dominio de transmisión determinado ejecuten la misma MTU, esto a menudo hace que las tramas gigantes no sean prácticas.

Respuesta2

La MTU se utiliza principalmente a nivel local. El uso de tramas gigantes en múltiples saltos de red (como enrutador+Internet) es complicado y lo más probable es que no funcione. DSL, por ejemplo, normalmente limitará laRuta MTUa 1492 bytes. Como regla general, la MTU de ruta está determinada por la MTU de enlace más pequeña entre cualquiera de los enrutadores participantes. A menos que controle toda la ruta y establezca MTU grandes para cada enlace, aumentar la MTU solo en su computadora no hace nada (excepto tal vez mejorar las velocidades de su LAN).

Respuesta3

Descubrí cómo hacerlo según el comentario de Stefan Seidel. Resulta que hay otra configuración de mtu que el ipcomando no muestra. Establecer un valor más alto en /proc/sys/net/ipv6/conf/eth0/mtu(el comando sudo sh -c "echo 0 > /proc/sys/net/ipv6/conf/eth0/mtu"hizo lo que quería. (No es que haya ayudado mucho, el enrutador realmente perdió cuadros más grandes). Este valor se actualiza/restablece periódicamente a través del Anuncio del enrutador. RA se puede desactivar escribiendo 0en accept_rala misma carpeta bajo /proc.

información relacionada