Tuesday, December 15, 2009

Internet Control Message Protocol

The job of the Internet Control Message Protocol (ICMP) is to report errors that may have occurred in processing IP datagrams. ICMP is an integral part of IP and its messages are encapsulated within an IP datagram. Note: there are 6 messaging formats used by ICMP, to be discussed later.


The ICMP messages are indicated by the Type Field (they are shown below):





  • 0 - Echo Reply



  • 3 - Destination unreachable



  • 4 - Source Quench



  • 5 - Redirect



  • 8 - Echo



  • 11 - Time exceeded



  • 12 - Parameter problem



  • 13 - Timestamp



  • 14 - Timestamp reply



  • 15 - Information request (obsolete)



  • 16 - Information reply (obsolete)



  • 17 - Address mask request



  • 18 - Address mask reply



The most well-known uses of ICMP are the ping and traceroute (tracert in Window) commands. The ping command sends out a special ICMP echo request message to a destination. If the destination is alive, it will respond with the ICMP echo replay message. This is a fundamental tool used in network troubleshooting, as described in.


Traceroute uses the Timestamp services of ICMP to perform its task of tracing a route to a destination. The Timestamp message and Timestamp Reply measure the round trip time that is taken to go from the source to the destination. Traceroute lists the path and the round trip time to each router, taken from the source to the destination.


Echo and Echo Reply Message


The Echo and Echo Reply test the communication path from a sender to a destination.


























0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 22 2324 25 26 27 28 29 30 31
Type (8 bits)Code (8 bits)Checksum (16 bits) 
Identifier (16 bits)Sequence number (16 bits)  
DATA   



Type Field


The Type Field indicates the type of ICMP message. An Echo request message will have the number 8 in the Type field and an Echo Reply message will have the number 0.


Code Field


The Code Field is used by the different message formats to indicate specific error conditions. For Echo, the code field is always 0.


Checksum


The Checksum is the 16-bit ones's complement of the one's complement sum of the ICMP message (starting with the ICMP Type).


Identifier and Sequence Number


The Identifier and Sequence Number may be used by the echo sender to aid in matching the replies with the echo requests. For example, the identifier might be used like a port in TCP--or UDP--to identify a session, and the sequence number might be incremented on each echo request sent. The echoer returns these same values in the echo reply.


Data


The data received in the echo message must be returned in the echo reply message.


Destination Unreachable Message


The Destination Unreachable message is sent by a router (gateway) or a host when the destination network or service is not available.


A destination host may reply with a Destination Unreachable message when the service (port or protocol) is not currently active. A router may reply with a Destination Unreachable message when its entry for the destination network is unreachable (set to infinity), or if the IP datagram Don't Fragment flag is set on (and the router must fragment it in order to forward it).

























0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 22 2324 25 26 27 28 29 30 31
Type (8 bits)Code (8 bits)Checksum (16 bits) 
Unused   
Internet Header + 64 bits of Original Data Datagram   



Type Field


The Type Field indicates the type of ICMP message. A Destination Unreachable message will have the number 3 in the Type field.


Code Field


The Code Field is used by the different message formats to indicate specific error conditions. For Destination Unreachable, the code field is:





  • 0 = net unreachable



  • 1 = host unreachable



  • 2 = protocol unreachable



  • 3 = port unreachable



  • ;



  • 4 = fragmentation needed and DF set



  • 5 = source route failed



Codes 0, 1, 4, and 5 may be sent from a router. Codes 2 and 3 may be sent from a host


Checksum


The checksum is the 16-bit ones's complement of the one's complement sum of the ICMP message (starting with the ICMP Type).


Unused


The 32 bits are not used, and are ignored.


Internet Header + 64 bits of Data Datagram


This is the IP header, plus the first 64 bits of the original datagram's data. This data is used by the host to match the message to the appropriate process. If a higher level protocol uses port numbers, they are assumed to be in the first 64 data bits of the original datagram's data.


Source Quench Message


