当前位置:   article > 正文

深入剖析:Ping命令的原理、用法与局限_、主机探测命令熟悉ping、arping、fping的使用

、主机探测命令熟悉ping、arping、fping的使用

​ Ping 命令是网络诊断中常用的一种工具,但是,在实际使用中,我们有时会遇到它无法解决的问题,或者需要更深入的了解其工作原理以进行更精确的网络分析。本文将从多个方面对 Ping 命令进行深入分析,包括其语法、如何工作、用例和局限性等。此外,我们还将讨论与 Ping 命令相关的一些其他工具和高级用法。最后,读者将能够更好地了解 Ping 命令,并掌握如何在日常网络工作中更好地使用它来检查和排除网络连接的问题。

简介

ping 命令的缩写来自于英语单词 “Packet INternet Groper”,中文翻译为 “数据包网际网探测器”,它可以通过向目标主机发送 ICMP 数据包,从而测试网络连接的延迟和数据包丢失率,属于基本的网络测试工具之一。

ping 命令是一种常用的网络诊断工具,主要用于测试与目标主机之间的网络连接状态。它在网络管理员、IT 专业人士以及一般用户中都很受欢迎。由于 ping 命令简单易用,而且几乎在所有操作系统中都内置,因此很容易使用。

ping 命令采用 ICMP1 协议,它可以通过向目标设备发送 ICMP 回声请求数据包并等待回复来测试网络可达性。 ping 命令通过发送数据包,然后等待目标设备响应来评估连接和网络延迟。ping 命令通常用于检查主机之间的连通性以及检测网络故障。它也可以用于检查本地网络配置、检测延迟等用途。

在使用 ping 命令时,你需要指定一个目标设备的 IP 地址或域名,并且可以指定一些参数来控制 ping 命令的行为,例如发送数据包的数量,发送数据的间隔时间,以及等待响应的超时时间。ping 命令的输出通常包括发送和接收的数据包数量、延迟信息 以及丢失数据包的百分比等信息,这些信息可以帮助用户了解连接和网络延迟的状态。

用法

ping 命令的语法如下:

ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
     [-r count] [-s count] [[-j host-list] | [-k host-list]]
     [-w timeout] destination-list
  • 1
  • 2
  • 3

其中,参数的含义如下:

  • -t ping 目标主机,直到停止。
  • -a 尝试反查 IP 地址,以获取主机名称。
  • -n count 发送 count 个数据包。默认为 4。
  • -l size 发送指定大小的缓冲区。默认为 32 字节。
  • -f 在数据包中设置“不要分段”标志。
  • -i TTL 设置生存时间(TTL)值(Time To Live)。
  • -v TOS 设置服务类型值(Type Of Service)。
  • -r count 记录计数跃点的路由。
  • -s count 指定跃点数以达到目的地。
  • -j host-list 系统必须经过的跃点列表。
  • -k host-list 必须跳过的跃点列表。
  • -w timeout 设置超时时间,单位为毫秒。

下面是一些常见的 ping 命令示例:

  1. 发送 4 个数据包到目标 IP 地址
ping 192.168.0.1 -n 4
  • 1

该命令向 IP 地址为 192.168.0.1 的主机发送四个数据包,并等待该主机返回响应。

  1. 持续 Ping 目标主机
ping -t www.baidu.com 
  • 1

该命令会持续向 www.baidu.com 主机发送回声请求,直到手动停止命令。

  1. 设置缓冲区大小
ping -l 1024 www.baidu.com
  • 1

该命令将缓冲区大小设置为1024字节,然后通过向www.baidu.com发送回声请求来测试与该主机的连接状态。

  1. 设置 TTL 值
ping -i 5 www.baidu.com
  • 1

该命令将 TTL 值设置为5,然后通过向 www.baidu.com 发送回声请求来测试与该主机的连接状态。TTL 值指定了一个数据包可以在网络上通过多少个路由跳点,被设为TTL值的最大路由跳点数。

TTL 是 Internet Protocol(IP)数据包中的一个字段,用于指定一个 IP 数据包可以穿过的路由器数量,可以设置为最多 255 个线性跳跃 (hops)。

每当 IP 数据包通过路由器时,TTL 字段就会减少1,一旦 TTL 达到 0,数据包就会被丢弃。这是因为TTL的保护措施避免了数据包无限制地在 Internet 上循环和传播。

TTL强制执行了网络主机和资源的最大值,以避免丢包的无限循环。因此,当连接有故障时,该故障仅影响其周围网段,而不会影响整个网络。TTL 可以防止路由环路和其他网络问题,同时增强网络安全性和韧性。

在 上述ping 命令中,我们设置了 -i TTL 参数,来强制设定数据包的最大 TTL 线性跳数。

