如果机器在收到 FIN 后将 TCP 窗口大小设置为零可以吗?
我从连接结束时的 wireshark 得到了以下数据包转储,我只是想知道这是否是结束连接的有效方法,或者是否有问题。
192.168.1.1 192.168.1.6 TCP 3450 > 102 [FIN, ACK] Seq=48 Ack=50 Win=65486 Len=0
192.168.1.6 192.168.1.1 TCP [TCP ZeroWindow] 102 > 3450 [ACK] Seq=50 Ack=49 Win=0 Len=0
192.168.1.6 192.168.1.1 TCP 102 > 3450 [FIN, PSH, ACK] Seq=50 Ack=49 Win=0 Len=0
192.168.1.1 192.168.1.6 TCP 3450 > 102 [ACK] Seq=49 Ack=51 Win=65486 Len=0
顺便说一句:.1 是普通的 Windows PC,而 .6 是西门子 PLC。 (S7-400)
经过一些调查,它看起来像是一种奇怪但有效的结束 TCP 对话的方式。
最佳答案
我认为在 FIN ACK
之后发送一个零窗口没有任何问题...大概 192.168.1.6
发送了一个 FIN
到 192.168.1.1
,所以他们现在正在关闭连接。
192.168.1.6 192.168.1.1 TCP [TCP ZeroWindow] 102 > 3450 [ACK] Seq=50 Ack=49 Win=0 Len=0
但是在 ACK
之后立即设置一个 PSH
标志并且不发送任何数据 (Len=0),这对我来说看起来很奇怪(但在技术上不是错误的)。 .
192.168.1.6 192.168.1.1 TCP 102 > 3450 [FIN, PSH, ACK] Seq=50 Ack=49 Win=0 Len=0
关于networking - FIN 数据包后的 TCP Windowsize 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5804033/