The network was designed with two principles in mind: the End-to-End principle and the Strong End-to-End.
The End-to-End principle states that end-to-end applications are solely responsible for the correctness of the data transferred. It also states that the network can implement some features -or incomplete versions of the features- in the middle of the communication channel to enhance the performance, but it’s not its job.
For example, Applications can benefit from TCP segment retransmission mechanism and from link layer error detection. But this must not substitute for their own mechanisms.
Let’s take the error detection mechanism implemented at the link layer. This mechanism is executed on a per link basis and does not guarantee that there won’t be any storage errors. In fact, even if the link does not inserts errors, the memory of one intermediate host may be buggy and invert bits. The link layer error detection won’t detect that, and frames will be transmitted as if they are intact. → This is a network enhancement, but the applications still must implement their own error detection mechanisms.
Sometimes, when the network incorporates performance features, it creates unnecessary impediments. For example, let’s say we will use a link layer that performs frame retransmission when corruption occurs. The network did not take into account that some applications do not require frame retransmission and doing so creates undesired delays.
Another example where the network can help improve performance is the case of wireless protocols. Wired link layer protocols have 99.999% reliability. Wireless link layer protocols have between 50 and 80% reliability. Wireless link layer protocols can implement features to enhance reliability.
Whether the implemented feature is helpful or not, when the network implements it, it is assumed that we have some knowledge about the application. This by itself reduces the flexibility in network design principles, where network protocols are conceived independently from the upper and lower level layers.
Strong end-to-end principle
The Strong end-to-end principle states that the network’s job is to quickly and efficiently transmit data from one host to another. This implies that end-to-end applications must implement all the necessary features such as integrity verification, security, optimization,…