Internet Protocol Error Checking – IP Protocol Theory and RFC

ipprotocol-theoryrfc

The RFC 791 says :

The internet protocol does not provide a reliable communication
facility. There are no acknowledgments either end-to-end or
hop-by-hop. There is no error control for data, only a header
checksum. There are no retransmissions. There is no flow control.
Errors detected may be reported via the Internet Control Message
Protocol (ICMP) [3] which is implemented in the internet protocol
module.

My questions :

  1. give an example when the header checksum is set to 1
  2. 'Errors may be reported' what does that mean ? How it decides which errors it should report and which not ?

Thank you in advance! Note that I am not a college student so if you throw some weird words please explain what they mean.

Best Answer

AS for point 1. well, maybe you could craft a IP header which check sum result would be 1, looking at the algorithm used (which is described in the RFC you linked), but if you expect somebody to do it for you, good luck...

Regarding point 2. you have to look at RFC2119 where it is said :

  1. MAY This word, or the adjective "OPTIONAL", mean that an item is truly optional. One vendor may choose to include the item because a particular marketplace requires it or because the vendor feels that it enhances the product while another vendor may omit the same item. An implementation which does not include a particular option MUST be prepared to interoperate with another implementation which does include the option, though perhaps with reduced functionality. In the same vein an implementation which does include a particular option MUST be prepared to interoperate with another implementation which does not include the option (except, of course, for the feature the option provides.)

So it is up to the person that implement its version of an IP stack to decide which errors are reported or not. I have no idea if someone ever wrote an IPv4 stack with checksum error reporting trough ICMP but I doubt it.

My understanding is that if a checksum is bad, the packet should be dropped, and that's all. Re-transmission will be managed by upper layer if needed (generally by TCP).

Related Topic