跳数:正确计数跳数:路由器数量与路由器数量+1

我对跳数定义非常困惑和困惑,特别是与RIP度量有关。 跳数是否必须反映链路数量或路由器数量? 这里有两种可能性:

声明A:
。 跳数=交叉路由器的数量
。 跳数到同一子网= 0的主机
。 RIPv1 metric =跳数+ 1(假设networking成本= 1)

声明B:
。 跳计数=交叉路由器的数量+ 1
。 跳数到同一子网上的主机= 1
。 RIPv1 metric =跳数(假设networking成本= 1)

哪个论述是对的 ?

这是我的networking拓扑结构:

(192.168.2.0/24)–Router2–(192.168.1.0/24)–Router1–(192.168.0.0/24)–InternetGateway–z–

关于跳数似乎有一个模糊的问题:交叉路由器的数量与使用的链路的数量有关。

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

最终收件人是否被认为是“下一个设备”,因此意味着一跳?

这是来自主机192.168.2.30的本地traceroute,通过两台路由器:

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格式令我困惑。

更多,这里是我的subnet2路由表(包括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:~$ 

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

在这方面,我们很清楚跳跃计数=链接计数的概念

另一方面,维基百科页面显示了两个路由器的内嵌图片,其中有这样的评论:“一个networking中的跳数的例子,在这种情况下计算机之间的跳数是2。

更多的是,它链接到一个页面,明确指出,我们必须计算在路由器上跳跃,而不是跳过链接:

在这里,我们显然有一个跳计数=交叉路由器数量的概念。

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

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

在简单的networking中,通常使用度量标准来简单地计算消息必须经过的网关数量。
…

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

forms上,如果有可能直接从实体i到实体j(即,不经过另一个网关),则成本d(i,j)与i和j之间的跳数相关联。 在给定networking上的所有实体被认为是相同的正常情况下,对于给定networking上的所有目的地,d(i,j)是相同的,并且表示使用该networking的成本。

要获得完整路线的度量标准,只需计算构成路线的单个跃点的成本。 为了这个备忘录的目的,我们假定成本是正整数。

…

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

每个网关都有一个表格显示每个networking的路由。

但是,为了说明这个目的,我们只显示从每个网关到networking底部标记的networking的路由。

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

…

networking的度量是1到15之间的整数。 它以某种方式设置,在这个协议中没有指定。 大多数现有的实现总是使用1的度量。

每个实现RIP的主机都假定有一个路由表。 该表对于通过RIP描述的系统可达的每个目的地具有一个条目。 每个条目至less包含以下信息:

  - 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. 

…

直接连接networking的度量设置为该networking的成本。 在现有的RIP实现中,总是使用1来代价。 在这种情况下,RIP度量减less到一个简单的跳数。

正如你引用维基百科,你应该已经注意到这个线索:

要查看从一台主机到另一台主机所需的跳数,可以使用ping或traceroute / tracepath命令。

你有没有检查traceroute的工作原理?

你会猜到你的问题的答案。

Traceroute通常通过发送UDP,TCP或ICMP数据包(只有重要的是,正在使用的协议被封装到一个IP数据报中,并且在同一个协议上的一个答案可以在目的IP地址上传送) IP头等于1,然后在每次尝试后增加1,直到收到的应答不同于ICMPtypes11代码0包(ICMPtypes11 = 超时 ,代码0 = 传输中TTL过期 )。

这使用RFC 1812的这一部分:

IP头的生存时间(TTL)字段被定义为a
定时器限制数据报的生命周期。 这是一个8位的字段
单位是秒。 每个路由器(或其他模块)处理一个
数据包必须至less减less一个TTL,即使经过
时间比一秒钟less得多。 由于这是很常见的情况,
TTL实际上是数据报可以达到多less的跳数限制
通过互联网传播。

[…]

如果TTL减less到零(或更less),则该分组必须是
丢弃,如果目的地不是多播地址的话
路由器务必发送ICMP超时消息,代码0(TTL超出
在过境)消息来源

几乎所有实现的解释都会将TTL 递减一个 ,即将TTL减1,并且全局考虑跳数测量值,因为您发送的路由器数据包数量将到达目的地。