该命令将 TTL 字段设置为 5,它指定该数据包只能被转发 5 次,超过这个跳数,该数据包就会被丢弃。如果网络存在原因,数据包会立即被丢弃,同时 ping 命令会报告设备不可达的错误。因此,TTL 是实现 IP 网络韧性和可靠性的关键元素之一。

含义

当运行 ping 命令时,返回的控制台中有多个字段,每个字段都提供了有关连接状态和性能的有用信息,包括以下内容:

  1. 序列号(Sequence Number):此编号是每个 ICMP 请求的唯一标识符,用于跟踪响应消息是否与请求消息相匹配。
  2. 时间(Time):这是发送和接收 ICMP 请求和响应消息所需的时间。
  3. TTL (Time to Live) 值:它指定了一个数据包可以在网络上通过多少个路由器跳跃点数,被设为TTL值的最大路由跳点数。
  4. 传输字节(Bytes):这是存储在 ICMP 数据包中并在目标和源主机之间传输的字节数。
  5. 来自(From):此字段指示回显请求消息所发送到的设备的 IP 地址。
  6. 往返时间(Round-Trip Time, RTT):这是发送回显请求并接收到回显应答所需的时间。
  7. TTL过期(TTL Expired):这个消息表示,数据包的 TTL 字段达到 0,在传递过程中被丢弃。
  8. 丢失 (%) (Lost %):这是从源主机发送的数据包中丢失的数据包百分比,这通常用来指示网络速度和稳定性。

下面是一个 ping 命令输出的示例:

Pinging google.com [172.217.7.110] with 32 bytes of data:
Reply from 172.217.7.110: bytes=32 time=25ms TTL=57
Reply from 172.217.7.110: bytes=32 time=24ms TTL=57
Reply from 172.217.7.110: bytes=32 time=23ms TTL=57
Reply from 172.217.7.110: bytes=32 time=25ms TTL=57

Ping statistics for 172.217.7.110:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 23ms, Maximum = 25ms, Average = 24ms
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在这个例子中,我们与 google.com 主机进行 ping 测试。控制台输出的第一部分显示我们正在 ping 的主机的 IP 地址和数据包字节数。此后,每个消息都提供有关响应延迟、TTL 值、丢失率和来自主机的信息。最后,统计信息显示我们发送了4个数据包,从目标设备(google.com)获得了所有回复,没有任何数据包丢失,平均往返延迟时间为 24 毫秒。这些信息可以帮助用户更好地了解网络状态和性能,并帮助快速定位网络问题。

原理

ping 命令的工作原理很简单,它通过向目标设备发送 ICMP 回声请求(Echo-Request)消息,并等待目标设备响应 ICMP 回声应答(Echo-Reply)消息来测试网络连接的状态。下面是 ping 命令的一些详细原理:

  1. ping 命令首先需要将目标设备的 IP 地址或域名解析为对应的 IP 地址。这个过程通常由本地主机上的 DNS 缓存或者网络 DNS 服务器完成。

  2. ping 命令会将 ICMP 回声请求消息(Echo-Request)发送到目标设备。该消息包含了一些数据,例如时间戳、序列号、包长度等信息。

  3. 目标设备收到 ICMP 回声请求消息后,会向源主机发送一个 ICMP 回声应答消息(Echo-Reply)。该消息包含了回显请求的数据,以确认源主机已经接收到了消息。

  4. ping 命令在接收 ICMP 回声应答消息后,会计算往返延迟(Round-Trip-Time,RTT),并显示该延迟及其他有关连接状态的信息,例如数据包丢失率等。

总之,ping 命令的工作原理就是通过交换 ICMP 消息(回声请求和回声应答)来测试网络连接的状态。下面是一个示例,可以更好地理解 ping 命令的工作原理:

假设我们使用以下命令测试与目标设备 www.example.com 的网络连接状态:

ping www.example.com
  • 1

在这个例子中,ping 命令会尝试将 www.example.com 域名解析为相应的 IP 地址,并向该地址发送 ICMP 回声请求消息。目标设备(www.example.com)将会收到该消息并发送回 ICMP 回声应答消息,表示连接状态正常。此后,ping 命令会显示回显应答消息以及来回延迟(RTT)等信息。如果目标设备无响应,ping 命令会显示请求超时错误。如果存在其他网络问题,例如路由器故障,ping 命令也会显示相关的错误消息。因此,ping 命令可以帮助我们快速诊断网络故障和检查网络连接的状态。

局限性

