TCP流量控制

153 阅读2分钟

目的

通过动态窗口实现流量控制,防止接收方被发送方压垮

过程

TCP通过动态调整窗口大小实现流量控制:

  1. 接收方通过win字段通告可用缓冲区空间(rwnd)
  2. 发送方根据win值调整发送窗口
  3. 接收方处理数据后更新rwnd并通告新窗口

这样接收方就能通过“窗口"机制精确调控发送方的传输速率

相关概念

缓冲区:接收方操作系统的内存区域,它的总大小固定 ->数据的中转站

rwnd(接收窗口) :缓冲区的实时空闲大小,会基于接收缓冲区空闲空间动态更新(rwnd = 总缓冲区大小 - 已占用空间)-> 中转站的剩余空间

win:接收方TCP首部中的关键字段,用来告诉发送方接收方现在所能接受的数据大小(避免发送方发送超过win大小的数据) -> 缓冲区的剩余空间通告

图示过程

序列号说明:序列号在TCP连接建立时通过SYN报文确定初始值序列号(ISN),后续按字节顺序连续递增。(发送窗口的序列号范围是预分配的连续区间,而非临时生成)

图中序列号范围对应字节位置: 例如[101-110]表示序列号101、102、...、110共10字节"。

序列号递增规则:每字节数据对应1个序列号,按传输顺序严格递增

假设现在是服务器发数据给客户端,初始参数:

  • 接收方(客户端)缓冲区总大小:10字节
  • 接收窗口一开始的剩余空间:rwnd = 10
  • 服务器初始序列号:ISN_S = 100

image.png

image.png

注意事项

  • 实际发送窗口大小还受发送方拥塞窗口(cwnd)影响,此处简化只考虑rwnd。

  • 真实TCP中,接收方可能对每个数据段发送ACK,就是它会及时告诉发送方剩余的空间以及是否接收到发送方的某一段数据,但图中简化为一个累积ACK。