You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Layer 2原始套接字时FCS由内核生成还是需要自行生成追加?

二层原始套接字FCS处理规则

FCS生成责任方

默认情况下,基于Linux系统的PF_PACKET类型二层原始套接字开发时,帧校验序列(FCS)由内核或网卡硬件自动生成并追加到数据包末尾,不需要开发者手动计算填充。
只有当你主动为套接字设置SO_NOFCS选项(需内核版本支持、同时持有CAP_NET_RAW权限)时,才需要自行计算FCS并填充到帧尾部,此时内核和网卡会跳过FCS生成逻辑。

你提出的场景假设不成立,原因如下:

  • 你构造的16字节以太网帧不符合标准要求:以太网帧(不含前导码、帧起始定界符)的最小长度为64字节,其中「头部+Payload」部分最小为60字节,剩余4字节为FCS。你的16字节数据会被内核/网卡判定为过短帧,会自动在尾部补零填充到60字节后,再额外追加4字节自动生成的FCS,最终发出的帧总长度为64字节。
  • 你预留的末尾4字节零值会被识别为Payload的一部分,不会被内核当作FCS空位覆盖:你传入的所有16字节内容都会被当作「帧头+Payload」处理,自动生成的FCS会追加在这16字节的末尾,不会覆盖你预留的位置。

额外补充:收包场景下默认网卡会自动校验并剥离FCS,原始套接字收到的数据包不包含尾部4字节FCS,如需获取原始FCS需要单独修改网卡硬件配置开启FCS上报功能。

内容的提问来源于stack exchange,提问作者alexSimons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:54:05