Take the 2-minute tour ×

This is a bonus question in my Networks class: I have to find a destination for which the path MTU < 1500 bytes.

For example using the command

traceroute -F www.uwaterloo.ca 1500 works, and traceroute -F www.uwaterloo.ca 1501 doesnt.

So I need to find a destination that will fail under 1500 (and no it can not be a private network, that would be cheating).

I am suspecting this is a trick because nearly all IP over Ethernet implementations use the Ethernet V2 frame format, which supports 1500 MTU.

Any ideas?

share|improve this question

migrated from stackoverflow.com Oct 5 '11 at 20:37

This question came from our site for professional and enthusiast programmers.

closed as off topic by Iain, Sven, MDMarra, John Gardeniers, Scott Pack Oct 6 '11 at 13:18


Check if there are any PPP connections, or any ATM or frame relay ones perhaps (e.g. leased lines). Those may have a smaller MTU. Or anything encapsulated in VPN-type connections. –  Kerrek SB Oct 4 '11 at 20:29
PPPoE (e.g., DSL lines) is a good place to try. –  derobert Oct 4 '11 at 21:27
Got any modems (e.g. 'dialup') nearby? –  Stefan Lasiewski Oct 5 '11 at 21:58
Homework questions are off-topic. Please read the FAQ. –  kce Oct 5 '11 at 22:09
@kce - homework questions are not off topic, but you need to be honest (the op has been), and show your prior learning (which the op has), explain what you think the answer is and ask for feedback. The OP has sufficiently fulfilled most of these, and thus it can stay. –  Mark Henderson Oct 5 '11 at 22:11

2 Answers 2

How much time do you have? You can brute force this. For example like this bash script:

while [ 1 ]
    ip=`expr $RANDOM \* $RANDOM`;
    traceroute -F -I $i 1472 2>/dev/null >/dev/null
    if [ $? -ne 0 ]
        echo Traceroute with 1472 bytes failed for $i

Caveat: This message displays IPs as an integer, you'll have to convert it to a dot separated octal format. Also, note that traceroute uses ICMP by default. In that case you need to set the data size to 1472 bytes (1472 + 8 bytes ICMP header + 20 bytes IP header) = 1500 bytes.

share|improve this answer
You probably want to do two pings—one with a fairly small packet and one with the larger (1500 byte packet), and see which hosts only respond to the small one. Two pings will be much quicker than a traceroute. –  derobert Oct 4 '11 at 21:36
Agree, you can also make educated guesses and pick IP ranges without trying random ip addresses. –  jman Oct 4 '11 at 21:43
i have used your idea but with pinging, and am currently running 50 processes of this script in parallel. lets hope the school doesn't ban my account. so far im just getting "connect: invalid arguement" which means some pings are trying to ping ip address that starts with 0 for example. Will let you know how this goes –  Stefan Oct 4 '11 at 22:14
so i talked to students who already took this course and apparently nobody has been ever able to answer this question in all the years he has taught the course. Also no luck with brute force –  Stefan Oct 5 '11 at 3:41
You can cheat creatively! Change your home router's outbound interface MTU. Or set up a linode VPS (therefore you get a public IP), change the eth0 MTU to less than 1500. The question is, in case of the latter is it worth the $19 monthly fee ;-). –  jman Oct 5 '11 at 20:16

Search on internet for an IP assigned to an ADSL modem (most of them are using PPPoE or PPPoA). Run durring your ping tests a tcpdump icmp and pay attention to ICMP Fragmentation Needed (Type 3, Code 4). If you see that you found your target.

share|improve this answer
