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

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

文章目录


什么就是一、MSS

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

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

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

MSS。所以:MTU = 整个包裹的最大重量就是这个 1460就
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,不要求分片
传输更高效、更稳定

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

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

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.zskr.cn/news/7528.html

相关文章:

  • Manim实现闪光轨迹特效
  • 漏洞详解--文件上传 如何花样绕过?!
  • 深入解析:AI Agent开发秘籍:Prompt工程与测评最佳实践(建议收藏反复研读)
  • 实用指南:鸿蒙智能设备自动诊断实战:从传感器采集到远程上报的完整实现
  • 使用php -S 127.0.0.1:8000 新建php服务
  • WPF ControlTemplate DI Via Microsoft.Extensions.DependencyInjection
  • 完整教程:从“我店”模式看绿色积分电商平台的困境与破局
  • 完整教程:光伏电站安全 “守护神”:QB800 绝缘监测平台,为清洁能源高效运行筑固防线
  • Java的安装及卸载
  • 实用指南:订阅式红队专家服务:下一代网络安全评估新模式
  • Apache SeaTunnel 2.3.12 发布!核心引擎升级、连接器生态再扩张
  • StringComparer.OrdinalIgnoreCase
  • 在 WSL 中通过 Bash 函数快速转换 Windows 路径为 Ansible/WSL 路径 - 教程
  • 完整教程:如何管理好上网行为,8个上网行为管控措施分享,让上网井然有序
  • 金融租赁公司厂商租赁业务调研报告
  • 普科科技PKC7030H交直流电流探头应用指南​​
  • 从“分散”到“统一”,中控技术利用SeaTunnel构建高效数据采集框架,核心数据同步任务0故障运行!
  • T/B cell subtype marker - un
  • K8s Application模式下的flink任务执行精要
  • vim窗口垂直分屏和水平分屏对终端控制序列的微妙影响
  • 异常检测在网络安全中的应用 - 实践
  • python基础-推导式
  • IOT——维度追光框架
  • Scikit-learn 简单介绍入门和常用API汇总 - 教程
  • A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
  • 深入解析:大模型-Transformer原理与实战篇
  • Codeforces Round 1051 (Div. 2) D题启发(DP
  • Oracle清理:如何安全删除trace, alert和archivelog文件?
  • 学习道路道阻且长 希望自己坚持下去
  • 数据通路-单总线结构(最头晕的一集)