paulgorman.org/technical

ICMP

Internet Control Message Protocol. Unlike transport protocols like TCP an UDP, ICMP is a utility protocol that generally doesn’t carry user data payloads. ICMP provides feedback about problems and changes on an IP network.

Excerpted from RFC 792:

Occasionally a gateway or destination host will communicate with a source host, for example, to report an error in datagram processing. For such purposes this protocol, the Internet Control Message Protocol (ICMP), is used.

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.

ICMP messages are sent using the basic IP header. The first octet of the data portion of the datagram is a ICMP type field; the value of this field determines the format of the remaining data.

Time to live in seconds; as this field is decremented at each machine in which the datagram is processed, the value in this field should be at least as great as the number of gateways which this datagram will traverse.

ICMP types:

Type  Name                       Reference
0     Echo Reply                 RFC 792
3     Destination Unreachable    RFC 792
5     Redirect                   RFC 792
8     Echo                       RFC 792
9     Router Advertisement       RFC 1256
10    Router Solicitation        RFC 1256
11    Time Exceeded              RFC 792
12    Parameter Problem          RFC 792
13    Timestamp                  RFC 792
14    Timestamp Reply            RFC 792

Codes associated with ICMP type 3 Destination Unreachable messages:

0   Net Unreachable         RFC 792
1   Host Unreachable        RFC 792
2   Protocol Unreachable    RFC 792
3   Port Unreachable        RFC 792
4   Fragmentation Needed and Don't Fragment was Set    RFC 792
5   Source Route Failed          RFC 792
6   Destination Network Unknown  RFC 1122
7   Destination Host Unknown     RFC 1122
8   Source Host Isolated         RFC 1122
9   Communication with Destination Network is Administratively Prohibited  RFC 1122
10  Communication with Destination Host is Administratively Prohibited     RFC 1122
11  Destination Network Unreachable for Type of Service  RFC 1122
12  Destination Host Unreachable for Type of Service     RFC 1122
13  Communication Administratively Prohibited            RFC 1812
14  Host Precedence Violation    RFC 1812
15  Precedence cutoff in effect  RFC 1812

It’s generally good manners to allow at least these types for IPv4:

For IPv6, ICMP is not just a good idea, it’s critical.