I'm currently implementing error-correction for a UDP-based network protocol. We chose to implement error-correction in order to reduce the number of packet re-transmissions.
The architecture is very simple: inside our UDP packet (in the payload section), we include an error-correction code (in this specific case is based on Reed-Solomon); therefore, if a UDP packet is damaged during transmission, our application is able to "repair" the UDP payload, without the need to request a packet retransmission. Retransmission is only necessary when the packet is fully lost or in case it's too much damaged.
The main problem is: for this architecture to work, the UDP packet must be delivered to destination even if it is damaged. However, network devices and the OS itself may drop the packet if it is damaged.
I resolved the problem with the UDP transport layer: UDP's checksum is fortunately optional, so it can be disabled. Disabling UDP's checksum feature enables us to receive damaged UDP packets (so we can try to repair them ourselves).
I also resolved the problem with the IPv4 layer: IPv4's checksum only checks the integrity of the IPv4 header, and not the payload. And that's totally fine, since our application is able to repair payload damages, but not of course IPv4 header damages.
There's a last problem to resolve: the data-link layer. For instance, ethernet frames have a checksum that ensures integrity of the entire frame; that means that if the UDP payload is damaged, the ethernet frame checksum will not be valid, and therefore the network devices or the OS will drop the packet.
On the other hand, our network protocol needs error-correction feature because it will be used in satellite communications (where packets aren't transmitted to the satellite using ethernet frames, I suppose). But I have not been able to find information about "satellite frames" and how they handle integrity checks.
What kind of frames are usually used in satellite communications? And, most importantly, do these frames check only header integrity (like IPv4) or the entire packet integrity (like ethernet frames)?
Thanks very much.