V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
hzqim
V2EX  ›  问与答

怎么解释 Router 的 MTU 设置值总比 MTU 的实际值大 8 呢?

  •  
  •   hzqim · 2015-04-12 22:31:49 +08:00 · 4266 次点击
    这是一个创建于 3505 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Openwrt 系统的 Router ,PPPoE 的 MTU 选项没有设置,框中灰色状态可见数值 1500,本人理解为默认 1500 的意思,不知道是否有误,请指证。


    在 Windows 7 中 ping 出 Client 端 MTU 为 1492,所以手动将 Client 和 Router 的 MTU 都设置为 1492。
    设置后,感觉打开网页时,加载内容的转圈圈动画少了,应该比以前流畅了。
    不料,时间不长,感觉转圈圈又多了起来,Windows 7 下用 ping 检查,MTU 变成了 1484。好吧,再重复一次,把 Client 和 Router 的 MTU 都设置成 1484,马上又正常了。
    就在刚才,不经意又发现转圈圈现象增多了,通过 ping 检查发现 MTU 变为了 1476。

    我就纳闷了,怎么 MTU 总在变?
    后通过比较,MTU 总比 Router 设置的数值小 8,这是什么原因?
    12 条回复    2019-04-22 19:51:03 +08:00
    jaleo
        1
    jaleo  
       2015-04-12 22:49:04 +08:00   ❤️ 1
    我的路由器上 tomato 自动设置了1492
    mcfog
        2
    mcfog  
       2015-04-12 22:58:15 +08:00 via Android   ❤️ 1
    网络课没学好,应该是7层里的某一层需要8个字节的包装

    没必要减小
    mcfog
        3
    mcfog  
       2015-04-12 23:00:28 +08:00 via Android   ❤️ 1
    没必要减小router的mtu把

    //移动版的文本框和回复按钮距离太近了点错几次了啦 求L大拯救。@livid
    ryd994
        4
    ryd994  
       2015-04-12 23:01:46 +08:00 via Android   ❤️ 1
    你的理解不对
    openwrt上PPPoE的mtu已经包括了那额外的8字节
    你需要的设置是将lan的mtu减小而不是PPPoE的
    datocp
        5
    datocp  
       2015-04-12 23:05:30 +08:00   ❤️ 1
    mtu这种名词太专业了,玩不转

    最早接触这个是有关访问不了网站需要用ping去确定封包大小
    cisco文档说还是1454比较好吧
    然后磊科路由器表示用1454你别想拔号

    然后因为这东东涉及到各种封包大小问题。搞也搞不懂,tomato直接,一了百了。


    iptables -I FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
    myliyifei
        6
    myliyifei  
       2015-04-12 23:22:33 +08:00 via Android   ❤️ 1
    ppp--8个字节
    ryd994
        7
    ryd994  
       2015-04-13 01:34:56 +08:00   ❤️ 1
    pppoe的mtu是指ppp包装后的mtu,1500不需要-8
    你可用的mtu需要-8,也就是说你电脑可用的mtu是pppoe的mtu-8
    因此mtu应该这样
    lan:1492
    pppoe:1500
    电脑:1492或者无需设置,因为如果mtu过大路由器一般会自动协商
    hzqim
        8
    hzqim  
    OP
       2015-04-13 09:01:58 +08:00
    @ryd994
    @myliyifei
    @ryd994
    谢谢解析,PPPoE封装多了8个字节,这样说就容易理解一些。

    那么,新的问题来了:
    Windows 7 LAN 网卡默认也是 1500,而线路实际是 1492 ,如果不把 LAN 的 MTU 设置值改小,那么数据传输过程中必须有一个拆包行为,这个拆包行为是由 Client 来完成,还是由 Router 来完成?如果由 Router 来完成,势必增加 Router 的资源开销。
    ryd994
        9
    ryd994  
       2015-04-13 09:54:49 +08:00 via Android   ❤️ 1
    @hzqim 如果路由器收到了过大的包而不能转发,就会drop,同时返回icmp。客户端收到icmp之后就会减小mtu了
    hzqim
        10
    hzqim  
    OP
       2015-04-13 11:16:47 +08:00
    @ryd994 “客户端收到 icmp 进而减小 mtu”,
    客户端只要收到一次 icmp,后续的所有包都会减小吧?
    如此,客户端就无需手动设置 MTU 了,只需一次“校正”,便可以智能匹配线路的 MTU。
    ryd994
        11
    ryd994  
       2015-04-13 11:26:01 +08:00   ❤️ 1
    bclerdx
        12
    bclerdx  
       2019-04-22 19:51:03 +08:00
    @datocp 你这段代码中的“ 1400:1536 ”是什么意思?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1058 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:48 · PVG 06:48 · LAX 14:48 · JFK 17:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.