zzy*_*zzy 2 ip networking network-programming ethernet
我目前正在尝试解析原始缓冲区中的数据包。我发现以太网标头似乎有两种结构:ether_header和ethhdr. 我有点困惑他们有什么区别和关系?我可以互换使用它们吗?
我做了一个快速搜索:
这篇文章建议 IP 标头存在两个相同的实现。以太网(可能还有 TCP、UDP 等)是这种情况吗?
此补丁显示了从一种实现更改为另一种实现的努力。我不确定这背后的动机:也许一种实现在某种程度上“更好”?
谢谢!
在 Linux 中,该ethhdr结构体在uapi/linux/if_ether.h 中定义。它位于内核 uapi(用户空间 API)头文件中,将其固化为默认的稳定定义。
ether_header多年来,该结构体已在多个位置定义。随着代码迁移到使用,定义和对这些定义的引用的数量一直在下降ethhdr(正如您在链接到的补丁中所观察到的)。
查看这种进展的一种简单方法是查看内核源交叉引用随时间的输出。以下列表描述ether_header了一些内核版本随时间推移的定义/引用数量:
为了比较,这里是查找时的结果ethhdr: