您现在的位置是:首页 > 数码 > 

网络通信

2025-07-26 00:38:00
网络通信 本篇主要讲解:网络通信-最大传输单元-MTU 参考链接1 文章目录MTU 引用MTU 介绍定义MTU 与 VLA TagVLA Tag 处理方式IP分片可靠传输MTU 之 PMTUDPMTUD介绍IP头的DF分片位DF = 0 可以分片DF = 1 不可以分片注意事项 MTU 引用 以太网最初对报文长度没有限制,网

网络通信

本篇主要讲解:网络通信-最大传输单元-MTU
参考链接1


文章目录
        • MTU 引用
        • MTU 介绍
          • 定义
          • MTU 与 VLA Tag
          • VLA Tag 处理方式
        • IP分片
        • 可靠传输
        • MTU 之 PMTUD
          • PMTUD介绍
          • IP头的DF分片位
            • DF = 0 可以分片
            • DF = 1 不可以分片
        • 注意事项

MTU 引用

以太网最初对报文长度没有限制,网络层最大可以接收6555个字节,但是以太网对于长报文无法可靠地传输,而且丢失后重传也会占用大量的网络资源,而将报文限制在一定的长度,以太网可以将报文大概率传输到目的地,于是就有了MTU


MTU 介绍

定义

Maximum Transmission Unit,即最大传输单元,以太网的数据链路层对网络层数据包的长度会有一个限制,其最大值默认是1500字节,链路层的这个特性称为MTU,由硬件网卡设置,是 数据链路层对网络层硬性限制
MTU表示网络层必须将发给网卡API的包 <= 1500byte,否则调用失败, 这个1500字节数据长度是针对网络层的,不包含链路层的头部和尾部

MTU 与 VLA Tag

如果有的以太网网卡配置了VLA Tag ,通过此网卡的数据帧会携带VLA Tag,VLA Tag要算在链路层的Payload里, MTU = 1500里包含802.1Q的头部VLA Tag (如下图)

当网卡配置VLA Tag时, VLA Tag  Data <= MTU ,有时VLA Tag不只有一个,可能是双标签,那这个VLA Tag就是8个字节。这时候的MTU如果还是1500,链路层的Payload就不可能是1500了

VLA Tag 处理方式

可以把添加802.1Q的接口设置MTU=1504或1508(网卡设置,硬件操作)


IP分片

既然链路层的Payload有MTU限制,就意味着 网络层下发到链路层的数据不能超过MTU,如果超过了MTU,就需要在网络层分片 ,切成<=MTU的IP数据包

网络层如果发现链路层的MTU小于IP包的大小(网络层可以调用函数获取链路层信息),也并不会立刻开始分片,还需要看IP包的是否允许分片位DF(Don’t Fragment)(在下方内容PMTUD处详述,如果允许分片,就会 分成多个ID一样的IP包


可靠传输

对于UDP包,如果MTU = 1500,那么udp Payload最大值是多少,才可以不用分片?

MTU(1500) = IPHeader(20)  UDPHeader(8)  Payload
Payload = 1500 -20 - 8 = 1472

如果UDP包的Data <= 1472个字节,UDP包(UDPHeaderData)在网络层不用分片,直接封装上IPHeader发往链路层,如果UDP包的Data > 1472,那么UDP包(UDPHeader  Data)需要在网络层分片 ,如何分片?

网络层并不会在每个分片里复制一次UDP头,它是把完整的UDP包切开,加上IP头发送出去,除了第一个分片有UDP头,后面的分片都不包含UDP头

目的主机的网络层接收到多个UDP分片包后,网络层必须重组才能交给上层,为什么?

因为多个分片包只有第一个是有UDP头的,它可以根据UDP头里的端口号通知相应的应用取走,但是后面的分片包由于没有UDP头,传输层无法把分片包交给正确的应用程序。所以UDP分片包必须在 网络层重组成一个完整的UDP包,交给传输层处理IP分片会分成多个ID一样的IP包,根据ID重组)。

  • 不可靠传输

