TCP流量控制问题
TCP流量控制问题
笔记整理自
https://www.bilibili.com/video/BV1zb4y1o7f9?spm_id_from=333.999.0.0
-
A进程和B进程通过TCP连接进行双向通信,取A->B这个方向介绍流量控制
-
发送进程:A进程―—-->接收进程:B
-
B的TCP接收端缓冲区:TCP A是输入,B进程是输入
- A往缓冲区写;B从缓冲区中读
-
B接收端缓冲区匹配这两者的速度不一致性
-
如果A发送的速度过快,超过B从缓冲区读取的速度
-
B的接收缓冲区溢出,A的报文就会被抛弃掉
-
浪费网络带宽等后果
-
目的:需要流量控制机制,按照B的处理和读取的速度来协调A的发送速度,端到端的问题
-
以至于A发送过来的报文到了B端,有空闲空间可以缓冲下来
- 接收方通过反馈方法告诉发送方其空闲缓冲区尺寸
- 接收方在其向发送方的TCP段头部的rwnd字段“通告”其空闲buffer大小
- RcvBuffer大小通过segment选项设置(典型默认大小为4096字节)
- 很多操作系统自动调整RcvBuffer
- 发送方限制未确认(“in-flight”)字节的个数≤接收方发送过来的rwnd值
- 保证接收方不会被淹没
TCP空闲缓冲区大小计算
TCP段携带的空闲缓冲区大小
TCP捎带技术
TCP 探测情况1:B方确认丢失
TCP 探测情况2:B方没数据给A
TCP流量控制总结
- 目的:防止发送方发送的太快超过了接收方B的处理能力
- 以至于数据到了接收方被抛弃
- 方法:反馈,接收方把空闲缓冲区大小告诉发送方
- 效率提升:捎带
- 捎带带来问题的解决:A方定期发送1B数据探测,让B把最新的空闲缓冲区大小返回给A
- 流量控制窗口和拥塞窗口联动
- 发送方发送未确认的字节数量=min