`ether_header`和`ethhdr`有什么区别?

时间:2018-06-01 23:18:32

标签: networking network-programming ip ethernet

我目前正在尝试解析来自原始缓冲区的数据包。我发现以太网标头似乎有两种结构:ether_headerethhdr。我有点困惑他们之间的区别和关系是什么?我能用它们互换吗?

我做了一个快速搜索:

This post建议IP头存在两个相同的实现。这是以太网(也许是TCP,UDP等)的情况吗?

This patch显示了将一种实施方式从一种实施方式转变为另一种方式的努力。我不确定这背后的动机:也许一个实施是某种方式"更好"?

谢谢!

1 个答案:

答案 0 :(得分:1)

在Linux中,ethhdr结构在uapi/linux/if_ether.h中定义它在内核中的位置uapi(用户空间API)头文件将其固化为默认的稳定定义。

多年来,许多地方都定义了ether_header结构。随着代码迁移到使用ethhdr(正如您在链接到的补丁中观察到的那样),定义的数量和对这些定义的引用一直在下降。

通过查看内核源交叉引用器输出随着时间的推移,可以轻松查看此进展。以下列表描述了一些内核版本随时间的ether_header定义/引用的数量:

为了进行比较,以下是查找ethhdr时的结果: