TCP 最大报文段长度 MSS(Maximum Segment Size)

TCP 最大报文段长度 MSS(Maximum Segment Size)


MSS 是TCP选项中最经常出现,也是最早出现的选项。MSS选项占4byte。MSS是每一个TCP报文段中数据字段的最大长度,注意:只是数据部分的字段,不包括TCP的头部。TCP在三次握手中,每一方都会通告其期望收到的MSS(MSS只出现在SYN数据包中)如果一方不接受另一方的MSS值则定位默认值536byte。

MSS值太小或太大都是不合适。太小,例如MSS值只有1byte,那么为了传输这1byte数据,至少要消耗20字节IP头部+20字节TCP头部=40byte,这还不包括其二层头部所需要的开销,显然这种数据传输效率是很低的。MSS过大,导致数据包可以封装很大,那么在IP传输中分片的可能性就会增大,接受方在处理分片包所消耗的资源和处理时间都会增大,如果分片在传输中还发生了重传,那么其网络开销也会增大。因此合理的MSS是至关重要的。MSS的合理值应为保证数据包不分片的最大值。对于以太网MSS可以达到1460byte.

不MSS相似的在IP层也有一个类似的概念---MTU(Maximum Transfer Unit)下图可以清晰反映MSS与MTU 的关系:

TCP 最大报文段长度 MSS(Maximum Segment Size)_第1张图片

MTU=MSS+TCP Header+IP Header.

实例:

对于TCP来说,它是尽量避免分片的。假设我们这里要发送给TCP层的数据大小为2748个字节,这个大小是明显大于链路层的发送数据的大小的,在这个情况下我们来看,对于来自TCP层的数据,IP会不会进行分片。

 

从这张图看来,应用层的2748个字节在TCP层就进行了分段,分成了两个TCP段,一个1460字节,一个1288字节。那么到IP层的时候,自然就不会在进行分片了。

 TCP 最大报文段长度 MSS(Maximum Segment Size)_第2张图片

从这张图片看出,在这两个TCP分段中,在序号3处,IP的头部字段(Don ' t Fragment) 被设置了,用于告诉IP层不要对该数据进行分片。

===================END===================

你可能感兴趣的:(TCP 最大报文段长度 MSS(Maximum Segment Size))