跳数:正确计数跳数:路由器数量与路由器数量+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,并且全局考虑跳数测量值,因为您发送的路由器数据包数量将到达目的地。