This article gathers a few notes i made during my readings about Disruption Tolerant Networking (DTN) and one of its implementation: the Bundle Protocol.
Satellite communications are unique in the way that the transport media is very erratic. Transmission is rarely guaranteed as deep-space communications bring their fair share of delay and packet corruption (long to very long distances, weather, orientation problems, obstacles etc.). With a classical "assured end-to-end transmission" protocol like TCP, messages would either over-congestion the network or never make it to destination.
For example, on Figure 1 we have an earth ground-satellite station, a geostationary satellite (GEO sat.) and an observation satellite orbiting the Moon (LLO sat.). While Earth GEO links are always operational because of the nature of the orbit, the GEO sat. is not always in the line of sight of the Moon, and even more so of the LLO sat. If the LLO sat. disappears behind the Moon during the transmission of say, a very high resolution picture of the Moon's hidden face, with standard TCP, the whole session is lost and has to begin again.
As shown on Figure 2, if an error occurs on any of the communication segments, the transmission time is tripled and the retransmission has to be done on each hop, wasting some precious bandwidth.
This scenario gets even worse if the LLO sat. disappears behind the Moon during the retransmission.
An intuitive and simple solution is to tell the GEO satellite to keep the packet in memory until he is sure that the whole session has been delivered. It will ensure that every segment is used only as much as it is necessary, and that data will be delivered even in the case of a temporary absence of route to destination. Figure 3 illustrates this technique in the same scenario as Figure 2.
I'll leave this post as is, and will make another post to go further on the DTN architectures and its main implementation: the bundle protocol.