mmit函数中MTU与skb大小之间的关系

时间:2014-10-17 10:13:43

标签: udp mtu

我在Linux中开发网卡驱动程序时遇到了一些问题。众所周知,MTU是指没有片段的IP数据包的MAX大小。发送到xmit函数的skb将添加14个字节,包括dst mac addr,src mac addr和lengh。但是很奇怪,当我使用不同的MTU值时,增加的大小是不同的,有时它是10bytes,有时它是14bytes。这取决于MTU的大小。例如,我使用7828作为UDP有效载荷的大小,当MTU为7700时,xmit函数中的skb大小为7714,而当MTU为7800时,skb的大小为7810.任何人都可以解释这个吗?我想也许IP数据包有一些对齐限制,但我没有找到。

1 个答案:

答案 0 :(得分:1)

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