前面我们已经说过了MTU, 它的含义实际上就是数据链路对IP层包长度要求的最大值, 不得超过1500字节。 可以认为, MTU是与IP相关的一个概念。
但是, MSS就不同了, MSS是max segment size的缩写, 是最大段的最大值, 它是与TCP相关的一个概念(与UDP没有毛关系)。 数据链路层期望的最大IP包长是1500字节, 那么除去IP包头典型的20字节, 除去TCP包头典型的20字节(当然也可能是32字节或者40字节, 或者其他 <=60字节的数据), 可知, 数据链路层允许的最大TCP“业务数据”的长度是1460字节, 多么熟悉的数字。
所以, “最大段”(MSS)的最大值是1460字节, 也即MSS的最大可能值是1460字节。
有个疑问, MTU数据在哪里呢? 我们来看看:
xxxxxx$ cat /sys/class/net/eth1/mtu
1468
可见, 此时MTU的值是1468(不得超过1500), 所以我们叙述的时候, 说“最大值”的最大值。
那MSS这个值在哪里确定呢? 在三次握手中的两个syn包中确定, 如下:
xxxxxx$ sudo tcpdump -iany port 8765 -Xnlps0
tcpdump: verbose output suppressed, use -v or -vv for f