It is stated in Wikipedia that
an IPv6 header does not include a checksum.
What are the reasons that were behind this decision?
Network Engineering Stack Exchange is a question and answer site for network engineers. It only takes a minute to sign up.Sign up to join this community
One of the ideas around IPv6 was to speed up packet forwarding. To that end, several decisions were made. For example, the IPv6 header was greatly simplified and is a fixed length, unlike the variable length IPv4 header. Also, you cannot fragment IPv6 packets along the path, the way you can for IPv4, because packet fragmentation is resource intensive.
Not having a checksum in the IPv6 header means that an IPv6 router does not need to recalculate the checksum to see if the packet header is corrupt, and recalculate the checksum after decrementing the hop count. That saves processing time and speeds up the packet forwarding. The logic is that the layer-2 and layer-4 protocols each already have a checksum. The layer-2 checksum covers the entire IPv6 packet, and the layer-4 checksum covers the transport datagram.
Where UDP has an optional checksum for IPv4, it is required for IPv6.
Because it's redundant.
All the common link-layer protocols like Ethernet or WiFi have their own error checking and error correction mechanisms, so physical transmission errors are already unlikely.
What's left are logic errors in the packet itself. But almost all transport protocols based on IPv6, like TCP or UDP, also have error checking to catch logical errors. And these checksums often cover parts of the IP header as well, even though those aren't technically part of the transport layer segment (like source and destination address).
So what's the worst that could happen if an IPv6 router tries to route a corrupted packet? The packet will either not get routed at all, because the header contains invalid values or the destination address doesn't exist. Or the address is a valid one (which might or might not be the intended one), so it will arrive at a destination, which will then discard it because the transport layer checksum doesn't add up. A bit bandwidth got wasted, and that's it. And that in a scenario which doesn't really happen all that often. So it's simply not worth the additional CPU load you need on IPv6 switches to calculate the checksum for every single packet they route.