Wireshark TCP 窗口大小值

Wireshark TCP 窗口大小值

我正在使用 Wireshark 调试应用程序并观察通信一侧的 TCP 窗口大小值缩小。

如果数据包的 TCP 部分显示“窗口大小值:1”,这是否意味着源的窗口大小为 1 或目标的窗口大小为 1?我知道一方的通信速度比另一方的处理速度快,我只是想确定我知道是哪一方。

1 192.168.0.1 -> 192.168.0.100,Modbus/TCP,长度:66,窗口大小值:1

2 192.168.0.100 -> 192.168.0.1,TCP,长度:60,窗口大小值:92

3 192.168.0.100 -> 192.168.0.1 TCP,长度:310,窗口大小值:92

4 192.168.0.1 -> 192.168.0.100 TCP,长度:54,窗口大小值:0

那么 192.168.0.1 的窗口大小是 0 还是报告 192.168.0.100 的窗口是 0?谢谢。

答案1

A 发往 B 的数据包的窗口大小表示 A 上有多少缓冲区空间可用于接收数据包。因此,当 B 收到窗口大小为 1 的数据包时,它会告诉 B 允许向 A 发送多少字节。

关于窗口大小,值得了解的一些细节是:

  • 窗口大小可以缩放。连接开始时的 SYN 数据包指示缩放因子。窗口大小只有 1 字节的可能性不大。更可能的解释是它按某个因子缩放,例如,如果缩放因子是 2048,则 1 表示窗口为 2048 字节。
  • 窗口大小是相对于该数据包中的 ACK 编号来衡量的。因此,如果应用程序未从接收缓冲区读取数据,则 ACK 数据包序列的 ACK 编号将增加,而窗口大小将减少,以使总和ACK number + window size * scaling factor保持(大致)恒定。

答案2

TCP 标头中的窗口大小字段表示发送方(在本例中为 192.168.0.1)愿意接收的字节数。

相关内容