tcp - 这 2 个 TCP 数据包捕获有什么区别?一个不行
问题描述
场景 1:包含“PV_MOTION_ON”的 TCP 字符串由 PacketSender 等简单实用程序发送到用于解析 TCP 字符串的自动化程序。它完美地工作。
场景 2:从 IP 摄像机发送完全相同的 TCP 字符串。TCP 解析实用程序只看到正在建立的连接,然后在没有负载数据的情况下丢弃。
我还不够好,无法看到功能上的差异。关于发生了什么的任何想法?
注意:192.168.2.150 是两种情况下的接收数据包
解决方案
我不知道这个“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 如何工作的错误假设。