Hello World!

ping的过程及原理详解

网络通信 icerain 801℃ 0评论

•ping命令一般用于检测网络通与不通,也叫时延,其值越大,速度越慢PING(PacketInternetGrope),因特网包探索器,用于测试网络连接量的程序。

•ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。它是用来检查网络是否通畅或者网络连接速度的命令。

I、ping的原理:

网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。

II、ping的过程

机器A ping 机器B

同一网段

  1. ping通知系统建立一个固定格式的ICMP请求数据包
  2. ICMP协议打包这个数据包和机器B的IP地址转交给IP协议层(一组后台运行的进程,与ICMP类似)
  3. IP层协议将以机器B的IP地址为目的地址,本机IP地址为源地址,加上一些其他的控制信息,构建一个IP数据包
  4. 获取机器B的MAC地址
    • IP层协议通过机器B的IP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络查找这台机器的MAC
      • 若两台机器之前有过通信,在机器A的ARP缓存表应该有B机IP与其MAC的映射关系
      • 若没有,则发送ARP请求广播,得到机器B的MAC地址,一并交给数据链路层
    • 数据链路层构建一个数据帧,目的地址是IP层传过来的MAC地址,源地址是本机的MAC地址,再附加一些控制信息,依据以太网的介质访问规则,将他们传送出去
    • 机器B收到这个数据帧后,先检查目的地址,和本机MAC地址对比
      • 符合,接收。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP协议层协议。IP层检查后,将有用的信息提取交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B类似(这时候主机B已经知道了主机A的MAC地址,不需再发ARP请求)
      • 不符合,丢弃

不同网段

images

  1. ping通知系统建立一个固定格式的ICMP请求数据包
  2. ICMP协议打包这个数据包和机器B的IP地址转交给IP协议层(一组后台运行的进程,与ICMP类似)
  3. IP层协议将以机器B的IP地址为目的地址,本机IP地址为源地址,加上一些其他的控制信息,构建一个IP数据包
  4. 获取主机B的MAC地址
    • IP协议通过计算发现主机B与自己不在同一网段内,就直接交给路由处理,就是将路由的MAC取过来,至于怎么得到路由的MAC地址,和之前一样,先在ARP缓存表中寻找,找不到可以利用广播。路由得到这个数据帧之后,再跟主机B联系,若找不到,就向主机A返回一个超时信息。

对ping后返回信息的分析

  1. Request timed out
    • 对方已关机,或者网络上没有这个地址
    • 对方与自己不在同一网段内,通过路由也无法到达
    • 对方存在,不过设置了ICMP数据包过滤(比如防火墙设置)
    • 错误设置IP地址

    正常情况下,一台主机一张网卡,一个IP地址或多个网卡,多个IP地址。但如果一台电脑的“拨号网络适配器”(相当于一块软网卡)的TCO/IP设置中,设置了一个与网卡IP地址处于同一子网的IP地址,这样,在IP层协议看来,这台主机就有两个不同的接口处于同一网段内。当从这台主机ping其他机器时,会存在这样的问题:

    ** 主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段。
    ** 主机不知道用哪个地址作为数据包的源地址。因此,从这台主机去ping其他机器,IP层协议会无法处理,超时后,ping就会给出一个“超时无应答”的错误信息提示。但从其他主机ping这台主机时,请求包从特定网卡来,ICMP只须简单的将目的、源地址互换,并更改一些标志即可,ICMP应答包能顺利发出,其他主机就能成功ping通这台主机了。

  2. Destination host Unreachable
    • 自己未设定默认路由,对方跟自己不在同已网段
    • 网线有问题

    备注
    Request timed out 与 Destination host Unreachable 的区别
    所经过的路由器的路由表具有到达目标的路由,而目标因为原因不可到达,这时出现前者。如果路由表中连到达目标的路由都没有,就会出现后者。

  3. Bad ip address
    • 没有连接到DNS服务器,无法解析IP,也可能是IP不存在
  4. Source quench received
    • 对方或中途服务器繁忙而无法应答
  5. Unkonw host
    • 远程主机的名字不能被域名服务器转换成IP地址,故障原因可能是DNS服务器有故障,或者名字不正确,或者网络管理员的系统与远程主机之间的通信线路故障。
  6. No answer
    • 无响应。说明本地系统有一条通向中心主机的路由,但却接收不到它发给该中心主机的人呢和信息。故障原因可能是:中心主机没有工作;本地或中心主机网络配置不正确;本地或中心的路由器没有工作;通信线路有故障;中心主机存在路由选择问题。
  7. Ping 127.0.0.1
    • 如果ping不通,则表明本地址TCP/IP协议不能正常工作
  8. no rout to host
    • 网卡工作不正常
  9. transmit failed。error code
    • 10043网卡驱动不正常
  10. unknown host name
    • DNS配置不正确

III、ping的命令

•ping命令的一般格式为:

•ping[-dfnqrRv][-c发送次数][-i间隔秒数][-I(大写i)网络界面][-l(小写L)前置载入][-p范本样式][-s数据包大小][-t存活数值][主机名或IP地址]

参数说明:

【-ccount】指定要被发送(或接收)的回送信号请求的数目,由Count变量指出。

【-wtimeout】这个选项仅和-c选项一起才能起作用。它使ping命令以最长的超时时间去等待应答(发送最后一个信息包后)。默认超时时间为4000ms(4s)

【-d】使用Socket的SO_DEBUG功能。

【-D】这个选项引起ICMPECHO_REPLY信息包向标准输出的十六进制转储。

