- MTU和TCP-MSS的概念
- MTU(Maximum Transmission Unit,最大传输单元)是指链路层的最大传输单元,包括TCP头和IP头,不包括链路层封装头。MTU包括接口MTU和路径MTU。
- 接口MTU是指接口上所能承载的最大传输单元。任何时候IP层接收到一份要发送的IP数据时,它要判断向本地哪个接口发送数据,并查询该接口获得其MTU,IP层把MTU与要发送的数据包长度进行比较,如果数据包的长度比MTU值大,那么IP层就需要进行分片,分片后的数据可以小于等于MTU。
- 路径MTU是指一条因特网传输路径中,从源地址到目的地址所经过的“路径”上的所有IP跳的MTU的最小值。或者从另外一个角度来看,就是无需进行分片处理就能穿过这条“路径”的MTU的最大值。
- TCP-MSS(TCP Maximum Segment Size,TCP最大报文段长度)是指TCP连接的对端发往本端的最大TCP报文段的长度。TCP-MSS有通告MSS和协商MSS之分。通信双方建立TCP连接时,在TCP三次握手的SYN包中向对端通告自身配置的TCP-MSS,结合MTU协商出实际的TCP-MSS。握手成功后,数据传输时,数据部分(不包括TCP头)的长度不能超过协商的TCP-MSS,否则会进行分片。
- MTU(Maximum Transmission Unit,最大传输单元)是指链路层的最大传输单元,包括TCP头和IP头,不包括链路层封装头。MTU包括接口MTU和路径MTU。
- MTU和TCP-MSS的关系实际协商的TCP-MSS,由通告MSS、接口MTU和路径MTU共同决定,通常等于min(双方通告MSS,接口MTU减去IP头和TCP头长度,路径MTU减去IP头和TCP头长度)。
- 修改TCP-MSS的原因数据经过传输层封装后交给网络层,网络层接收到IP数据时,首先判断数据要发往哪个接口,并获取该接口的MTU,如果数据包长度大于MTU,则会将数据包进行分片并封装成IP数据包后交给链路层。如果不进行分片,则会因为数据包长度大于链路层MTU导致丢包。如果TCP连接的某端路径MTU功能不可用,则该端无法根据MTU值调整TCP报文的大小,可能出现该端的TCP报文长度超出中间设备的MTU限制导致报文被丢弃的情况,为了避免这种情况的发生,可以在TCP连接的任意一端或者中间设备上减小TCP-MSS值,则双方协商的MSS值不会超过该数值,从而对两端发送的TCP报文的长度都进行了有效的控制,使得报文能够顺利的通过中间网络。
正文完