`

ping的返回参数TTL到底说明了什么?

阅读更多

这应当从网络的层次讲起:
首先,PING命令是属于ICMP协议规定的,而ICMP是内嵌于IP层的,因此,可以说,PING是网络层的命令。

PING的实现过程很简单,命令将引发IP层发送一个简单的IP包,而目的方收到这个包之后,将源和目的地址做一下交换,重新发出这个包即可,当然还要加一些超时的机制。

简单来说,为了避免数据包在网路上的传送路径造成死循环或者无休止的投递下去,每个ip数据包都包含乐一个寿命计数器,这个就是数据包的的生存时间TTL,也叫hop count,只要一个路由器处理过这个数据包,它就递减这个数据包的寿命计数,当寿命计数递减到0的时候,路由器就丢弃该包.
TTL在一定程度上反应了一个IP数据包经过的路由器的多少,但是也不完全是这样,因为数据包在网络上传播的时候,其传播时间和带宽有一定关系,有时候协议会把传播时间的长短折合在TTL里,能比较客观的反应网络的状况。 
简单来说,TTL全程Time to Live,意思就是生存周期。首先要说明ping命令是使用的网络层协议ICMP,所以TTL指的是一个网络层的网络数据包(package)的生存周期,这句话不懂的先回去复习OSI7层协议去。

第一个问题,为什么要有生存周期这个概念。

很显然,一个package从一台机器到另一台机器中间需要经过很长的路径,显然这个路径不是单一的,是很复杂的,并且很可能存在环路。如果一个数据包在传输过程中进入了环路,如果不终止它的话,它会一直循环下去,如果很多个数据包都这样循环的话,那对于网络来说这就是灾难了。所以需要在包中设置这样一个值,包在每经过一个节点,将这个值减1,反复这样操作,最终可能造成2个结果:包在这个值还为正数的时候到达了目的地,或者是在经过一定数量的节点后,这个值减为了0。前者代表完成了一次正常的传输,后者代表包可能选择了一条非常长的路径甚至是进入了环路,这显然不是我们期望的,所以在这个值为0的时候,网络设备将不会再传递这个包而是直接将他抛弃,并发送一个通知给包的源地址,说这个包已死。

第二个问题,通过TTL值我们能得到什么

其实TTL值这个东西本身并代表不了什么,对于使用者来说,关心的问题应该是包是否到达了目的地而不是经过了几个节点后到达。但是TTL值
还是可以得到有意思的信息的。每个操作系统对TTL值得定义都不同,这个值甚至可以通过修改某些系统的网络参数来修改,例如Win2000默认为128,通过注册表也可以修改。而Linux大多定义为64。不过一般来说,很少有人会去修改自己机器的这个值的,这就给了我们机会可以通过ping的回显TTL来大体判断一台机器是什么操作系统。
以我公司2台机器为例
看如下命令
D:\Documents and Settings\hx>ping 61.152.93.131

Pinging 61.152.93.131 with 32 bytes of data:

Reply from 61.152.93.131: bytes=32 time=21ms TTL=118
Reply from 61.152.93.131: bytes=32 time=19ms TTL=118
Reply from 61.152.93.131: bytes=32 time=18ms TTL=118
Reply from 61.152.93.131: bytes=32 time=22ms TTL=118

Ping statistics for 61.152.93.131:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss
Approximate round trip times in milli-seconds:
Minimum = 18ms, Maximum = 22ms, Average = 20ms

D:\Documents and Settings\hx>ping 61.152.104.40

Pinging 61.152.104.40 with 32 bytes of data:

Reply from 61.152.104.40: bytes=32 time=28ms TTL=54
Reply from 61.152.104.40: bytes=32 time=18ms TTL=54
Reply from 61.152.104.40: bytes=32 time=18ms TTL=54
Reply from 61.152.104.40: bytes=32 time=13ms TTL=54

Ping statistics for 61.152.104.40:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss
Approximate round trip times in milli-seconds:
Minimum = 13ms, Maximum = 28ms, Average = 19ms
第一台TTL为118,则基本可以判断这是一台Windows机器,从我的机器到这台机器经过了10个节点,因为128-118=10。而第二台应该是台Linux
,理由一样64-54=10。

了解了上面的东西,可能有人会有一些疑问,例如以下:
1,不是说包可能走很多路径吗,为什么我看到的4个包TTL都是一样的,没有出现不同?
这是由于包经过的路径是经过了一些最优选择算法来定下来的,在网络拓扑稳定一段时间后,包的路由路径也会相对稳定在一个最短路径上
具体怎么算出来的要去研究路由算法了,不在讨论之列。

2,对于上面例子第二台机器,为什么不认为它是经过了74个节点的Windows机器?因为128-74=54。
对于这个问题,我们要引入另外一个很好的ICMP协议工具。不过首先要声明的是,一个包经过74个节点这个有些恐怖,这样的路径还是不用为
好。

要介绍的这个工具是tracert(linux,unix下为traceroute),让我们来看对上面的第二台机器用这个命令的结果
D:\Documents and Settings\hx>tracert 61.152.104.40

Tracing route to 61.152.104.40 over a maximum of 30 hops

1 13 ms 16 ms 9 ms 10.120.32.1
2 9 ms 9 ms 11 ms 219.233.244.105
3 12 ms 10 ms 10 ms 219.233.238.173
4 15 ms 15 ms 17 ms 219.233.238.13
5 14 ms 19 ms 19 ms 202.96.222.73
6 14 ms 17 ms 13 ms 202.96.222.121
7 14 ms 15 ms 14 ms 61.152.81.86
8 15 ms 14 ms 13 ms 61.152.87.162
9 16 ms 16 ms 28 ms 61.152.99.26
10 12 ms 13 ms 18 ms 61.152.99.94
11 14 ms 18 ms 16 ms 61.152.104.40

Trace complete.

从这个命令的结果能够看到从我的机器到服务器所走的路由,确实是11个节点(上面说10个好像是我犯了忘了算0的错误了,应该是64-54+1,
嘿嘿),而不是128的TTL经过了70多个节点。

既然已经说到这里了,不妨顺便说说关于这两个ICMP命令的高级一点的东西。
首先是ping命令,其实ping有这样一个参数,可以无视操作系统默认TTL值而使用自己定义的值来发送ICMP Request包。
例如还是用那台Linux机器,用以下命令:
D:\Documents and Settings\hx>ping 61.152.104.40 -i 11

Pinging 61.152.104.40 with 32 bytes of data:

Reply from 61.152.104.40: bytes=32 time=10ms TTL=54
Reply from 61.152.104.40: bytes=32 time=13ms TTL=54
Reply from 61.152.104.40: bytes=32 time=10ms TTL=54
Reply from 61.152.104.40: bytes=32 time=13ms TTL=54

Ping statistics for 61.152.104.40:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 13ms, Average = 11ms

D:\Documents and Settings\hx>
这个命令我们定义了发包的TTL为11,而前面我们知道,我到这台服务器是要经过11个节点的,所以这个输出和以前没什么不同。现在再用这个

试试看:
D:\Documents and Settings\hx>ping 61.152.104.40 -i 10

Pinging 61.152.104.40 with 32 bytes of data:

Reply from 61.152.99.94: TTL expired in transit.
Reply from 61.152.99.94: TTL expired in transit.
Reply from 61.152.99.94: TTL expired in transit.
Reply from 61.152.99.94: TTL expired in transit.

Ping statistics for 61.152.104.40:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

D:\Documents and Settings\hx>

可以看到,结果不一样了,我定义了TTL为10来发包,结果是TTL expired in transit.就是说在到达服务器之前这个包的生命周期就结束了。
注意看这句话前面的ip,这个ip恰好是我们前面tracert结果到服务器之前的最后1个ip,包的TTL就是在这里减少到0了,根据我们前面的讨论
,当TTL减为0时设备会丢弃包并发送一个TTL过期的ICMP反馈给源地址,这里的结果就是最好的证明。
通过这里再次又证明了从我机器到服务器是经过了11个节点而不是70多个,呵呵。
最后再巩固一下知识,有人可能觉得tracer这个命令很神奇,可以发现一个包所经过的路由路径。其实这个命令的原理就在我们上面的讨论中

想象一下,如果我给目的服务器发送一个TTL为1的包,结果会怎样?
根据前面的讨论,在包刚出发的第一个节点,TTL就会减少为0,这时这个节点就会回应TTL失效的反馈,这个回应包含了设备本身的ip地址,这样我们就得到了路由路径的第一个节点的地址。因此,我们继续发送TTL=2的包,也就受到第二个节点的TTL失效回应.依次类推,我们一个一个的发现,当最终返回的结果不是TTL失效而是ICMP Response的时候,我们的tracert也就结束了,就是这么简单。

顺便补一句ping命令还有个-n的参数指定要发包的数量,指定了这个数字就会按照你的要求来发包了而不是默认的4个包。如果使用-t参数的话,命令会一直发包直到你强行中止它。

1
6
分享到:
评论

相关推荐

    怎么通过ping命令来检测网速.docx

    * 如果ping命令返回 "'说明超时,网络是不通的。 * 如果是内网,请检查网线是不是掉了,外网的话请查看是不是路由或网站原因。 使用ping命令可以检测网速,但需要根据实际情况选择合适的参数和方法。

    ping命令的使用

    下面我们将深入探讨`ping`命令的使用方法、参数以及其在不同场景下的应用。 ### 一、ping命令的基本用法 `ping`命令的基本语法是: ```bash ping [选项] 目标地址 ``` 这里的`目标地址`可以是IP地址或域名。例如...

    linux下ping程序.rar_linux_linux ping _linux ping pudn_ping linux

    1. **请求与响应**:每行开头的`64 bytes from`表示一个成功的回应,说明数据包成功到达目标并返回。 2. **时间戳**:记录了发送请求的时间。 3. **时延(rtt)**:如`time=32ms`,表示从发送到接收回应的时间,单位...

    ping_DOS_batping网址_cmd_ping_

    压缩包中的`2.jpg`和`1.jpg`可能是用于说明如何运行批处理文件或者显示批量ping的结果的图片。在实际操作中,根据这些图片可以更好地理解批处理文件的运行过程和结果。 总结来说,这个话题涉及到的是使用DOS命令行...

    vba使用ping测试网络通断 64位

    在实际应用中,你可能需要创建一个自定义函数,如`PingIP`,接受IP地址作为参数,然后调用`ICMPSendEcho2`进行ping测试。如果返回状态是`IP_SUCCESS`,则返回`True`表示网络通畅;否则返回`False`表示网络不通或有...

    全ping工具

    IP段全ping工具的工作原理是基于Internet控制消息协议(ICMP),发送ICMP回显请求到目标IP地址,然后等待对方返回ICMP回显应答。如果收到回应,说明目标IP是可达的;如果没有收到回应,则可能表示网络连接存在问题。...

    怎样PINGip地址

    PING(Packet Internet Groper)是一种基于ICMP协议的应用程序,其主要功能是发送一个ICMP Echo Request数据包到目标主机,并等待目标主机返回一个ICMP Echo Reply数据包。通过这种方式,可以检查两个主机之间的网络...

    常用 ping 命令

    Ping还能显示TTL(Time To Live存在时间)值,你可以通过TTL值推算一下数据包已经通过了多少个路由器:源地点TTL起始值(就是比返回TTL略大的一个2的乘方数)-返回时TTL值。例如,返回TTL值为119,那么可以推算数据...

    手机ping软件

    Ping命令的工作原理是通过发送ICMP(Internet Control Message Protocol)回显请求报文到目标服务器,然后等待服务器返回应答。如果收到应答,就说明网络连接是正常的,而且可以根据往返时间(Round Trip Time,RTT...

    Ping命令的使用技巧大全

    Ping命令的常用参数** - `-t`:持续发送Ping请求,直到手动停止,用于监测网络状况。 - `-l [size]`:指定发送的数据包大小,可测试不同大小数据包的传输性能。 - `-n [count]`:设置发送请求的次数,避免无限制地...

    ping命令简介[借鉴].pdf

    再根据返回的信息,你就可以推断 TCP/IP 参数(因为现在网络一般都是通过 TCP/IP 协议来传送数据的)是否设置正确,以及运行是否正常、网络是否通畅等。 ping 命令的执行格式如下:ping [ 远程服务器名 ][ 参数 ],...

    ping命令使用 以及其内容

    它通过发送ICMP(Internet Control Message Protocol)请求报文到目标主机,并等待目标主机返回响应报文来实现这一功能。在日常维护和故障排查过程中,Ping命令的应用频率极高。 #### 二、Ping命令的基本语法 基本...

    计算机网络讲解实验二:Ping等命令.pptx

    本实验的主要目的是了解 Ping 命令的使用和原理,包括 Ping 命令的基本使用、参数详解和错误信息分析。 一、Ping 命令的基本使用 Ping 命令是 Windows 系列自带的一个可执行命令,用于检查网络是否能够连通。基本...

    如何使用Ping命令.docx

    - 可以使用 `-t` 参数进行连续Ping操作:`ping -t [网址]` - 连续Ping有助于观察网络波动情况。 3. **解读结果**: - **TTL(Time To Live)**:存活时间,反映了数据包在网络中的最大生存时间。 - **Round-...

    ping命令详解.doc

    - **网络连通性**:如果`ping`命令能成功返回,说明网络连接基本正常。 - **延迟和丢包**:通过观察往返时间(time)和丢失的包数,可以评估网络延迟和丢包率,从而判断网络状况。 - **路由追踪**:通过`-r`或`-s...

    windows实用dos命令大全

    4.使用说明:选用/F参数,将文件中存在盘上的碎片消除,并调整磁盘文件的安排,确保文件之间毫无空隙。从而加快读盘速度和节省磁盘空间。  (九)SYS——系统复制命令  1.功能:将当前驱动器上的DOS系统文件IO....

    C#使用ping命令的两个例子

    在C#编程中,`ping`命令常用于检查网络连接是否可达,...如果需要处理复杂的ping命令参数或者跨平台运行,可能需要使用调用CMD命令的方式。无论哪种方式,都需确保正确处理异常和资源释放,以保证代码的健壮性和效率。

    计算机网络常用命令.doc

    你可以通过比较TTL初始值(通常是256的倍数)和返回的TTL值来估算数据包经过的路由器数。 以下是一些使用Ping命令来检测网络故障的常见步骤: 1. `ping 127.0.0.1`:这个命令检查本地环回接口,如果失败,可能意味...

Global site tag (gtag.js) - Google Analytics