通过无线连接接收原始以太网数据包时,计算以太网校验和的位置,以及处理错误的位置?
无线堆栈是否处理此问题,还是在上层处理?
答案 0 :(得分:1)
通常,以太网级FCS(帧校验序列)在硬件MAC(媒体访问控制器)中处理。 请注意,我们在这里讨论的是CRC而不仅仅是校验和(以太网帧级别没有“校验和”)。
如果检测到FCS不匹配,则很可能在HW MAC级别丢弃它:然后将更新统计计数器。
换句话说,使用不可用的框架“打扰”软件堆栈是没有用的。
答案 1 :(得分:1)
校验和可以在various places中执行。 最近以太网卡从网络堆栈中卸载校验和。我不得不禁用硬件校验和,以使网络取证更容易。这应该是显而易见的,因为如果没有此功能,硬件将始终以静默方式丢弃数据包。
答案 2 :(得分:0)
正如其他海报所说,通常由NIC检查FCS 本身或司机。但是,在你读取原始的情况下 以太网帧我觉得它完全取决于驱动程序。对于 例如,可以在“监视器”或“promiscous”中设置的WiFi NIC 你通常不希望他们丢弃带有坏FCS的帧的模式 这可能表示您正在寻找的错误。
一个数据点:英特尔4965AGN Linux驱动程序总共设置了FCS字段 在监控模式下捕获的数据包为0。如果您运行Wireshark,您可以 看到它计算出预期的FCS并抱怨0字段 是无效的。这意味着它丢弃了FCS不良的帧 在MAC中,或者如果这些也被传递,很遗憾不清楚。
所以,如果原来的问题是“我是否必须亲自检查FCS 捕获原始数据包时“4965AGN案例中的答案是 “你不能”,如果从中得到真正的FCS,可能是“是” NIC。
答案 3 :(得分:0)
大多数网络硬件都允许您在硬件中设置一个“存储错误数据包”的选项。这允许您查看以太网CRC失败的数据包。如果将错误的以太网帧传递给堆栈,则很可能由于上层校验和错误而被拒绝。堆栈不检查以太网CRC;这留给了NIC,软件中的CRC计算非常耗时。
请记住,堆叠网络协议通常会计算堆栈中各个点的校验和。 TCP通常会计算网络层的CRC,IP层的IP头校验和以及TCP层的TCP校验和。应用程序还可以验证数据的完整性。