【问题标题】:The relationship between MTU and size of skb in xmit functionxmit函数中MTU与skb大小的关系
【发布时间】:2014-12-12 21:44:07
【问题描述】:

我在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数据包可能有一些对齐限制,但我没有发现。

【问题讨论】:

  • MTU 通常更像 1260 而不是 7800。您从哪里得到这些值?
  • 嗨 EJP,据我所知,IP 协议,最大 MTU 值可以最大为 9000 作为巨型帧。所以我不明白为什么你认为MTU更像1260。这里是使用wiGig协议的高速网卡,所以MTU没有这个限制。

标签: udp mtu


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 2011-10-12
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多