Date: Mon, 08 Jun 1998 02:33:50 -0700 From: Neil Magedman <neil@cobaltmoon.com> Cc: questions@FreeBSD.ORG Subject: traceroute, Bogus IP Identification in ICMP Message-ID: <357BAFFE.3296A135@cobaltmoon.com>
next in thread | raw e-mail | index | archive | help
I've been toying around with traceroute (1.0.4.4bsd) trying to better understand how it handles the IP Identification field. I noticed that it sets the ip_id field to (ident+seq), rather than just leaving it at 0. This seems unnecessary, especially since the id is not actually used by traceroute when it checks the incoming icmp packets. Question 1: Any idea why the id is explicitly being set? Since simultaneous traceroutes could each send packets with the same id, I began to wonder about how the tcp stack would handle all these explicitly set id's. I ran two traceroutes simultaneously and confirmed they were both using the same id numbers. (I added in lines to print out the ip_id field on sending the probe and on receiving the icmp response.) I didn't run into any problems, but I wonder how this can break things. Question 2: What are the dangers of explicitly setting the ip_id? (say for example, another socket has already sent a large, likely-to-be-fragmented packet that got assigned the same id) Now the weird one! A few destinations seemed to mangle the ip_id when they return it in the icmp datagram. All the results look good except for the last one: (note: the "{sending id=%hd}" is just test code that I've stuck in) # ./a.out www.yahoo.com traceroute to www9.yahoo.com (204.71.200.74), 30 hops max, 40 byte packets 1 {sending id=38099} {received id=38099} gw (207.71.93.254) 2.239 ms {sending id=38100} {received id=38100} 2.67 ms {sending id=38101} {received id=38101} 1.605 ms 2 {sending id=38102} {received id=38102} as10.irvnca.ni.net (207.199.98.152) 31.8 ms {sending id=38103} {received id=38103} 31.481 ms {sending id=38104} {received id=38104} 31.882 ms 3 {sending id=38105} {received id=38105} 207.199.98.156 (207.199.98.156) 32.372 ms {sending id=38106} {received id=38106} 34.678 ms {sending id=38107} {received id=38107} 34.812 ms ... 7 {sending id=38117} {received id=58772} www9.yahoo.com (204.71.200.74) 49.721 ms {sending id=38118} {received id=59028} 47.741 ms {sending id=38119} {received id=59284} 47.787 ms Notice that the set ip_id matches the ip_id in the icmp data, except for on the last hop, which mangles the id. Question 3: [Question 3 was "what is happening here?", but then I realized that this seems to be a FreeBSD bug (among possibly other stacks) and that the id is just byte-swapped. So Question 3 is now "Is this a common bug?"] And finally of course, my *real* question. I'd like to encode some additional information in the traceroute probes, and being that the uh_sport and uh_dport are already being used, I'd like to put that info in the ip_id field. Question 4: Is the ip_id field a safe place to put info in or am I asking for trouble? (ie. will it trip up my tcp stack, make my code non-portable, fail when targetting certain ip implementations, etc.) Thanks a bunch to those who have even read this far and a big thanks to any who reply! regards, neil To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?357BAFFE.3296A135>