4

I'm taking a Network class and learned ICMP, but I cannot understand the reason why below arguments are applied.

  • ICMP message is not generated on header checksum errors
  • If a datagram carrying an ICMP message causes an error, no error message is sent.

Why?

6

ICMP message is not generated on header checksum errors

The source address to which ICMP would send a message is in the IP header, and if the header has an error, the source address in the header cannot be relied upon to be correct. The higher-layer protocols will need to deal with such lost packets in their own fashion.

If a datagram carrying an ICMP message causes an error, no error message is sent.

What RFC 792, Internet Control Message Protocol says about this is:

To avoid the infinite regress of messages about messages etc., no ICMP messages are sent about ICMP messages.

That is not strictly true in every case. There are multiple versions of traceroute that use ICMP, and they depend on ICMP error messages for timeout (TTL expired) to be sent back to the source. Also, ping uses an ICMP echo reply to an ICMP echo request.

| improve this answer | |
  • Simplest way to think of it is that you don't send error messages about error messages. RFC 792 is a little vague; the Host Requirements RFC 1122 section 3.2.2 is explicit; also about restrictions on ICMP errors to/from broadcast and other special addresses. – jonathanjo Nov 13 '18 at 14:50
  • TTL expiration isn't an "error". Nor is an echo reply; it's an answer to a request. (the same applies to a few other codes) – Ricky Beam Nov 14 '18 at 3:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.