By Sanjay Ahuja
User Level: Advanced
Source Code: Trace.zip
Overview: Trace utility traces the path of an IP packet. To understand the
process, its important to understand ICMP protocol we are going to use for this
purpose.
ICMP Protocol: The Internet Protocol (IP) is used for
host-to-host datagram service in a system of interconnected networks.
Occasionally a destination host will communicate with a source host, for
example, to report an error in datagram processing. For such purposes the
Internet Control Message Protocol (ICMP), is used. ICMP, uses the basic support
of IP as if it were a higher level protocol, however, ICMP is actually an
integral part of IP, and must be implemented by every IP module.
ICMP messages are sent in several situations: for example, when a datagram
cannot reach its destination, when the gateway does not have the buffering
capacity to forward a datagram, and when the gateway can direct the host to send
traffic on a shorter route.
The Internet Protocol is not designed to be absolutely reliable. The purpose
of these control messages is to provide feedback about problems in the
communication environment, not to make IP reliable. There are still no
guarantees that a datagram will be delivered or a control message will be
returned. Some datagrams may still be undelivered without any report of their
loss. The higher level protocols that use IP must implement their own
reliability procedures if reliable communication is required.
The ICMP messages typically report errors in the processing of datagrams. To
avoid the infinite regress of messages about messages etc., no ICMP messages are
sent about ICMP messages. Also ICMP messages are only sent about errors in
handling fragment zero of fragemented datagrams. (Fragment zero has the fragment
offeset equal zero).
Basics of Trace utility: Apart from other fields each
ICMP header consists of a field called Time to Live (TTL). TTL field is decremented at each machine in which the datagram is
processed. Thus if my packet routes through Machine A-> Machine B->
Machine C, and if I set initial TTL to 3 then TTL at B would be 2 and at C would
be 1. If the gateway processing a datagram finds TTL field is zero it discards
the datagram. The gateway also notifies the source host via the time exceeded
message.
Thus to get our utility working we send a
packet containing echo request to the destination machine with increasing number
of TTL starting from 1. Each time TTL goes to zero the machine that was
currently processing datagram returns the packet with time exceeded message. We
remeber the ip of this machine and send the packet back with incremented TTL. We
repeat this till we successfully receive an echo reply.
You can compile the .cs file on command line by command
csc Trace.cs
and run it
Trace www.csharphelp.com
Questions? Send them to me at lparam@hotmail.com
About the Author: Sanjay Ahuja is a Bachelor of Engineer and has done his CDAC from
Pune,India. He is currently working as a consultant for Verizon