跳数:计算跳数的正确方法:路由器计数 vs 路由器计数 +1

跳数:计算跳数的正确方法:路由器计数 vs 路由器计数 +1

我对跳数定义感到很困惑,尤其是与 RIP 度量相关的定义。跳数是否必须反映链路数或路由器数?以下有两种可能性:

语句 A:.
跳数 = 经过的路由器数量
。到同一子网上的主机的跳数 = 0。RIPv1
度量 = 跳数 + 1(假设网络成本 = 1)

语句 B:.
跳数 = 经过的路由器数 +1
. 到同一子网上的主机的跳数 = 1.
RIPv1 度量 = 跳数(假设网络成本 = 1)

哪个论述是对的 ?

这是我的网络拓扑:

(192.168.2.0/24)--路由器2--(192.168.1.0/24)--路由器1--(192.168.0.0/24)--Internet网关--z--

跳数似乎存在歧义:交叉路由器的数量与使用的链接的数量。

维基百科引述:“在计算机网络中,跳跃是源和目标之间路径的一部分。数据包在途中经过路由器和网关。每次数据包传递到下一个设备时,都会发生一次跳跃。要查看从一台主机到另一台主机需要多少次跳跃,可以使用 ping 或 traceroute/tracepath 命令。”

最终的接收者是否被视为“下一个设备”,从而暗示一次跳跃?

这是从主机 192.168.2.30 通过两个路由器的本地跟踪路由:

test@ubuntu:~$ sudo traceroute -I 192.168.0.1
traceroute to 192.168.0.1 (192.168.0.1), 30 hops max, 60 byte packets
1  192.168.2.1 (192.168.2.1)  0.868 ms  0.831 ms  2.565 ms
2  192.168.1.1 (192.168.1.1)  3.451 ms  3.450 ms  3.438 ms
3  Gateway (192.168.0.1)  5.213 ms  5.219 ms  5.945 ms
test@ubuntu:~$ 

1,2,3 .. 那是 3 跳吗?traceroute 格式让我很困惑。

另外,这是我的子网 2 路由表(包括 RIP 条目):

test@ubuntu:~$ ip -4 route show
default via 192.168.2.1 dev eth0  proto zebra  metric 2 
192.168.0.0/24 via 192.168.2.1 dev eth0  proto zebra  metric 3 
192.168.0.1 via 192.168.2.1 dev eth0  proto zebra  metric 3 
192.168.1.0/24 via 192.168.2.1 dev eth0  proto zebra  metric 2 
192.168.2.0/24 dev eth0  proto kernel  scope link  src 192.168.2.201  metric 1 
192.168.3.0/24 dev eth2  proto kernel  scope link  src 192.168.3.201  metric 1 
test@ubuntu:~$ 

我们有到子网 0 的度量 3(即跨越两个路由器)。

在这方面,我们有一个概念,即跳数=链接数

另一方面,维基百科页面显示了两个路由器的在线图片,并附有以下注释:“网络中跳跃的说明。在这种情况下,计算机之间的跳跃数为 2。”

此外,它链接到一个页面,该页面明确指出我们必须计算路由器上的跳数,而不是链接上的跳数:

这里,我们清楚地有一个概念:跳数=交叉路由器的数量。

计算跳数的正确方法是什么?它与 RIP 度量有何关系?
来源:
http://en.wikipedia.org/wiki/Hop(网络
http://www.infocellar.com/networks/ip/hop-count.htm

注:RFC 1058(RIPv1 RFC)中的相关引述:

在简单的网络中,通常使用一个度量标准来简单计算一条消息必须经过多少个网关
。...

主要要求是必须能够将度量表示为各个跳跃的“成本”总和。

正式来说,如果可以从实体 i 直接到达实体 j(即,无需经过中间的另一个网关),则成本 d(i,j) 与 i 和 j 之间的跳跃相关。在给定网络上的所有实体都被视为相同的情况下,d(i,j) 对于给定网络上的所有目的地都是相同的,并且表示使用该网络的成本。

要获得完整路由的度量,只需将组成该路由的各个跳数的成本相加即可。出于本备忘录的目的,我们假设成本为正整数。

...

     A-----B
         \   / \
          \ /  |
           C  /    all networks have cost 1, except
           | /     for the direct link from C to D, which
           |/      has cost 10
           D
           |<=== target network

每个网关都会有一个表,显示到每个网络的路由。

然而,为了便于说明,我们仅显示从每个网关到图表底部标记的网络的路由。

        D:  directly connected, metric 1
        B:  route via D, metric 2
        C:  route via B, metric 3
        A:  route via B, metric 3    

...

网络的度量是介于 1 和 15 之间的整数(含 1 和 15)。它以本协议中未指定的某种方式设置。大多数现有实现始终使用度量 1。...

假设每个实施 RIP 的主机都有一个路由表。此表针对可通过 RIP 描述的系统到达的每个目的地都有一个条目。每个条目至少包含以下信息:

  - The IP address of the destination.

  - A metric, which represents the total cost of getting a
    datagram from the host to that destination.  This metric is
    the sum of the costs associated with the networks that
    would be traversed in getting to the destination.    

...

直接连接网络的度量设置为该网络的成本。在现有的 RIP 实现中,成本始终为 1。在这种情况下,RIP 度量将简化为简单的跳数。

答案1

当你引用维基百科时,你应该注意到了这个线索:

要查看从一个主机到另一个主机需要多少跳,可以使用 ping 或 traceroute/tracepath 命令。

Traceroute 的工作原理通常是发送 UDP、TCP 或 ICMP 数据包(唯一重要的是,所使用的协议被封装到 IP 数据报中,并且可以使用相同协议的应答在目标 IP 地址上传递),其中 IP 报头中的 TTL 字段等于 1,然后在每次尝试后加一,直到收到的答复不同于 ICMP 类型 11 代码 0 数据包(ICMP 类型 11 =超出时间,代码 0 =TTL 在传输过程中已过期)。

这使用 RFC 1812 的这一部分:

IP 标头的生存时间 (TTL) 字段被定义为
限制数据报生存期的计时器。它是一个 8 位字段,
单位是秒。处理
数据包的每个路由器(或其他模块)都必须将 TTL 至少减少一,即使经过的
时间远少于一秒。由于这种情况很常见, TTL 实际上是数据报 在互联网上传播
距离的跳数限制。

[...]

如果 TTL 减小为零(或更小),则必须
丢弃数据包,如果目标不是多播地址,则路由器必须 向源
发送 ICMP 超时消息,代码为 0(传输中 TTL 超出)消息

几乎所有实现都解释将 TTL 至少减少 1作为将 TTL 减一跳跃测量在整体上被视为您发送的数据包在到达目的地之前将经过的路由器数量。

相关内容