Why did the designers of IP (and UDP and TCP) choose to use the IP checksum to detect errors rather than a more robust error detection code such as CRC-32?
I previously thought the IP checksum was chosen because it was fast and cheap to recalculate in software (for example, a router at each hop must decrement the TTL field and then recalculate the checksum for the IP header), but having learn't that CRC-32's are fast to implement in hardware using a k-bit shift register and XOR gates (Peterson, Davie: Computer Networks: A Systems Approach, 5th Edition.) I'm not too sure this argument still holds.