interface MTU diferente do que é visto na saída “ip link show”

2

Eu tenho dois PCs conectados diretamente assim:

PC1[eth1] <-> [eth0]PC2

MTU na interface eth1 em PC1 é 9000 bytes. MTU na interface eth0 em PC2 é 2000 bytes:

root@PC2:~# ip -s link show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2000 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 80:97:41:ae:f7:c9 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast
    170432     696      0       0       0       0
    TX: bytes  packets  errors  dropped carrier collsns
    118126     274      0       0       0       0
root@PC2:~# ip addr show dev eth0                                                                                                                                                                                          
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2000 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 80:97:41:ae:f7:c9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.11.30/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.11.12.2/24 scope global eth0:temporary
       valid_lft forever preferred_lft forever
root@PC2:~#

É estranho que, se eu executar ping -M do -s 4182 -c 1 10.11.12.2 em PC1 , esse pacote seja recebido por PC2 e as respostas fragmentadas sejam enviadas:

root@PC1:~# ping -M do -s 4182 -c 1 10.11.12.2
PING 10.11.12.2 (10.11.12.2) 4182(4210) bytes of data.
4190 bytes from 10.11.12.2: icmp_seq=1 ttl=64 time=0.397 ms

--- 10.11.12.2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.397/0.397/0.397/0.000 ms
root@PC1:~#

Espero que o PC2 elimine este quadro silenciosamente, uma vez que excede o seu MTU. No entanto, ping -M do -s 4183 -c 1 10.11.12.2 não recebe uma resposta. Isso parece que PC2 tem uma interface MTU de 4210 (4182 + 8 cabeçalho ICMP + 20 cabeçalho IPv4) bytes e não 2000 bytes. O driver do kernel para eth0 em PC2 é e1000e .

Como explicar esse comportamento?

    
por Martin 03.02.2017 / 15:51

1 resposta

4

Esta é a diferença entre MTU (Maximum Transmission Unit) e MRU (Maximum Receive Unit).

Normalmente espera-se que o MTU (e MRU) seja o mesmo em todos os membros de um único domínio de broadcast e, portanto, a diferença não importa, mas sob a configuração mal configurada, faz assunto.

I would expect PC2 to silently drop this frame as it exceeds its MTU.

Você disse ao PC2 para não exceder os pacotes de 2000 bytes durante a transmissão, mas isso não impede que ele receba algo maior. É possível que o princípio do Postel esteja funcionando aqui (depende de como exatamente o driver foi projetado).

However, ping -M do -s 4183 -c 1 10.11.12.2 does not receive a reply.

Parece que esse único byte extra coloca sobre o seu MRU. Como você não configurou nenhum MRU explicitamente, esse tamanho pode ser uma limitação de hardware ou um resultado de como os buffers internos do hardware da interface de rede são configurados quando o MTU é definido como 2000.

Configure seus MTUs corretamente em um único domínio de transmissão e você não encontrará esse problema. Alguns protocolos de roteamento, como o IS-IS, intencionalmente enviam suas mensagens Hello até o MTU para garantir que todos os outros falantes no domínio de broadcast possam realmente receber esse pacote, evitando assim que a adjacência apareça no caso de um configuração incorreta, permitindo que você descubra o problema mais facilmente.

    
por 05.02.2017 / 19:15

Tags