数据链路层以太网帧格式------理解MTU的定义和最大值(1500字节)
2017-07-01 20:18
344 查看
在前面的文章中, 我们讨论了IP的包格式, 也说过TCP/UDP的包格式。 无论是TCP还是UDP, 最终还是封装成了IP包, 我们知道, IP包的最大程度为65535个字节, 于是很多初学者会误解, 以为这65535字节的IP包数据, 是直接被数据链路层套上帧头和帧尾巴的。 比如, 下图就容易让人产生一个极大的误解:
这幅图的最大误人子弟之处在于, 如果上层数据比较长, 是无法套在一个tcp头部之后的, 其他各层也有类似特点。 举个本文涉及到的例子, 网络层的数据如果过长, 是没法直接加载链路层上的, 需要将网络层的数据分片, 然后在数据链路层组装成多个帧(而不是一个)。
下面, 我们来看看数据链路层(用以太网来举例)对上一层数据(网络层数据)长度的限制:
可以看到, 在单个帧中, IP数据包必须小于1500字节, 这个1500就是MTU(max transmission unit)能达到的最大值, 它是数据链路层允许的最大IP包。
回想下以前说的概念:
UDP包头中, UDP整个包的最大长度是65535个字节, 但是IP数据包的最大值也是这个长度, 所以IP层允许的最大UDP包长绝对不能65535个字节(而应该是65535 - 20个字节)。 同理, IP包的最大长度是65535个字节, 但是数据链路层允许的最大IP包, 绝对不能是65535个自己, 实际上远远小于这个数(如上图)。
在本文中, 我们了解到, 实际上, MTU的定义就是: 数据链路层允许的最大IP包长(其最大值是1500字节)。 理解这很重要, 在后面的博文中, 我们会继续说到。
有个问题有点拗口, MTU中的M已经有了“最”的意思, 为什么还说MTU的最大值呢? 爱思考的, 可以思考下。 我们后面再说。
这幅图的最大误人子弟之处在于, 如果上层数据比较长, 是无法套在一个tcp头部之后的, 其他各层也有类似特点。 举个本文涉及到的例子, 网络层的数据如果过长, 是没法直接加载链路层上的, 需要将网络层的数据分片, 然后在数据链路层组装成多个帧(而不是一个)。
下面, 我们来看看数据链路层(用以太网来举例)对上一层数据(网络层数据)长度的限制:
可以看到, 在单个帧中, IP数据包必须小于1500字节, 这个1500就是MTU(max transmission unit)能达到的最大值, 它是数据链路层允许的最大IP包。
回想下以前说的概念:
UDP包头中, UDP整个包的最大长度是65535个字节, 但是IP数据包的最大值也是这个长度, 所以IP层允许的最大UDP包长绝对不能65535个字节(而应该是65535 - 20个字节)。 同理, IP包的最大长度是65535个字节, 但是数据链路层允许的最大IP包, 绝对不能是65535个自己, 实际上远远小于这个数(如上图)。
在本文中, 我们了解到, 实际上, MTU的定义就是: 数据链路层允许的最大IP包长(其最大值是1500字节)。 理解这很重要, 在后面的博文中, 我们会继续说到。
有个问题有点拗口, MTU中的M已经有了“最”的意思, 为什么还说MTU的最大值呢? 爱思考的, 可以思考下。 我们后面再说。
相关文章推荐
- TCP传输的单个报文最大字节(MSS和MTU)
- 数据仓库定义的理解。
- 理解JAVa处理文本文件及字节文件的方式
- 惭愧,直到今天才对“数据类型字节对齐”有个深入的了解,对以前读书时学习的知识没有深刻理解啊 C/C++学习 C/C++学习 漫漫人生,澎湃的经历不断促使改变自己,永恒不变的是一颗骄傲的心!
- INFORMIX单记录最大字节限制。499: The operation causes a rowsize to exceed the allowable limit (32767).
- 字节定义
- 小议TCP的MSS(最大分段)以及MTU
- 理解Javascript中类的定义-补充
- 小议TCP的MSS(最大分段)以及MTU
- 警告: 已创建表 'JD_QZ',但其最大行大小(8438)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。
- 1.3.8 - [defns.multibyte] - 【定义.多字节】
- 深刻理解C数据结构中的递归定义
- 理解Javascript中类的定义
- MTU最大传输单元
- 警告: 已创建表 'JD_QZ',但其最大行大小(8438)超过了每行的最大字节数(8060)。如果结果行长度超过 8060 字节,则此表中行的 INSERT 或 UPDATE 将失败。
- 如何理解及定义指针 指针系列之二
- 解决 ASP 最大输入为 200KB 字节的问题/error 'ASP 0104 : 80004005' By Stabx
- Windows Server 2003中的IIS 6.0默认设置是特别严格和安全的,最大只能传送 204800个字节,我们需要修改,以允许从IE中上传更大的附件。解决办法是
- 理解 Delphi 的类(八) - 关于类的定义
- 并编程对派出类的功能进行验证。。 轿车类等 派生出自行车类 停车等方法。然后从该类为基类 最大速度。重量等字段以及开车 要求具有速度 定义一个车辆类