I'm working on designing a point to point communications link for a cubesat. I just want to confirm some of my understanding.
In my opinion it is only necessary to have physical layer and data link layer functionality. Why would we need an IP address or a transport layer for a single point to point link? But perhaps there is issues I am not aware of. I understand that we need to be able to keep track of packets that arrive out of order, or don't arrive at all. This is obviously an extremely challenging issue for a large network like the internet, but for a single point to point link, it seems reasonable to implement a simple packet reassembly scheme for ourselves.
Our mission is to monitor arctic sea ice using GNSS reflectometry data from GPS signals reflected off the surface of the earth. The more data we can downlink, the better. Hence, we are motivated to use protocols with as little overhead as possible.
Our transceiver is a microhard n290 transceiver, which has been flown on satellites in the past. It is not compatible with existing amateur satellite stations, we had no intent to interface with these existing networks. It provides FEC in hardware and a rate of up to 1.2Mbps uplink or downlink.
We know that we need a protocol that will expose a "packet interface" to us. That is, we need a link layer protocol to packetize the serial data stream.
Since we don't have any kind of network, we don't need an IP layer. As for a transport layer, we do need to be able to reassemble the data packets in the right order, and to ask for retransmissions. Is it possible to put something like TCP directly on top of the link layer, and cut out IP? This still seems like overkill to me though. Our telemetry and status data will fit into a single packet. As for the payload data, AFAICT all we need to do is break it up, label the data, and provide an order field. Is there any reason not to do this ourselves? It does not seem like a difficult task. I've done it in Python using google protocol buffers - I'm able to serialize a file, shuffle the order, and then reassemble it. I would need to put repeat requests on top of this, but everything else should be handled by the link layer.
I've been looking at the Saratoga protocol (http://saratoga.sourceforge.net/), but it is transport layer. So, doesn't seem like a good choice.
Point to point protocol (https://en.wikipedia.org/wiki/Point-to-Point_Protocol) seems to be the most sensible way to go. Right? It is as lightweight as it gets.
Thanks for any guidance :)