很多刚开始接触网络实验的童鞋总会遇到这样那样的问题,
就像我们第一次写hello world一样,虽然就是那么简单的一行代码,但是总是会少了一个; 掉了一个return
于是,我们就很苦恼,我已经准备的很充分了,为什么还会犯这些2B的错误。
慢慢来,理想中的实验,应该是所有的配置和连线都做完了之后,叮的一下网络就通了,
但是,理想总是那么丰满,但现实永远那么骨感。
试想,谁的第一次会像想象中的那么浪漫和完美呢~
好了,不发浪了,进入正题。
先来说一下ping这个玩意儿。
一、ping的前世今生
ping这个玩意儿呢,是一个很简单又很强大的工具。在windows,linux,UNIX上都可以使用。而且基本有网络的地方,就有ping的生存空间。那ping到底是干什么的呢。
ping说简单一点就是个检测网络连通性的工具,如果你中学物理学的好的话,就会联想到用万用表检测电路连通性。是的,ping就是那个万用表。
那什么叫连通呢,是不是插根线等亮了就是联通了呢――不一定哦。
这里就扯出两个概念,线路和链路。
线路,就是我们说的物理线路。我们平时走的马路,就是一条线路,是物理的概念。我们常见的设备上的指示灯,只是指示线路的通断。
而链路,是指线路以及配置在其上的协议。那马路加上相应的交通规则就是一跳链路了。是物理+逻辑的一个概念。
而ping检测的就是链路的连通性。 (如果看到这里你会问为什么会是链路连通性,那请给自己一点信心,有朝一日,你会变得很牛逼的。如果看到这里你已经明白为什么是链路连通性了,那请允许我崇拜你十分钟)
讲完ping的原理大家伙应该就明白了,ping是基于ICMP echo报文的(ICMP是什么? 别闹了...自己去查!!!) echo 报文有两种,request和reply。
就好比你想知道别人家里有没有人,于是你去敲门。你敲门的那一下就是ICMP request,然后房主人在屋里说了句,谁呀? 这就是ICMP reply。但是,一般网络并不像我们想象的那么稳定,而且信道质量也是动态的,上一秒很好,不代表下一秒同样会很好,于是,我们就需要多次的发包,来得到一个统计结果。
说ping是检测链路连通性,这里就很好理解了,它是ICMP报文中的两种,也就说它的通信是建立在IP层之上的,所以说,ping通了,那至少下三层是通的。
二、ping的使用
1、用ping来排错
ping环回口(关于环回口,咱们有机会再讲,先记着一般是127.0.0.1)检测TCPIP协议栈是否工作
ping本机IP,检测网卡是否正常工作
ping网关,检测网关是否正常
三步下来我们基本就可以确定问题出在哪里,如果网关ping通了,就说明,问题不在当前结点,就可以逐跳的往下去ping,来确定问题出在那个结点。
当然ping不通的时候,也会有响应的错误反馈,比如timeout表示超时,可以正常解析,但是有可能是包没法出去,又或者发出去了,目的端没有回应。 有的时候会报Destination host Unreachable,这就是缺乏路由表项,不可达,一般配上一条默认路由就好了。
更多的请参见我转载的文章。《Ping命令返回错误信息说明》
2、用ping来判断链路质量
C:\Documents and Settings\Administrator>ping baidu.com -t
Pinging baidu.com [123.125.114.144] with 32 bytes of data:
Reply from 123.125.114.144: bytes=32 time=2ms TTL=51
Reply from 123.125.114.144: bytes=32 time=1ms TTL=51
Reply from 123.125.114.144: bytes=32 time=1ms TTL=51
Reply from 123.125.114.144: bytes=32 time=1ms TTL=51
Reply from 123.125.114.144: bytes=32 time=2ms TTL=51
Reply from 123.125.114.144: bytes=32 time=1ms TTL=51
Reply from 123.125.114.144: bytes=32 time=1ms TTL=51
比如这里是我截取的一段, 我们可以看到的信息有,解析出的百度的IP,发送ping包的大小,时延,以及TTL,通过时延我们可以大致判断链路负载情况。 通过TTL的值,可以大致知道对端用的是什么系统。
一般情况下ping只会发四次包,单单通过四次来判断,这样本空间也太小了。 于是我们可以用到一个参数 -t 不停的发包直到手动终止。 这样的话我们可以大致看到丢包率。
更多的参数我也就不讲了,记那么东西不常用到时候时间久了还是会忘。番茄以前把ping 的参数都背下来了,但是到了现在就记得一个-t,不想大家伙再做这样的无用功。所以,最好的学习,就是在实践中磨砺,等真正用到了,查一下就好。 好了,番茄今天就说这么多。再牛B的程序员也是从hello world写起的,再牛B的网工当年也有不会ping的很傻很天真的时候。 各位新童鞋,不要着急,慢慢来。