最大报文段长度——MSS

1. 概念

MSS(Maximum Segment Size,最大报文长度),是TCP协议定义的一个选项,MSS选项用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度

在以太网环境下,MSS=MTU-20字节TCP报头-20字节IP报头,MSS值一般就是1500-20-20=1460字节。

2. MSS的确定

MSS值只会出现在SYN报文中,即SYN=1时,才会有MSS字段值。

如图所示,服务器访问某网站时进行TCP的三次握手。

1)首先客户端会发送一个SYN请求报文,这个SYN报文的“选项”字段中会有MSS值(MSS = MUT - IP首部长度 - TCP首部长度)。该MSS值是为了告知对方最大的发送数据大小。

2)当服务器端收到SYN报文后,会向请求端返回SYN+ACK(同步确认报文)报文,其中的“选项”字段也会有MSS值。

3)通信双方选择SYN和SYN+ACK报文中最小的MSS最为此次TCP连接的MSS,从而达到通信双发协商MSS的效果。

结论: 在第二次握手后就可以确定TCP中最大传输报文(MSS)大小。

3. 确定MSS作用

在tcp交互之前避免分片的产生。

4. MTU

MTU 最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。

利用ifconfig命令可以查看当前mtu的大小。

5. MTU和MSS的区分

最大报文段长度(MSS)与最大传输单元(Maximum Transmission Unit, MTU)均是协议用来定义最大长度的。

MTU应用于OSI模型的第二层数据链接层,并无具体针对的协议。MTU限制了数据链接层上可以传输的数据包的大小,也因此限制了上层(网络层)的数据包大小。例如,如果已知某局域网的MTU为1500字节,则在网络层的因特网协议(Internet Protocol, IP)里,最大的数据包大小为1500字节(包含IP协议头)。

MSS针对的是OSI模型里第四层传输层的TCP协议。因为MSS应用的协议在数据链接层的上层,MSS会受到MTU的限制。

最大报文段长度——MSS_第1张图片

6. PMTUD(路径MTU)

作用: 通过由中间设备修改经过其转发的TCP SYN报文中的MSS值,让中间设备参与进TCP 三次握手时SYN报文的MSS协商来避免分片。

一张参考图

最大报文段长度——MSS_第2张图片

部分参考:

https://zhuanlan.zhihu.com/p/139537936

你可能感兴趣的:(TCP/IP,mss)