当前位置: 首页 > news >正文

理解协议最大传输单元(MTU)和TCP 最大报文段长度(MSS)

1. 背景

公司的网络使用办公防火墙NAT代理访问互联网,托管在IDC的服务器也在机房防火墙后,也经过NAT。公司访问IDC服务器,通过SSL VPN连接,访问某些网页时,经常会打不开或页面错误。怀疑是MTU值造成的。

2. 测试

2.1 测试VPN链路中最大MTU

1. SSL VPN客户端不限制MTU
在这里插入图片描述

2. 测试访问IDC内网服务器
经测试,发现数据包长度1384时可以通过,1385时就被丢弃。

  • 172.27.2.3 IDC内服务器IP
  • f 在数据包中设置“不分段”标记(仅适用于 IPv4)。
  • l 1384 设置数据部分长度为1384

在这里插入图片描述

2.2 测试结果说明

  1. 网络链路
    办公网IP --> 办公网网关防火墙(MTU=1472)–> 互联网链路 --> IDC防火墙 --> IDC内服务器IP
  • 最小MTU限制是1472(办公网网关防火墙)
  • 1384字节(数据包)+8字节(ICMP)+20字节(IP)=1412字节
  • 1472- 1412 =60字节,应该是SSL VPN 二次封装的头部字节

3. 解决

3.1 修改VPN客户端

直接修改VPN客户端设置,配置“虚拟网卡MTU值”小于1400(图中设置1384)
在这里插入图片描述

3.2 修改VPN服务端

修改华为防火墙设置,指定“TCP 最大报文段长度(MSS)”小于1384(图中设置1384)
在这里插入图片描述

4. 概念

4.1 说明

  1. 最大报文段长度(MSS,Maximum Segment Size)
  2. 最大传输单元(MTU,Maximum Transmission Unit)
属性MTU(最大传输单元)MSS(TCP 最大报文段长度)
所属层次数据链路层(如以太网、VPN 隧道等)TCP 传输层
定义链路层一次能传输的最大字节数(含所有头部)TCP 报文段中数据部分的最大字节数(不含头部)
包含内容包含 IP 头部、TCP/UDP 头部、应用层数据(即 “整个数据包”)仅包含 TCP 协议承载的应用层数据(纯 payload)
典型值以太网默认 1500 字节,VPN 隧道可能更小(本例中 1472)通常为 MTU 减去 IP 头部(20 字节)和 TCP 头部(20 字节),如 1460 字节

4.2 关系

参考: TCP/IP协议-最大传输单元MTU和最大分段大小MSS

  1. 当IP数据包在相应链路层传输前,若检测到IP数据包的长度大于MTU的值,则IP数据包在IP层进行分片,使得每个数据包的长度小于MTU,且每个数据包到达目的地之前不会被重组。
  2. 若数据长度超过MSS长度,则TCP协议就会分片,而不是等到IP层再分片。
  3. MSS 是基于 MTU 计算的,目的是避免 TCP 数据包在 IP 层被分片(分片会降低效率,甚至可能被某些设备丢弃)。
    计算公式(简化版):
  4. MSS = MTU - IP头部长度 - TCP头部长度
http://www.dtcms.com/a/323164.html

相关文章:

  • 力扣热题100------70.爬楼梯
  • 从零学习three.js官方文档(一)——基本篇
  • 每日五个pyecharts可视化图表-line:从入门到精通
  • 记录一次ubuntu20.04 解决gmock not found问题的过程
  • Spring 框架中提供Aware接口,实现感知容器对象
  • 机器学习——模型的简单优化
  • CPU缓存(CPU Cache)和TLB(Translation Lookaside Buffer)缓存现代计算机体系结构中用于提高性能的关键技术
  • 盟接之桥说制造:以品质为基,消费者导向差异而生
  • Linux系统编程Day10 -- 进程管理
  • CTF常用工具汇总(二)
  • 【32】C#实战篇——两个文件夹下 相同名字的文件 进行配对(两个文件夹下的文件数量和文件类型不一定相同,所以要过滤掉我们不要的文件)
  • ArkUI中的布局组件Row(一)
  • 计算机网络1-6:计算机网络体系结构
  • 【Python 高频 API 速学 ④】
  • Office安装使用?借助Ohook开源工具?【图文详解】微软Office产品
  • 使用 Conda 安装 xinference[all](详细版)
  • 一个“加锁无效“的诡异现象
  • Java 日志从入门到精通:告别日志混乱
  • C++高性能细粒度时间跟踪实战
  • Python基础教程(五)list和tuple:深度剖析Python列表与元组的终极对决
  • PHP-单引号和双引号(通俗易懂讲解版)
  • 卫星遥感与AI大模型
  • JS逆向实战案例之----【通姆】252个webpack模块自吐
  • NFS 挂载失败** 问题(`mount: wrong fs type`),以下是详细的排查步骤和解决方案
  • 20250809在WIN10下使用diskpart命令格式化TF卡【卡刷荣品PRO-RK3566的核心板】
  • 云渲染的未来已来:渲酷云如何重新定义数字内容生产效率
  • SimBA算法实现过程
  • 39.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--调整发布脚本
  • 利用SymPy与SciPy高效求解参数化方程组的数值解
  • [激光原理与应用-207]:光学器件 - 光纤种子源激光器常用元器件