`
longgangbai
  • 浏览: 7339562 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ping命令深度解析(三)

阅读更多

“Ping”的幕后过程

我们以下面一个网络为例:有A、B、C、D四台机子,一台路由RA,子网掩码均为255.255.255.0,默认路由为192.168.0.1

1.在同一网段内

             在主机A上运行“Ping 192.168.0.5”后,都发生了些什么呢? 首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.0.5”一起交给IP层协议(和 ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“192.168.0.5”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并想办法得到192.168.0.5的MAC地址(物理地址,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),以便交给数据链路层构建一个数据帧。关键就在这里,IP层协议通过机器B的IP地址和自己的子网掩码,发现它跟自己属同一网络,就直接在本网络内查找这台机器的MAC,如果以前两机有过通信,在A机的ARP缓存表应该有B机IP与其MAC的映射关系,如果没有,就发一个ARP请求广播,得到B机的MAC, 一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。

               主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。

 

2.不在同一网段内

             在主机A上运行“Ping 192.168.1.4”后,开始跟上面一样,到了怎样得到MAC地址时,IP协议通过计算发现D机与自己不在同一网段内,就直接将交由路由处理,也就是将路由的MAC取过来,至于怎样得到路由的MAC,跟上面一样,先在ARP缓存表找,找不到就广播吧。路由得到这个数据帧后,再跟主机D进行联系,如果找不到,就向主机A返回一个超时的信息。

对Ping后返回信息的分析

1.Request timed out

这是大家经常碰到的提示信息,很多文章中说这是对方机器置了过滤ICMP数据包,从上面工作过程来看,这是不完全正确的,至少有下几种情况。

 

(1) 对方已关机,或者网络上根本没有这个地址:比如在上图中主机A中PING 192.168.0.7 ,或者主机B关机了,在主机A中PING 192.168.0.5 都会得到超时的信息。

(2)对方与自己不在同一网段内,通过路由也无法找到对方,但有时对方确实是存在的,当然不存在也是返回超时的信息。

(3)对方确实存在,但设置了ICMP数据包过滤(比如防火墙设置)。

怎样知道对方是存在,还是不存在呢,可以用带参数 -a 的Ping命令探测对方,如果能得到对方的NETBIOS名称,则说明对方是存在的,是有防火墙设置,如果得不到,多半是对方不存在或关机,或不在同一网段内。

(4)错误设置IP地址

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

A.主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段。

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

 

2.Destination host Unreachable

(1) 对方与自己不在同一网段内,而自己又未设置默认的路由,比如上例中A机中不设定默认的路由,运行Ping 192.168.0.1.4就会出现“Destination host Unreachable”。

(2)网线出了故障

         这里要说明一下“destination host unreachable”和 “time out”的区别,如果所经过的路由器的路由表中具有到达目标的路由,而目标因为其他原因不可到达,这时候会出现“time out”,如果路由表中连到达目标的路由都没有,那就会出现“destination host unreachable”。

 

3.Bad IP address

        这个信息表示您可能没有连接到DNS服务器,所以无法解析这个IP地址,也可能是IP地址不存在。

 

4.Source quench received

        这个信息比较特殊,它出现的机率很少。它表示对方或中途的服务器繁忙无法回应。

 

5.Unknown host——不知名主机

        这种出错信息的意思是,该远程主机的名字不能被域名服务器(DNS)转换成IP地址。故障原因可能是域名服务器有故障,或者其名字不正确,或者网络管理员的系统与远程主机之间的通信线路有故障。

 

6.No answer——无响应

          这种故障说明本地系统有一条通向中心主机的路由,但却接收不到它发给该中心主机的任何信息。故障原因可能是下列之一:中心主机没有工作;本地或中心主机网络配置不正确;本地或中心的路由器没有工作;通信线路有故障;中心主机存在路由选择问题。

 

7.Ping 127.0.0.1:127.0.0.1是本地循环地址

          如果本地址无法Ping通,则表明本地机TCP/IP协议不能正常工作。

 

8.no rout to host:网卡工作不正常。

 

9.transmit failed,error code:10043网卡驱动不正常。

 

10.unknown host name:DNS配置不正确。

 

         当网络出现问题时,我们最常用的测试工具就是“Ping”命令了。但有时候我们会碰到单方向Ping通的现象,例如通过HUB或一根交叉线连接的在同一个局域网内的电脑A、 B,在检查它们之间的网络连通性时,发现从主机A Ping 主机B正常而从主机B Ping 主机A时,出现“超时无应答”错误。为什么呢?

              要知道这其中的奥秘,我们有必要来看看Ping命令的工作过程到底是怎么样的。

              假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,都在同一子网内,则当你在主机A上运行“Ping 192.168.1.2”后,都发生了些什么呢?

              首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.1.2”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程),IP层协议将以地址“192.168.1.2”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并在一个映射表中查找出IP地址192.168.1.2所对应的物理地址(也叫MAC地址,熟悉网卡配置的朋友不会陌生,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。

            主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。

           从Ping的工作过程,我们可以知道,主机A收到了主机B的一个应答包,说明两台主机之间的去、回通路均正常。也就是说,无论从主机A到主机B,还是从主机B到主机A,都是正常的。那么,是什么原因引起只能单方向Ping通的呢?

 

一、安装了个人防火墙

 

         在共享上网的机器中,出于安全考虑,大部分作为服务器的主机都安装了个人防火墙软件,而其他作为客户机的机器则一般不安装。几乎所有的个人防火墙软件,默认情况下是不允许其他机器Ping本机的。一般的做法是将来自外部的ICMP请求报文滤掉,但它却对本机出去的ICMP请求报文,以及来自外部的ICMP应答报文不加任何限制。这样,从本机Ping其他机器时,如果网络正常,就没有问题。但如果从其他机器Ping这台机器,即使网络一切正常,也会出现“超时无应答”的错误。

        大部分的单方向Ping通现象源于此。解决的办法也很简单,根据你自己所用的不同类型的防火墙,调整相应的设置即可。

 

二、错误设置IP地址

       正常情况下,一台主机应该有一个网卡,一个IP地址,或多个网卡,多个IP地址(这些地址一定要处于不同的IP子网)。但对于在公共场所使用的电脑,特别是网吧,人多手杂,其中不泛有“探索者”。曾有一次两台电脑也出现了这种单方向Ping通的情况,经过仔细检查,发现其中一台电脑的“拨号网络适配器”(相当于一块软网卡)的TCP/IP设置中,设置了一个与网卡IP地址处于同一子网的IP地址,这样,在IP层协议看来,这台主机就有两个不同的接口处于同一网段内。当从这台主机Ping其他的机器时,会存在这样的问题:

 

(1)主机不知道将数据包发到哪个网络接口,因为有两个网络接口都连接在同一网段;

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

 

        以上是我在“拼”(Ping)的过程中,总结的一些经验技巧,希望能对大家的工作和学习有所帮助。

分享到:
评论
1 楼 di1984HIT 2016-04-21  
学习了~~~~

相关推荐

    IP新技术进阶系列 - SRv6 Ping&Tracert深度解析

    Ping&Tracert作为链路连通性检测和故障定位的重要手段,适用场景极广,本次课程将选取对SRv6网络进行Ping&Tracert检测的场景,以一个示例为主线,深度解析检测过程,解密报文交互与协议扩展,通过介绍关键命令的使用...

    Ping命令详解

    ### Ping命令详解与网络管理深度解析 #### Ping命令概述 Ping命令是一种用于测试网络设备连通性和健康状况的基本工具,其全称为Packet Internet Gopher,但在实际应用中,"Ping"已经成为一个广为人知的缩写。通过...

    (视频)IP新技术进阶系列 - SRv6 Ping&Tracert深度解析

    Ping&Tracert作为链路连通性检测和故障定位的重要手段,适用场景极广,本次课程将选取对SRv6网络进行Ping&Tracert检测的场景,以一个示例为主线,深度解析检测过程,解密报文交互与协议扩展,通过介绍关键命令的使用...

    ping 命令的ftrace文件,基于dm9000

    总的来说,结合`ping`命令和`ftrace`技术,我们可以对`dm9000`网络芯片的网络性能进行深度剖析,对于系统级的网络问题定位和优化具有重要意义。在实际操作中,还需要借助其他工具如`tcpdump`、`strace`等,以及深入...

    smokeping安装中的echoping

    ** Smokeping 安装与 Echoping 深度解析** `Smokeping` 是一个开源的网络监控工具,专门用于追踪网络延迟和丢包情况,它以“ping”为基础,通过绘制精美的图表来展示网络状况。而 `Echoping` 是 Smokeping 的一部分...

    PING程序设计(课设报告)

    PING程序的主要任务是模拟和实现标准的UNIX系统中的`ping`命令,能够发送ICMP回显请求报文,并接收相应的回显应答,以此来检查两个主机之间的网络连接是否正常。 2. **设计要求**: - 学生需独立完成从设计、编码...

    批量ping工具pinginfoview

    《批量ping工具PingInfoView的深度解析与应用》 在信息技术领域,网络诊断是不可或缺的一环,而ping命令作为最基本的网络通信检测工具,被广泛应用于检查网络连接的可达性。然而,当面对大量IP地址需要进行ping测试...

    用C语言实现Ping程序功能

    文章提及的Ping命令,其实质是基于TCP/IP协议族中的ICMP(Internet Control Message Protocol,互联网控制消息协议)来工作的。ICMP主要负责在IP层进行差错控制和网络诊断,它并不像TCP或UDP那样用于数据传输,而是...

    ArpPing_d9soft.com.zip

    《ArpPing:网络诊断与安全工具的深度解析》 在信息技术领域,网络诊断和安全是不可或缺的部分。本文将深入探讨一款名为“ArpPing”的工具,它在网络安全和故障排查方面发挥着重要作用。ArpPing,正如其名,结合了...

    Python利用WMI实现ping命令的例子

    在这个例子中,我们将探讨如何使用Python通过WMI来执行ping命令。 首先,确保已经安装了`pywin32`库,因为`win32api`是这个库的一部分。如果尚未安装,可以使用pip进行安装: ``` pip install pywin32 ``` 接下来...

    批量ping测软件pinginfoview

    《批量ping测软件PingInfoView深度解析》 在信息技术领域,网络诊断是不可或缺的一部分,而“ping”命令作为网络连通性检查的最基本工具,一直被广大IT人员所使用。然而,当面对大量IP地址需要进行ping测试时,手动...

    Python库 | aa-discord-ping-formatter-0.1.7.tar.gz

    《Python库深度解析:aa-discord-ping-formatter-0.1.7》 在Python的广阔天地中,丰富的第三方库是其强大的基石之一。今天我们要深入探讨的是一个名为"aa-discord-ping-formatter"的库,版本号为0.1.7,它是一个...

    浅析网络命令在计算机网络工程中的应用 (1).pdf

    网络命令能够帮助管理员高效地检测和解决问题,例如通过PING命令可以迅速识别网络连接故障,NETSTAT命令则能全面分析网络链接状态,而TRACERT命令则用于追踪网络路径,定位问题源头。\n\n一、计算机网络工程的发展...

    ping_command_Explained.rar_网络编程_DOS_

    描述“ping命令祥解ping command Explained详细讲解了ping的各种命令,很不错的”表明该压缩包内包含的文档是对ping命令的深度解析,涵盖了各种参数和用法,对理解和使用ping命令有很好的指导价值。 **ping命令详解...

    Windows网络实用工具集

    **Windows网络实用工具集——深度解析Ping命令** Ping是一个在网络管理中至关重要的工具,它基于ICMP(Internet Control Message Protocol)回送请求报文来测试网络连接。通过发送数据包到目标主机并接收其回应,...

    XP.CMD命令大全

    ### XP.CMD命令大全:深度解析与应用 在Windows XP操作系统中,CMD(命令提示符)作为系统的核心组件之一,提供了丰富的命令集,用于执行各种系统管理任务、文件操作及网络配置等。以下是对给定文件中提到的部分CMD...

    网络通顺的测试命令和技巧.pdf

    例如`tracert [目的地址]`,加上`-d` 参数可避免将IP地址解析为主机名,`-h maximum_hops` 可以限制跟踪的最大跃点数,以控制追踪的深度。 4. **其他网络测试命令** - `Nslookup`:查询DNS记录,帮助定位域名解析...

    全自动热点自动认证(自动认证网络、识别验证码、自动联网断网、切换登录用户、打开视频跑流量、ping ip).zip

    ping命令是网络诊断的基本工具,用于检查设备与特定IP地址之间的连通性。自动ping IP功能可以定期发送ping请求,监测网络状态,及时发现并报告网络故障。 总结来说,“全自动热点自动认证”技术是现代移动设备连接...

    DOS命令学习DOS

    `ping` 命令用于测试网络连通性,通过发送ICMP ECHO_REQUEST包来检查目标主机是否可达。其常用选项包括: - **-c**:指定发送数据包的数量。 - **-d**:启用调试模式。 - **-f**:将TTL设置为生存周期最小值。 - **...

Global site tag (gtag.js) - Google Analytics