mturoute: A utility that measures hop-by-hop path MTU
I wanted to get in-depth details on how various MTU parameters interact in GRE/IPSec/MPLS environment. Before going into router configuration details, I wanted to have a tool that would reliably measure actual path MTU between the endpoints. After a while, Google gave me a usable link: supposedly the tracepath program on Linux does what I needed. As I'm a purely Windows user (for me, PCs are just a tool), I needed a Windows equivalent … and found mturoute, the utility that does exactly what I was looking for.
Unfortunately, the original mturoute had an interesting bug: ICMP unreachable generated due to DF bit on oversized packet was accepted as a successful ping. The second run of the program always reported the correct MTU size (as Windows caches the maximum MTU per destination host), but I wanted to be more precise. Half a day later, after installing Windows SDK and Visual Studio Express on my PC, rediscovering my C programming skills and reading a lot of Winsock documentation, I've managed to fix the bugs and even add a “retry on ping timeout” feature. You can download the fixed version (source + exe) from the Articles area of my web site. It was compiled and tested on Windows XP, if you can test it on other platforms (2000, Vista), please let me know the results.
Here is a sample run of the program (the reduced path MTU is due to an MPLS-enabled GRE tunnel in the path):
Here is a sample run of the program (the reduced path MTU is due to an MPLS-enabled GRE tunnel in the path):
$ mturoute -t 10.0.3.3
mturoute to 10.0.3.3, 30 hops max, variable sized packets
* ICMP Fragmentation is not permitted. *
* Maximum payload is 10000 bytes. *
1 --+---+++-+++-++ host: 10.0.0.1 max: 1500 bytes
2 --+---++---+++ host: 10.2.0.2 max: 1476 bytes
3 --+---+-+++++++ host: 10.0.3.3 max: 1472 bytes
D:\inc\mturoute>mturoute.exe
The system cannot execute the specified program.
(Windows XP SP2)
Thanx anyway for reminding about unix tracepath ;)
mturoute to www.cisco.com, 30 hops max, variable sized packets
* ICMP Fragmentation is not permitted. *
* Maximum payload is 10000 bytes. *
1 ---++++-+---++ host: 192.168.1.4 max: 1300 bytes
2 ---++++-+---++ host: x1.x2.x3.x4 max: 1300 bytes
3 4 ---++++-+---++ host: y1.y2.y3.y4 max: 1300 bytes
5 ---++++-+---++ host: z1.z2.z3.z4 max: 1300 bytes
6 ---++++-+---++ host: 4.68.121.213 max: 1300 bytes
7 ---++++-+---++ host: 4.68.99.40 max: 1300 bytes
*7 (An additional device responded for 4.68.99.40.)
8 ---++++-+---++ host: 151.164.89.249 max: 1300 bytes
9 -------------- host: 151.164.41.165 max: 120 bytes
10 ---++-+++++++++ host: 64.161.0.62 max: 1202 bytes
11 ---++++-+---++ host: 128.107.224.109 max: 1300 bytes
12 ---++++-+---++ host: 128.107.224.6 max: 1300 bytes
Wonder if the tool is buggy - if not, ATT has some issue @ 151.164.41.165 - 120 bytes MTU ?
@Anonymous: I suspect they are blocking pings to a specific device. It responds to the TTL-limited probe (that's how we get its IP address), but then probably rejects the ICMP packets ... and I obviously need to check other ICMP unreachables as well.
Thanks for the feedback!
Can't imagine what would cause the problem. It looks like the ICMP echo packets are actively replied to, but with a weird reply that the program takes as a failure; if there would be no reply, you should see dots (timeouts). Can you take a Wireshark capture and send me the ICMP-related traffic?
C:\mturoute>mturoute.exe
The application has failed to start because its side-by-side configuration is incorrect. Please see
the application event log for more detail.
and here is the eventlog
Activation context generation failed for "C:\mturoute\mturoute.exe". Dependent Assembly Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.20706.1" could not be found. Please use sxstrace.exe for detailed diagnosis.
Question on the output; what is the significance of the "---", "+++", or "..."?
THere is my output:
C:\temp\mroute>mturoute -t cisco.com
mturoute to cisco.com, 30 hops max, variable sized packets
* ICMP Fragmentation is not permitted. *
* Maximum payload is 10000 bytes. *
1 ---++++-+---++ host: 172.16.1.10 max: 1300 bytes
2 ---...-...-...-...-...-...-...-...-...-...-...- host: 192.168.1.1 max:
bytes
3 ---++++-+---++ host: 71.243.235.1 max: 1300 bytes
4 ---++++-+---++ host: 130.81.49.22 max: 1300 bytes
5 ---++++-+---++ host: 130.81.10.94 max: 1300 bytes
6 ---...-...-...-...-...-...-...-...-...-...-...- host: 130.81.15.202 max
20 bytes
7 ---u+...-...-..u+.u+.u+.u+.u+.u+.u+...-u+.u+ host: 151.164.41.165 max:
bytes
8 ---++++-+---++ host: 64.161.0.62 max: 1300 bytes
9 ---++++-+---++ host: 128.107.224.105 max: 1300 bytes
10 ---++++-+---++ host: 128.107.224.2 max: 1300 bytes
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Thanks
I'm looking for an IPv6 capable version of this.