Re: checksum
No matter how you calculate them checksums are weak. They can't detect multiple errors and your checksum won't catch any high order bit errors if checksum type is 16 bits. If checksum type is 8 bits you don't need the modulo operation, just keep adding them and letting them rollover. Make sure you don't have any 'math error exceptions' enabled if you do it this way.
CRC's are better, but mathematically more complicated to generate and check. You can find examples everywhere so it's actually easy to cut and paste one into your code. They're pretty good about detecting a few bit errors.
You can look up the various Error Correction codes that are available, too.
The more robust your Error Correction/Detection is, the more data it takes. So your effective throughput will decrease.