【发布时间】:2019-04-14 04:07:31
【问题描述】:
我在笔记本电脑上使用 Wireshark 捕获数据包,发现服务器发送的数据包缩小了其接收窗口。这是从我的 ubuntu18.04 到“connectivity-check.ubuntu.com”的连接。
我阅读了 rfc793 和 TCPIP Illustrated volumn1,都说“强烈建议不要缩小窗口”。
这是 Wireshark 的输出。我在 Wireshark 中禁用 HTTP 解析以防止分心。
4198 0.026547255 2019-04-03 12:27:48.870761715 192.168.3.141 35.222.85.5 TCP 74 53846 → 80 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=3960112411 TSecr=0 WS=128
4199 0.281380222 2019-04-03 12:27:49.152141937 35.222.85.5 192.168.3.141 TCP 74 80 → 53846 [SYN, ACK] Seq=0 Ack=1 Win=28160 Len=0 MSS=1412 SACK_PERM=1 TSval=2281826280 TSecr=3960112411 WS=128
4200 0.000092140 2019-04-03 12:27:49.152234077 192.168.3.141 35.222.85.5 TCP 66 53846 → 80 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=3960112693 TSecr=2281826280
4201 0.000191823 2019-04-03 12:27:49.152425900 192.168.3.141 35.222.85.5 TCP 153 53846 → 80 [PSH, ACK] Seq=1 Ack=1 Win=29312 Len=87 TSval=3960112693 TSecr=2281826280
4202 0.306769219 2019-04-03 12:27:49.459195119 35.222.85.5 192.168.3.141 TCP 66 80 → 53846 [ACK] Seq=1 Ack=88 Win=26112 Len=0 TSval=2281826585 TSecr=3960112693
4203 0.000076022 2019-04-03 12:27:49.459271141 35.222.85.5 192.168.3.141 TCP 214 80 → 53846 [PSH, ACK] Seq=1 Ack=88 Win=26112 Len=148 TSval=2281826586 TSecr=3960112693
4204 0.000028644 2019-04-03 12:27:49.459299785 192.168.3.141 35.222.85.5 TCP 66 53846 → 80 [ACK] Seq=88 Ack=149 Win=30336 Len=0 TSval=3960113000 TSecr=2281826586
4205 0.000045328 2019-04-03 12:27:49.459345113 35.222.85.5 192.168.3.141 TCP 66 80 → 53846 [FIN, ACK] Seq=149 Ack=88 Win=26112 Len=0 TSval=2281826586 TSecr=3960112693
4206 0.000183562 2019-04-03 12:27:49.459528675 192.168.3.141 35.222.85.5 TCP 66 53846 → 80 [FIN, ACK] Seq=88 Ack=150 Win=30336 Len=0 TSval=3960113000 TSecr=2281826586
4207 0.245163856 2019-04-03 12:27:49.704692531 35.222.85.5 192.168.3.141 TCP 66 80 → 53846 [ACK] Seq=150 Ack=89 Win=26112 Len=0 TSval=2281826890 TSecr=3960113000
正如捕获的结果所示,来自服务器的第 4199 帧广告了一个大小为 28160 的窗口,但是在 4201 中接收到 87 个字节的数据后,窗口在 4202 中缩小到 26112,正好等于 2048(这是因为服务器只是换出了一个内存页?)
我想知道服务器缩小其 TCP 接收窗口的原因是什么? RFC 非常不鼓励这种行为,我认为这种行为不会在操作系统的 TCPIP 堆栈中实现。
【问题讨论】:
-
可能是rfc1323中定义的窗口缩放选项。我没有详细阅读。
-
不,这不是窗口缩放的意思。
-
好吧,我想如果在 3WHS 期间就窗口缩放达成一致,则在完成 3WHS 后窗口可能会发生变化。 syn/ack 中的第一个通告窗口可能是未缩放的,然后 4201 中的第二个窗口被缩放。不鼓励某事并不意味着不允许。 IW10 是标准的,但许多使用更高的 IW。
-
@FormerNcp 不,这不是窗口缩放的工作原理。一旦同意缩放,所有窗口都会被缩放。对于一个问题,这已经足够猜测了。
标签: tcp