发布网友 发布时间:2022-04-22 00:19
共1个回答
热心网友 时间:2023-10-15 21:29
使用MTU IP进行分段
让 下面我们来谈谈一个有趣的内容。相信大家都有设置家用路由器的经历。不知道你有没有发现什么?设置拨号时,有一个MTU,一般是1492或1480。如果访问方法更改为DHCP,则MTU变为1500。为什么?
了解MTU的作用
最大传输单位:最大传输单位。以上例为例,为什么路由器在拨号时会将MTU设置为1492?在此之前,以太网报头已经为人所知。一个标准以太网数据帧的最大大小是1518,其中源MAC是6个字节,目的MAC是6个字节,type是2个字节,FCS是4个字节,6 6 2 4=18个字节,1518-18=1500,正好是预留给上层协议传输的大小。也就是说,数据帧的大小是1500字节,包括IP头、上层协议和整个数据。也就是说,在二层以太网中,实际能传输的数据是1500字节。
举一个最常见的例子,我们通常在家里用手机或笔记本电脑连接家用路由器来看电视剧和浏览Tik Tok。数据包都是这样的路径,每个节点都有对应的MTU值,一般是1500。
假设有一天,*的对接方式改成了拨号的形式。正常设置后发现网页打开很慢或者打不开 不要打开。咨询路由器客服后,将MTU值改为1492以下。神奇的事情发生了,所有人都能正常访问。这又回到了上一个问题。为什么当前路由器的MTU设置为1492?
那 因为宽带拨号使用的协议是PPPoE。因为我们还没有 涵盖了这个知识点,我们这里知道它只占用8个字节,封装在以太网中。比如一个访客向视频服务器发送了一个1495字节的数据包,但是由于家庭路由器在原来的1500字节上使用了8个字节,超过了1500字节的标准MTU值,所以家庭路由器会将数据包分片成两个片段,一个是1500字节,另一个是3字节,在服务器端进行重组。
由2)知识产权碎片化引起的问题
IP碎片化实际上是网络中的一种不好的情况,它带来了几个问题。
传输效率降低:碎片化会降低传输效率,增加设备的压力:本来一个数据包正好在1500字节的范围内,直接发送。如果超过1,500字节,就会产生碎片。如果有更多这样的数据包,相应的设备压力会增加,占用设备的资源。延迟增加:碎片化的另一个问题是,当同一数据包的多个碎片到达目的地时,目的地终端需要重新排列数据包才能读取内容。比如把一个大对象拆分成几个小对象发出去。收到后,需要重新组装。什么 更糟糕的是,如果一个组件迟到了,其他到达的组件将不得不等待。IP分片重组也是如此,所以会导致延迟增加。丢包:更严重的是,在复杂的网络环境下,万一某个片段丢失了,其余接收到的数据就没有意义了,可以 不能形成完整的数据包,因此将被丢弃。部分应用访问失败:比如上述网页的失败或打开缓慢是由碎片引起的,部分服务器有保护措施,拒绝接收碎片数据包。为什么是MTU 1500?很明显,IP字段的总长度是65535?
之前学过IP头的内容。IP头中有一个总长度,最大值是65535,说明IP协议可以承载这么大的数据包。但是因为以太网的最大数据部分是1500,所以你会在很多书或者书名上看到IP的最大数据包是1500字节。再多就支离破碎了。那么以太网为什么要把数据部分设置在1500呢?能 你不像IP头一样使用65535吗?那 这并没有提高多少效率。
为什么以太网的最小字节要求是?最早的以太网工作在共享网络下。任何终端节点在发送数据之前,都需要监听线路上是否有数据。如果有,也需要等待。如果线路可用,就可以发送。假设A端和B端同时向对方传输1比特,会产生冲突,其中一方要等一端完成传输,才能在一个时隙内传输,这个时隙是57.6 s。
在10Mbps以太网中,57.6s时间可以传输576位,以太网中数据帧的最小长度要求为576位,因为这个长度刚好够检测最极端的碰撞环境。但是,576位转换成72字节,去掉8字节的前同步码,正好是字节,这是以太网帧的数据部分所需的最小值。
为什么是MTU 1500?这是为了理解字节的由来,因为早期的工作模式。1500字节的原因是什么?
假设以太网没有这个*,最大IP协议可以承载65535字节,也就是65535 ^ 14 ^ 4=65553字节。如果前期在10Mbps以太网上传输,会占用50ms的共享链路,严重影响其他主机的通信。如果有延迟敏感的应用,肯定是不能接受的。另外,如果线路质量差,大数据包造成丢包的概率会大很多。/0.05-IP头-以太网头=100-8-20-18=54,你会发现有效速率太低。
最后逐层计算表明,如果以太网长度为1518,则有效传输效率=1472/1518=96.9%。这个值既能保证较大的帧长,又能保证有效的传输效率。大一点或者小一点的都会有以上问题。这也是一个折中的长度:1518字节,对应上层IP的1500字节。这是最大传输单位MTU的来源。
为什么不改善这个问题?这个问题是由于早期的以太网是通过Hub设备工作的,这是一种共享模式,效率很低。但是现在的网络已经不是10M的网络了,交换机已经支持1G、10G、100G,带宽独占,可以同时收发。有效的传输效率和质量都有了很大的提高,但是你会发现mtu 1500标准在今天依然在使用 美国网络。只有数据中心或一些特殊环境使用巨型帧,它可以支持大于9,000字节的大小。如果全网都用这个,不是 传输大文件是否会更快、延迟更少?
但真实环境并没有这么简单,因为MTU存在于每台设备的每一个接口上。
如果访问者支持MTU 9000,向无线路由器发送大小为9000的数据包,无线路由正好支持这么大的大小。如果交给互联网设备,互联网的设备很多,并不是所有设备都能支持巨型帧的特性。很多地方还在用的非常旧的设备在运行,要想支撑,就要大面积更换,成本很高。如果一个9000的包大小通过一个MTU为标准1500的设备,必然会产生碎片,并且存在超长帧带来的延迟、CRC错误等诸多问题,这也是其至今无法广泛应用的主要原因。
为什么4)IP碎片化会造成延迟和效率低下?
拖两台电脑,分别设置地址,然后抓包看碎片。
说出命令,Ping 192.168.255.2,就能知道是什么意思了。-l表示ICMP的数据部分是1473,-c 1只发送一次。
通过抓包可以看到有几条消息
ARP:这是获取对方IP对应的MACICMP,这是正常ICMP协议的报文IP分片:IP分片包有IP分片包,表示刚刚整个包超过1500字节。
为什么明明是1473的数据却超过了1500字节?请注意,1473表示ICMP数据部分的大小,不包括报头。加表头呢?1473 820=1501,刚好超过1500字节,导致碎片。MTU是两层概念。第二层以上的头加数据不能超过1500,否则会碎片化。
从192.168.255.1到192.168.255.2,为什么只有一个碎片包?
在这里,对于那些刚开始抓包的人来说,可能会有点困惑。让 让我们看看几个参数。
在IP报头中有一个标识。这是标识符。分片的包会用相同的包进行标记,便于目的地区分。标志中的MF位为1,这意味着这不是最后一个数据包。如果是最后一个包,则为0offset,表示包的位置。这是0,意味着它是第一个分段的数据包。数据:你会发现这里的数据是1480,没有ICMP头。还有一个1字节的数据包没有显示在grab数据包中。可能是抓取包中省略了尾包,但是从另一个地方可以看到。
看一个完整的包装就能搞混了。
在IP报头中有一个标识。这是标识符,分片后的包会被标上相同的包,便于目的地区分和捕获包。软件中有一个IPV4碎片的组合分析,发现有两个碎片,frame: 3,数据负载为0~1479,frame: 4,数据负载为1480-1481。也就是1481的总数据是1473,因为1481中有一个8字节的头。为什么1481-8=1473字节会影响效率,增加延迟?
数据包可能很小,所以你可以 感觉不到碎片化带来的问题。上图中的数据大小改为5000,会发现4个碎片,多了4个IP头。这些都是无缘无故的额外数据,中间设备和接收器都需要解封装这四个报头,以了解它们是什么,接收器根据IP报头片段给出的信息组装它们。假设某个片段中途延迟,那么数据包就不完整,实际内容只能在这个片段组装后才能读取,这样会影响效率,增加延迟。如果某个数据包分配丢失,该数据包将会不完整并被丢弃。
如何设置合适的MTU?
由于很多协议还没学会,不同的应用有不同的头,自然包含不同的内容。这将随着进一步的研究慢慢了解。设置一个合适的MTU可以被Windows # 039自己的命令。比如某个应用出现问题,通过包捕获发现传输数据超过MTU大小,可以适当调整。
ping命令中有一个参数-f,可以将IP包的DF位置设置为1,这样就不会碎片化。然后,如果超过MTU需要分片的设备发现DF位置1,就直接丢弃它,返回一个ICMP的错误消息结果,从而测试一个合适的MTU值。
留个小疑问。
为什么这里14可以,1465却可以 ?
承上启下 quot
网络层的基础知识在这里学到了,接下来会进入传输层和应用层。对于这两层,博主会选择比较重要的部分给初学者,全部讲出来要花很多时间,涉及的内容太多,超出了初学者 理解。下一个将进入传输层的两大协议,TCP和UDP。
王者之心2点击试玩