PING from RouterOS - relationship with MTU

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.

Different devices have different ideas for what is meant when you specify a size to its “ping” command.

In RouterOS, it seems to mean “Send a packet this size”. RouterOS takes into account the IP and ICMP framing and sends a packet which totals X bytes.

In BSD/Windows/Linux… it means “Send an ICMP packet with this many pad bytes.” They send a packet with X pad bytes which are then wrapped in ICMP and IP frames.

Thanks for the answer.

I have to agree with you, although this feature is not documented at all.
BTW, the logic behind makes sense, as if I have got a MTU value, I would be interested in that, not MTU minus the constant header sizes. If RouterOS behaves like that, that’s a way to make life easier.

But of course, maybe this is not what behind this issue, just an idea. It would be great, to have some (semi)official conformation.