• 【PMTU】TCP的MTU探测


    Linux内核默认情况下未开启TCP的MTU探测功能。

    #  cat /proc/sys/net/ipv4/tcp_mtu_probing
    0
    
    • 1
    • 2

    想要启用tcp mtu probe, 先要设置ip_no_pmtu_disc=0(默认值), 表示启用pmtu discovery, 这样tcp发送的时候才会设置DF标记。

    通过DF标记,中间路由设备如果需要分片就会返回ICMP消息通知, 但是有可能因为防火墙等原因,发送方收不到ICMP消息,因此发送方一直发送探测包,却一直没收到回应, 这个就称为black hole。

    系统默认tcp_mtu_probe=1, 表示默认禁用mtu,只有当检测到black hole的时候,才会开启tcp mtu probe

    # ping -s 2500  -M do  8.8.8.8 
    PING 8.8.8.8 (8.8.8.8) 2500(2528) bytes of data.
    ping: local error: Message too long, mtu=1500
    ping: local error: Message too long, mtu=1500
    ping: local error: Message too long, mtu=1500
    ping: local error: Message too long, mtu=1500
    ping: local error: Message too long, mtu=1500
    ping: local error: Message too long, mtu=1500
    ping: local error: Message too long, mtu=1500
    ping: local error: Message too long, mtu=1500
    ping: local error: Message too long, mtu=1500
    ping: local error: Message too long, mtu=1500
    ^C
    --- 8.8.8.8 ping statistics ---
    10 packets transmitted, 0 received, +10 errors, 100% packet loss, time 9213ms
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在 TCP 三次握手期间交换的 TCP 数据段不会太大,因而不会被 PMTU 黑洞路由器丢弃。但是,一旦开始在连接上传输数据—假定基于协商的 MSS 确定的 PMTU 比实际 PMTU 大—TCP 数据段的大于实际 PMTU 的 IP 包就会被直接丢弃。

    如果有 IP MTU 更小的中间链路,且路由器发送了“ICMP Destination Unreachable-Fragmentation Needed and DF Set”消息,则 Ping 工具会显示“Packet needs to be fragmented but DF set”消息。如果有 IP MTU 更小的中间链路,且 PMTU 黑洞路由器直接丢弃了包,则 Ping 工具会显示“Request timed out”消息。

    要找出包含 PMTU 黑洞路由器的路径的有效 IP MTU,请使用 Ping 工具,同时不断增大 Echo 消息的有效负载的大小。因为典型子网的最小 IP MTU 是 576 字节,因此开始时可将 ICMP Echo 消息的有效负载设置为 548 字节,然后每次递增 100 字节,直到找到有效 PMTU。

    参考

    什么是MTU(Maximum Transmission Unit)?
    https://info.support.huawei.com/info-finder/encyclopedia/zh/MTU.html

    既然IP层会分片,为什么TCP层也还要分段?
    https://blog.csdn.net/maimang1001/article/details/123369897

    TCP path MTU discovery
    https://www.ibm.com/docs/en/aix/7.2?topic=tuning-tcp-path-mtu-discovery

    路径最大传输单元 (PMTU) 黑洞路由器
    https://www.cnblogs.com/cunshen/articles/162441.html

    通过案例来学习TCP的MSS、MTU
    https://cloud.tencent.com/developer/article/1032223?from=article.detail.1411873

    看招MTU!!!——高端路由器GRE组网中需要注意的问题
    http://www.h3c.com/cn/d_201411/921527_30005_0.htm

  • 相关阅读:
    张丽俊:穿透不确定性要靠四个“不变”
    SpringCloud 源码学习笔记2——Feign声明式http客户端源码分析
    04【C语言 & 趣味算法】“抓交通肇事犯”问题。算法改进:设置“标识变量”,有效减少循环次数。
    kong安装及使用
    OpenStack云平台部署
    【循环冗余码检错示例】
    display详解
    数学建模--逻辑回归算法的Python实现
    PE结构学习(6)_重定位表
    基于深度学习的加密恶意流量检测
  • 原文地址:https://blog.csdn.net/michaelwoshi/article/details/126924358