虽然我知道很多数据包处理(CRC 计算、数据包分段处理等)可以卸载到 NIC,但是每个数据包是否仍然会导致 CPU 中断?如果网卡处于混杂模式,有什么区别吗?
答案1
通常情况下,NIC 仅在需要将接收到的数据包发送到系统时才会中断 CPU。在非混杂模式下,这仅适用于寻址到其 MAC 地址、广播地址 ff:ff:ff:ff:ff:ff 或其已订阅的多播地址的数据包。它还在将数据包发送到 CPU 之前进行验证:正常的以太网 CRC 检查以及 IP/TCP/UDP 校验和(如果 NIC 具有该功能并且驱动程序已启用此卸载)。
有些网卡的组播订阅地址数量有限;如果超过此值,它将向 CPU 发送所有多播数据包,并且操作系统必须丢弃它不关心的数据包。