TCP 最大报文段长度 MSS(Maximum Segment Size)网络
MSS 是TCP选项中最常常出现,也是最先出现的选项。MSS选项占4byte。MSS是每个TCP报文段中数据字段的最大长度,注意:只是数据部分的字段,不包括TCP的头部。TCP在三次握手中,每一方都会通告其指望收到的MSS(MSS只出如今SYN数据包中)若是一方不接受另外一方的MSS值则定位默认值536byte。spa
MSS值过小或太大都是不合适。过小,例如MSS值只有1byte,那么为了传输这1byte数据,至少要消耗20字节IP头部+20字节TCP头部=40byte,这还不包括其二层头部所须要的开销,显然这种数据传输效率是很低的。MSS过大,致使数据包能够封装很大,那么在IP传输中分片的可能性就会增大,接受方在处理分片包所消耗的资源和处理时间都会增大,若是分片在传输中还发生了重传,那么其网络开销也会增大。所以合理的MSS是相当重要的。MSS的合理值应为保证数据包不分片的最大值。对于以太网MSS能够达到1460byte.图片
与MSS类似的在IP层也有一个相似的概念---MTU(Maximum Transfer Unit)下图能够清晰反映MSS与MTU 的关系:资源
MTU=MSS+TCP Header+IP Header.it
实例:效率
对于TCP来讲,它是尽可能避免分片的。假设咱们这里要发送给TCP层的数据大小为2748个字节,这个大小是明显大于链路层的发送数据的大小的,在这个状况下咱们来看,对于来自TCP层的数据,IP会不会进行分片。im
从这张图看来,应用层的2748个字节在TCP层就进行了分段,分红了两个TCP段,一个1460字节,一个1288字节。那么到IP层的时候,天然就不会在进行分片了。数据
从这张图片看出,在这两个TCP分段中,在序号3处,IP的头部字段(Don ' t Fragment) 被设置了,用于告诉IP层不要对该数据进行分片。img
===================END===================时间