我对跳数定义非常困惑和困惑,特别是与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,并且全局考虑跳数测量值,因为您发送的路由器数据包数量将到达目的地。