正如 this question 所暗示的那样,似乎校验和是由以太网硬件计算和验证的,因此在使用 AF_PACKET 套接字发送帧时,它似乎不太可能必须由软件生成,如 here 所示。和 here 。另外,我不认为它可以从套接字或通过任何简单的方式接收,因为即使 Wireshark 也不显示它。
那么,有人可以证实这一点吗?我真的需要按照最后两个链接所示自己发送校验和吗?以太网适配器会自动创建和检查校验和吗?
最佳答案
不,您不需要包含 CRC。
在Linux中使用socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL) )
使用数据包套接字时,发送时必须提供第2层 header 。这是由 netinet/if_ether.h
中的 struct ether_header
定义的,包括目标主机、源主机和类型。不包括帧检查序列,也不包括前导码、帧开始定界符或尾部。这些是由硬件添加的。
关于linux - 以太网校验和是否通过 AF_PACKET 公开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15651651/