目录
一、MTU和MSS
MTU (Maximum Transmission Unit):最大传输单元。一个网络报的最大长度,以太网中一般为1500字节。
MSS(Max Segment Size):最大报文段,除去IP和TCP头部之后,一个网络包所容纳的TCP数据的最大长度。
为什么不把TCP的整个报文交给IP层进行分片,会有什么异常?当IP层有一个超过MTU大小的数据(TCP头部+TCP数据)要发送,那么IP层要进行分片,把数据分片成若干片,保证每一个分片都小于MTU。把一份IP数据进行分片以后,由目标主机的IP层来进行重新组装后,再交给上一层的TCP传输层。
这看起来是井然有序,但存在隐患的,如果当一个IP分片丢失,整个IP报文的所有分片都要重传。因为IP层本身没有超时重传机制,它由传输层TCP来负责超时和重传。当接受方发现TCP报文(头部和数据)的某一片丢失后,不会响应ACK给对方,那么发送的TCP在超时后,就会重发整个TCP报文,因此,在IP层进行分片传输效率是非常低的。
所以,为了达到最佳的传输效率TCP协议在建立连接时协商双方的MSS值,当TCP层发现超过MSS时,会先进行分片,这样会减少在IP层的分片(一般情况下回小于MTU),提升效率。