day 5:端到端原则,检错机制

端到端原则:

理论和操作上,我们可以给网络添加一些功能,来确保数据的安全性或使用一些技巧加快数据传输。但实际上,就算你添加了,网络也只能起到“帮助”的效果。如果想要实现这些要求,只能靠应用程序本身担负起这个责任,由应用程序去实现这些功能。网络可以给你提供很小部分帮助,但你不能依赖网络完成全部工作
例一:网络可能可以帮你增添一定的安全性,但是数据安全的工作最终还是要靠你的应用程序去实现
例二:虽然链路中有链路错误检测,可以检测链路中的传输错误,但还可能有由于路由器内存问题引起的存储错误。只有执行端到端错误检测,即目标主机收到文件后,在重组文件时检查文件是否出错,才是确保不出错的最好方法
例三:链路层link layer使用确认、重传的机制:在收到文件并检测无误后,要及时发信息回去说明“成功接收”;如果出现错误,也要及时发信息回去说明“数据有误,请重传”。这样的机制能够使TCP在不良的传输环境下,也能确保最终收到数据的正确性

总而言之,另一段来自RFC 1958的话可以很好地说明端到端原则:
网络的工作是尽可能高效和灵活地传输数据报,其他所有的工作应在边缘端完成

按照RFC 1958的说法,如果网络实现了一项功能来尝试帮助端点,则它假定了端点所做的事情。例如,当无线链路层使用重传来提高可靠性以使TCP可以更好地工作时,它假定了一个前提:重传虽然增加了等待时间,但这是值得的,这能提高可靠性。然而这个前提不总是正确的。因为除了TCP以外,还有其他一些协议,其中可靠性对这些协议来说不是那么重要,它们可能宁愿发送一个新的不同的数据包,也不想尝试发送一个旧的数据包。但是由于链路层使用重传机制合并了更高的可靠性,因此其他协议也被受困于该机制。我们可以看到,该机制可以,并且的确会阻碍创新和进步。随着各层开始添加优化,并且它们都开始假设其上下各层的功能,重新设计各层变得越来越困难。优化的逐渐积累反而会使得该层越来越难以改动。因此,从长远的角度来看,遵守端到端原则、不在网络添加功能是很有必要而且值得的,如果遵守了,能够很大程度减少端点的工作量。问题是现在的网络设计师都不遵守,导致虽然网络性能越来越好,但是改动也越来越难。

检错机制

有checksum,CRCs循环冗余码,MAC消息认证码
例如:以太网添加了CRC,传输层安全性添加了MAC,IP添加了checksum并放入IP头

checksum

检测方法:收到包以后,将整个包累加(二进制补码),得到的结果位翻转,再与包里的checksum数字进行相加,如果最后一步得到的不等于0xffff,那就说明包出错
优点:简单快捷
缺点:弱错误检测,只能捕捉单个错误

CRC

链路层的c位长的CRC可以检测到任何1位错误,任何2位错误,小于或等于c位长的单个错误突发,以及任意奇数个错误。

MAC

防止别人冒充和恶意修改。但不适合捕捉错误。c位MAC只能保证有2-c的可能性检测不到错误,对于大量数据来说这是不够的。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/jieyannn/article/details/105682849
今日推荐