ICMP messages are grouped into two classes.
Destination Unreachable (see Section 22.214.171.124)
Redirect (see Section 126.96.36.199)
Source Quench (see Section 188.8.131.52)
Time Exceeded (see Section 184.108.40.206)
Parameter Problem (see Section 220.127.116.11)
Echo (see Section 18.104.22.168)
Information (see Section 22.214.171.124)
Timestamp (see Section 126.96.36.199)
Address Mask (see Section 188.8.131.52)
If an ICMP message of unknown type is received, it MUST be silently discarded.
Every ICMP error message includes the Internet header and at least the first 8 data octets of the datagram that triggered the error; more than 8 octets MAY be sent; this header and data MUST be unchanged from the received datagram.
In those cases where the Internet layer is required to pass an ICMP error message to the transport layer, the IP protocol number MUST be extracted from the original header and used to select the appropriate transport protocol entity to handle the error.
An ICMP error message SHOULD be sent with normal (i.e., zero) TOS bits. An ICMP error message MUST NOT be sent as the result of receiving:
NOTE: THESE RESTRICTIONS TAKE PRECEDENCE OVER ANY REQUIREMENT ELSEWHERE IN THIS DOCUMENT FOR SENDING ICMP ERROR MESSAGES.
These rules will prevent the "broadcast storms" that have resulted from hosts returning ICMP error messages in response to broadcast datagrams. For example, a broadcast UDP segment to a non-existent port could trigger a flood of ICMP Destination Unreachable datagrams from all machines that do not have a client for that destination port. On a large Ethernet, the resulting collisions can render the network useless for a second or more.
Every datagram that is broadcast on the connected network should have a valid IP broadcast address as its IP destination (see Section 3.3.6). However, some hosts violate this rule. To be certain to detect broadcast datagrams, therefore, hosts are required to check for a link-layer broadcast as well as an IP-layer broadcast address.
This requires that the link layer inform the IP layer when a link-layer broadcast datagram has been received; see Section 2.4.