标签: MTU

  • 网络优化之MTU

    • mtu
    • mru
    • jumbo帧
    • mtu协商
    • pmtu及pmtu黑洞
    • mss钳制

    先把目录列一下,有空补充

    Views: 2

  • PPPOE的MTU协商

    PPPOE是支持MTU自动协商的,可以双方互相通告自己的MRU,IPv4 MTU是通过PPP LCP协商的。
    LCP抓包

    IPv6 MTU是通过ICMP RA协商的
    ICMP RA抓包

    RA报文只看到了单向的MTU通告。
    虽说PPPOE完全支持MTU协商,但有些路由器并不一定能正确处理MTU。

    参考:
    https://support.huawei.com/enterprise/zh/doc/EDOC1100278529/e6deca7e#ZH-CN_CONCEPT_0172358961

    Views: 2

  • MTU测试

    可以用Ping命令来测试当前传输介质的MTU
    Windows用法
    ping -l 1464 -f 223.5.5.5
    -l指定的是ping包的载荷大小,由于ping包头是28字节,所以载荷加上28就是真实MTU大小,-f指定不可拆分包。
    Linux用法
    ping -s 1464 -M do 223.5.5.5
    使用-M do参数发送大包时是会自动提示MTU大小,不用再自己计算了
    如果是IPv6则要减去48字节(IP头40字节,ICMPv6头8字节),如下MTU 1500的icmpv6载荷为1452字节。
    ping -s 1452 -M do fe80::f8b3:a6ff:fece:7589
    不同介质/线路下MTU的大小
    – 以太网
    默认都是1500,一般以太网卡也可以配置超大帧
    – PPPOE拨号网络
    可以是1492,也可以是1480,国内一般都是1492
    – wireguard
    wireguar的报头是固定40个字节,IPV4的报头是20字节,IPV6报头是40字节,PPPOE是8个字节,所以在IPv4网络下wireguard的MTU是1500-40-20-8=1432,在IPv6网络下是1500-40-40-8=1412
    – IPSec
    因为PSec是高度可配置的,不同的配置下MTU是不一样的,需要实际去测试
    – udp2raw
    官方没有说udp2raw的报头是多长的,只说MTU是13xx(等于没说),我用命令实测是88个字节的头部(即faketcp头部,应该也是变长的)所以PPPOE+Udp2raw+Wireguard的MTU就是1500-40-88-20-8=1344,如果是IPV6则是1324。

    关于双方MtU不同的情况:

    如果通信是一对一的,则两边设置相同的MTU即可,如果是面向多个端点的通信则需要需要设置为所有端点MTU最低的那个。设置MTU考虑的是对方及与对方通信线路的接收和传输能力。是取决于别人,面不是自己(一般自己都是1500)。

    关于MSS钳制可以看这一篇:

    TCP MSS钳制解决Wireguard访问github超时问题

    这个网站列出了各个协义的头部长度:

    https://baturin.org/tools/encapcalc/

    参考:

    https://zhuanlan.zhihu.com/p/532370376

    Views: 9

  • TCP MSS钳制解决Wireguard访问github超时问题

    用OpenVPN的时候自带的有mssfix功能,但是Wireguard是没有的,这就导致访问某些网站(github.com)的时候超时无响应
    – iptables用法
    iptables -A FORWARD -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu
    – nftables用法
    nft add rule ip filter FORWARD tcp flags syn tcp option maxseg size set rt mtu
    – Openwrt的话可以直接在防火墙中配置MSS钳制

    其它的系统可以放到wireguard的PostUp脚本里面,asus merlin可以放到/jffs/scripts/wgclient-start里面。后来发现如果是从界面配置的wireguard则会自动添加TCPMSS规则,如果是自己用wg-quick手动配置的则需要用上述方法自己添加TCPMSS规则。

    这个问题是由于某些网站ICMP或者PMTU不能正常工作导致的,我用ping测试github.com的MTU就测试不出来
    参考:
    https://www.procustodibus.com/blog/2022/02/wireguard-over-tcp/
    https://www.vinoca.org/wireguardzhi-mtu-mss/

    Views: 64