网络通信
网络通信
本篇主要讲解:网络通信-最大传输单元-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组装电脑配置单推荐报价格
上一篇:JS 之 分页
推荐阅读
留言与评论(共有 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重组) |