UDP如果某些分片包没有被目的主机的网络层接收到,UDP包重组失败,接收方会丢弃整个数据包,这是UDP不可靠传输的一个表现。
对于UDP来说,一般选择576个字节通信

  • 可靠传输

TCP包重组失败,该包会被重传,保证可靠传输


MTU 之 PMTUD

PMTUD介绍

PMTUD:Path MTU Discovery

收发双方在TCP协议通信时,根据取较小MSS的原则理论上避免了发送方在网络层分片,接收方在网卡由于超过MTU而无法接收的情况
但是,以太网通信不是只有两台主机,它们通信的途中还有路由器和交换机,路由器和交换机都有自己的MTU,主机的网络层可以分片,路由器的网络层也可以分片
就像木桶理论一样,木桶能装多少水取决于最短的那块, 网络通信的路径上决定IP包大小的,取决于源主机、目的主机、路由器中MTU最小的那个这就是PMTUD

路由器和交换机都有自己的MTU,如果数据帧超过了它们的MTU,在从出口发出去时,需要进行分片网络层能否分片IP包,需要根据IP头的DF分片位决定

IP头的DF分片位

DF = 0,表示可以分片
DF = 1,表示不可以分片

DF = 0 可以分片

下图设定 ,设定左右两台主机在TCP握手阶段,确定了MSS = 1480 - 20 - 20 = 1440,设定发送的IP包就是1440  20  20 = 1480,如果是直连,这样的IP包在发出去的时候不会分片,而接收端也可以接收到。

但是当IP包到达路由器时,需要从另一个接口发出,而接口MTU为1450,必须分片才能发送,这时候 路由器就会检查IP包的DF位,以确定这个IP包是否支持分片

发现DF位是0,表示可以分片,就把这个IP包分成两份,1450和0,由于第一份1450是有IP头的,可以直接下发到链路层发出,而第二份0是没有IP头的,需要加上IP头20个字节,形成一份新的IP包,最终大小是50个字节,同样下发到链路层发出

DF = 1 不可以分片

如下图,与上面DF = 0的情况不同的是,路由器发现IP包需要分片,然后查看IP包的DF位,发现值为1,显示不能分片,此时路由器只能丢弃此IP包,同时给源主机回复一个ICMP目的不可达的消息,Type = ,code = 4

  • 上图中code = 4的含义

同时,在ICMP消息里还会携带路由器的MTU的大小,告知源主机这个路由器的MTU是多少,这样源主机就可以继续调整自己的MSS值如果有多个路由器,多个路由器都会这样操作,最终确定一个这条路径上的最小MTU,这就是PMTUD

另外,ICMP目的不可达消息,还会把丢弃的IP包的各层报头也放在里面(如下图)

注意事项

路由器的MTU只针对网络通信数据出口,接收数据不受限制
PMTUD只有TCP支持,UDP并不支持


#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/shuma/805820.html

