首页 > 解决方案 > 这 2 个 TCP 数据包捕获有什么区别?一个不行

问题描述

场景 1:包含“PV_MOTION_ON”的 TCP 字符串由 PacketSender 等简单实用程序发送到用于解析 TCP 字符串的自动化程序。它完美地工作。

在此处输入图像描述 场景 1 WireShark PCAP 文件

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

在此处输入图像描述 场景 2 WireShark PCAP 文件

我还不够好,无法看到功能上的差异。关于发生了什么的任何想法?

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

标签: tcpwiresharkpacket-capture

解决方案


我不知道这个“TCP 解析实用程序”是什么,但我认为它在普通 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 解析实用程序”中关于 TCP 如何工作的错误假设。


推荐阅读