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

MSS 到底是什么?Wireshark 分析TCP过程

文章目录

一、MSS 是什么

二、MSS 的作用

三、MSS 是怎么协商的(TCP 三次握手)

四、常见的 MSS 值有哪些

五、MSS 相关的网络问题


一、MSS 是什么

MSS = Maximum Segment Size(最大报文段长度) 
它表示:TCP 协议一次能传输的最大“纯数据”大小(不包括 TCP 和 IP 头部)。

想象你要寄一个包裹(TCP 报文):

快递公司规定:整个包裹不能超过 1500 字节 ,即MTU(Maximum Transmission Unit)
包裹的外包装(IP 头 + TCP 头)要占 40 字节,那最多能装1460 字节`。

这个 1460就是 MSS。所以:MTU = 整个包裹的最大重量
MSS = 你能装的“货物”最大重量

MSS = MTU - IP头 - TCP头

MSS 只包含 TCP 数据部分,不包括 TCP 头和 IP 头,常见以太网 MTU = 1500 字节,
IP 头(20字节) + TCP 头(20字节) = 40 字节,所以常见 MSS = 460 字节。

二、MSS 的作用

MSS 的核心作用是:

1. 避免 IP 层分片(Fragmentation)

如果没有 MSS 会怎样?

假设 TCP 不知道 MTU 限制,一次性发了 2000 字节的数据:

IP 层发现超过 1500 字节,就会把数据包“切片”成多个小包
分片后,任何一个碎片丢失,整个数据包就得重传,网络效率下降,延迟增加,甚至导致连接失败

有了 MSS 后:

TCP 在连接开始时就协商好“我每次最多发 1460 字节”
数据包不会超过 MTU,不需要分片
传输更高效、更稳定

三、MSS 是怎么协商的(TCP 三次握手)

MSS 是在 TCP 三次握手的前两次中通过 TCP Option字段告诉对方的。

1. 客户端 → 服务端:发送 `SYN` 报文,携带:
   [TCP Options] Maximum Segment Size: 4034
2. 服务端 → 客户端:回复 `SYN-ACK` 报文,携带:
   [TCP Options] Maximum Segment Size: 1460
3. 双方取较小值** 作为实际使用的 MSS(比如 1460),开始传输数据

注意:MSS 是双向协商的,客户端和服务端可以不同,协商以最小者为准。

附:三次握手建立过程:

1.  客户端发送SYN:

字段含义
[SYN]标志位:表示这是连接请求
Seq=0初始序列号(随机生成,不是真为0)
Win=64544接收窗口大小,表示能缓存多少数据
MSS=4034最大报文段长度,表示一次最多传 1460 字节数据
SACK_PERM支持选择性确认,提升重传效率

2. 服务端回应SYN-ACK:

字段含义
[SYN, ACK]两个标志位都置1,表示“收到你的请求,我也同意连接”
Seq=0服务端生成自己的初始序列号
Ack=1确认客户端的 Seq=0,期望下次收到 Seq=1 的包
Win=28960服务端的接收窗口
MSS=1460服务端支持的最大数据段(比客户端小)

3. 客户端发送ACK:

字段含义
[ACK]确认标志,表示已收到服务端的 SYN
Seq=1客户端的下一个序列号(上次是0)
Ack=1确认服务端的 Seq=0
Win=263424更新窗口
Len=0仍无数据,但连接已建立

至此,服务端和客户端就建立起了连接。

四、常见的 MSS 值有哪些

网络类型MTUMSS说明
普通以太网15001460最常见
PPPoE 拨号(家庭宽带)14921452常见于电信/联通宽带
WiFi15001460同以太网
隧道/VPN1420~14401380~1400封装额外头部,占用MTU空间
Jumbo Frame(巨型帧)90008960高速内网使用,需设备支持

1460 是最常见的 MSS 值,看到它就说明是标准以太网环境。

五、MSS 相关的网络问题

问题:能 ping 通,但打不开网页?

ping 用的是 ICMP,不走 TCP
网页加载走 TCP,如果 MSS 太大,数据包被丢弃
结果:TCP 连接卡住,网页打不开

解决方案:调整 MSS(妈蛋,这是真有用)

http://www.dtcms.com/a/380570.html

相关文章:

  • CTFHub SSRF通关笔记8:数字IP Bypass 原理详解与渗透实战
  • 从西贝“预制菜”事件看明厨亮灶视觉算法价值
  • 【0435】heap toast 内核实现之 计算 toast tuple header 开销
  • 发现渐开线蜗杆成型铣刀齿形可以这样计算
  • Krisp-世界排名第一的AI噪音消除应用
  • 【116】基于51单片机GSM智能快递柜【Proteus仿真+Keil程序+报告+原理图】
  • 测试开发实战:接口自动化框架设计与性能瓶颈排
  • Linux -- 信号【上】
  • 敏捷适合短期项目还是长期项目
  • Android Sip电话(PJSP)
  • C语言——操作符(逻辑、条件、关系)
  • OpenHarmony:App(页面跳转)
  • 什么是快照式光谱成像相机?
  • 如何通过ESB整合美妆零售全渠道订单流、物流与金流?
  • java整合阿里云短信服务实现验证码功能
  • Excel转图片excel2img库bug修复:AttributeError ‘parent‘ 问题解决方案
  • 【秋招笔试】2025.09.10华为ai算法岗笔试真题
  • 【深度学习-Day 47】告别单向依赖:深入解析双向RNN与堆叠RNN,解锁序列建模新高度
  • 为Excel和WPS表格多个不连续单元格设置同样的批注
  • 【Vite】打包优化
  • 3 遥感与机器学习
  • 汽车功能安全 Functional Safety ISO 26262 测试之一
  • 第八章 惊喜08 减负
  • Redis 持久化详解:RDB 与 AOF 原理、配置及选型
  • MySQL 索引学习全景笔记
  • Ethernaut Foundry Solutions - 完整系列教程
  • 【ARDUINIO】从串口读取数据的方法总结
  • Redis环境搭建指南:Windows/Linux/Docker多场景安装与配置
  • 如何使用 Linux ping 命令 ?
  • 分布式专题——10.3 ShardingSphere实现原理以及内核解析