网络的可靠传输机制
1个回答
展开全部
网络是不可靠的,资料在通信链路的传输过程中,可能因为信号干扰问题而导致信号错误。在这种情况下,通常使用循环冗余校验(CRC)来检测错误。虽然有些侦错程序足够强大,强大到可以更正错误的信号,但是这个过程会消耗大量的计算资源。接收端若是收到了错误的讯框则会丢弃这个讯框,为了达到可靠传输的目的,发送端必须重新发送这些被丢弃的讯框。
为了达到重送错误讯框的目的,我们使用了以下 2 种基础方法
ACK 是一个控制讯框,接收端用它来通知传送端其已收到之前的讯框,发送端端则通过接收到 ACK 确认其讯框发送成功。
若是发送端在经过一段等待时间后还没有收到 ACK,发送端会重新发送原来的讯框,发送端等待 ACK 的一段合适的时间的动作叫做等待超时。
发送端在传送完一个讯框之后必须等收到 ACK之后,才能发送下一个讯框。当发送端等待一段时间后还未收到 ACK,发送端发送等待超时,重新发送原来的讯框。
上图所示,发送端在等待超时前收到 ACK。
上图所示,发送端的原始讯框丢失,发送端等待超时后重新发送讯框。
上图所示,接收端的 ACK 丢失,发送端等待超时,重新发送讯框。
上图所示,接收端的 ACK 延迟到达,接收端重新发送讯框。
接收端的 ACK 在到达发送端的过程中丢失或者延迟了,那么传送端会等待超时并且重送原本的讯框。这样的话重复发送同样的讯框,造成网络资源浪费。
上面存在的问题,通过给讯框设置一个序号则可以解决。当发送端发送编号为 0 的讯框,接收端可以知道这个讯框 0 重复,因此可以忽略这个讯框,但是依旧会给发送端发送 ACK。
到现在为止,发送端和接收端的通信模型在同一个时间只有一个讯框在发送,严重浪费网络资源。为了充分利用网络资源,发送端在停下来等待 ACK 之前,发送端必须发送更多的讯框。
为了实现滑动窗口协议,发送端给每个讯框一个序号,假设这个序号值可以无限大,发送端需要持续记录下面 3 个变量
对于上面的 3 个变量结合图示,我们有底下的等式
当发送端接收到一个编号为 LAR+1 的 ACK,将 LAR 向右移动,使发送端可以发送另一个讯框。每个发送端对每个发送出去的讯框都会有一个计时器,若是计时器在 ACK 到达前超时,则重送该讯框。发送端也需要一个有 SWS 容量大小的缓冲区,用于存在发送出去的讯框,这样才能在需要重送讯框的时候找到讯框。
为了实现滑动窗口协议,接收端需要持续记录下面 3 个变量
对于上面的 3 个变量结合图示,我们有底下的等式
当接收端接收到序号为 SeqNum 的讯框时,若是 SeqNum <= LFR 或者 SeqNum > LAF ,此讯框在接收端滑动外面,那么接收端会将此讯框丢弃。若是 LFR < SeqNum <= LAF ,接收端接收此讯框。当接收端接收到一个编号为 LFR+1 的 讯框,将 LFR 向右移动。
如上图所示,假设 LFR = 1, RWS = 7, LAF = 8。若讯框 4,6,3,5 先后到达,虽然它们没有按照序号顺序到达,但是它们都会被收起来,因为它们都在接收端窗口内。但是接收端不会发送 ACK,因为讯框 2 还没有到达,等到讯框 2 到达之后,接收端发送讯框 6 的 ACK,此时窗口滑动, LFR 改为 6, LAF 改为 13。
如上图所示,滑动窗口协议中的 ACK 采用的是累积式的 ACK (Accumulative ACKs), SeqNumToAck 表示所有编号小于 SeqNumToAck 的讯框都已经收到了,即使收到较高序号的讯框,接收端还是会送出序号为 SeqNumToAck 的 ACK,对于接收端来说 LFR = SeqNumToAck -1, LAF = LFR+ RWS
对于发送端来说,有以下等式
对于接收端来说,有以下等式
作为网络方面的简单入门内容,文章主要是介绍网络的可靠传输机制的简单知识。这篇博客内容总结于黄能富教授的 《CS01060 2017-秋季-计算机网路概论》 课程,博客截图来源于课程 PPT。
为了达到重送错误讯框的目的,我们使用了以下 2 种基础方法
ACK 是一个控制讯框,接收端用它来通知传送端其已收到之前的讯框,发送端端则通过接收到 ACK 确认其讯框发送成功。
若是发送端在经过一段等待时间后还没有收到 ACK,发送端会重新发送原来的讯框,发送端等待 ACK 的一段合适的时间的动作叫做等待超时。
发送端在传送完一个讯框之后必须等收到 ACK之后,才能发送下一个讯框。当发送端等待一段时间后还未收到 ACK,发送端发送等待超时,重新发送原来的讯框。
上图所示,发送端在等待超时前收到 ACK。
上图所示,发送端的原始讯框丢失,发送端等待超时后重新发送讯框。
上图所示,接收端的 ACK 丢失,发送端等待超时,重新发送讯框。
上图所示,接收端的 ACK 延迟到达,接收端重新发送讯框。
接收端的 ACK 在到达发送端的过程中丢失或者延迟了,那么传送端会等待超时并且重送原本的讯框。这样的话重复发送同样的讯框,造成网络资源浪费。
上面存在的问题,通过给讯框设置一个序号则可以解决。当发送端发送编号为 0 的讯框,接收端可以知道这个讯框 0 重复,因此可以忽略这个讯框,但是依旧会给发送端发送 ACK。
到现在为止,发送端和接收端的通信模型在同一个时间只有一个讯框在发送,严重浪费网络资源。为了充分利用网络资源,发送端在停下来等待 ACK 之前,发送端必须发送更多的讯框。
为了实现滑动窗口协议,发送端给每个讯框一个序号,假设这个序号值可以无限大,发送端需要持续记录下面 3 个变量
对于上面的 3 个变量结合图示,我们有底下的等式
当发送端接收到一个编号为 LAR+1 的 ACK,将 LAR 向右移动,使发送端可以发送另一个讯框。每个发送端对每个发送出去的讯框都会有一个计时器,若是计时器在 ACK 到达前超时,则重送该讯框。发送端也需要一个有 SWS 容量大小的缓冲区,用于存在发送出去的讯框,这样才能在需要重送讯框的时候找到讯框。
为了实现滑动窗口协议,接收端需要持续记录下面 3 个变量
对于上面的 3 个变量结合图示,我们有底下的等式
当接收端接收到序号为 SeqNum 的讯框时,若是 SeqNum <= LFR 或者 SeqNum > LAF ,此讯框在接收端滑动外面,那么接收端会将此讯框丢弃。若是 LFR < SeqNum <= LAF ,接收端接收此讯框。当接收端接收到一个编号为 LFR+1 的 讯框,将 LFR 向右移动。
如上图所示,假设 LFR = 1, RWS = 7, LAF = 8。若讯框 4,6,3,5 先后到达,虽然它们没有按照序号顺序到达,但是它们都会被收起来,因为它们都在接收端窗口内。但是接收端不会发送 ACK,因为讯框 2 还没有到达,等到讯框 2 到达之后,接收端发送讯框 6 的 ACK,此时窗口滑动, LFR 改为 6, LAF 改为 13。
如上图所示,滑动窗口协议中的 ACK 采用的是累积式的 ACK (Accumulative ACKs), SeqNumToAck 表示所有编号小于 SeqNumToAck 的讯框都已经收到了,即使收到较高序号的讯框,接收端还是会送出序号为 SeqNumToAck 的 ACK,对于接收端来说 LFR = SeqNumToAck -1, LAF = LFR+ RWS
对于发送端来说,有以下等式
对于接收端来说,有以下等式
作为网络方面的简单入门内容,文章主要是介绍网络的可靠传输机制的简单知识。这篇博客内容总结于黄能富教授的 《CS01060 2017-秋季-计算机网路概论》 课程,博客截图来源于课程 PPT。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询