是什么导致丢弃不是针对它的第 2 层帧?

网络工程 MAC地址 界面 包分析
2021-07-07 19:57:10

我的理解是,如果网络接口卡 (NIC) 收到第 1 层数据包,它将从中提取第 2 层帧,检查其目标 MAC 地址,如果它没有寻址到它(或者它不是广播或多播),它会丢弃它。

我的理解正确吗?如果有,网卡内部的哪个组件负责这个功能?有没有一种方法可以将 NIC 配置为丢弃这些帧并通过它们(例如,用于对 Wireshark 的进一步分析)?

3个回答

这的细节高度依赖于硬件,但您的描述是正确的:多年来,通常是网络接口卡丢弃与 MAC 地址不匹配的帧。这是对过去的改进,在过去,每一帧都会中断必须执行此任务的 CPU。

在实践中,每个网卡也可以进入“混杂模式”,它会接受每一帧。如何做到这一点取决于硬件,因此也取决于操作系统。如果您正在以 Wireshark 的方式编写程序来执行此操作,您会发现 pcap 库有很多帮助,但是在 Linux 上可以直接在混杂模式下使用原始套接字。所有这些都将成为https://stackoverflow.com/questions/tagged/pcaphttps://stackoverflow.com/questions/tagged/promiscuous-mode的主题

此外,大多数 NIC 硬件将接受其他帧:广播、用于唤醒 CPU 的“魔法数据包”等,并丢弃那些具有错误帧检查序列的帧。详细信息特定于每种 NIC,但作为示例,以下是最简单的以太网接口芯片之一 Microchip 的 ENC28J60 的功能,它描述了其过滤器如下:

8.0 接收过滤器 为了最大限度地减少主机控制器的处理要求,ENC28J60 集成了几个不同的接收过滤器,可以自动拒绝不需要的数据包。实现了六种不同类型的包过滤器:单播、模式匹配、魔术包、哈希表、多播、广播。(来自数据表。)

我只是将其称为“接收过滤单元”或“接收过滤过程”。

有没有办法将 NIC 配置为不丢弃这些帧并通过它们(例如,在 Wireshark 上进行进一步分析)?

大多数 NIC 可以置于“混杂”模式,这将使它们接受所有帧,而不仅仅是寻址到它的帧。详细信息取决于 NIC 驱动程序和操作系统。

我的理解正确吗?

是的。

如果有,网卡内部的哪个组件负责这个功能?

不确定它是否具有特定名称。

有没有一种方法可以将 NIC 配置为不丢弃这些帧并通过它们(例如,用于对 Wireshark 的进一步分析)?

是的,这被称为“混杂模式”,数据包捕获工具通常会默认启用它。

但是请注意,现代以太网使用交换机而不是集线器。因此,在大多数情况下,未寻址到您的计算机的帧根本不会到达您计算机的 NIC。