最近有测试问我Jumbo和MTU分别限制的是什么把我问住了,网上查了一些资料,发现大部分是百科上copy下来的,都没有说到点子上,关键时刻还是同事靠谱,现在根据自己的理解整理一下。

    首先了解一下二者的基本概念。

  • MTU

  最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议在某一层上面所能通过的最大数据报大小(以字节为单位),它通常与链路层协议有密切的关系。EthernetII帧结构如下:

DMAC(6)

SMAC(6)

Type(2)

Data(46-1500)

CRC(4)

  由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes,最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧,我们都可以视之为错误的数据帧。一般的以太网转发设备会丢弃这些数据帧。(注:小于64Bytes的数据帧一般是由于以太网冲突产生的 “碎片”或者线路干扰或者坏的以太网接口产生的,对于大于1518Bytes的数据帧我们一般把它叫做Giant帧,这种一般是由于线路干扰或者坏的以太网口产生)。

  由于以太网EthernetII最大的数据帧是1518Bytes,除去以太网帧的帧头(DMAC目的MAC地址 48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes (这个部份有时候大家也把它叫做FCS),那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes,这个值我们就把它称之为MTU。

  这个MTU就是网络层协议非常关心的地方,因为网络层协议比如IP协议会根据这个值来决定是否把上层传下来的数据进行分片。就好比一个盒子没法装下一大块面包,我们需要把面包切成片,装在多个盒子里面一样的道理。当两台远程PC互联的时候,它们的数据需要穿过很多的路由器和各种各样的网络媒介才能到达对端,网络中不同媒介的MTU各不相同,就好比一长段的水管,由不同粗细的水管组成(MTU不同 )通过这段水管最大水量就要由中间最细的水管决定。

  • Jumbo frame

  先看看百科上的概念解释:

  巨型帧是帧长大于1522字节的以太网帧。这是一种厂商标准的超长帧格式,专门为千兆以太网而设计。巨型帧的长度各厂商有所不同,从9000字节~64000字节不等。采用巨型帧能够令千兆以太网性能充分发挥,使数据传输效率提高50%~100%。在网络存储的应用环境中,巨型帧更具有非同寻常的意义。

  (注:此处的1522应该是在1518的基础上增加了4bytes的vlan-tag)

  先说一下优点:

       减少帧的开销,增加系统吞吐量,减少CPU利用率。(其他待补充)

  再说一下缺点:

    (1)由于传输一个巨型帧需要时间比较长,占用线路时间长,造成网络延时。

    (2)一旦巨型帧传输失败,则是一次更为严重的网络事件,重传则需要更多时间。

    (3)所有网络中的设备都要支持Jumbo frame才能正常使用。

    (4)Internet链接不支持Jumbo frame。

  • 二者的关系  

  在实际的网络设备中,MTU的限制是软件层面的限制,而Jumbo frame是限制的硬件层面,一般应用在千兆口或以上。原则上Jumbo frame的最小值是要大于以太网最大帧长的。

    举栗子:(这里不算帧头部了,也不考虑不分片的情况,知道那个意思就行)

    (1)Jumbo frame小于MTU:三层物理口MTU设置为900,Jumbo frame设置为1700。

      发送500的报文:直接发出去。

      发送1600的报文:先分片,再900+700正常发出去。

    (2)Jumbo frame大于MTU:三层物理口MTU设置为3000,Jumbo frame设置为1700。

      发送500的报文:直接发出去。

      发送1750的报文:在Jumbo frame处作了限制,做丢包处理。

      发送4000的报文:分片3000+1000,3000的部分丢掉了,1000部分发出了,对端校验失败,丢弃(存疑)。

   

Jumbo frame与MTU的更多相关文章

  1. 网卡最大传输单位MTU和巨型帧(Jumbo frame)设置

    1. 背景:在1998年,Alteon Networks 公司提出把Data Link Layer最大能传输的数据从1500 bytes 增加到9000 bytes,这个提议虽然没有得到IEEE 80 ...

  2. RAC优化大框架的分配(jumbo frame)

    RAC优化大框架的分配(jumbo frame) 首先讲讲MTU的概念:在网络通信中,有个MTU(Max Transmission Unit)的概念,即网络传输中最大帧的大小,这个值默认是1500By ...

  3. Neutron VxLAN + Linux Bridge 环境中的网络 MTU

    1. 基础知识 1.1 MTU   一个网络接口的 MTU 是它一次所能传输的最大数据块的大小.任何超过MTU的数据块都会在传输前分成小的传输单元.MTU 有两个测量层次:网络层和链路层.比如,网络层 ...

  4. MTU 最大传输单位

    MTU 最大传输单位 通过上面 MAC 封装的定义,现在我们知道标准以太网络frame所能传送的数据量最大可以到达 1500 bytes , 这个数值就被我们称为 MTU (Maximum Trans ...

  5. 理解 Linux 网络栈(1):Linux 网络协议栈简单总结

    本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + Vx ...

  6. [转]提高 Linux 上 socket 性能,加速网络应用程序的 4 种方法

    原文链接:http://www.ibm.com/developerworks/cn/linux/l-hisock.html 使用 Sockets API,我们可以开发客户机和服务器应用程序,它们可以在 ...

  7. 【翻译】Netscaler真实表现性能调整

    源地址:https://msandbu.wordpress.com/2014/10/31/netscaler-and-real-performance-tuning/ 作者显然不是以英语为母语的,所以 ...

  8. 提高 Linux 上 socket 性能

      http://www.cnblogs.com/luxf/archive/2010/06/13/1757662.html 基于Linux的Socket网络编程的性能优化   1 引言    随着In ...

  9. 提高Linux上socket性能

    在 开发 socket 应用程序时,首要任务通常是确保可靠性并满足一些特定的需求.利用本文中给出的 4 个提示,您就可以从头开始为实现最佳性能来设计并开发 socket 程序.本文内容包括对于 Soc ...

随机推荐

  1. hbase 迁库移库步骤

    1 将数据导出 hbase org.apache.hadoop.hbase.mapreduce.Export t_zyzx_grzyfwtjxxb /hbase/data_backup/2018103 ...

  2. shell杀死指定端口的进程

    杀死端口代码如下: lsof -i: kill - PID 上面的与下面的代码作用相同. 命令如下所示(这种方式更自动化): kill - $(netstat -nlp | grep : | awk ...

  3. (转)lwip TCP client & FreeRTOS 打开TCP 的 保活机制 LWIP_TCP_KEEPALIVE==1

    参考大神教程:http://blog.sina.com.cn/s/blog_62a85b950101aw8x.html   老衲五木 :http://blog.sina.com.cn/s/blog_6 ...

  4. ibatisNet MERGE INTO ORA-00911: 无效字符

    在sql工具中测试正常,放到代码中出现 “ORA-00911: 无效字符” 错误时,请检查sql语句是否有分号.

  5. map和unordered_map的差别和使用

    map和unordered_map的差别还不知道或者搞不清unordered_map和map是什么的,请见:http://blog.csdn.net/billcyj/article/details/7 ...

  6. Outlook插件开发(非VSTO),欢迎交流

    https://www.cnblogs.com/Charltsing/p/OutlookSample.html 联系QQ:564955427 最近写了个Outlook插件,实现了读取邮件联系人的功能, ...

  7. Day8 信号检测与估值

    检测:接收机或处理器根据在[0,T]内观测到的信号r(t)的统计特性,按照一定准则 判断信源发送的是某个已知信号集中的哪个信号. 如:调制信号的检测问题 估计:接收机或处理器根据在[0,T]内观测到的 ...

  8. [转帖]golang操作mysql使用总结

    golang操作mysql使用总结 https://www.cnblogs.com/hanyouchun/ 讲解的很详细~ 前言 Golang 提供了database/sql包用于对SQL数据库的访问 ...

  9. Kivy 中文教程 实例入门 简易画板 (Simple Paint App):1. 自定义窗口部件 (widget)

    1. 框架代码 用 PyCharm 新建一个名为 SimplePaintApp 的项目,然后新建一个名为 simple_paint_app.py 的 Python 源文件, 在代码编辑器中,输入以下框 ...

  10. gson常用的方式

    gson提供的fromJson()方法来实现从Json相关对象到Java实体的方法. 第一种.Json格式转成单一实体对象和转换成对象列表或者其他结构 第二种.转换成列表类型 注:TypeToken: ...