4

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

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

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

你能请教吗?

4

2 回答 2

5

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

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

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

于 2012-12-06T06:44:13.190 回答
1

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

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

于 2012-12-06T11:05:27.857 回答