陆仴
“我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”
如题,MTU和MSS都是决定数据包分片的,两者的区别是什么?
哟哟认为两者最重要的区别是针对数据包分片的层次不一样。一种是由数据链路层传输至网络层决定的数据包大小,另一种是由传输层至网络层决定的数据包大小。
下面哟哟来详细介绍一下两种分片的方式及区别:
MTU(Maximum Transmit Unit,最大传输单元)主要是指数据报文从数据链路层提供到网络层最大传输数据的大小;
MTU值的设定主要是链路层对于网络层数据包大小的约束,假设MTU值设定为1500Byte,那么当数据包大小大于1500字节时就会对其进行分片操作,每个分片的IP Header ID相同,用于在接收端进行重组。
MSS(Maximum Segment Size,最大报文段长度)是用于在TCP建立连接时,双方协商通信的报文段最大长度;
MSS值其实就是指TCP/IP协议栈所能允许的最大数据包,是在TCP建立连接时双方会协商MSS值的大小。举个实例来说明两者的区别:
首先要确认MTU和MSS值的关系:MTU=MSS+IP Header+TCP Header
假设主机A与主机B通信,主机A的MTU值为1500字节,主机B的MTU值为1492字节,那么可以根据公式算出主机A发送主机B的MSS值为1460字节,主机B发送主机A的MSS值为1452字节;
当两端建立TCP连接,那么主机A发送TCP SYN信息时会告知对端允许发送的最大MSS值(假设为1460字节)。同样,主机B也会告知主机A允许发送的最大MSS值(假设为1452字节)。显然,主机B的MSS值要比主机A的MSS值要小,为保证正常通信,要取两端较小的一方MSS值,即1452字节;
从上通信可以看出通信双方最终的MSS值=较小MTU-IP Header-TCP Header