I have two PCs directly connected like this:
PC1[eth1] <-> [eth0]PC2
MTU on eth1
interface in PC1
is 9000 bytes. MTU on eth0
interface in PC2
is 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:~#
Weird thing is that if I execute ping -M do -s 4182 -c 1 10.11.12.2
in PC1
, then this package is received by PC2
and fragmented replies are sent:
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:~#
I would expect PC2 to silently drop this frame as it exceeds its MTU. However, ping -M do -s 4183 -c 1 10.11.12.2
does not receive a reply.
This looks like PC2
has an interface MTU of 4210(4182 + 8 ICMP header + 20 IPv4 header) bytes and not 2000 bytes. Kernel driver for eth0
in PC2
is e1000e
.
How to explain this behavior?
giants
counter. So the behavior described seems to be specific to Linux. – Martin Feb 04 '17 at 15:34