通信人家园

标题: [原创]TCP/IP 学习笔记-理解MTU  [查看完整版帖子] [打印本页]

时间:  2009-5-19 03:54
作者: chris_waity     标题: [原创]TCP/IP 学习笔记-理解MTU

MTUMaximum Transmission Unit),是指能在网络上传输的最大数据包大小,常见的默认MTU如下:

PPP:296;IEEE 802.3:1492;以太网:1500;FDDI:4352;超通道:65535;

这里引用的PPP的MTU是指传统在Modem到电话局之间链路上使用PPP的场景,不是目前流行的PPPoE(PPP over Ethernet),同时296并不是实际PPP最大的包大小,而是一个建议值,因为考虑了线路使用者的感受,即在960B/S线路中,使用这个建议值,可以有较好的感受,也就是等待时间可以在忍受范围内(注:以上PPP部分根据后面几位热心兄弟的建议进行了修改)

人一般可以忍受的等待时长在0.1秒到0.2秒以下。
对于960字节/秒的PPP网络,传送一个字节需要 1 / 960 = 0.01秒,传送1024字节需要 1024 / 960 = 1.067秒,如果一个数据包的大小就是1024字节的话,则平均等待时长为(1.067 + 0.1)/ 2 = 0.538秒,约为传送所有数据时间的一般。根据相同公式,要使PPP满足平均等待时长在0.1秒到0.2秒之间,则每包长度应在960 * 0.1 * 2到960 * 0.2 * 2之间,即192字节到384字节之间,同时考虑吞吐量(有效数据/数据包长度),296则是一个比较合适的MTU.

对于其他网络,个人理解就是数据帧格式中定义的最大数据长度,如以太网帧(Ethernet II):




目的地址

源地址

类型

数据

CRC

6字节

6字节

2字节

46字节~1500字节

4字节



对于超通道,其实就是IP帧格式中数据长度字段(16字节)计算而来:2的16次方 – 1 = 65535字节。实际应用中,还是会被链路层协议分片。如由以太网承载IP,就会被分片成小于1500字节的包。

当数据包在网络中传输时,如果经过某段网络的MTU比数据包的长度小,数据包则会从该段网络起被分片传送。但数据发送端总是期望发送的数据包越大越好,同时又期望每个数据包在传送过程中尽量不被分片(分片会降低数据包传送的可靠性),因而发送端使用网络中最小MTU发送数据是最为合适的。

UDP数据包一般采用512Bytes的大小发送数据,而TCP则根据两端协商的最小的MTU进行数据传输。这种方式,可以使绝大多数的UDP和TCP传输不进行分片。

但在个别情况下,还是有可能存在网络路径的某段MTU比发送报文长度还小,这时就得依赖网络路径MTU的发现机制了。有一种简单的实现方法,就是在发送端发送数据包时置上报文不可分片的标记。当报文经过MTU小于报文长度的路由器时,报文会被丢失,同时路由器返回ICMP差错报文,发送端收到差错报文后,进行发送报文的大小的调整,使发送报文最终达到网络中最小的MTU。


[ 本帖最后由 chris_waity 于 2009-5-22 13:05 编辑 ]
时间:  2009-5-19 10:22
作者: sun_gwtt

学习了 。。。对研究接入的很有帮助!!1
时间:  2009-5-19 11:40
作者: alrn

这样帖子,哎呀,我都不好意思顶,要不是为了升级!
时间:  2009-5-19 13:02
作者: bluesky2345

希望楼主继续,发布一些有用的帖子
时间:  2009-5-20 09:13
作者: harg6

非常感谢非常感谢~~~
时间:  2009-5-20 10:40
作者: shenhqi

这部分讲的似乎有些不对头
时间:  2009-5-20 17:07
作者: 田野小龙

可以说下,是那些不对头吗。。。
时间:  2009-5-21 10:51
作者: shenhqi

MTU——最大数据传输单元
这个数字是由分组交换中分组(包括帧)的数据区的大小决定的,这一点楼主讲得基本上是对的。
不对的是PPP,PPP同样是分组交换,照样存在数据区的大小问题,这个数据决定了MTU的大小,而不是通过某种计算决定的。
还有,IEEE802.3就是以太网的标准,二者的MTU居然不一样,就令人不知所措了,1500B是正确的答案。
时间:  2009-5-21 11:52
作者: jackhasun