ping 命令可以检测和测试网络连接的延迟、数据包丢失率等信息,是一种常用的网络故障诊断和性能测试工具,但是也有一些局限性:

  1. ICMP协议限制:ping 命令使用 ICMP 协议来进行网络测试。但是,有的网络环境可能对ICMP报文进行过滤或禁止,导致部分环境无法使用ping命令。

  2. 受网络拓扑影响:ping 命令只能检测到所在网络所到达的第一个路由器/交换机的状态,即无法指示网络中断的实际位置,无法定位其他设备上的故障。

  3. 不同平台参数不同:不同的操作系统平台和不同的网络设备对 ping 的实现可能是不同的,参数也可能不同。这样在不同平台和设备上执行 ping 命令时,得到的结果可能不同。

  4. 非常规链路参数抽象:如果测试的网络链路存在比较久远或者非常规的网络设备或参数,ping 命令的测试结果将可能受到影响或无法准确反映实际情况。

虽然 ping 命令存在一些限制,但因其简单易用、通用普遍而仍被广泛应用,对解决网络故障和确保网络性能均发挥了积极的作用。当然,在更大规模的网络中,需要使用更专业和高级的设备和技术,如网络分析仪、协议分析器等来定位和解决网络问题。

其他工具

nslookup 命令

nslookup 命令是一种网络诊断工具,可用于查询 DNS 解析结果。nslookup 命令的基本用法如下:

nslookup [-type=rrtype] target [server]
  • 1

其中,-type=rrtype 用于指定查询的资源记录类型,包括:A记录(查询主机对应的 IPv4 地址)、AAAA记录(查询主机对应的 IPv6 地址)、PTR记录(查询 IP 地址对应的主机名)、MX记录(查询域名对应的邮件服务器地址)等;target 表示要查询的主机名或 IP 地址;server 表示要使用的 DNS 服务器地址,可以是 IP 地址或主机名,如果不指定,则使用本地默认的 DNS 服务器。

举个例子,假设我们要查询主机 www.baidu.com 对应的 IP 地址,可以在终端或命令行工具中输入以下命令:

nslookup www.baidu.com
  • 1

如果查询成功,就会输出类似以下内容:

Server:		192.168.0.1
Address:	192.168.0.153

Non-authoritative answer:
Name:	www.a.shifen.com
Address: 183.232.231.174

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

以上输出显示了查询使用的 DNS 服务器地址,以及主机名 www.baidu.com 对应的 IP 地址 183.232.231.174

需要注意的是,对于一些网站,例如 Google、Facebook 等,它们可能会采取一些经过优化的 DNS 解析方式,例如使用 DNS 负载均衡、多级缓存等,导致 nslookup 返回的结果可能传递了 DNS 服务器群地址。此时,我们可以通过其他方式进一步探测目标主机的真实 IP 地址,例如使用 ping 命令,或使用在线网站查询工具。

好的,现在我来详细解释一下第四个工具:netstat 命令的用法和功能。

netstat 命令

netstat 命令用于显示网络连接、路由表、网络接口统计信息等,可以用于分析网络流量,显示与当前计算机相关的所有网络连接。netstat 命令的基本用法如下:

netstat [-an] [-p protocol] [-t] [-u] [-l] [-r]
  • 1

其中,-an 用于显示所有的端口和 IP 地址;-p protocol 用于显示指定协议的连接信息;-t 用于显示 TCP 协议相关的连接信息;-u 用于显示 UDP 协议相关的连接信息;-l 用于显示正在监听的连接信息;-r 用于显示路由表信息。

举个例子,假设我们要查看所有的网络连接信息,可以在终端或命令行工具中输入以下命令:

netstat -an
  • 1

如果查询成功,就会输出类似以下内容:

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING
  ...
  UDP    0.0.0.0:123            *:*
  UDP    0.0.0.0:500            *:*
  ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

以上输出显示了当前计算机上所有的网络连接信息,包括协议类型、本地地址、远程地址、连接状态等,其中以 TCP 和 UDP 两种常见协议为例。

需要注意的是,不同操作系统平台上的 netstat 命令可能有所不同,参数也可能略有不同。此外,netstat 命令只能显示当前系统的网络连接情况,不能显示其他网络节点的连接情况。如果要全面了解网络连接情况,需要使用更专业、更高级的网络抓包和流量分析工具。

iputils 工具集

iputils 工具集是一套比较完整的 Linux 网络实用工具集,包含了许多网络诊断和测试工具。常用的工具有:

  • ping:用于测试网络连接的延迟、数据包丢失率等信息。
  • traceroute:用于跟踪网络数据包经过的路由器和路径,并测试每个路由的往返延迟时间。
  • arping:用于测试网络中是否存在指定的主机,并显示主机的 MAC 地址。
  • fpingping 命令的替代品,可同时测试多个主机的连接状况,并显示统计信息。
  • ss:用于显示当前系统的网络连接情况,相当于 netstat 命令的增强版。

举个例子,假设我们要测试主机 www.baidu.com 的连接情况,可以在终端或命令行工具中输入以下命令:

ping www.baidu.com
  • 1

如果连接正常,就会输出类似以下内容:

