程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

网络技术之TCP协议中的这点你是否注意过?它的用途竟如此重要

balukai 2025-02-03 11:20:51 文章精选 5 ℃

今天我们来讲下MSS最大报文段长度概述。

MSS,最大报文段长度(Maximum Segment Size ),是TCP协议的一个选项,用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度(不包括文段头)。

在这之前,我们需要先来看一下IP分片。IP协议的设计初衷是应用于广泛的传输介质。IPv4数据包的最大长度为65535字节。带有逐跳扩展头部和巨型帧负载选项的IPv6数据包最长可以支持4294967295字节。但多数传输链路都会强制使用一个比较小的最大数据包长度,这个长度称为最大传输单元(Maximum Transmission Unit,MTU)。

当路由器收到比出接口MTU更大的IPv4数据包时,它就必须对数据包进行分片。IP分片发生在IP层,不仅源端主机会进行分片,中间的路由器也有可能分片,因为不同的网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据报再次进行分片。而分片数据的重组只会发生在目的端的IP层。

IP分片会造成以下问题:

1、对数据进行分片会消耗CPU和内存;

2、目标设备重组时也会消耗CPU和内存 资源;

3、分片之后,如果有一个分片被丢弃,则整个数据需要重传;

4、执行4到7层过滤的防火墙有可能无法正确处理IPv4分片。

为了避免出现这样的情况,TCP最大分段长度(Maximum Segment Size,MSS)定义了接收方设备在一个TCP段中可以接受的最大数据量。TCP段可以通过一个IPv4数据包进行发送,也可以分片后使用多个IPv4数据包发送。发送方和接收方之间不会对MSS进行协商。发送设备需要对TCP分段的尺寸进行限制,使其不大于接收方设备所报告的MSS长度。

为了对避免IPv4数据包进行分片,所选TCP MSS为出接口的最小缓冲区大小和MTU减40字节。40字节包含了20字节的IPv4头部和20字节的TCP头部。比如说,默认的以太网MTU是1500字节。那么,通过以太网接口发出的IPv4数据包,其TCP段的TCP MSS就应该是1460,即用以太网 MTU的1500字节减去IPv4头部的20字节,再减去TCP头部的20字节。对于UDP包,我们需要在应用层去限制每个包的大小,一般不要超过1472字节,即以太网MTU(1500)—UDP首部(8)—IP首部(20)。

TCP MSS有助于避免在TCP连接两端对数据包进行分片,但是并不能避免因路径中的链路MTU更小而造成的分段。

在IPv6上,IPv6路由器不会对数据包进行分片,除非这台设备是数据包的源。如果一台IPv6路由器收到了比其出接口MTU大的数据包,它会丢弃这个数据包并向源发送一个ICMPv6数据包过大消息,其中会包含这个较小的MTU。

每天都有新收获! 学网络,就在IE-LAB 国内高端网络工程师培养基地

IE-LAB有优质雄厚师资力量支撑,全面的学习平台和完善的教学服务,我们培养了一批又一批的HCIE/CCIE学员,加入我们,成就未来。

Tags:

最近发表
标签列表