不管怎么说,得顶一下
时间:  2009-5-22 06:24
作者: chris_waity     标题: 回复 8# 的帖子

按我的理解,做下简要说明:
这里引用的PPP的MTU来源是指PPP的原始应用,即普通MODEM到电话局这段链路的PPP使用,不是指PPP的扩展应用,如PPPoE(PPP over Ethernet)。我也会在文中加以说明下,多谢提醒
另一方,按TCP/IP一书作者的定义,我觉得他提到的以太网帧其实指的是Ethernet II,也是目前主流使用。 由于各种原因,以太网,IEEE 802.3是存在细微的差别的,因而体现在MTU稍有差别,我觉得的确可以忽略,如下
以太网帧(ethernet II ):
-----------
     6                6              2          46~1500        4
[ 目的地址 ][  源地址 ][  类型 ][       数据    ] [CRC]

IEEE802.3:
---------------
          6                 6           2                 8                      38~1492            4
[ 目的地址 ][  源地址 ][  长度 ][  IEEE 包头字段 ] [            数据          ][CRC]

似乎有4种以太网帧,抄了点找到的资料如下:
1.Ethernet II 即DIX 2.0:Xerox与DEC、Intel在1982年制定的以太网标准帧格式。Cisco名称为:ARPA。
2.Ethernet 802.3 raw:Novell在1983年公布的专用以太网标准帧格式。Cisco名称为:Novell-Ether。
3.Ethernet 802.3 SAP:IEEE在1985年公布的Ethernet 802.3的SAP版本以太网帧格式。Cisco名称为:SAP。
4.Ethernet 802.3 SNAP:IEEE在1985年公布的Ethernet 802.3的SNAP版本以太网帧格式。Cisco名称为:SNAP。

[ 本帖最后由 chris_waity 于 2009-5-22 08:44 编辑 ]
时间:  2009-5-22 06:36
作者: chris_waity

晕啊~,回了两个贴,结果遇到两个超级负面事件,辛苦钱都掉完了~~

[ 本帖最后由 chris_waity 于 2009-5-22 08:37 编辑 ]
时间:  2009-5-22 10:15
作者: shenhqi

LZ,关于以太网的数据块大小,你说得没错,但是一般都忽略不计。而且现在用的早就不是802.3了,都是加了后缀的,比如802.A等等,所以说1500B就可以了
至于PPPOE,我的理解是这样的(仅限于个人理解,不敢保证正确):通信双方建立连接时,有一个协议过程,这时确定了MTU的大小,以后一般不能更改。在确定MTU大小时,使用了你描述的算法,当然也可以不使用,直接用默认值。但是一旦连接完成,MTU就被确定下来。所以,在这个时候MTU是确定值,而不是计算值。加上这段描述容易误导读者。
时间:  2009-5-22 10:18
作者: liuwm

原帖由 shenhqi 于 2009-5-21 10:51 发表
MTU——最大数据传输单元
这个数字是由分组交换中分组(包括帧)的数据区的大小决定的,这一点楼主讲得基本上是对的。
不对的是PPP,PPP同样是分组交换,照样存在数据区的大小问题,这个数据决定了MTU的大小,而不 ...


由于802.3标准是在以太网的基础上发展起来的,所以他们有着千丝万缕的关系,一般都认为他们就是同一个东西。但实际上还是有些差别的,帧格式如下:[localimg=350,300]1[/localimg]
ff8039c6f5d9481d9d163dc8.jpg

附件: ff8039c6f5d9481d9d163dc8.jpg (2009-5-22 10:18, 19.36 KB) / 下载次数 2
https://www.txrjy.com/forum.php?mod=attachment&aid=NTI1MTN8ODMzYjQxYTl8MTc1MzA0OTc4MXwwfDA%3D
时间:  2009-5-22 11:01
作者: aaddaadd

学习了 。。。对研究接入的很有帮助

附件: 1 (3).gif (2009-5-22 11:01, 2 KB) / 下载次数 3
https://www.txrjy.com/forum.php?mod=attachment&aid=NTI1MjB8ODE5NTZlMjN8MTc1MzA0OTc4MXwwfDA%3D




通信人家园 (https://www.txrjy.com/) Powered by C114