TCP/IP Checksum Testing

In order to provide basic protection against transmission errors, TCP/IP uses checksums in its headers. The checksum in the IP header of an IPv4 packet covers only the bytes in the IPv4 header, whereas the checksum in the ICMP, IGMP, UDP, and TCP headers cover the header and the data (note that IPv6 does not compute a checksum on the header). The checksum is calculated by the sender using a specific algorithm. It is then stored in the header and sent as part of the datastream. The receiving side calculates the checksum on the data that is received using the same algorithm as the sender and compares its value to the checksum passed in the header. If the values do not match, the packet is rejected.

For debugging purposes, the TCP/IP server allows checksum verification to be turned on and off, but only at the TCP layer. The NOCHECKSUM statement can be specified (either in the TCP/IP configuration file, or through the use of the NETSTAT OBEY command) to temporarily disable TCP checksum testing on incoming packets. This might allow you to debug transmission errors on a noisy network, or to find a gateway or router that is losing bits in the transmission.