为什么我收到缩小窗口的tcp段?

为什么我收到缩小窗口的tcp段?,tcp,Tcp,我在笔记本电脑上用Wireshark捕捉数据包,发现服务器发送的数据包缩小了接收窗口。这是从我的ubuntu18.04到“connectivity check.ubuntu.com”的连接 我读过rfc793和TCPIP插图卷1,它们都说“强烈反对缩小窗口” 这是Wireshark的输出。我在Wireshark中禁用HTTP解析以防止分心 4198 0.026547255 2019-04-03 12:27:48.870761715 192.168.3.141 35.2

我在笔记本电脑上用Wireshark捕捉数据包,发现服务器发送的数据包缩小了接收窗口。这是从我的ubuntu18.04到“connectivity check.ubuntu.com”的连接

我读过rfc793和TCPIP插图卷1,它们都说“强烈反对缩小窗口”

这是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不,窗口缩放不是这样工作的。一旦同意缩放,所有窗口都将缩放。一个问题的猜测就足够了。谢谢回答:)。但我并不混淆这两个概念。在我展示的捕获结果中,窗口大小减少了“2048”,但服务器只接收到“87”字节的数据。所以右边缘确实向左移动了。哦…我明白了。。我误解了这个问题。看起来你是对的,右边缘向左移动了。