【发布时间】:2018-07-20 16:10:19
【问题描述】:
我正在使用连接在 10G 以太网链路上的专用硬件。我对传入数据报的处理有一些疑问,如下:
- 如果 NIC 发现不正确的链路级以太网 CRC,会发生什么情况?一些搜索显示错误可能无法可靠地报告(例如here)。我可以期望从更新的内核(2.6 - 3.10)中获得更好的统计数据吗?
- 在决定是否将数据包返回到
recv之前,内核实际检查了什么?我猜对于 IPv4,IPv4 标头校验和必须是正确的,但是可选的 UDP 标头校验和呢? -
recv能否为 UDP/SOCK_DGRAM返回 0? - 对于非阻塞
SOCK_DGRAM套接字,当数据可用时recv是否总是返回整个数据包?我想它必须,但从文档中并不明显。
谢谢。
【问题讨论】:
-
现代 EMAC 能够在硬件中执行 IP、TCP 和 UDP 校验和(生成和)验证,并将其从内核中卸载。当检测到任何校验和错误时,典型的 EMAC 可以配置为丢弃整个帧。 NETIF_F_RXCSUM 可用于启用此硬件功能。 BTW 内核版本 2.6 - 3.10 不再被视为“最近的”。
标签: sockets linux-kernel udp linux-device-driver