【问题标题】:IP packet has trailer on the receiver side , but not on the sender sideIP数据包在接收方有尾部,但在发送方没有
【发布时间】:2012-11-24 03:54:18
【问题描述】:

我有一个简单的 C++ 代码,它构建 SYN 数据包并通过原始套接字发送它。 我为此分配了 54 个字节(以太网 14 个字节)。

发送方的Wireshark 显示54 字节,但接收方的Wireshark 显示60 字节。将 6 个字节作为尾部添加到数据包的末尾。

如果我使用 scapy 发送数据包,也会发生同样的情况。 (发送方 54,接收方 60)

你能指点一下吗?

【问题讨论】:

    标签: networking tcp ip wireshark


    【解决方案1】:

    以太网不能发送短于 64 字节的帧,其中 60 字节是有效负载,4 字节是校验和(FCS)。 FCS 被硬件剥离,软件永远不会看到。这就是为什么应用程序只能看到 60 个字节的原因。

    因此,您看到添加的额外字节由硬件添加,您无能为力。预告片应该全为零。

    Wireshark 在他们的 wiki 上有很好的信息:http://wiki.wireshark.org/Ethernet

    【讨论】:

    • 但我得到的是 60 字节而不是 64
    • 正确,4字节的FCS被硬件剥离了。
    【解决方案2】:

    正如@Gille 提到的,由于以太网的限制,额外的数据是填充的。但是 IP 有一个“长度”字段,它会告诉您数据包中有多少是真正的有效负载,有多少是填充。您的代码(以及任何适当的代码)必须能够处理填充,这就是“长度”字段的用途。

    假设您使用的是 IPv4,请看一下:http://en.wikipedia.org/wiki/IPv4#Packet_structure。我说的是“总长度”字段。

    【讨论】:

      猜你喜欢
      • 2014-01-23
      • 2016-10-17
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      相关资源
      最近更新 更多