networking - FIN 数据包后的 TCP Windowsize 0

标签 networking tcp plc

如果机器在收到 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 发送了一个 FIN192.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/

相关文章:

networking - 不同VM的Docker主机之间的容器网络

c# - BMS通过C/C++/C#读写

python - 自定义 UML 生成器

r - 对两列以上使用 igraph

networking - 我如何才能_真正地_学习低级网络编程?

http - 无论协议(protocol)如何,服务器是否有可能知道 TCP 流具有 "finished"?

c - 对于带有负载的数据包,TCP 校验和不正确

c# - TCP 流中丢失数据

c# - 通过C#应用程序访问西门子S7-1200

networking - 如何克服根域CNAME限制?