TCP的可靠传输之滑动窗口

滑动窗口

TCP中的滑动窗口是以字节为单位来发送的。假设现在有两个窗口A和B,其中A窗口向B窗口发送数据,B窗口接收到数据并返回一个确认报文。
在这里插入图片描述
其中用红色框框出来的字节数就是滑动窗口的大小,滑动窗口的大小取决于B窗口缓存区的大小。滑动窗口越大,说明效率越高。就像拿杯子去接水一样,杯子越大,水管的水流量就越粗。所以说滑动窗口实质上是用来负责流量控制的。
前面的1234四个字节是已经发送且对方成功接受的数据,第五个字节是B期望的下一个字节。在滑动窗口中的字节都可以发送出去,但是要保留一会儿等待接受区去接受,如果数据在路上丢失的话,还可以进行超时传送。14、15、16三个字节是不可发送的,只有当B窗口接受了前面的字节后,滑动窗口会往后走,此时才可以发送。

假设B窗口在接受时接收到的字节顺序分别为1、2、3、4、6、7,这途中5号消息可能丢失了,那么它给A窗口返回的确认报文仍然是5号消息而不是7号。因为B窗口(接受区窗口)只能对按序收到的最高序号给出确认。

如果A窗口中的消息都发送完,B窗口也都接受完。但是此时的确认报文却丢失了,结果A在一定时间内没有收到B发送过来的确认报文,就会再次给B窗口发送一次数据,知道收到B的确认报文为止。

注意点:
1.滑动窗口虽然可以根据接受区的缓存大小来调整。但是它们并不总是一样大的。因为网络传输需要经历一定的时间,还要考虑当前网络的拥堵状态。
2.对没有按序到达的数据,TCP并没有明确规定如何处理。一般情况下会把乱序的数据先保留等到所缺的字节到达后,在按序交给上层应用。
3.接受方必须要有累积确认的功能来减少传输开销。但是也不应过分推迟以免不必要的重传。

超时重传时,如何确定接收方接收到的是先发送的数据还是后来重传的数据?
典型的做法:取新的重传时间为旧的重传时间的两倍。

选择确认SACK
当接受区在接受数据时接收到的时乱序的数据,就会形成一个个的字节块。如果这些字节都在接受窗口之内,就会将这些数据保留下来,同时准确的告诉发送方使发送方不要再重复的发送这些数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值