博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可靠传输的原理:停止等待协议、ARQ协议;TCP协议的可靠传输
阅读量:3966 次
发布时间:2019-05-24

本文共 1781 字,大约阅读时间需要 5 分钟。

停止等待协议

  • 停止等待协议是最简单的可靠传输协议,停止等待就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。若接收方收到重复的分组,就会丢弃该分组,但同时还要向发送方发送确认;
  • 停止等待协议中主要有4种情况:无差错情况、超时重传、确认丢失和确认迟到;
  • 停止等待协议对信道的利用率不高,因为发送方每发送一个消息,都需要等待确认消息回来,只要确认消息没有正确地到达,就一直等;

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并没有收到,所以还需要重传

如何解决这一问题呢?可以通过选择重传的方法

选择重传

  • 选择重传需要指定需要重传的字节,这里的字节是指需要重传的字节边界,例如1000~1500这一段里的500个字节丢失,需要重传,那么就会把1000和1500这两个数字存入TCP的选项里;
    • 因为TCP的报文一次传输是传输多个字节,而不是一个字节,在丢失的情况下,其实丢失的是整个TCP报文,对于整个TCP报文都丢失的情况下,在报文里的一整段字节流都是丢失的;
  • 每一个字节都有唯一的32位序号

TCP的头部信息如下,选择重传机制里需要重传的字节边界存放在TCP选项里

在这里插入图片描述

转载地址:http://ehrzi.baihongyu.com/

你可能感兴趣的文章
[HTML5] 关于HTML5(WebGL)的那点事
查看>>
自我反思
查看>>
初识网络编程
查看>>
东北赛选拔教训
查看>>
hash
查看>>
涨姿势了:求两个分子的最大公倍数
查看>>
快速幂
查看>>
vector.reserve and resize &&vector与map结合
查看>>
最长公共子序列
查看>>
计算几何
查看>>
求解方程
查看>>
太弱了。。水题
查看>>
位运算(含应用)
查看>>
野指针与空指针
查看>>
图文混排效果
查看>>
urllib2.urlopen超时问题
查看>>
魏兴国:深入浅出DDoS攻击防御
查看>>
使连续的参考文献能够中间用破折号连起来
查看>>
Discover Feature Engineering, How to Engineer Features and How to Get Good at It
查看>>
36辆车,6条跑道,无计时器,最少几次比赛可以选出前三
查看>>