Wireshark TCP 窗口大小值

T V*_*non 4 tcp wireshark

我正在使用 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?谢谢。

kas*_*erd 5

从 A 到 B 的数据包的窗口大小指示 A 上有多少缓冲区空间可用于接收数据包。所以当B收到一个窗口大小为1的数据包时,它会告诉B允许发送多少字节给A。

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

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