Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bytes大的frames,Jumbo frame的大小是每一个设备厂商规定的,不属于IEEE标准;Jumbo frame 在full-duplex 的Ethernet网络上运行;Jumbo frame定义了一个“link negotiation”协议,来和对端的设备协商,是否对端设备支持使用Jumbo frames;标准的以太网IP报文大小是:1500 bytes,不包含以太网头和FCS的18 bytes(6+6+2+4),若是包含以太网头和FCS,则为1518 bytes;Jumbo frame 通常指的是二层封装三层IP报文的值大于9000bytes的报文。
Jumbo frames的提出背景:在1998年,Alteon Networks 公司提出把Data Link Layer最大能传输的数据从1500 bytes 增长到9000 bytes,这个提议虽然没有获得IEEE 802.3 Working Group的赞成,可是大多数设备厂商都已经支持。html
在数据传输时,因为IEEE的规定最大的帧规定为1,500比特(主机在早期的半双功网络中),因此须要数传输须要通过 数据的切要 --- 传输 ---数据组合 的过程。而使用的最大帧越小,传输包的量就越大,计算量相应会多,而产生的后果是:
a:增长主机的计算量,消耗CPU资源;
b:影响网络传输的速度。
而使用大帧优势天然也不言而喻 ———— 下降CPU计算量、加快数据传输。linux
上面啰嗦了一大堆,修改帧大小实际须要的操做就是修改MTU(Maximum Transmission Unit)值,即修改最大传输单元。修改方法以下:网络
ifconfig ${Interface} mtu ${SIZE} up ifconfig eth1 mtu 9000 up
这个是最通用的方法,对全部的linux 发行版本都有效。缺点就是重启后失效,须要在开机项中加载。ide
CentOS / RHEL / Fedora Linux 下测试
# vi /etc/sysconfig/network-scripts/ifcfg-eth0 #增长以下内容 MTU="9000" #保存后重启网卡生效 # service network restart #启用IPv6地址的,修改IPv6 mtu的参数为 IPV6_MTU="1280"
Debian / Ubuntu Linux 下操作系统
# vi /etc/network/interfaces #增长以下值 mtu 9000 #保存后,重启网络生效 # /etc/init.d/networking restart
从理论上计算,4 bytes的CRC最大支持12000 bytes大小的字节,超过了就没有办法检查了。另外还有其余一些协议如NFS等的限制。
最后须要注意的是,在通过交换网络设备时,仅仅修改主机端的MTU值是不行的,还须要交换网络设备上开启jumbo frames功能。rest
使用ping命令,-l 指定包大小,-f 选项为通知操做系统不能私自更改该数据包大小 htm
使用英文操做系统时的提示为:Packet needs to be fragmented but DF set . blog
另外的,部分Linux系统还能够经过以下方式查看、修改MTU值。
查看:cat /sys/class/net/eth0/mtu
设置:echo "1460" > /sys/class/net/eth0/mtu
图片
默认的ANDROID系统中不带BUSYBOX,因此没法用BUSYBOX IFCONFIG来查看修改MTU值。其实网卡的MTU值是保存在/sys/class/net/eth0/mtu文件中,因此能够经过查看和修改文件达到修改MTU的目的:
如下以查看和修改eth0为例:
1. 查看MTU值
# cat /sys/class/net/eth0/mtu
2. 修改MTU值
# echo "1460" > /sys/class/net/eth0/mtu
顺便说一句,在/sys/class/net/eth0/目录中还有不少文件,对应了eth0的各个参数,能够手动的修改里面的值达到配置网卡参数的目的。
网络上传输的并不是连续的数据流,而是一个个的数据包,MTU的值限定了这个数据包的最大值。
若是电信运营商设定的数据包最大值为1480字节,而你的电脑经过路由器上网,默认是使用1500字节(若是是直连Modem,则会自动采用电信提供的 MTU值),那么你发送的数据包将超过电信的规定,而被退回,因而系统只好从新组成符合电信要求的数据包来发送,这样就浪费了时间,增长了处理工序,甚至有人所以网络很是不稳定,打开网页龟速。
最好的作法就是将本身电脑和路由器的 MTU 设置成电信容许的限值。
以管理员身份运行命令提示符,“局域网”的MTU值默认为1500,“宽带”的MTU值则各地区不一样,可经过尝试来获取所在地的MTU值,方法以下:
ping www.sina.com.cn -f -l 1500
"-f" 在数据包中设置“不分段”标志。强制系统将数据包一次性发送出去。
"-l 1500" 表明 length 长度,1500 表明数据包长度为 1500 个字节。
返回结果是:须要拆分数据包。
修改 length 值,直到找出最大可传输数据包的长度(例如本机是 1464)。
上面获得的值并不能直接用于本地设置上(由于这里获得的实际上是 MSS 而非 MTU),还应在此基础上加上 28(包头大小),所以最终的 MTU 值为:1464 + 28 = 1492
查询目前系统的 MTU 值:
netsh interface ipv4 show subinterfaces
修改:
netsh interface ipv4 set subinterface "本地链接" mtu=1492 store=persistent
至此,Win7 MTU 值修改完毕(不要忘了修改路由的 MTU 值)。