叹为观止!GitHub标星过万,腾讯技术官发布的神仙文档:图解网络

获取相关视频资料:

        (关注“Java高级架构师”,回复“2110”获得:网盘密码

前言

滑动窗口的定义: 1.“窗口”对应的是一段可以被发送的字节序列,其连续的范围称为窗口;2.“滑动”则是指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序“滑动”。
滑动窗口的作用: 是一种流量控制方法,该协议允许发送方在停止等待确认前可以连续发送发个分组。由于发送方不必每发送一个分组就停下来等待确认,因此该协议可以加速数据的传输。

在了解具体的例子之前我们先来了解几个重要的前提

基本概念
-1 TCP协议的两端分别是发送者A和接受者B,由于是全双工通讯的,因此A and B应该同时维护着一个独立的发送缓冲区和接受缓冲区,由于对等性,我们以A发送B接受的情况作为例子;
-2 发送窗口是发送缓存的一部分,是可以被TCP协议发送的那部分,其实应用层需要发送的所有数据都被放进了发送者的发送缓冲区了;当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。
-3 发送窗口相关的四个概念:已发送并收到确认的数据(不再发送窗口和发送缓冲区之内);已发送但未收到确认的数据(位于发送窗口之中);允许发送但尚未发送的数据以及发送窗口外发送缓冲区内暂时不需要发送的数据。
-4 每次成功发送数据之后,发送窗口就会在发送缓冲区中按顺序移动,将新的数据包含到窗口中准备发送。

图片

 

 

 

图片

 

窗口移动

1.称 窗口左边沿 向右边沿 靠近为 窗口合拢 这种现象发生在数据被发送和确认时 2.当 窗口右边沿 向 右移动时将允许发送更多的数据,我们称之为窗口张开 这种现象发生在另一端的接受进程读取已经确认的数据并释放了TCP的接收缓存时 3.当 右边沿 向左移动时,我们称之为窗口收缩 Host Requirements RFC强烈建议不要使用这种方式。但TCP必须能够在某一端产生这种情况时进行处理。

图片

如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据。

滑动窗口的几个特点
1.发送方不必发送一个全窗口大小的数据。
2.来自接收方的一个报文段确认数据并把窗口向右滑动,这是因为窗口的大小是相对于确认序号的。
3.正如从报文段7到8中的变化那样,窗口的大小可以减小,但是窗口的右边沿却不能向左移动。
4.接收方在发送一个ACK前不必等待窗口被填满。在前面可以得知许多实现每收到两个报文段就会发送一个ACK。

TCP建立连接的初始,B会告诉A自己的接受窗口的大小,比如‘20’:字节31 - 50为发送窗口。

图片

 

A发送11个字节后,发送窗口的位置不变,B接收到乱序的数据分组。

图片

只有当A成功发送了数据,并且需要得到B的确认(ACK)之后,才会移动滑动窗口离开已发送的数据;同时B则确认连续的数据分组(只有这样窗口才能移动),对于乱序的分组则先接受下来,避免网络重复传递。

图片

只有当接收方 新的ACK对于发送窗口中后续字节的确认时,窗口滑动,滑动原理如下:窗口的左边沿可以滑动到36的位置。

图片


二 流量控制

流量控制的主要有两个重要的点要掌握。一 是TCP利用滑动窗口来实现流量控制机制;二 是考虑流量控制中的传输效率。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值