本文共 1781 字,大约阅读时间需要 5 分钟。
停止等待协议
1)无差错情况
2)有差错情况2.1 超时重传
发送的消息在路上丢失了,每发送一组数据就会启动一个计时器,超过这个时间还未接收到确认消息时,发送方就会进行超时重传
2.2 确认丢失接收方向发送方发送确认帧1,但是在传输中丢失,接收方在固定时间内没有收到确认帧,会再超时重传1帧。
2.3 确认迟到发送方发送完之后确认帧一直没有传过来,就会超时重传一个0号帧,接收方收到0号帧之后发现刚刚已经收到过0号帧了,就会把重复发送的0号帧丢弃掉,再返回给发送端一个确认帧;同理,如果发送端之前已经收到0的确认帧,那么对于后来又收到的0的确认帧,收到就丢弃。
连续ARQ协议ARQ(Automatic Repeat reQuest:自动重传请求)。
连续ARQ协议可以提高信道的利用率。它引入了滑动窗口,通过滑动窗口可以批量发送数据,发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。
如下图中,滑动窗口大小为6,可以批量地发送6个消息;当收到1和2的确认消息之后,滑动窗口就可以往后移两个位置,将窗口内还没有发送的数据发送出去。
对于滑动窗口,如果每一个报文都需要确认,那么确认消息的开销会非常大,因此对于滑动窗口并不需要对每个报文都进行确认,而是采用累计确认的方法。假设现在同时发送了1到6这6个报文,在某一时刻发送方收到第5个报文的确认消息,如果采用累计确认的方法,我们就默认1到5这5个消息都收到了,因此会把窗口往前推动五格。
滑动窗口滑动窗口(Sliding window)是一种流量控制技术。用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认。因此该协议可以加速数据的传输。
TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报;但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。
TCP协议的可靠传输
TCP的可靠传输基于连续ARQ协议
TCP的滑动窗口以字节为单位
窗口的大小表示窗口里面的字节都是可以发送的,在窗口左边的表示已经确认的字节序号,右边属于不允许发送的字节序号;23代表对方期待收到的下一个字节
假如说窗口里七个字节都已经发送出去,但是没有收到确认,那么可用窗口就为0考虑下面一种情况:
当收到25和27字节的确认消息时,因为当前确认消息并不是按顺序的,23和24的确认消息还没有过来;如果过了超时时间之后还未收到23和24的确认消息,那么就会从23重新传输这七个字节.
由此可见,可靠传输效率并不高,因为前面已经收到25和27的确认号,但因为23和24并没有收到,所以还需要重传如何解决这一问题呢?可以通过选择重传的方法
选择重传
TCP的头部信息如下,选择重传机制里需要重传的字节边界存放在TCP选项里
转载地址:http://ehrzi.baihongyu.com/