Hello community,
I’ve been wandering about, how can I ping from the RouterOS without any fragments, using 1500 byte packets.
[admin@RENT] > ping www.bix.hu do-not-fragment count=4 size=1500
HOST SIZE TTL TIME STATUS
193.239.149.1 1500 58 122ms
193.239.149.1 1500 58 150ms
193.239.149.1 1500 58 175ms
193.239.149.1 1500 58 109ms
sent=4 received=4 packet-loss=0% min-rtt=109ms avg-rtt=139ms max-rtt=175ms
Of course, it won’t work with 1501 byte long packets.
[admin@RENT] > ping www.bix.hu do-not-fragment count=4 size=1501
HOST SIZE TTL TIME STATUS
packet too large and cannot be fragmented
188.143.120.72 576 64 1ms fragmentation needed and DF set
packet too large and cannot be fragmented
188.143.120.72 576 64 4ms fragmentation needed and DF set
sent=2 received=0 packet-loss=100%
Here’s some info about the interfaces
[admin@RENT] > interface ethernet print detail
Flags: X - disabled, R - running, S - slave
0 R ;;; ether1 (MAC cloned to IBMT42 (DIGI Cable))
name="WAN" mtu=1500 l2mtu=1600 mac-address=00:11:25:D2:B7:D8 arp=enabled auto-negotiation=yes full-duplex=yes speed=100Mbps
1 R ;;; ether2-master
name="LAN" mtu=1500 l2mtu=1598 mac-address=D4:CA:6D:F2:39:DB arp=enabled auto-negotiation=yes full-duplex=yes speed=100Mbps master-port=none bandwidth=unlimited/unlimited switch=switch1
2 XS ;;; ether3-slave
name="ether3" mtu=1500 l2mtu=1598 mac-address=D4:CA:6D:F2:39:DC arp=enabled auto-negotiation=yes full-duplex=yes speed=100Mbps master-port=LAN bandwidth=unlimited/unlimited switch=switch1
3 XS ;;; ether4-slave
name="ether4" mtu=1500 l2mtu=1598 mac-address=D4:CA:6D:F2:39:DD arp=enabled auto-negotiation=yes full-duplex=yes speed=100Mbps master-port=LAN bandwidth=unlimited/unlimited switch=switch1
4 XS ;;; ether5-slave
name="ether5" mtu=1500 l2mtu=1598 mac-address=D4:CA:6D:F2:39:DE arp=enabled auto-negotiation=yes full-duplex=yes speed=100Mbps master-port=LAN bandwidth=unlimited/unlimited switch=switch1
So far, this seems to be OK. I wasn’t suspicious until yesterday evening.
From both Windows, Linux, BSD, the maximum length of pings are 1472. This equals 1500 bytes - 20 (IP) - 8 (ICMP).
nas: ~ # ping -D -c 4 -s 1472 www.bix.hu
PING www.bix.hu (193.239.149.1): 1472 data bytes
1480 bytes from 193.239.149.1: icmp_seq=0 ttl=57 time=179.934 ms
1480 bytes from 193.239.149.1: icmp_seq=1 ttl=57 time=101.241 ms
1480 bytes from 193.239.149.1: icmp_seq=2 ttl=57 time=154.554 ms
1480 bytes from 193.239.149.1: icmp_seq=3 ttl=57 time=176.276 ms
--- www.bix.hu ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 101.241/153.001/179.934/31.419 ms
nas: ~ # ping -D -c 4 -s 1473 www.bix.hu
PING www.bix.hu (193.239.149.1): 1473 data bytes
ping: sendto: Message too long
ping: sendto: Message too long
ping: sendto: Message too long
ping: sendto: Message too long
^C
--- www.bix.hu ping statistics ---
4 packets transmitted, 0 packets received, 100.0% packet loss
My question would be, how can it come, RouterOS can communicate without any fragments, regardless of the IP+ICMP headers? The situation is same within an another network, where there is extra 8 bytes are needed because of PPPoE. In that network, RouterOS can ping without fragments, with 1492 bytes long data. Linux behind can only utilize the expected 1492-28 bytes data long.