正如其他人评论的那样,TTL 为 0 的 IP 数据包将被丢弃,并且每当处理/重写 IP 标头时都会更新 TTL,并且通常会递减 1。实际上,每当数据包通过物理路由离开路由器时,TTL 都会递减界面。
为了更具体地回答您的问题,仅当它离开路由器时 TTL 才会递减。在您的情况下,对于发往环回接口或接口 0/2 的数据包,数据包不会退出路由器,IP 标头不会更新,因此 TTL 不会递减并返回 ping。
查看使用您的拓扑的几个示例:
从主机 192.168.1.50 到 1.1.1.1 或 192.168.2.1 的 Ping:ping 由接口 0/1 上的路由器接收,TTL 为 1,因此数据包被接受,ping 目的地为本地接口,因此 IP 标头未更新且 TTL 未递减,数据包由 IP 接口(1.1.1.1 或 192.168.2.1)接收。平成功。
从主机 192.168.1.50 到 192.168.2.50(LAN 上的主机)的 Ping:ping 由接口 0/1 上的路由器接收,TTL 为 1,因此数据包被接受,做出路由决定,数据包将从接口 0/2 路由到目的地 (192.168.2.50),在此阶段更新 IP 标头,递减 TTL 并丢弃数据包,因为 TTL 为 0。Ping 失败。
总之,如果您将 PC 连接到接口 0/1,是的,您应该能够 ping 接口 0/2 或环回接口。使用相同的设置,如果您尝试 ping 192.168.2.0/24 上的另一台主机(不是路由器),则 ping 将失败。
我已经使用 Cisco 7200 路由器进行了设置,以证明它在现实生活中是如何工作的:
- PC1连接到路由器接口E1/1,IP地址为192.168.1.50/24
- PC2连接到路由器接口E1/2,IP地址为192.168.2.50/24
- 路由器在 E1/1 上有 IP 192.168.1.1/24
- 路由器在 E1/2 上有 IP 192.168.2.1/24
- 路由器有环回地址 1.1.1.1/32
首先,从 PC1 (192.168.1.50) ping 路由器 E1/2 (192.168.2.1),TTL 为 1(PING SUCCEEDS):
路由器调试输出:
*Nov 3 20:55:33.447: IP: s=192.168.1.50 (Ethernet1/1), d=192.168.2.1, len 84, rcvd 0
*Nov 3 20:55:33.451: ICMP type=8, code=0
*Nov 3 20:55:33.451: ICMP: echo reply sent, src 192.168.2.1, dst 192.168.1.50, topology BASE, dscp 0 topoid 0
*Nov 3 20:55:33.451: FIBipv4-packet-proc: route packet from (local) src 192.168.2.1 dst 192.168.1.50
*Nov 3 20:55:33.451: FIBfwd-proc: packet routed by adj to Ethernet1/1 192.168.1.50
*Nov 3 20:55:33.451: FIBipv4-packet-proc: packet routing succeeded
*Nov 3 20:55:33.451: IP: s=192.168.2.1 (local), d=192.168.1.50 (Ethernet1/1), len 84, sending
*Nov 3 20:55:33.451: ICMP type=0, code=0
R2#
*Nov 3 20:55:33.451: IP: s=192.168.2.1 (local), d=192.168.1.50 (Ethernet1/1), len 84, sending full packet
*Nov 3 20:55:33.455: ICMP type=0, code=0
*Nov 3 20:55:33.455: IP: s=192.168.1.50 (Ethernet1/1), d=192.168.2.1, len 84, input feature
*Nov 3 20:55:33.455: ICMP type=8, code=0, packet consumed, MCI Check(88), rtype 0, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
- 路由器接收 IP 数据包 192.168.1.50 -> 192.168.2.1
- 路由器不路由数据包这是一个本地接口,数据包不会退出路由器
- 路由器从 192.168.2.1 -> 192.168.1.50 创建 ICMP Echo Reply
- 路由器路由回复并从接口 E1/1 发送出去
其次,从 PC1 (192.168.1.50) 到 PC2 (192.168.2.50) 的 TTL 为 1 (PING FAILS) 的 ping:
路由器调试输出:
*Nov 3 20:57:23.419: FIBipv4-packet-proc: route packet from Ethernet1/1 src 192.168.1.50 dst 192.168.2.50
*Nov 3 20:57:23.419: FIBfwd-proc: packet routed by adj to Ethernet1/2 192.168.2.50
*Nov 3 20:57:23.419: FIBipv4-packet-proc: packet routing succeeded
*Nov 3 20:57:23.419: ICMP: time exceeded (time to live) sent to 192.168.1.50 (dest was 192.168.2.50), topology BASE, dscp 0 topoid 0
*Nov 3 20:57:23.419: FIBipv4-packet-proc: route packet from (local) src 192.168.1.1 dst 192.168.1.50
*Nov 3 20:57:23.419: FIBfwd-proc: packet routed by adj to Ethernet1/1 192.168.1.50
*Nov 3 20:57:23.419: FIBipv4-packet-proc: packet routing succeeded
R2#
*Nov 3 20:57:23.419: IP: s=192.168.1.1 (local), d=192.168.1.50 (Ethernet1/1), len 56, sending
*Nov 3 20:57:23.419: ICMP type=11, code=0
*Nov 3 20:57:23.419: IP: s=192.168.1.1 (local), d=192.168.1.50 (Ethernet1/1), len 56, sending full packet
*Nov 3 20:57:23.419: ICMP type=11, code=0
*Nov 3 20:57:23.419: IP: s=192.168.1.50 (Ethernet1/1), d=192.168.2.50, len 84, input feature
*Nov 3 20:57:23.419: ICMP type=8, code=0, packet consumed, MCI Check(88), rtype 0, forus FALSE, sendself FALSE, mtu 0, fwdchk FALSE
- 路由器将数据包从 E1/1 路由到 E1/2
- TTL减为0,超时,打包丢弃
- 路由器将超出的 ICMP TTL 发送到数据包源
- ICMP 数据包从 E1/1 路由到 PC1