【PMTU】TCP的MTU探测

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

#  cat /proc/sys/net/ipv4/tcp_mtu_probing
0

想要启用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

在 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值