If a router does not have enough buffer space--and becomes congested, or is approaching its capacity-- it may send a Source Quench message to the datagram source host. The source quench message is a request to the host to cut back the rate at which it is sending traffic (to the Internet destination).

























0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 22 2324 25 26 27 28 29 30 31
Type (8 bits)Code (8 bits)Checksum (16 bits) 
Unused   
Internet Header + 64 bits of Original Data Datagram   



Type Field


The Type Field indicates the type of ICMP message. An Source Quench message will have the number 4 in the Type field .


Code Field


The Code Field is used by the different message formats to indicate specific error conditions. For Source Quench, the code field is always 0.


Checksum


The checksum is the 16-bit ones's complement of the one's complement sum of the ICMP message (starting with the ICMP Type).


Unused


The 32 bits are not used, and are ignored.


Internet Header + 64 bits of Data Datagram


It is the IP header, plus the first 64 bits of the original datagram's data. This data is used by the host to match the message to the appropriate process. If a higher level protocol uses port numbers, they are assumed to be in the first 64 data bits of the original datagram's data.


Time Exceeded Message


If a router find the Time To Live (TTL) field has expired (i.e. set to zero), the router will discard the IP datagram. It may send a Time Exceeded message to the source Host.

























0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 22 2324 25 26 27 28 29 30 31
Type (8 bits)Code (8 bits)Checksum (16 bits) 
Unused   
Internet Header + 64 bits of Original Data Datagram   



Type Field


The Type Field indicates the type of ICMP message. A Time Exceeded message will have the number 11 in the Type field.


Code Field


The Code Field is used by the different message formats to indicate specific error conditions. For Echo, the code field is:





  • 0 = time to live exceeded in transi



  • t



  • 1 = fragment reassembly time exceeded



Checksum


The checksum is the 16-bit ones's complement of the one's complement sum of the ICMP message (starting with the ICMP Type).


Unused


The 32 bits are not used, and are ignored.


Internet Header + 64 bits of Data Datagram


It is the IP header, plus the first 64 bits of the original datagram's data. This data is used by the host to match the message to the appropriate process. If a higher level protocol uses port numbers, they are assumed to be in the first 64 data bits of the original datagram's data.


57e. Parameter Problem Message


If a router or host finds a problem with an IP header, it must discard the datagram. The source host may be notified by being sent a Parameter Problem message. The Parameter Problem message identifies the octet of the original datagram's header where the error was detected.

























0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 22 2324 25 26 27 28 29 30 31
Type (8 bits)Code (8 bits)Checksum (16 bits) 
Pointer (8 bits)Unused  
Internet Header + 64 bits of Original Data Datagram   



Type Field


The Type Field indicates the type of ICMP message. A Parameter Problem message will have the number 12 in the Type field.


Code Field


The Code Field is used by the different message formats to indicate specific error conditions. For Parameter Problem message, the code field is 0 (when the Pointer field indicates the error).


Checksum


The checksum is the 16-bit ones's complement of the one's complement sum of the ICMP message (starting with the ICMP Type).


Pointer


The pointer identifies the octet of the original datagram's header where the error was detected (it may be in the middle of an option).


Unused


The 24 bits are not used, and are ignored.


Internet Header + 64 bits of Data Datagram


This is the IP header, plus the first 64 bits of the original datagram's data. This data is used by the host to match the message to the appropriate process. If a higher level protocol uses port numbers, they are assumed to be in the first 64 data bits of the original datagram's data.


Redirect Message


If a router (Router A) receives a datagram to forward from a host on the same network. The router (Router A) checks its routing table, and finds out that the shortest path is via another router (Router B) on the same network. Router A sends a Redirect message to the host with the IP address of Router B.

























0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 22 2324 25 26 27 28 29 30 31
Type (8 bits)Code (8 bits)Checksum (16 bits) 
Gateway Internet Address   
Internet Header + 64 bits of Original Data Datagram   



Type Field


The Type Field indicates the type of ICMP message. A Redirect message will have the number 5 in the Type field.


