有许多关于路由器行为的问题与 TTL=1 的 IPv4 数据包和明显矛盾的答案。这个问题不是关于主机或路由器应该做什么,而是关于设备在现场做什么的实际问题。
问题:在 IPv4 中,我们能否找到 Cisco 路由器或其他制造商的型号/配置,其中当数据包的目标地址是该路由器接口的地址之一时,路由器会丢弃已过期的 TTL=1 数据包?
我的信念是,路由器将对其任何 IP 地址(ACL 允许)的数据包做出相同的回复,到目前为止,我对我很容易获得的设备进行的实验已经证实了这一点。但这与 Ron Maupin 的实验相矛盾https://networkengineering.stackexchange.com/a/45421
- 行为一是端点路由器递减TTL从近到远接口穿越
- 行为2是端点路由器不递减TTL从近到远接口穿越
我只能找到行为 2 的路由器。
MINIMAL NON-MINIMAL
=+= +---R2---R3--...--+
|Afar | |Anear
R R1 Rn
|Anear | |Afar
===+====+==== ===+===+==== ==+==
| |
H H
Anear = address of interface nearest H
Afar = address of interface not nearest H
实验 1:最小,使用 TTL=1 发送的数据包
该实验旨在与 Ron Maupin 在其回答中的基本相同https://networkengineering.stackexchange.com/a/45421
我们发现 TTL=1 的数据包到达近和远接口。
- H 是 Ubuntu 192.168.0.210/24,默认路由到 192.168.0.1
- R 是 Cisco 867VAE,版本 15.2(4)M3 近端是 vlan0 192.168.0.1/24,远端是 loopback0=10.0.0.1/24
坪附近
$ ping -t 1 -c 1 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=1.72 ms
H 上的 tcpdump 显示数据包以 TTL=1 离开,答案返回
17:43:52.960574 IP (tos 0x0, ttl 1, id 11971, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.210 > 192.168.0.1: ICMP echo request, id 10823, seq 1, length 64
17:43:52.962266 IP (tos 0x0, ttl 255, id 11971, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.1 > 192.168.0.210: ICMP echo reply, id 10823, seq 1, length 64
平远方
$ ping -t 1 -c 1 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=255 time=1.27 ms
H 上的 tcpdump 显示 TTL=1 的数据包和返回的答案
17:44:32.094832 IP (tos 0x0, ttl 1, id 8632, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.210 > 10.0.0.1: ICMP echo request, id 10830, seq 1, length 64
17:44:32.096070 IP (tos 0x0, ttl 255, id 8632, offset 0, flags [DF], proto ICMP (1), length 84)
10.0.0.1 > 192.168.0.210: ICMP echo reply, id 10830, seq 1, length 64
实验 2:非最小
这本来是一样的,但接口都是物理的,发送的 TTL 刚好足以到达路由器。我们发现 TTL=2 在近端和远端接口上失败,而 TTL=3 在近端和远端接口上成功。
- H 是 192.168.0.210/24 上的 Ubuntu
- Rn 是 Cisco 2811 15.1(4)M10,近端 FastEthernet0/0 位于 172.30.20.251/24,远端 FastEthernet0/1 位于 172.31.20.254/24
对于近端和远端地址,TTL=2(均失败)和 TTL=3(均成功)的结果相同。
$ ping -t 2 -c 1 172.30.20.251 | fgrep -i From
From 192.168.253.254 icmp_seq=1 Time to live exceeded
$ ping -t 2 -c 1 172.31.20.254 | fgrep -i From
From 192.168.253.254 icmp_seq=1 Time to live exceeded
$ ping -t 3 -c 1 172.30.20.251 | fgrep -i From
64 bytes from 172.30.20.251: icmp_seq=1 ttl=252 time=49.2 ms
$ ping -t 3 -c 1 172.31.20.254 | fgrep -i From
64 bytes from 172.31.20.254: icmp_seq=1 ttl=252 time=49.1 ms
这些是来自 H 的 tcpdumps:
TTL=2,数据包离开,超时返回
靠近
18:31:23.098358 IP (tos 0x0, ttl 2, id 38235, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.210 > 172.30.20.251: ICMP echo request, id 11423, seq 1, length 64
18:31:23.146825 IP (tos 0xc0, ttl 253, id 36603, offset 0, flags [none], proto ICMP (1), length 56)
192.168.253.254 > 192.168.0.210: ICMP time exceeded in-transit, length 36
IP (tos 0x0, ttl 1, id 38235, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.210 > 172.30.20.251: ICMP echo request, id 11423, seq 1, length 64
远的
18:31:23.152807 IP (tos 0x0, ttl 2, id 61977, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.210 > 172.31.20.254: ICMP echo request, id 11425, seq 1, length 64
18:31:23.201199 IP (tos 0xc0, ttl 253, id 36606, offset 0, flags [none], proto ICMP (1), length 56)
192.168.253.254 > 192.168.0.210: ICMP time exceeded in-transit, length 36
IP (tos 0x0, ttl 1, id 61977, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.210 > 172.31.20.254: ICMP echo request, id 11425, seq 1, length 64
TTL=3 时,ICMP 回显和响应近端和远端地址
近侧:
18:31:23.211459 IP (tos 0x0, ttl 3, id 38260, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.210 > 172.30.20.251: ICMP echo request, id 11427, seq 1, length 64
18:31:23.259514 IP (tos 0x0, ttl 252, id 38260, offset 0, flags [DF], proto ICMP (1), length 84)
172.30.20.251 > 192.168.0.210: ICMP echo reply, id 11427, seq 1, length 64
远端
18:31:23.268194 IP (tos 0x0, ttl 3, id 61985, offset 0, flags [DF], proto ICMP (1), length 84)
192.168.0.210 > 172.31.20.254: ICMP echo request, id 11429, seq 1, length 64
18:31:23.316748 IP (tos 0x0, ttl 252, id 61985, offset 0, flags [DF], proto ICMP (1), length 84)
172.31.20.254 > 192.168.0.210: ICMP echo reply, id 11429, seq 1, length 64