相关标签:无
上传时间: 2024-01-18 06:23:17
留言与评论(共有 15 条评论)
本站网友 房颤心电图
20分钟前 发表
上图中code = 4的含义 同时,在ICMP消息里还会携带路由器的MTU的大小,告知源主机这个路由器的MTU是多少,这样源主机就可以继续调整自己的MSS值 ,如果有多个路由器,多个路由器都会这样操作,最终确定一个这条路径上的最小MTU,这就是PMTUD
本站网友 消除痘印
3分钟前 发表
对于UDP来说,一般选择576个字节通信 可靠传输 TCP包重组失败,该包会被重传,保证可靠传输 MTU 之 PMTUD PMTUD介绍 PMTUD:Path MTU Discovery 收发双方在TCP协议通信时,根据取较小MSS的原则,理论上避免了发送方在网络层分片,接收方在网卡由于超过MTU而无法接收的情况
本站网友 青岛26中
28分钟前 发表
另外,ICMP目的不可达消息,还会把丢弃的IP包的各层报头也放在里面(如下图) 注意事项 路由器的MTU只针对网络通信数据出口,接收数据不受限制 PMTUD只有TCP支持,UDP并不支持
本站网友 步履艰难的意思
16分钟前 发表
路由器中MTU最小的那个 ,这就是PMTUD
本站网友 她不爱我了
29分钟前 发表
这时候的MTU如果还是1500,链路层的Payload就不可能是1500了 VLA Tag 处理方式 可以把添加802.1Q的接口设置MTU=1504或1508(网卡设置,硬件操作) IP分片 既然链路层的Payload有MTU限制,就意味着 网络层下发到链路层的数据不能超过MTU,如果超过了MTU,就需要在网络层分片 ,切成<=MTU的IP数据包 网络层如果发现链路层的MTU小于IP包的大小(网络层可以调用函数获取链路层信息),也并不会立刻开始分片,还需要看IP包的是否允许分片位DF(Don’t Fragment)(在下方内容PMTUD处详述),如果允许分片,就会 分成多个ID一样的IP包
本站网友 民科
14分钟前 发表
但是当IP包到达路由器时,需要从另一个接口发出,而接口MTU为1450,必须分片才能发送,这时候 路由器就会检查IP包的DF位,以确定这个IP包是否支持分片
本站网友 中国黄金今日金价查询
10分钟前 发表
网络通信 本篇主要讲解:网络通信-最大传输单元-MTU 参考链接1 文章目录MTU 引用MTU 介绍定义MTU 与 VLA TagVLA Tag 处理方式IP分片可靠传输MTU 之 PMTUDPMTUD介绍IP头的DF分片位DF = 0 可以分片DF = 1 不可以分片注意事项 MTU 引用 以太网最初对报文长度没有限制,网络层最大可以接收6555个字节,但是以太网对于长报文无法可靠地传输,而且丢失后重传也会占用大量的网络资源,而将报文限制在一定的长度,以太网可以将报文大概率传输到目的地,于是就有了MTU MTU 介绍 定义 Maximum Transmission Unit,即最大传输单元,以太网的数据链路层对网络层数据包的长度会有一个限制,其最大值默认是1500字节,链路层的这个特性称为MTU,由硬件网卡设置,是 数据链路层对网络层 的硬性限制
本站网友 四顾剑
16分钟前 发表
路由器和交换机都有自己的MTU,如果数据帧超过了它们的MTU,在从出口发出去时,需要进行分片, 网络层能否分片IP包,需要根据IP头的DF分片位决定
本站网友 上海医联网
8分钟前 发表
目的主机
本站网友 克拉玛依美食
9分钟前 发表
就像木桶理论一样,木桶能装多少水取决于最短的那块, 网络通信的路径上决定IP包大小的,取决于源主机
本站网友 运20首飞
29分钟前 发表
所以UDP分片包必须在 网络层重组成一个完整的UDP包,交给传输层处理 (IP分片会分成多个ID一样的IP包,根据ID重组)
本站网友 盖象商城
4分钟前 发表
发现DF位是0,表示可以分片,就把这个IP包分成两份,1450和0,由于第一份1450是有IP头的,可以直接下发到链路层发出,而第二份0是没有IP头的,需要加上IP头20个字节,形成一份新的IP包,最终大小是50个字节,同样下发到链路层发出 DF = 1 不可以分片 如下图,与上面DF = 0的情况不同的是,路由器发现IP包需要分片,然后查看IP包的DF位,发现值为1,显示不能分片,此时路由器只能丢弃此IP包,同时给源主机回复一个ICMP目的不可达的消息,Type = ,code = 4
本站网友 ins是什么
9分钟前 发表
目的主机
本站网友 血栓心脉宁胶囊
27分钟前 发表
所以UDP分片包必须在 网络层重组成一个完整的UDP包,交给传输层处理 (IP分片会分成多个ID一样的IP包,根据ID重组)