原贴地址:https://blog.csdn.net/djl806943371/article/details/88769733
端对端原则:要想确认传输了正确的数据给对端,肯定要在处于连接两端的终端的帮助下实现,不可能完全在链路层或者传输层实现,因此必须要在接收端对数据进行验证,这需要在应用层实现。同时这种设计原则,可以将底层的链路层最简化,只负责传输数据,提高传输性能与稳定性。
为什么这么说呢?先举一个例子,MIT曾经有开发者使用过仅在链路层检查数据包是否出错的方式。结果出现了很大问题,这是因为在经过层层路由时,可能在路由内部出现bits反转导致数据出错的问题,而这种情况下,链路层并不知道数据出现了错误。最终开发人员因为这个方式而丢失了大量的源码。
TCP协议提供了可靠的字节流服务,但是还是有可能出错,比如TCP内存出现问题,并且事实证明,TCP协议在很不稳定的链路层中性能并不好,因此端对端检验数据的正确性是必不可少的。
实际无线链路传输自身稳定性并不好,送达率可能只有50%到80%。因此不得不在无线链路层中添加了自动重发机制,以提高送达率到99%以上,此时加上TCP协议才能够实现很好的效果。也就是说链路层可以添加辅助提高可靠性的功能。但是这依然替代不了最终端对端的验证。