PING www.a.shifen.com (183.232.231.174) 56(84) bytes of data.
64 bytes from 183.232.231.174 (183.232.231.174): icmp_seq=1 ttl=56 time=9.39 ms
64 bytes from 183.232.231.174 (183.232.231.174): icmp_seq=2 ttl=56 time=11.0 ms
64 bytes from 183.232.231.174 (183.232.231.174): icmp_seq=3 ttl=56 time=8.74 ms
...
  • 1
  • 2
  • 3
  • 4
  • 5

以上内容显示了 www.baidu.com 对应的 IP 地址(即 183.232.231.174) ,以及到主机的延迟等信息。

需要注意的是,一些网络设备可能会过滤 ping 请求,导致 ping 命令无法正常工作。此时,可以尝试使用其他网络测试工具,例如 fping 命令或者 tcpping 命令等。

好的,下面我来讲解第六个工具:tcpdump 命令的用法和功能。

tcpdump 命令

tcpdump 命令是一种网络抓包工具,可用于捕获和分析网络数据包,从而进行网络故障排查和调试。tcpdump 命令的基本用法如下:

tcpdump [options] [expression]
  • 1

其中,options 用于设置命令行选项,例如 -i 指定要监听的网络接口、 -w 指定抓包数据存储到文件中等;expression 用于设置抓取数据包的过滤条件,例如只抓取指定端口的数据包、只抓取某个 IP 地址的数据包等。

举个例子,假设我们要监听本地以太网接口,抓取所有出站流量的数据包,可以在终端或命令行工具中输入以下命令:

sudo tcpdump -i eth0 -nn -v -w mydata.pcap src host 192.168.0.1
  • 1

如果抓包成功,就会将所有符合条件的数据包存储到名为 mydata.pcap 的文件中。

以上命令使用了 -i 选项指定要监听的网络接口是 eth0-nn 选项指定不需要做地址映射,可以直接显示 IP 地址,-v 选项指定以详细模式输出抓取的数据包,-w 选项指定将抓取的数据包存储到文件中,src host 192.168.0.1 指定只抓取所有从 IP 地址为 192.168.0.1 的主机出站的数据包。

需要注意的是,使用 tcpdump 命令需要具有足够的权限和技能,否则可能会造成网络安全和数据泄露等问题。因此,建议只在专业的网络诊断和调试场景下使用。

高级用法

ping 命令连续发送请求

默认情况下,ping 命令只发送四个 ICMP 数据包,默认时间间隔是 1 秒,您可以通过 -c 选项设置数据包数,例如:

ping -c 10 www.baidu.com
  • 1

这将发送 10 个请求。另外,您也可以通过 -i 选项设置时间间隔,例如:

ping -i 2 www.baidu.com
  • 1

这将以每 2 秒一个的时间间隔发送 ICMP 数据包,当需要持续监测网络连通性时,这些选项将非常有用。

ping 命令进行域名解析

默认情况下,ping 命令会自动把输入作为 IP 地址处理,如果您想要将输入作为域名解析,请使用 -n 选项。例如:

ping -n www.baidu.com
  • 1

ping 命令指定源 IP 地址

有时候,您需要指定发送 ICMP 数据包使用的特定接口或者源 IP 地址。ping 命令提供 -I 选项来实现这个需求,例如:

ping -I eth0 192.168.1.1
  • 1

这将使用 eth0 网卡并使用 192.168.1.1 作为源 IP 地址发出数据包。

ping 命令进行 TTL(Time To Live) 限制深入探测

TTL 指定了 ICMP 数据包到达目标主机之前可以通过的最大路由数。当到达指定路由次数时,数据包将被路由器丢弃。可以使用 -t 选项,手动设置 ICMP 数据包的 TTL 值。这对于查询网络中某个主机的路由路径等非常有用。

ping -t 1 www.baidu.com
  • 1

在上面的命令中,-t 参数设定了 TTL 为 1,即将 ICMP 数据包发送到本地路由器。这可以测试本地路由器是否能够响应 ICMP 数据包并正确地降低 TTL 值。

ping 命令进行数据包大小探测

使用 -s 选项,你可以指定 ICMP 数据包的大小。这对于测试 MTU(Maximum Transmission Unit)值非常有用。

ping -s 1024 www.baidu.com
  • 1

这会把每个 ICMP 数据包的大小设定为 1024 字节,从而观察系统的 MTU 值是否为 1024 字节。


  1. ICMP(Internet控制报文协议)是TCP / IP协议族中的一个核心协议,主要用于在IP网络中传输错误消息和操作指令。它可以帮助用户进行网络 Troubleshooting(故障排除)、网络管理和性能优化等操作。ICMP协议由生产商/开发商提供,并被集成在网络设备通信软件中,包括它们的路由器、网络交换机和防火墙等设备中。 ↩︎

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/203799
推荐阅读
相关标签
  

闽ICP备14008679号