TCP的差错检测

滑动窗口协议:对传统的自动重传请求(ARQ,Automatic Repeat reQues)进行了改进,从而实现了在接收到ACK之前能够连续发送多个数据包。

在Go-Back-N ARQ中,发送端不需要在接收到上一个数据包的ACK后才发送下一个数据包,而是可以连续发送数据包。在发送端发送数据包的过程中,如果接收到对应已发送的某个数据包的NACK,则发送端将NACK对应的某个数据包进行重发,然后再将该数据包之后的数据包依次进行重发。

后退N帧ARQ也使用滑动窗口机制,但WT>1,发送方在每收到一个ACK之前不必等待,可以持续地发送窗口内的多个帧,如果这是收到接收方收回的ACK,还可以继续发送后续的帧。与停等ARQ相比,连续ARQ减少了等待时间,提高了传输的吞吐量和传输效率。回退-N就是从出错处重发已发出过的N个帧。

后退N帧ARQ对发送窗口的大小是有限制的,如果帧的序号用n比特编号,则发送窗口WT应该满足:

WT≤2n-1

后退N帧ARQ就是从出错处重发已发出过的N个帧。

1.发送端和接收端分别设定发送窗口和接收窗口。
2.三次握手的时候,客户端把自己的缓冲区大小也就是窗口大小发送给服务器,服务器回应是也将窗口大小发送给客户端,服务器客户端都知道了彼此的窗口大小。
3.比如主机A的发送窗口大小为5,主机A可以向主机B发送5个单元,如果B缓冲区满了,A就要等待B确认才能继续发送数据。
4.如果缓冲区中有1个报文被进程读取,主机B就会回复ACK给主机A,接收窗口向前滑动,报文中窗口大小为1,就说明A还可以发送1个单元的数据,发送窗口向前滑动,之后等待主机B的确认报文。
只有接收窗口向前滑动并发送了确认时,发送窗口才能向前滑动。

停止等待ARQ协议(stop and wait

  当发送窗口和接收窗口都等于1时,就是停止等待协议。发送端给接收端发送数据,等待接收端确认回复ACk,并停止发送新的数据包,开启计时器。数据包在计时器超时之前得到确认,那么计时器就会关闭,并发送下一个数据包。如果计时器超时,发送端就认为数据包丢失或被破坏,需要重新发送之前的数据包,说明数据包在得到确认之前,发送端需要存储数据包的副本。
停止等待协议是发出一个帧后得到确认才发下一个,降低了信道的利用率。

退后N帧协议

在发送完一个帧后,不用停下来等待确认,而是可以连续发送多个数据帧。收到确认帧时,任可发送数据,这样就减少了等待时间,整个通信的通吞吐量提高。
如果前一个帧在超时时间内未得到确认,就认为丢失或被破坏,需要重发出错帧及其后面的所有数据帧。这样有可能有把正确的数据帧重传一遍,降低了传送效率。
线路很差时,使用退后N帧的协议会浪费大量的带宽重传帧。

选择重传协议

NAK:非确认帧,当在一定时间内没有收到某个数据帧的ACK时,回复一个NACK。
在发送过程中,如果一个数据帧计时器超时,就认为该帧丢失或者被破坏,接收端只把出错的的帧丢弃,其后面的数据帧保存在缓存中,并向发送端回复NAK。发送端接收到NAK时,只发送出错的帧。
如果落在窗口的帧从未接受过,那么存储起来,等比它序列号小的所有帧都按次序交给网络层,那么此帧才提交给网络层。
接收端收到的数据包的顺序可能和发送的数据包顺序不一样。因此在数据包里必须含有顺序字符来帮助接受端来排序。
选择重传协议可以避免重复传送那些正确到达接收端的数据帧。但是接收端要设置具有相当容量的缓存空间,这在许多情况下是不够经济的。

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值