Code Field


The Code Field is used by the different message formats to indicate specific error conditions. For the Redirect message, the code field is:





  • 0 = Redirect datagrams for the Network



  • 1 = Redirect datagrams for the Host



  • 2 = Redirect datagrams for the Type of Service and Network



  • 3 = Redirect datagrams for the Type of Service and Host



Checksum


The checksum is the 16-bit ones's complement of the one's complement sum of the ICMP message (starting with the ICMP Type).


Gateway Internet Address


This field is used to indicate the router with the shortest path to the destination network


Internet Header + 64 bits of Data Datagram


The IP header plus the first 64 bits of the original datagram's data. This data is used by the host to match the message to the appropriate process. If a higher level protocol uses port numbers, they are assumed to be in the first 64 data bits of the original datagram's data.


57g. Timestamp Messages


The Timestamp messages are best known as part of the traceroute (tracert in Windows) programs. The purpose is to measure the round trip time it takes to go from a source to a destination host. The Timestamp message is a request for measuring round trip time. The Timestamp Reply is the reply to a Timestamp message.



































0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 22 2324 25 26 27 28 29 30 31
Type (8 bits)Code (8 bits)Checksum (16 bits) 
Identifier (16 bits)Sequence number (16 bits)  
Originate Timestamp   
Receive Timestamp   
Transmit Timestamp   



Type Field


The Type Field indicates the type of ICMP message. A Timestamp message will have the number 13 in the Type field and a Timestamp Reply message will have the number 14.


Code Field


The Code Field is used by the different message formats to indicate specific error conditions. For the Timestamp message, the code field is 0.


Checksum


The checksum is the 16-bit ones's complement of the one's complement sum of the ICMP message (starting with the ICMP Type).


Identifier and Sequence Number


The Identifier and Sequence Number may be used by the echo sender to aid in matching the replies with the echo requests. For example, the identifier might be used like a port in TCP--or UDP--to identify a session, and the sequence number might be incremented on each echo request sent. The echoer returns these same values in the echo reply.


Originate Timestamp


The Originate Timestamp is the time (in units) of 32 milliseconds since midnight Universal Time (UT). This is when the datagram was transmitted from the source.


Receive Timestamp


The Receive Timestamp is the time (in units) of 32 milliseconds since midnight Universal Time (UT). This is when the datagram was received at the destination.


Transmit Timestamp


The Transmit Timestamp is the time (in units) of 32 milliseconds since midnight Universal Time (UT). This is when the Timestamp Reply datagram was transmitted from the destination.


If the time is not available in milliseconds (or cannot be provided with respect to midnight UT), then any time can be inserted in a timestamp. The high order bit of the timestamp must also be set to indicate this non-standard value.


57h. Address Mask Messages


The Address Mask Request is used by a host to determine what its address mask is on a network. The Address Mask Reply message is the reply from a router (or a host) to the source host with the correct address mask for the network.


























0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1516 17 18 19 20 21 22 2324 25 26 27 28 29 30 31
Type (8 bits)Code (8 bits)Checksum (16 bits) 
Identifier (16 bits)Sequence number (16 bits)  
Address Mask   



Type Field


The Type Field indicates the type of ICMP message. An Address Mask Request message will have the number 17 in the Type field and an Address Mask Reply message will have the number 18.


Code Field


The Code Field is used by the different message formats to indicate specific error conditions. For Address Mask messages, the code field is always 0.


Checksum


The Checksum is the 16-bit ones's complement of the one's complement sum of the ICMP message (starting with the ICMP Type).


Identifier and Sequence Number


The Identifier and Sequence Number may be used by the echo sender to aid in matching the replies with the echo requests. For example, the identifier might be used like a port in TCP (or UDP) to identify a session, and the sequence number might be incremented on each echo request sent. The echoer returns these same values in the echo reply.


Address Mask


The Address Mask field contains the 32-bit subnet mask for the network (e.g. 255.255.255.0).

No comments:

Post a Comment