• 【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

  • 相关阅读:
    Spring 基础知识、执行流程、源码分析和设计思想
    React.FC(函数式组件)与React.Component(类组件)使用和区别
    Worthington丨Worthington胰蛋白酶抑制剂说明书
    Linux基础(三)----->权限理解和文件属性
    OpenHarmony 入门——搭建OpenHarmony本地应用开发环境
    【C语言数据结构】线性表-顺序存储-动态分配(顺序表)
    OSI模型与数据的封装
    【云原生 | Docker 高级篇】10、Docker 资源配额
    实现微信转账到零钱经验
    Spring大事务到底如何优化?
  • 原文地址:https://blog.csdn.net/michaelwoshi/article/details/126924358