
IEEE 8023以太网标准仅规定支持1500Byte的帧MTU,总计1518Byte的帧大小。(使用IEEE 8021Q VLAN/QoS标签时,增加至1522Byte)而巨型帧往往采用9000Byte的帧MTU,合计9018/9022Byte的帧大小。
目前巨型帧尚未成为官方的IEEE 8023以太网标准的一部分。所以不同硬件厂商的设备支持程度可能不尽相同。
使用巨型帧,增大的有效报文长度提升了带宽使用效率的提升(如下图)。与此同时,增长的报文也带来传输时延的增加,时延敏感型数据并不适合使用巨型帧传输。
从配置项的描述总结而言,global_physnet_mtu与physical_network_mtus共同定义了underlay physical network的MTU,path_mtu定义了overlay network的MTU。
在neutronconf中
在ml2ini中
该配置定义了所有underlay网络(flat,vlan)与overlay网络(vxlan,gre)的MTU值均为9000。
在neutronconf中
在ml2ini中
该配置定义了underlay网络provider2的MTU值为4000,provider3的MTU值为1500,其他如provider1的MTU值为9000。而overlay网络的MTU值为9000。
在neutronconf中
在ml2ini中
该配置定义了所有underlay网络MTU值为9000,overlay网络的MTU值均为4000。
flat和vlan网络,根据实际的物理网络映射与physical_network_mtus、global_physnet_mtu信息,获取最小可用MTU值。
Geneve,Gre,Vxlan类型网络,则根据global_physnet_mtu与path_mtu中选取最小的可用MTU值,减去各类型报文头部开销,获取实际可用MTU值。
在用户实际创建network资源时,若未显式指定网络MTU值,则使用该网络类型下系统定义的最大可用MTU。若显式指定MTU,neutron会检查用户定义MTU是否小于等于该网络类型下系统定义的最大可用MTU。
在使用Linux Bridge实现的Neutron网络中,Linux Bridge Agent在侦测到新的device后,会通过ip link set *** 作,根据network中的MTU值,设置虚拟机绑定至Linux Bridge的tap设备的MTU值。反观Openvswitch实现的网络中却没有相关的设置。实际在使用过程中需要通过ovs-vsctl set Interface <tap name> mtu_request=<MTU Value>命令人工去设置tap设备的MTU值。
dhcp和router相关的tap设备在plug时,neutron会根据网络的MTU,在各tap设备所在的namespace内运行“ip link set <tap name> mtu <MTU value>”设置tap设备的MTU值。
Openstack从J版以后,neutron使用ovs patch port代替了linux veth实现OVS网桥之间的连接(出于性能提升的目的)。但依旧保留了veth连接的方式。在openvswitch_agentini中可以通过配置use_veth_interconnection=true启用veth连接网桥的功能。如果开启这项配置,默认的veth_mtu值为9000。当配置链路MTU大于9000时,需要修改openvswitch_agentini配置文件中veth_mtu的值,以免发生瓶颈效应。
虚拟机内部网卡配置MTU则是通过虚拟机DHCP请求IP地址时,顺便请求MTU值。在RFC2132 DHCP Option and BOOTP Vendor Extensions里明确定义了Interface MTU Option。DHCP Option Code 26 用两个字节的MTU数据,定义了网络接口的MTU值。如下表所示。
在DHCP agent中,dnsmasq的spawn_process会根据network的MTU值调整自身的启动参数。从而使虚拟机在DHCP过程中能正确地配置自身网卡的MTU值。
通过指定ICMP报文内容size以及IP报文不分片来探测MTU值设置是否正确。注意这里的size是指icmp data size。该size并不包含ICMP报文头部长度(8Byte)以及IP头部长度(20Byte)。
windows下
linux下
第一步、测出自己当前网络最佳MTU值,敲下 “Win键+R”,然后在运行窗口后输入“cmd”,再敲回车键。
第二步、在命令提示符窗口输入以下命令(建议直接复制,以免误将小写字母 l 写为数字 1),输好之后敲击回车。ping -l 1472 -f >
这条命令的意思是向 >
第三步、要是出现传输失败,提示需要拆分数据包的情况,就说明当前网络的 MTU 值要比指定的 1472 小,因此我们就适当调小数据包的大小(比如 1450),再发送一条类似的命令。
第四步、如果出现传输成功,就说明当前网络的 MTU 值比 1450 要大。于是我们需要稍微调大数值(比如1460),以便求得最为精确的网络 MTU 值。
第五步、然后通过不断修正数据包的大小,最终得到当前网络的 MTU 值。比如小编我这里,测试 1464 通过,但 1465 失败,所以小编的网络 MTU 值为 1464。
在此需要特别说明的是,当设置本地 MTU 值,必须牢记要将这个测得的值再加上 28,即 1464+28 = 1492。
电脑MTU值不能超过你的宽带MTU值,否则需要拆包,会比较慢
先检测mtu在修改
按开始键-点运行-输入cmd,进入dos界面,输入:
ping
-f
-l
1472
19216811
按Enter键其中19216811是网关IP地址,1472是数据包的长度。请注意,上面的参数是“-l”(小写的L),而不是“-1”。
如果能ping通,表示数据包不需要拆包,可以通过网关发送出去。
如果出现:
Packet
needs
to
be
fragmented
but
DF
set
表示数据包需要拆开来发送。此时,减少数据包长度,再执行上面的ping命令。从1400到1472之间多试几次,就能找到合适的数据包长度了。把数据包长度加上数据包头28字节,就得到MTU的值。
如果检测到网关的MTU值是1500,不需要修改。
如果网关有防火墙ping不通,可以试试直接把MTU设为1400。
修改方法如下:
Windows平台下
1、运行regedit
2、打开:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
3、Interfaces下有多个子项,每个子项对应一个网卡。请按如下方法选择网卡:
A、确定本机用来连接Internet的网卡或拨号连接的IP,如192168019;
B、用鼠标点击Interfaces上的子项,查看键值列表中的IPAddress项;
C、如果IPAddress的键值与A中的IP相同,即192168019,则该子项就是要找的网卡。
4、进入该子项,在右边的窗口里按鼠标右键,选择“新建”->“DWORD
值”,输入名称“MTU”,按回车。再用鼠标双击“MTU”,d出修改窗口,填入MTU的值(一般为十进制的1480)。
填写前请先把基数设为十进制。
设置好后,需要重启机器才能生效。
Windows
7(XP、Vista未实测)
1、使用管理员权限运行cmd
2、使用netsh
interface
ipv4
show
subinterfaces命令看看MTU以及本地连接名称。
3、使用netsh
interface
ipv4
set
subinterface
"连接名"
mtu=300
store=persistent
(注:这里的连接名是你使用上面命令看到的MTU值对应的这个连接名,他在右边显示。)
附:1、此方法不用重启;2、如是ipv6就将上面的ipv4改成ipv6
Linux下可使用如下命令修改
需要root权限
ifconfig
网卡
MTU值
如
ifconfig
eth0
mtu
1460
顺便说一句,个人电脑修改MTU无任何意义! 下面是方法。
1、本地MTU值大于网络MTU值时,本地传输的数据包过大导致网络会拆包后传输,不但产生额外的数据包,而且消耗了“拆包、组包”的时间。
2、本地MTU值小于网络MTU值时,本地传输的数据包可以直接传输,但是未能完全利用网络给予的数据包传输尺寸的上限值,传输能力未完全发挥。
这样我们就知道,所谓合理的设置MTU值,就是让本地的MTU值与网络的MTU值一致,既能完整发挥传输性能,又不让数据包拆分。
接下来最重要的就是要找出对于你的网络环境来说MTU多少才是合理的。
方法如下:
1、按Win+R组合键,调出“运行”菜单,输入“cmd”然后回车
2、在出现的“命令提示符”窗口中输入“ping -l 1472 -f >
linux 查看当前的网络配置命令格式:ifconfig interface optionsaddress。
ifconfig命令用于设置或查看网络配置,包括IP地址、网络掩码、广播地址等。它是linux系统中,使用频率最高的关于网络方面的命令。
主要参数:interface:网络接口名;up:打开网络接口;down:关闭网络接口;broadcast:设置网络接口的广播地址;netmask:设置网络接口的子网掩码;address:设置网络接口的IPv4地址;add:给指定网络接口配置IPv6地址;del:删除指定网络接口的IPv6地址。
1、查看多个网络接口方法:
2、查看本机的路由表, route命令,加上-n参数显示数字地址。
3、查看本机ARP缓存表, arp 命令 参数列表中 -a 列出所有条目, -n显示数字地址:
4、查看网络连接信息 是netstat命令:
1本地MTU值大于网络MTU值时,本地传输的数据包过大导致网络会拆包后传输,不但产生额外的数据包,而且消耗了“拆包、组包”的时间 。
2本地MTU值小于网络MTU值时,本地传输的数据包可以直接传输,但是未能完全利用网络给予的数据包传输尺寸的上限值,传输能力未完全发挥 。
这样我们就知道:
所谓合理的设置MTU值,就是让本地的MTU值与网络的MTU值一致,既能完整发挥传输性能,又不让数据包拆分。
Linux OS:
ping -s 1472 -M do 172210118
含义:
发送大小包大小是1472(+28)字节,禁止路由器拆分数据包。
回复结果:
1如果正常回复,说明网络允许最大MTU就是1500字节,与系统默认相同,只需将自己的路由的MTU也设置为1500即可。
2如果没正常回复,说明数据包大小超过了网络限定的MTU大小。需要减小探测包大小再次尝试。
以上就是关于Openstack Jumbo Frame调整实践全部的内容,包括:Openstack Jumbo Frame调整实践、如何修改mtu值、网络校验网MTU值是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)