【问题标题】:TCP Windowsize 0 after FIN packetFIN 数据包后的 TCP 窗口大小 0
【发布时间】:2011-08-13 19:49:36
【问题描述】:

如果机器在收到 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 对话的方法。

【问题讨论】:

    标签: networking tcp plc


    【解决方案1】:

    我认为在FIN ACK 之后发送零窗口没有任何问题...大概是192.168.1.6192.168.1.1 发送了FIN,所以他们现在正在关闭连接。

    192.168.1.6 192.168.1.1 TCP [TCP ZeroWindow] 102 > 3450 [ACK] Seq=50 Ack=49 Win=0 Len=0

    但立即设置PSH 标志并在ACK 之后立即不发送任何数据(Len=0),对我来说看起来很奇怪(但在技术上没有错误)...

    192.168.1.6 192.168.1.1 TCP 102 > 3450 [FIN, PSH, ACK] Seq=50 Ack=49 Win=0 Len=0

    【讨论】:

    • @Mike,我认为您对 PSH 标志的含义有误。例如,请参阅此处daemon.org/tcp.html
    • @Nikolai,你具体说什么是错的?您的链接与我所说的 AFAICT 一致。
    • 192.168.1.1 发送第一个 FIN(第一行)。 192.168.1.6 然后用一个 ACK​​ 数据包进行响应,紧接着是一个设置了 FIN 的第二个 ACK​​。
    • 推送标志是为了让接收 TCP/IP 堆栈“尽快将数据推送到接收应用程序”——而不是让它通过网络将数据发送回发送者。
    • @grimming,这不是 TCP 的工作方式。顺序是一侧以FIN 启动,然后另一侧FIN ACK 确认FIN
    猜你喜欢
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 2013-09-19
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多