1

我在Linux中开发网卡驱动时遇到了一些问题。众所周知,MTU 是指没有分片的 IP 数据包的 MAX 大小。发送到xmit函数的skb会增加14bytes,包括dst mac addr、src mac addr和lengh。但很奇怪的是,当我对 MTU 使用不同的值时,添加的大小是不同的,有时是 10 字节,有时是 14 字节。这取决于 MTU 的大小。例如,我使用 7828 作为 UDP payload 的大小,当 MTU 为 7700 时,xmit 函数中 skb 的大小为 7714,而当 MTU 为 7800 时,skb 的大小为 7810。有人能解释一下吗?我想IP数据包可能有一些对齐限制,但我没有发现。

4

1 回答 1

1

我从互联网上搜索了答案,发现IP帧的有效载荷字段存在对齐限制。有效负载字段必须对齐到 8 个字节。所以如果 MTU 是 7700,IP 帧的真实大小应该是 7680+20 = 7700,因为 7680 可以被 8 整除。而如果 MTU 是 7800,IP 帧的真实大小应该是 7776+20 = 7796,因为 7780不能被 8 整除,最后 4 个字节将分配给下一个 IP 片段。

于 2014-10-20T02:53:20.423 回答