才子佳人博客

我的故事我讲述

关于MTU的一些概念
 
来源:xjh  编辑:xjh  2010-05-27

定义:

最大传输单元(Maximum Transmission Unit,MTU)是指链路层通信协议的上一层即IP层所能通过的最大数据包大小(以字节为单位)。

最大传输单元这个参数通常与通信接口有关,如以太网 MTU为1500 Byte,点对点为296 Byte。

如果IP层有一个数据包要传,而且数据包的长度比链路层的MTU还大,那么IP层就需要分片即数据包需要拆开来发送,每一片都小于MTU。

如何检测网关的MTU

如:ping -f -l 1472 192.168.1.1

请注意,上面的参数是“-l”(小写的L),而不是“-1”。 1472 bytes是本机送出去的数据包大小,ip 192.168.1.1 是gateway的ip,使用-f 表示数据包不分片。

运行结果出现响应,就表示这个mtu是可行的。

ping -f -l 1473 192.168.1.1

运行结果出现无响应,提示 Packet needs to be fragmented but DF set, 表示数据包需要拆开来发送。

MTU值的计算

每个数据包都具有包头,这个包头部分占去28个字节,所以最终的mtu数值其实是:1472+28=1500 Byte

分析:两次ping ,指定1472 字节可以通过,1473 就不能通过,说明实际的最大mtu值为1472+28=1500 Byte,此时可以达到最优的网络传输。

为什么加28字节?

ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把报文一模一样地传回给发送者。

ICMP数据报文的数据发送前需要两级封装:首先添加ICMP报头形成ICMP报文,再添加IP报头形成IP数据报。如下图所示:

IP报头(20字节)
ICMP报头(8字节)
ICMP数据报

IP数据报头格式

ICMP回显请求和回显应答报文格式


文章参考:
《TCP/IP详解卷一:协议 》(美)W.Richard Stevens 著 机械工业出版社 21页
http://baike.baidu.com/view/26974.htm?fr=ala0_1_1
http://www.ibm.com/developerworks/cn/linux/network/ping/(用C语言实现Ping程序功能)


分类:网络日志| 查看评论
相关文章
文章点击排行
本年度文章点击排行
发表评论:
  • 昵称: *
  • 邮箱: *
  • 网址:
  • 评论:(最多100字)
  • 验证码: