当前位置:网站首页>TCP详解(二)
TCP详解(二)
2022-07-31 02:58:00 【爪哇菜鸡@】
5.流量控制
对滑动窗口的进一步补充。
本质上就是在控制滑动窗口的大小。
既然如此,窗口大小取多少合适?
窗口越大,为了保证可靠性,资源开销的就越多。
窗口太小,速度也不能得到保证。
此处流量控制是基于接收方的处理能力来限制窗口大小的。
TCP这个传输数据的过程,其实就类似一个 生产消费者模型。
主机A发弄得数据就到达了主机B的接收缓冲区。此时主机A就是生产者,主机B的应用程序,通过socket api 来读取数据,被socket api 读取到的数据就从缓冲区中删掉了,应用程序就是消费者,接收缓冲区就是交易场所(类似于一个队列)。
所说的窗口大小,其实是指发送方(主机A)批量发送多少数据。比如,主机A发送的数据很快,窗口很大,如果主机B的应用程序读取的速度很慢,随着时间的推移,接收缓冲区逐渐就满了,如果不加任何限制,主机A还是按照一样的速度进行发送数据,此时新来的数据就没有地方保存了,就别内核丢掉了…
流量控制这个机制,就是为了解决这个问题的!!!
根据接收方的处理能力(接收缓冲区剩余空间大小),来动态决定发送方的发送速率(控制窗口大小)。
分析图中案例:
接收缓冲区的大小是4000
1 - 1000 数据叨叨的时候,缓冲区这里面用了1000,还剩3000,返回的ACK中就会把3000这个信息告诉发送方。
发送方再次发送数据的时候,就按照3000作为窗口大小来进行发送。
过了重发超时的时间以后若还没有收到窗口更新的通知,发送端会发送个窗口探测的包。
窗口大小(接收缓冲区的剩余空间)是如何返回给发送方的?
通过报头中的16位窗口大小
如果窗口大小为0了.(接收端这边满了)然后发送方就停了嘛?
此时发送方是不再继续发数据了.但是为了能够查询当前接收方的窗口大小,每隔一段时间,还会再来触发一个窗口探测包,通过这个包(不传输具体的业务数据)触发ack,在这个ack中就能够知道当前窗口的大小了。
问题:16位数字最大表示65535,那么tcp窗口最大就是65535字节吗(64K)?
实际上,TCP首部40字节选项中还包含了一个窗口扩大因子M,实际窗口大小是窗口字段的值左移M位(左移一位就是 * 2)。
6.拥塞控制
站在另一个角度来限制发送方的窗口大小。
在一个宏观的角度看看待这个问题,把整个中间的链路都看成一个整体,只看结果!!
逐渐尝试的过程,先试用一个比较小的窗口来传输数据,看看是否都丢包,如果不丢包,说明网络比较通畅,若是丢包,说明网络发生拥堵。
当网络通畅的时候,逐渐加大发送速率,出现丢包的时候,立即降低发送频率。
通过这样的方式,就可以逐渐实验出一个比较合适的窗口大小。
真实的发送窗口的大小 是取流量口至的窗口和拥塞控制窗口两者之间的最小值。
慢启动:刚开始发送的时候,给一个较小的窗口。
这个图描述了拥塞控制中,窗口大小的变化规则。
指数增长速度是非常快的,刚开始启动的时候,窗口比较小,通过指数增长,就能在很少的轮次中,把窗口的大小顶上去。
如果达到阈值,就从指数增长变成线性增长。
7.延时应答
为了提高效率,也是从窗口大小入手。
让窗口大小,在保证可靠的基础之上,能尽量在大一点。
对于流量控制来说,窗口大小就是接收缓冲区的剩余空间大小。会随着时间的推移越来越多。
就可以得出,如果接收方立刻返回ACK,此时返回的窗口大小,就是缓冲区剩余的空间。
但是如果接收方稍等一会儿,再返回ACK,稍等的这个时间里,应用程序就可能会消费一些缓冲区中的数据,此时缓冲区剩余的空间就变大了。
图示:
延时应答并不是所有的包都进行延时应答
一方面是数量限制:每隔N个包就应答一次
一方面是时间限制:超过最大延迟时间就应答一次
8.捎带应答
在延时应答的基础之上
很多的客户端/服务器的通信模式,都是这种“一问一答”的方式。
图示:
由于有了延时应答,返回的ACK不是立即返回,而是等一会儿,正好在这个等一会儿的期间,服务器要返回业务上的response了,此时就可以把这个ACK和response合二为一,把这两个包变成一个包。
牢记!网络通信涉及大量的封装和分用,针对每个包都要进行封装,收到之后在进行解析
图示:
针对四次握手来说,确实是可能四次变成三次的。
捎带应答,是可能把中间的ACK和FIN给合并成一个。于是四次挥手就变成了三次挥手。
四次挥手啥时候能变三次?
不能确定的!!!捎带应答本身就是一个"概率性的机制"
当前ACK延时的时间正好要比接下来发业务数据的时间要更长一些。
例如,服务器收到请求到返回响应,这个过程消耗时间50ms,但是延时应答假设最多等20ms,这个情况就无法触发捎带应答了.但是延时应答假设是最多等60ms,第50ms 的时候,此时触发了响应,ACK就可以和这个响应一起过去了,也就触发了延时应答。
边栏推荐
- return in try-catch
- CorelDRAW2022精简亚太新增功能详细介绍
- Intel's software and hardware optimization empowers Neusoft to accelerate the arrival of the era of smart medical care
- 10 权限介绍
- 工程(五)——小目标检测tph-yolov5
- print task sorting js od huawei
- Uninstallation of mysql5.7.37 under CentOS7 [perfect solution]
- SQL注入 Less46(order by后的注入+rand()布尔盲注)
- 关于 mysql8.0数据库中主键位id,使用replace插入id为0时,实际id插入后自增导致数据重复插入 的解决方法
- YOLOV5学习笔记(二)——环境安装+运行+训练
猜你喜欢
10 权限介绍
字体压缩神器font-spider的使用
【C语言】求两个整数m和n的最大公因数和最小公倍数之和一般方法,经典解法
Live Preview | KDD2022 Doctoral Dissertation Award Champion and Runner-up Dialogue
StringJoiner in detail
The simulation application of common mode inductance is here, full of dry goods for everyone
6、显示评论和回复
VS QT——ui不显示新添加成员(控件)||代码无提示
自动化办公案例:如何自动生成期数据?
6. Display comments and replies
随机推荐
JS function this context runtime syntax parentheses array IIFE timer delay self.backup context call apply
StringJoiner in detail
SQL 面试用题(重点)
CentOS7下mysql5.7.37的安装【完美方案】
15. Website Statistics
什么是系统?
开题报告之论文框架
【C语言】三子棋(经典解法+一览图)
CorelDRAW2022 streamlined Asia Pacific new features in detail
6. Display comments and replies
What is distributed and clustered?What is the difference?
MPPT solar charge controller data collection - through the gateway acquisition capacity battery SOC battery voltage, wi-fi
Mathematics to solve the problem - circular linked list
11、Redis实现关注、取消关注以及关注和粉丝列表
Moxa NPort 设备缺陷可能使关键基础设施遭受破坏性攻击
SQL注入 Less47(报错注入) 和Less49(时间盲注)
C primer plus学习笔记 —— 8、结构体
5. SAP ABAP OData 服务如何支持 $filter (过滤)操作
The application of AI in the whole process of medical imaging equipment
拒绝加班,程序员开发的效率工具集