我理解 ttl = 系统设置的缺省值 - 路由跳数。也就是说 ttl 越大,离目标服务器的跳数越近。 但是今天我 ping 了 baidu 和 github ,结果如下,baidu ttl = 49 、github ttl = 113 。如果按照我的理解,那么到 github 服务器的跳数比 baidu 的少了很多,有点反直觉。目前猜测有 2 个可能:
有大佬知道这是为啥吗?
➜ ~ ping baidu.com
PING baidu.com (39.156.66.10) 56(84) bytes of data.
64 bytes from baidu.com (39.156.66.10): icmp_seq=1 ttl=49 time=33.4 ms
64 bytes from baidu.com (39.156.66.10): icmp_seq=2 ttl=49 time=33.5 ms
64 bytes from baidu.com (39.156.66.10): icmp_seq=3 ttl=49 time=33.2 ms
^C
--- baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 33.238/33.385/33.513/0.239 ms
➜ ~
➜ ~
➜ ~
➜ ~ ping github.com
PING github.com (20.205.243.166) 56(84) bytes of data.
64 bytes from github.com (20.205.243.166): icmp_seq=1 ttl=113 time=80.5 ms
64 bytes from github.com (20.205.243.166): icmp_seq=2 ttl=113 time=79.9 ms
64 bytes from github.com (20.205.243.166): icmp_seq=3 ttl=113 time=79.7 ms
64 bytes from github.com (20.205.243.166): icmp_seq=4 ttl=113 time=80.2 ms
^C
--- github.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 79.788/80.139/80.547/0.407 ms
➜ ~
1
pagxir 346 天前 via Android
明显是没理解。一个是 64 减到 49, 一个是从 128 减到 113 ,当然是无法直接比较
|
2
Songxwn 346 天前
默认的 TTL 是看系统是什么,64 128 255 都是常见的。然后每经过一个三层路由器转发就会减去 1 。 你 ping github ,应该就是 128-113 ,经过了 14 跳路由转发。
TTL 和域名无关,是在 IP 报文里面。 |
3
dier 346 天前
很明显 ping baidu 的域名 TTL 值是 64 ,ping github 的域名 TTL 值是 128 ,两个算下来经过的跳数其实是一样的。
|
4
huangcjmail OP |
5
dier 346 天前 1
另外,如果 30 跳都找不到目标的话基本上就通不了了。TTL 值的作用只是为了防止数据包一直在网络设备之间流转而设置的一个过期时间。
|
6
dier 346 天前
@huangcjmail 这个 TTL 值取决于目标服务器,不是取决于发起端
|
7
huangcjmail OP @dier 原来是这样
|
8
storm666 346 天前
不同操作系统返回的 ttl 值不一样,例如 windows 通常是 128 ,linux 通常是 64 ,逐跳减 1 ,因此你可以通过返回的 ttl 值大概推断出目标主机的操作系统。
|
9
fangpeishi 346 天前
截图中显示的 TTL ,是 ICMP 回包的 TTL ,所以初始值可能不同。
给楼主出个题,如何推断出目标回包初始的 TTL 值。 虽然初始值有默认值,但是如果被修改过呢。 |
10
lwjef 346 天前 1
ping 114.114.114.114 可以加深 ttl 来自目标这个印象。
|
11
mantouboji 346 天前
难道你不知道 traceroute 命令配合服用?
|
12
huangcjmail OP @mantouboji 提问之后确实 traceroute 了,显示跳数确实是在合理范围内,之前都忘记有这个命令了。主要还是没搞懂是服务端决定 TTL ,当时如果看到 traceroute 结果肯定更懵逼了。
|
13
hxysnail 345 天前
ping 命令显示的 ICMP 回包的信息,回包是目标服务器发的,默认 TTL 是操作系统协议栈决定的,所以会有说差异。探测网络跳数,通常用 traceroute 或 mtr 命令。最后发两篇关于 ping 和 traceroute 命令原理的博客(自己写的)供大家参考一下:
ping: https://fasionchan.com/network/icmp/ping/ traceroute: https://fasionchan.com/network/icmp/traceroute/ |
14
julyclyde 345 天前
@mantouboji traceroute 和这里的不一样
ping ICMP ECHO 是由目标机器发的,TTL 是由它指定的 而 traceroute 的 ICMP TTL exceed 消息是由中间路由回复的,这个回复在整个路径里“属于第几步”是由 traceroute 自己计算的 |