这两个 TCP 数据包捕获有什么区别?一个不行

What is the difference between these 2 TCP packet captures? One doesn't work

场景 1:包含 "PV_MOTION_ON" 的 TCP 字符串由一个简单的实用程序(如 PacketSender)发送到用于解析 TCP 字符串的自动化程序。它完美运行。

Scenario 1 WireShark PCAP File

场景 2:从网络摄像机发送完全相同的 TCP 字符串。 TCP 解析实用程序只看到正在建立的连接,然后在没有有效负载数据的情况下丢弃。

Scenario 2 WireShark PCAP File

我看不出功能上的差异。对发生的事情有什么想法吗??

注意:192.168.2.150 是两种情况下都在接收数据包

我不知道这个 "TCP parsing utility" 是什么,但我认为它在普通 TCP 堆栈上不起作用,而是有一些自定义堆栈(即一些具有最小堆栈的嵌入式系统)或尝试捕获流量并手动处理它 - 但错误。

这两个 pcap 的区别在于 PacketSender 首先进行 TCP 握手,然后才发送数据,而 Axis 发送的数据已经在握手的最后一个数据包中:

    PacketSender            Axis

    > SYN                   > SYN
    < SYN+ACK               < SYN+ACK
    > ACK                   > ACK + "PV_MOTION_ON"
    > "PV_MOTION_ON"

Axis 的行为完全符合 TCP。这有点不寻常,因为典型的套接字编程技术不能像 Axis 那样轻松地发送数据包。问题仍然是 "TCP parsing utility" 内部关于 TCP 工作原理的错误假设。