【-f】指定flood-ping选项。-f标志“倾倒”或输出信息包,在它们回来时或每秒100次,选择较快一个。每一次发送ECHO_REQUEST,都打印一个句号,而每接收到一个ECHO_REPLY信号,就打印一个退格。这就提供了一种对多少信息包被丢弃的信息的快速显示。仅仅root用户可以使用这个选项。

注:这在网络上将非常困难,必须小心使用。Floodping命令仅仅root用户可以使用。-f标志与-iWait标志不兼容.

【-n】只输出数值。

-r】忽略路由表,直接将数据包送到远端主机上。通常是查看本机的网络接口是否有问题。

【-R】记录路由过程。-R标志包括ECHO_REQUEST信息包中的RECORD_ROUTE选项,并且显示返回信息包上的路由缓冲。

【-v】详细显示指令的执行过程。

【-iwait】在每个信息包发送之间等待被Wait变量指定的时间(秒数)。缺省值是在每个信息包发送之间等待1秒。这个选项与-f标志不兼容。

【-Ia.b.c.d】指定被a.b.c.d标明的接口将被用于向外的IPv4多点广播。-I标志是大写的i。

【-lPreload】在进入正常行为模式(每秒1个)前尽快发送Preload变量指定数量的信息包。-l标志是小写的L。

【-L】对多点广播ping命令禁用本地回送。

【-pPattern】指定用多达16个“填充”字节去填充你发送的信息包。这有利于诊断网络上依赖数据的问题。例如“-pff”全部用1填充信息包。

【-q】不显示任何传送封包的信息,只显示最后的结果。

【-spacketsize】指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。

【-Shostname/IPaddr】将IP地址用作发出的ping信息包中的源地址。在具有不止一个IP地址的主机上,可以使用-S标志来强制源地址为除了软件包在其上发送的接口的IP地址外的任何地址。如果IP地址不是以下机器接口地址之一,则返回错误并且不进行任何发送。

【-ttll】设置存活数值TTL的大小。

【-ointerface】指出interface将被用于向外的IPv6多点广播。接口以“en0”,“tr0”等的形式指定。

使用举例:

(1)指定要被发送(或接收)的回送信号请求的数目:

#ping-c5172.17.0.254(请求5次)

(2)信息包被丢弃的信息的快速显示:

#ping-f172.17.0.254

(3)在每个信息包发送之间等待被Wait变量指定的时间(秒数):

#ping-i2172.17.0.254(间隔2s)

IV、ping测试

•1、ping本机IP

•#ping172.17.0.11/127.0.0.1

•(测试:#ifdowneth0之后再ping试试)

•如果ping不通的话则表明网卡安装或配置有问题。将网线断开再次执行此命令,如果显示正常,则说明本机使用的IP地址可能与另一台正在使用的机器IP地址重复了。如果仍然不正常,则表明本机网卡安装或配置有问题,需继续检查相关网络配置。

•Ubuntu下配置文件位置:

•[IP]:/etc/network/interfaces

•[DNS]:/etc/resolv.conf

•2、ping网关IP

•#ping172.17.0.254

•能正常ping通,则表明局域网中的网关路由器正在正常运行。反之,则说明网关有问题。

•3、ping远程IP

•#pingwww.baidu.com

•这一命令可以检测本机能否正常访问Internet。

五、怎样使用Ping这命令来测试网络连通呢?

•连通问题是由许多原因引起的,如本地配置错误、远程主机协议失效等,当然还包括设备等造成的故障。首先我们讲一下使用Ping命令的步骤。

•使用Ping检查连通性有六个步骤:

•1.使用ifconfig观察本地网络设置是否正确;

•2.Ping127.0.0.1,127.0.0.1回送地址Ping回送地址是为了检查本地的TCP/IP协议有没有设置好;

•3.Ping本机IP地址,这样是为了检查本机的IP地址是否设置有误;

•4.Ping本网网关或本网IP地址,这样的是为了检查硬件设备是否有问题,也可以检查本机与本地网络连接是否正常;(在非局域网中这一步骤可以忽略)

•5.Ping本地DNS地址,这样做是为了检查DNS是否能够将IP正确解析。

•6.Ping远程IP地址,这主要是检查本网或本机与外部的连接是否正常。

V、ping的open-falcon监控脚本

#!/bin/bash
ping www.baidu.com -c 10 >ping_rongbao.txt
lossrate=`cat ping_baidu.txt|tail -2|grep loss|awk '{print $6}'|sed 's/%//g'`
avgtime=`cat ping_baidu.txt|tail -1|awk -F "=" '{print $2}'|awk -F "/" '{print $2}'`
maxtime=`cat ping_baidu.txt|tail -1|awk -F "=" '{print $2}'|awk -F "/" '{print $3}'`
mdevtime=`cat ping_baidu.txt|tail -1|awk -F "=" '{print $2}'|awk -F "/" '{print $4}'|sed 's/ms//g'`
echo "lossrate ${lossrate}" >baidu_push.txt
echo "avgtime $avgtime" >>baidu_push.txt
echo "maxtime $maxtime" >>baidu_push.txt
echo "mdevtime $mdevtime" >>baidu_push.txt
cat baidu_push.txt|while read line
do
echo $line
ts=`date +%s`;
metric=`echo $line|awk '{print $1}'`
value=`echo $line|awk '{print $2}'`
curl -X POST -d "[{\"metric\": \"$metric\", \"endpoint\": \"VM_13_2_centos\",

\"timestamp\": $ts,\"step\": 60,\"value\":$value,\"counterType\": \"GAUGE\",\"tags\": \"ping_baidu\"}]" http://127.0.0.1:1988/v1/push
done

 

0

转载请注明:你懂的越多,懂你的越少 » ping的过程及原理详解

赞赏

微信赞赏支付宝赞赏

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址