Chinaunix首页 | 论坛 | 博客
  • 博客访问: 580078
  • 博文数量: 142
  • 博客积分: 10016
  • 博客等级: 上将
  • 技术积分: 1835
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-10 14:30
个人简介

工作中~

文章分类

全部博文(142)

文章存档

2009年(25)

2008年(117)

我的朋友

分类: LINUX

2008-09-24 08:48:51

摘自鸟哥的私房菜

这个ping是很重要的命令,ping主要通过ICMP数据包来进行整个网络的状况报告,当然,最重要的就是ICMP type 0、8这两个类型,分别是要求回报与主动回报网络状态是否存在的特性。要特别注意的是,ping需要通过IP数据包来传送ICMP数据包,而IP数据包里有个相当重要的TTL(Time To Live)属性,这是一个很重要的路由特性,详细的IP与ICMP表头数据请参考网络基础的详细介绍。

[root@linux ~]# ping [-bcstnM] IP
参数:
-b,后面接的是 broadcast 的 IP,用在你“需要对整个网段的主机进行 ping ”时;
-c,后面接的是执行 ping 的次数,例如 -c 5 ;
-n,不进行 IP 与主机名称的反查,直接使用 IP ;
-s,发送出去的 ICMP 数据包大小,默认为 56(bytes),再加 8 bytes 的 ICMP 表头资料。
-t,TTL 的数值,默认是 255,每经过一个节点就会少
-M [do|dont] :主要在检测网络的 MTU 数值大小,两个常见的项目是:
do,代表传送一个 DF (Don't Fragment) 旗标,让数据包不能重新拆包与打包;
dont,代表不要传送 DF 标记,表示数据包可以在其他主机上拆包与打包。

范例一:检测一下 168.95.1.1 这部 DNS 主机是否存在?
[root@linux ~]# ping -c 3 168.95.1.1
PING 168.95.1.1 (168.95.1.1) 56(84) bytes of data.
64 bytes from 168.95.1.1: icmp_seq=0 ttl=243 time=9.16 ms
64 bytes from 168.95.1.1: icmp_seq=1 ttl=243 time=8.98 ms
64 bytes from 168.95.1.1: icmp_seq=2 ttl=243 time=8.80 ms

--- 168.95.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 8.807/8.986/9.163/0.164 ms, pipe 2


ping最简单的功能就是传送ICMP数据包去要求对方主机响应是否存在于网络环境中。上面的响应信息当中,几个重要的项目如下。

· 64 Bytes:表示这次传送的ICMP数据包大小为64 Bytes,这是默认值。在某些特殊场合中,例如,要搜索整个网络内最大的MTU时,可以使用-s 2000之类的数值来取代。

· icmp_seq=0:ICMP所检测进行的次数,第一次编号为0。

· ttl=243:TTL与IP数据包内的TTL是相同的,每经过一个带有MAC的节点(node)时,例如router、bridge时,TTL就会减少1,默认的TTL为255,你可以通过 -t 150之类的方法来重新设置默认TTL数值。

· time=9.16 ms:响应时间,单位有ms(0.001秒)及µs(0.000001秒),一般来说,响应时间越小,表示两台主机之间的网络联机越良好。

如果你忘记加上 -c 3这样的规定检测次数,那就得要使用 [ctrl]-c将它结束掉了。

范例二:针对整个网段进行 ping 的追查
[root@linux ~]# ping -c 3 -b 192.168.10.255
WARNING: pinging broadcast address <==会告知危险。
PING 192.168.10.255 (192.168.10.255) 56(84) bytes of data.
64 bytes from 192.168.10.100: icmp_seq=1 ttl=64 time=0.177 ms
64 bytes from 192.168.10.20: icmp_seq=1 ttl=64 time=0.179 ms (DUP!)
64 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.302 ms (DUP!)
64 bytes from 192.168.10.40: icmp_seq=1 ttl=64 time=0.304 ms (DUP!)
# 当针对整台主机作 ping 的检测时,可以利用 -b 这个参数。
# 请特别注意,当使用 ping -b 时,会对整个网段进行检测。没事别乱用。
# 例如上面的范例中,区网内的 192.168.10.20... 等主机会被检测到。

如果想要了解网内有多少台主机存活着,那么使用ping -b broadcast就能够知道了。而不必一台一台主机来检测。另外要特别注意一下,如果你的主机与待检测主机并不在同一个网段内,那么TTL默认使用 255,如果是同一个网段内,那么TTL默认则使用64。看看上面的输出即可明白。

我们在前几章的网络基础里面谈到加大帧(frame)时,对于网络性能是有帮助的,因为数据包打包的次数会减少,加上如果整个传输的媒介都能够接受这个frame而不需要重新进行数据包的拆解与重组的话,那么性能当然会更好,修改frame大小的参数就是MTU。好了,现在我们知道网卡的MTU可以通过ifconfig或者是ip等来实现,那么追踪整个网络传输的最大MTU时,又该如何查询?最简单的方法当然是通过ping传送一个大数据包,并且不许中继的路由器或Switch将该数据包重组,这就能够处理了:

范例三:找出最大的 MTU 数值
[root@linux ~]# ping -c 2 -s 1000 -M do 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 1000(1028) bytes of data.
1008 bytes from 192.168.10.10: icmp_seq=1 ttl=64 time=0.424 ms
# 如果有响应,那就是可以接受这个数据包,如果无响应,那就表示这个 MTU 太大了

[root@linux ~]# ping -c 2 -s 8000 -M do 192.168.10.10
PING 192.168.10.10 (192.168.10.10) 8000(8028) bytes of data.
ping: local error: Message too long, mtu=1500
# 这个错误信息是说,本地端的 MTU 才到 1500 而已,你要检测 8000 的 MTU
# 根本就是无法实现的。那如何是好?用前一小节介绍的 ip link 来进行 MTU 设置吧

不过,你需要知道的是,由于IP数据包表头(不含options)已经占用了20Bytes,再加上ICMP的表头有8Bytes,所以当然你在使用 -s size的时候,那个数据包就得要先扣除 (20+8=28)的大小了。因此如果要使用MTU为1500时,就得要下达“ping -s 1472 -M do xx.yy.zz.ip”才行。另外,由于本地端的网卡MTU也会影响到检测,所以如果想要检测整个传输媒介的MTU数值,那么每个可以调整的主机就得要先使用ifcofig或ip将MTU调大,然后再去进行检测,否则就会像上面提供的案例一样,可能会出现“Message too long,mtu=1500”之类的字样。如果检测完毕后,想要调整最佳化的MTU,那么请参考前一章节的内容来调整。

不过不要随便调整MTU,除非真的有问题。通常是在如下情况调整MTU。

· 因为全部的主机群都是在内部的网段,例如群集架构(Cluster)的环境下,由于内部的网络节点都是我们可以控制的,因此可以通过修改MTU来改进网络性能。

· 因为操作系统默认的MTU与你的网段不符,导致某些网站可以顺利联机,某些网站则无法联机。以Windows操作系统作为联机分享的主机时,在Client端挺容易发生这个问题。

如果是要连上Internet的主机,注意不要随便调整MTU,因为我们无法知道Internet上面的每台机器能够支持的MTU到多大,因为这些也不是我们能够管得到的。

另外,其实每种联机方式都有不同的MTU值,常见的各种接口的MTU值如表5-1所示。

表5-1  常见的各种接口的MTU值

网络接口

MTU

Ethernet

1500

PPPoE

1492

Dial-upModem

576

网络上也有免费帮忙查询MTU与传输相关数据的网站,例如下面这个网站:


连接上这个网站之前,请先取消你浏览器上的代理服务器(Proxy)的设置,才能显示出正确的信息。如果在Windows的系统上想要修改MTU值的话,那就得要修改Windows的日志文件,在Windows上面对于MTU的检测与修改的详细做法可以参考微软的官方网站:

阅读(1159) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~