路由器路由功能
来源:http://www.lxway.com/4002456102.htm
浅谈路由器的路由功能
我以前刚开始接触到一些常用的网络设备(Router、Switch、Hub等)的时候,只是从一些资料中知道Router与Switch(或Hub)最大的分别就是多了个路由功能,对于现在低端的产品从功能上来说,Switch和Hub基本上是分别不大的(本文只讨论低端的产品,因为我没有怎么使用较高端的产品,对于Router也是),我那时候所看到的资料里对路由功能的描述大概是这样的:“Router中的路由功能可以使Internet中的任意两个节点通信时可以选择一条两节点间最近的路”,对于这句话,我一直是觉得很纳闷的,Router怎么会知道那条路会近一点呢?
一直到现在我才明白“Router的路由功能可以使Internet中的任意两个节点通信时可以选择一条两节点间最近的路”这句话的意思,其实最近的路就是指这条路上经过的Router(或Gateway)的数量是最少的。我们知道整个Internet是由很多个局域网组成的,这些局域网之间是通过Router(或Gateway)来进行连接的(但我们在此只讨论Router,Gateway并不在本文的讨论范围之内),整个Internet是成网状结构的(也就是说两点间的数据传输路线可能不只一条),就是因为Router有了这个叫“可路由”的功能,可以使Router可以在多条可到达目的地址时选择一条“距离最短”的,这个“可路由”的功能的工作原理是这样的(如下图所示):
在每个Router中都有一个叫“路由表”的表格,这个路由表是用来存放在整个网络中该Router可到达的“局域网”所经过Router的数量,每个Router都有这样的路由表,这个路由表最初存放的是该Router所连接的两个“局域网”的数据,这个路由表有自动更新的功能,即它会每隔一定的时间就会与相邻的Router交换各自的路由表中存放的数据(一般相隔的时间是30秒)。就如图中的网络是由4个“局域网”组成的,“局域网”之间用3个Router连接起来,Router1(R1)中的路由表最初存放的数据是:
目的网络号 | 下一站路由器 | 距离 |
10 | - | 0 |
20 | - | 0 |
这里的数据表示的意思就是从这个Router要到达10.0.0.0和20.0.0.0这两个网络需要经过0个路由器,即可以直接到达这两个网络,经过30秒后,R1会主动与R2交换各自的路由表中的数据,因为R2中的路由表最初存放的数据是:
目的网络号 | 下一站路由器 | 距离 |
20 | - | 0 |
30 | - | 0 |
R1和R2都会把对方的路由表拷贝一份过来更新自己的路由表中的数据,因为是相邻的路由器,所以两个路由器中的路由表中必定会有相同的记录(这里所说的相同只是指网络号相同),在这里R1和R2的路由表都有关于20.0.0.0的记录:
目的网络号 | 下一站路由器 | 距离 |
20 | - | 0 |
路由表对相同的记录(再次声明这里所说的相同只是指网络号相同)的更新是采取“最新和最短距离”的原则更新的,这里因为R1和R2都是直接与20.0.0.0相连的,所以离网络号20的距离都是0的,所以各自的这条记录不需要更新,这次更新完后,R1和R2各自的路由表中的数据就会变成:
R1:
目的网络号 | 下一站路由器 | 距离 |
10 | - | 0 |
20 | - | 0 |
30 | 20.0.0.9 | 1 |
R2:
目的网络号 | 下一站路由器 | 距离 |
20 | - | 0 |
30 | - | 0 |
10 | 20.0.0.7 | 1 |
相应的R2与R3也会进行类似这样的路由表更新,当经过若干次这样的路由表更新后,网络中的Router的路由表就会变成图中所示的(再详细的我就不再描述了,我怕有人说我多此一举啊*^*)。
到此为止我们基本上是知道了由表的生成过程了,但好像还不知道他是怎么工作的,那让我们从另一个情况下看看路由表的生成吧,我们现在把上图中的网络改造一下:“在10.0.0.0和40.0.0.0这两个网络中间增加一个Router(R4)把网络号10和40直接连接起来看看(我们假设R4连接两个网络的IP地址为10.0.0.3和40.0.0.5),在原来已经更新好的路由表的情况下,我们看看R1和R4各自的路由表初始的状态:
R1:
目的网络号 | 下一站路由器 | 距离 |
10 | - | 0 |
20 | - | 0 |
30 | 20.0.0.9 | 1 |
40 | 20.0.0.9 | 2 |
R4:
目的网络号 | 下一站路由器 | 距离 |
10 | - | 0 |
40 | - | 0 |
当R1需要与R4交换路由表的数据时,R1和R4也有一条网络号为40的记录是相同,但这两条记录并不是完全一样,所以这条记录是需要更新的,这时对于R1,如果需要到达R4可以选择一:经过R2、R3,也可以选择二:直接经过R4,但因为选择一要经过R2和R3这2个Router,而选择二只需要经过1个Router即可,所以R1中关于网络号为40的记录会被R4的记录更新为:
R1:
目的网络号 | 下一站路由器 | 距离 |
10 | - | 0 |
20 | - | 0 |
30 | 20.0.0.9 | 1 |
40 | 10.0.0.3 | 1 |
而对于R4情况则相反,因为自身存在的记录的距离比R1中原来存放的记录的距离要短,所以不更新这条记录,R4更新完后的路由表是:
R4:
目的网络号 | 下一站路由器 | 距离 |
10 | - | 0 |
40 | - | 0 |
20 | 40.0.0.5 | 1 |
30 | 40.0.0.5 | 2 |
现在我们应该很清楚知道路由表是怎样帮我们选择一条最近的路了吧,它不是在传输数据的时候再来选择那条路是最近的,它是在路由表更新的时候就确定那条路更近一些的。从这些例子我们也可以清楚看到最近的路并不就是数据传输的最短距离,而是数据传输时经过的Router的数量最少而已!