为什么一个帧携带的数据量不能少于46个字节?
以太网使用CSMA/CD技术发送帧,发送端需要边发送帧,边监听信道。如果监听到信道上有干扰信号,则表明发生了冲突,发送端会停止发送,然后在随机等待一段时间之后,再次使用CSMA/CD方式尝试发送。为了精确地检测到物理信道上的冲突,帧的数据总量最小需要有64Bytes,而帧的头部和尾部校验码加起来是18个字节,所以要求一个帧至少携带46Bytes的数据。当有效数据量小于46个字节时,系统会补充一些填充码
什么是MTU?
MTU是Maximum Transmission Unit的缩写,中文全称是:最大传输单元。它用来指定每个帧能传输的最大数据量。标准MTU是1500个字节,但是每种网络接口的MTU可以不同。
一个IP封包的最大长度可以达到65535个字节。MTU基本小于IP封包的最大长度。因此,当发送的IP封包的大小大于MTU时,网络层就需要对数据进行分片(fragment),否则,数据将无法成功发送。
分片发生在网络层,不仅源端主机会进行分片,中间的路由器也可能进行分片,因为不同网络的MTU可能不同,如果传输路径上的某个网络的MTU比源端网络的MTU小,路由器就可能对IP封包再次进行分片。而分片的重组只能发生在目的端的网络层,因为不同的IP分片可能通过不同的路径到达目的主机。
在分片时,网络层首先确定每个分片的长度(分片的长度应该是8的整数倍,单位是字节),并给每个分片都加上IP表头,一直分割到剩余的数据小于MTU。
与分片和重组相关的表头有:标识、标志和片偏移。
其中:
标识
标识字段占16位。属于同一个IP封包的所有分片都具有相同的标识符。目的主机按照标识符进行重组
标志
标志字段占3位。第一位固定位0;第二位表示DF(Don't Fragment),为1表示不分片,为0表示可以进行分片,如果DF位为1,且IP封包的长度大于MTU,那么路由器会丢弃IP封包,并向源主机发送ICMP差错报文;第三位表示MF(More Fragment),为1表示该分片不是最后一个分片,后面还有“更多分片”,为0表示该分片是最后一个分片,当目的主机收到最后一个分片的时候,会进行重组
片偏移
片偏移字段占13位。目的主机在重组IP封包的时候,会根据每个分片的片偏移字段确定该分片在IP封包中的相对位置。片偏移是以8个字节为单位计算偏移值的。比如:
通过上面的说明,可以看出,MTU越小,IP封包被拆分的程度越大。同时,发送设备每发送一个帧之后,需要随机等待一小段时间之后,才能继续发送下一个帧。这就意味着,帧和帧之间的总等待时间会增加,传输效率会变低。
但是,MTU也不是越大越好,因为随着帧的增大,传输的延迟会增加,传输过程中,出现差错的概率也会增大
路径MTU
路径MTU就是从源端到目的端所经过的路径上的所有IP跳的MTU的最小值