25. TCP协议之TCP中MSS与MTU


MSS


MSS英文全称为Maximum Segment Size, 表示最大TCP报文段数据长度. 并且MSS只会出现在对端发送SYN段时才会夹带的信息.

在三次握手的过程中可以看到这个对端期望能够收到最大的数据段长度, 如下 :

25. TCP协议之TCP中MSS与MTU

可以看到现在对端的MSS都是65495. 当数据超过了MSS的值就无法保证能够一次性放入TCP报文段中, 那么只能将数据进行分片传送, 所以TCP报文段一次性携带的数据越多越好啊, 这样就越不容易造成分片了, 也能构提高网络利用率.


那么是不是我们通过调整MSS的值就可以完全避免分片呢? 这肯定不可能, MSS的值不能无限增大, 它是有一个明确的上限的. 以太网规定帧的大小不能超过1518字节, 而动态端口规定帧的范围为1024~65536. 我们以以太网为例(因为大多数都是以1518字节).

  1. 封装成帧有14字节的帧头, 4字节的帧校验和.
    • 也就是上层的IP数据报不能够超过1500字节. 而这个值一般也是MTU的值.
  2. IP首部固定有20字节
  3. TCP首部至少有20字节.
    • 除去IP和TCP首部, TCP报文的数据部分最多不能够超过1460字节

25. TCP协议之TCP中MSS与MTU


MTU

MTU英文全称叫做Maximum Transmission Unit, 上层接口最大能够通过的数据包大小. 上面我们在计算IP数据报的大小时提到了, 这是上层, 也就是网卡,串口等最大能携带的字节长度.

MSS与MTU的区别

  • MSS是软件上控制的最大报文字节.
  • MTU是硬件上限制的最大报文字节, MSS的值要小于等于MTU规定的值.

当然, 在终端可以输入netstart -i命令查看本机的MTU的值.

25. TCP协议之TCP中MSS与MTU

因为程序是以动态端口的, 所以就可以看出其MTU的值是65536, 以太网的MTU果然是1500.


总结

  • 明白MSS并且MSS只在三次握手时才被传输的信息
  • MSS与MTU的区别