TCP滑动窗口原理

TCP滑动窗口是一种传输层的流控手段,通过接收方告知发送方窗口大小来控制发送速率。文中介绍了窗口的分类、ACK的作用以及窗口大小的计算方式。窗口字段是一个16bit的字段,最大容量为65535。当接收方发送ACK,发送方窗口会移动。接收方缓存数据分为已接受、准备接受和不准备接受三类,而发送方缓存数据则分为已发送并ACK、已发送未ACK、未发送但允许发送和未发送且不允许发送四类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP 滑动窗口
滑动窗口分为接受窗口发送窗口
滑动窗口协议是传输层进行流控的一种措施,接收方告诉发送方自己窗口的大小,从而控制发送方的发送速度,

ACK是收到数据后,接收方给发送方的一个确认ACK,它包含了两个重要的信息;

  1. 期望接受到的下一个字节的序号n,代表接收方已经接受到n-1字节的数据,如果之后发送方发送的不是序号为n的字节数据,接收方不会返回后续的序号的。
  2. 当前窗口的大小m,通过这两个数据,发送方就能计算出还可以发送多少数据给对方,假设当前发送第X字节:
    x-n。窗口中已经有的
    m-(x-n) 还能发送的字节数
    因此:
y = m - ( x - n )

b059b0dfae28d03170b05c04abd5575b.png

在一个TCP的段中,可以看到如下信息
d3e4a287274e1153ef3fe7d7910563ed.png
window字段就是窗口字段,是一个16bit的字段,代表窗口字节容量,也就是说窗口最大数据为2^16 - 1 = 65535

滑动窗口原理
在发送方,所有发送缓存内数据可以分为以下4种:

  1. 已经发送并且得到对面ACK的(send and acknowledged)
  2. 已经发送并且未得到对面ACK的 (send but not acknowledged)
  3. 未发送但是得到对面允许的(not send recipient ready to receive)
  4. 为发送并且对方不允许的 (not sent recipient not ready to receive
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值