尝试发送带有数据的 TCP SYN 数据包和带有数据的 RST,但原始数据字段在传输过程中消失。为什么?

Attempting to send TCP SYN packet with data and RST with data, but raw data field disappears in transit. Why?

我正在尝试制作一个原始 TCP 数据包,以在 linux 客户端和服务器上的原始套接字中通过以太币发送。 TCP 数据包的特殊部分是我试图使用 TCP SYN 数据包和 RST 数据包的原始数据字段来回发送数据(用于关于 TCP 协议未使用部分的概念证明)。

我在服务器上禁用了来自我的 iptables 的 RST 数据包。

简而言之,这是我目前的情况:

  1. 客户端发送 SYN,数据发送到服务器
  2. 服务器收到一个 SYN 数据包没有数据
  3. 服务器响应一个包含数据的 RST 数据包
  4. 客户端收到一个 RST 数据包没有数据

但是,使用同一个套接字,我可以成功地做到这一点:

  1. 没有数据发送到服务器的SYN
  2. 服务器收到一个SYN包
  3. 服务器用带有数据的 SYN ACK 数据包进行响应
  4. 客户端收到一个没有数据的SYN ACK数据包
  5. 客户端收到带有数据的 PSH ACK 数据包

有人可以向我解释为什么我发送的数据包似乎没有像我发送的那样到达服务器吗?

为什么我在成功尝试时收到两个数据包(一个带有 SYN ACK,一个带有 PSH ACK)?

SYN 和 RST 数据包似乎丢失了数据,但 SYN ACK 数据包不会。这是防火墙问题吗?

如果是这样,我如何调试拦截我的数据包的内容?

谢谢!

原来 VMWare 虚拟适配器正在修改传输中的数据包。当我在主机操作系统上进行数据包捕获时,传输数据没有问题。