英文: Maximum Segment Size
中文: 最大报文段长度(最大分段大小、最大TCP分段大小)
介绍: MSS选项用于在TCP连接建立时,收发双发协商通信时每一个报文段所能承载的最大数据长度。
image.png
这个选项由4个字节构成:第1字节(选项类型)为2;第2字节(选项长度)为4,然后是一个16比特的选项数据,指出报文段中允许的最大数据长度(以字节为单位)。

MSS选项只能在初始化连接请求(SYN=1)的报文段中使用。在报文段中发送MSS选项的终端利用该选项来对端TCP实体通告本端点在一个报文段中所能够接受的最大数据长度。若没有指定这个选项意味着本终端能够接受任何长度的报文段。

在一个TCP连接上允许各种长度报文段的传输,因此连接的两端利用MSS选项来协商报文段中最大数据长度时必要的。例如在一个小型系统中由于空间限制,TCP仅能提供较小的接受缓冲区。它与其他系统通信时,就必需互相协商一个合适的MSS,使对端发出的报文段中的数据能够存入其接受缓冲器。由于TCP连接的连个端点可能存在的差异,在一个TCP连接的两个数据流方向上常常可能采用不同的MSS值。

进行MSS协商的另一个好处是能够提高网络带宽的利用率。在一个局域网中进行通信的两个节点可以选择一个比较大的MSS,使得报文段封装成IP分组时能够充分利用网络的带宽。

但是实际上在一般的Intenet环境中,为连接选择一个合适的MSS是相当困难的。这是因为MSS的取值过大或过小都会影响网络和TCP的性能。如果报文段太小,将会大大降低网络的利用率。但如果报文段太大也可能影响网性能。

这是由于长IP分组在网络中传输时往往需要被分片传输。分片和重组的过程自然将带来一定的网络处理开销。而且IP分组被分片后独立传输,任何一个分片出现错误或丢失都将导致整个分组被丢弃,这也意味着整个报文段丢失,TCP只能对整个IP分组进行确认和重传。

由于在IP通信子网中分组丢失的概率总是存在的,因此MSS的增加所导致的分片将会使报文段成功达到目的端的概率下降,从而影响TCP的性能和和降低网络的吞吐率。

从理论上讲,理想的MSS应该能尽可能多地承载用户数据,在传输通路上又可能避免分片。但实际中确定这样一个最佳的MSS很困难。一种通路MTU发现技术可以帮助TCP来确定最佳的MSS值。但是,仍然有许多TCP的实现并不能提供这样的。同时,由于Internet中采用的是动态的路由选族,CP报文段的传输通路可能不断地发生改变,这使动态地计算最佳MSS更加困难。

如何计算本地MSS值?

一般是由本地MTU取值计算而来:
本地MSS = MTU - 20字节的标准IP头 - 20字节的标准TCP头(换个角度看其实就是TCP负载)