《ping命令的意义》由会员分享,可在线阅读,更多相关《ping命令的意义(5页珍藏版)》请在金锄头文库上搜索。
1、TTL 是 IP 协议包中的一个值,它告诉网络路由器包在网络中的时间是否太长而应被丢弃。有很多原因使包在一定时间内不能被传递到目的地。例如,不正确的路由表可能导致包的无限循环。所以需要在包中设置这样一个值,包在每经过一个节点,将这个值减1,反复这样操作,最终可能造成两个结果:包在这个值还为正数的时候到达了目的地,或者是在经过一定数量的节点后,这个值减为了0。前者代表完成了一次正常的传输,后者代表包可能选择了一条非常长的路径甚至是进入了环路,这显然不是我们期望的,所以在这个值为 0 的时候,网络设备将不会再传递这个包而是直接将他抛弃,并发送一个通知给包的源地址,说这个包已死。第二个问题,通过 T
2、TL 值我们能 得到什么其 实 TTL 值这个东西本 身并代表不了什么,对于使用者来说,关心的问题应该是包是否到达了目的地而不是经过了几个节点后到达。但是TTL 值还是可以得到 有意思的信 息的。每个操作系统对TTL 值得定义都不同,这个值甚至可以通过修改某些系统的网络参数来修改,例如 Win2000 默认为 128,通过注册表也可以修改。而 Linux 大多定义为 64。不过一般来说,很少有人会去修改自己机器的这个值的,这就给了我们机会可以通过 ping 的回显 TTL 来大体判断一台机器是什么操作系统。如你看到112,可能是初始 128,跳了16 个节点,或者是初始 160,跳了 48 次
3、。不同的操作系统,它的 TTL 值默认值是不相同的。默认情况下,Linux 系统的TTL值为64 或 255,Windows NT/2000/XP系统的 TTL 值为 128,Windows 98 系统的TTL 值为 32, UNIX 主机的 TTL 值为255。 简单来说,TTL 全程 Time to Live,意思就是生存周期。 首先要说明 ping命令是使用的网络层协议 ICMP,所以 TTL 指的是一个网络层的网络数据包(package)的生存周期,这句话不懂的先回去复 习 OSI7层协议去。TTL值全称是“ 生存时间( Time To Live)”,简单的说它 表示 DNS记录在 D
4、NS 服务器上缓存时间。一般情况下 Windows 系列的系统返回的 TTL值在 100-130 之间,而 UNIX/Linux 系列的系统返回的 TTL 值在 240-255 之间,当然 TTL 的值在对方的主机里是可以修改的,Windows 系列的系统可以通过修改注册表以下键值实现:HKEY_LOCAL_MACHINESYST EMCurrentContr olSetServices Tcpip ParametersDefaultTTL=dword:000000ff255-FF128-8064-4032-20第一个问题,为什么要有生存周期这个概念。 很显然,一个 package 从一台机器
5、到另一台机器中间需要经 过很长的路径,显然这个路径不是单一的,是很复杂的,并且很可能存在环路。如果一个数据包在传输过程中进入了环路,如果不终止它的话,它会一直循环下去,如果很多个数据包都这样循环的话,那对于网络来说这就是灾难了。所以需要在包中设置这样一个值,包在每经过一个节点,将这个值减 1,反复这样操作,最终可能造成 2 个结果:包在这个值还为正数的时候到达了目的地,或者是在经过一定数量的节点后,这个值减为了 0。前者代表完成了一次正常的传输,后者代表包可能选择了一条非常长的路径甚至是进入了环路,这显然不是我们期望的,所以在这个值为 0的时候,网络设备将不会再传递这个包而是直接将他抛弃,并发
6、送一个通知给包的源地址,说这个包已死。其实 TTL 值这个东 西本身并代 表不了什么,对于使用者来说,关心的问题应该是包是否到达了目的地而不是经过了几个节点后到达。但是 TTL值还是可以得到有意思的信息的。 每个操作系统对 TTL值得定义都 不同,这个值甚至可以通过修改某些系统的网络参数来修改,例如 Win2000 默认为 128,通过注册表也可以修改。而Linux大多定义为64。不过一般来说,很少有人会去修改自己机器的这个值的,这就给了我们机会可以通过ping 的回显 TTL来大体判断一台机器是什么操作系统。 以我公司 2台机器为例 看如下命令 D:Documents and Setting
7、shxping 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 6
8、1.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 Settingshxping 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
9、 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 =
10、13ms, Maximum = 28ms, Average = 19ms 第一台 TTL 为 118,则基本 可以判断这是一台 Windows机器,从我的机器到这台机器经过了 10 个节点,因为 128-118=10。而第二台应该是台 Linux,理由一样 64-54=10。了解了上面的东西,可能有人会有一些疑问,例如以下: 1,不是说包可能走很多路径吗,为什么我看到的 4 个包 TTL 都是一样的,没有出现不同? 这是由于包经过的路径是经过了一些最优选择算法来定下来的,在网络拓扑稳定一段时间后,包的路由路径也会相对稳定在一个最短路径上。具体怎么算出来的要去研究路由算法了,不在讨论之列。 2,
11、对于上面例子第二台机器,为什么不认为它是经过了 74 个节点的Windows 机器?因为 128-74=54。 对于这个问题,我们要引入另外一个很好的 ICMP协议工具。不过首先要声明的是,一个包经过74 个节点这个有些恐怖,这样的路径还是不用为好。 要介绍的这个工具是 tracert(*nix下为 traceroute),让我们来看对上面的第二台机器用这个命令的结果 D:Documents and Settingshxtracert 61.152.104.40 Tracing route to 61.152.104.40 over a maximum of 30 hops 1 13 ms 1
12、6 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 1
13、2 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 包。 例如还
14、是用那台Linux机器,用以下命令: D:Documents and Settingshxping 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: byt
15、es=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 Settingshx 这个命令我们定义了发包的 TTL 为11,而前面我们知道,我到这台服务器是要经过 11 个节点的,所以这个输出和以前没什么不同。现在再用
16、这个试试看: D:Documents and Settingshxping 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