2014-10-17 66 views
0

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

+0

MTU通常比7800更像1260.你从哪里得到这些值? – EJP 2014-10-17 12:03:24

+0

嗨EJP,据我所知,IP协议,最大MTU值可以最大9000作为巨型帧。所以我不明白你为什么认为MTU更像1260.这是一个使用wiGig协议的高速网卡,所以MTU没有这样的限制。 – cuibuaa 2014-10-20 02:23:24

回答

0

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

相关问题