IP基础--4.RIP协定
/ns/cn/zs/data/20020806030155.htm
Routing Information protocol 顾名思义是给封包路由所用的它通常是用於router和router之间的资料交换。
不过在我们讨论这个协定之前先让我们重温一下router的功用。因为IP Routing可以说是internetworking的最重要和最杂的概念了解清晰一点绝对是有利无害的。
重温router
在前面的“网路概论”里面我们已经接触过bridge和router了。我们知道Bridge是工作於Data Link层级的也就是说它在决定是否转送封包的时候是以目的地硬体位址为依据而这些硬体地址是不能改变的。只要封包前往的区段不是在相同的来源区段就会进行转送。但router则工作於Network层级这带给我们一个非常有用的方便就是可以通过人手来指定网路位址因为这些地址不同硬体地址是可以改变的。在一个连接1000台主机的网路里面bridge可能要追踪1000个节点才能做出决定但使用router只需追踪十来个或更少的地址(或网路地址)就可以了。
而真正令到router更具扩充性的原因是bridge需要检测网路上每一个封包以决定是否需要转送而router只需要在意直接传给自己的封包因为发送端在封包送出之前已经决定好封包是否需要转送了(前面讨论ARP的文章已经为你解释了这个动作)。
由此可见router的确比bridge高效得多。而且bridge会转送所有的广播封包而router则有条件地和有选择性的对广播封包进行转递同时也会丢弃不明地址的封包这样可以大大减少网路的交通流量。
路由表格
其实在每一台机器上面有着各自的一个Routing Table记录着一些路由资讯的如果您在您的Windows98下面输入
C:\>route PRINT
Active Routes:
Network Address Netmask Gateway Address Interface Metric
0.0.0.0 0.0.0.0 192.168.0.17 192.168.0.15 1
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.168.0.0 255.255.255.0 192.168.0.15 192.168.0.15 1
192.168.0.15 255.255.255.255 127.0.0.1 127.0.0.1 1
192.168.0.255 255.255.255.255 192.168.0.15 192.168.0.15 1
224.0.0.0 224.0.0.0 192.168.0.15 192.168.0.15 1
255.255.255.255 255.255.255.255 192.168.0.15 192.168.0.15 1
您就可以看到机器目前所使用的路由表格了。上面记录了有哪些网路它们的netmask和通往该网路的router地址以及使用的网路界面还有一个Metric号码(这个让我们待会再说)。如果您看不懂哪些网路号码和IP号码在下建议你回卷到前面的IP地址章节里面复习一下否则您会越看越糊涂。而且我也不打算重解释这些号码的含义了。
我们从第一行可以知道该机器的Default Gateway为192.168.0.17因为这行的网路和mask都全部为0也就概指所有网路了也就是说凡是有封包要传给路由表格所不包括的网路其封包就会传给Default Gateway了。另外我们在第三行看到机器所属的网路和其gateway指向自己本身(您可以用winipcfg来查看机器本身的IP来印一下)。这里我们使用gateway这个词其实指的就是router如果要了解这两者的差别前面的“网路概论”也已经说过了。
上面只是一个非常简单的路由表格而已如果机器所连的网路越多安装的界面越多路由表格也越杂。如果您的机器有拨接连线当您成功连上ISP之後您再跑一次 route PRINT你就会发现多了通往ISP网路的路由设定了而且Default Gateway也使用了ISP那边的IP。原因是使用拨接连线内定是会使用Remote Default Gateway的除非您网路本身连得上internet否则您就无法和外面的世界沟通了。不过如果网路本身连得上internet还打去ISP干啥呢
建立起自己的router
让我们先看看router是怎麽工作的
分层级IP的路由
指定一个IP地址
if 我有这个目的地的路由
从路由表中取得下一站的地址
将封包传给下一站
else
决定目的地网路号码
if 我有这个网路的界面
决定我的界面上这个网路的子网路遮罩
else
从这个网路的层级决定它的子网路遮罩
endif
利用遮罩套在目的地位址上取得子网路
if 我有这个子网路的界面
将封包直接送往目的地
else if 我的路由表格包含这个子网路的记录
从路由表格中取得下一站的地址
将封包传给下一站
else if 我的路由表格中有一笔预设路由
从路由表格中取得下一站的地址
将封包传给下一站
else
宣这个目的地无效
endif
endif
不分层级IP的路由
指定一个IP地址
在路由表格中寻找与此地址相符的最长遮罩预定值
从路由表格中取得下一站的地址
将封包传给下一站
if 对比不成功
宣这个目的的无法达到
endif
看上去不分层级的路由比分层级的路由简单得多。而事实上却是相反的这需要您在 router 上进行更杂的设定。
如果您的机器有两片网卡被设定为不同的网路然後它们各连接另外一台或多台机器那麽您自己也可以亲身的验一下router的工作哦很简单只要您在那台机器上面安装一个NT或Linux确定两张网卡都设定好并且同时工作然後在NT上面的网路设定之TCP/IP协定内容里将“路由”之“启用IP转送”打勾够就可以了在Linux上面呢只要你确定IP Forwording被成功的编进Kernel以及被设定为启动状态也就可以了。
下面先让我们看看两个网路之间的路由设定是怎样的
由上图我们可以看到192.168.0.0这个网路的所有机器其gateway都指向192.168.0.254这个IP也就是router上面连接到这个网路的界面。同样192.168.1.0这个网路其gateway则是192.168.1.254。
通常一个router可以同时连接好几个网路只要界面设定好就没问题了。同时许多网路也有超过一个router和其它的网路连接那麽各主机的路由表格就要一一设定好通往各网路的gateway了。如果您还记得“网路概论”里介绍的bridge和router之间的分别的话您应该知道router还可以连接不同形态的网路呢
由上图我们可以看到当有一个封包从网路A经过网路B送到网路C的时候其Software Address(即IP地址)永远不变但Hardware Address(即MAC地址)却随着所经网路而有所不同。如果您对上一章所说的ARP协定没忘记的话应该知道为什麽会如此。要维护这个router的路由资料相信是一个很简单的事情。
如果这两个网路往外也只连接不多的网路各router上面的路由资料也不会很杂这样的情况之下我们可以使用静态路由也就是以手动方式为每台机器设定事先计算好的路由。静态路由的主要好处是它的可预测性而且对router或网路连线做成的负担不多所占频宽较少。
当我们在internet上面routing的时候所经过的router当然会多很多啦下面让我们看看一个简化了的internet路由图示
正如您可能想像的在internet的环境中要保存一份完整的路由表格殊非轻易而且您也不可能尽知道所有网路的路由路径。那麽我们把这些路由资料的更新交给了router本身去管理了这样router和router之间就需要一些协定来交换信息了。
事实上供router使用的协定也有很多种且也分为Exterior Gateway Protocol 和 Interior Gateway Protocol两大类。在Internet上面负责大型网路之间的路由使用的是Exterior协定最常使用的是BGP(Border Gateway Protocol)协定。相对的在比较少的网路之间使用的会是Interior协定其中最普遍的是RIP协定。
路由资料交换
在众多的路由协定中RIP可以说是最简单和最原始的协定了它是一种所谓的距离向量(distance-vector)协定。使用RIP的路由器凡是它知道如何路由的目的地都会被罗列出来同时也列出到达各目的地的距离。至於距离的远近则使用一个metric数值来表示数值越高距离越远。这个metric值通常是以hop数的多寡来定但其它协定或许还会参考一些杂的网路成本计算诸如网路负载频宽延迟等等其它相关因素。当路由器发现有多条路径可以到达目的地的时候就会参考这个metric值了其中最低数字的往往被当成是最佳路径。
正如我们知道路由协定是供路由器和路由器之间交换路由资料用的。当路由器上面的路由资讯改变的时候就会向其相邻的路由器送出更新信息。用RIP协定的路由器通常会每隔30秒就会更新一次其路由表格如果其路由资讯是从别的路由器“学”来的话就会自动的将metric增加一个数值当这个数值达到“无穷”值的时候(通常会被设定为16)就表示这条路径为“unreachable”同时也会将之从路由表中删除。
下面让我们以一个小型路由网路的例子来更好的看看RIP是怎样进行路由表格更新的(我强烈建议您将这图画出来以备後面讨论时参考所需)
当路由器刚设定好并连接上网路的时候各自都有一个“初始路由表”里面只包含与其直接相连的网路的路由信息
Router 1 Router 2 Router 3 Router 4 Router 5 Router 6
Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G
1
3 1,1
1,1 1
2
4 1,2
1,2
1,2 2
5
6 1,3
1,3
1,3 3
7 1,4
1,4 4
5
7
8 1,5
1,5
1,5
1,5 6
8 1,6
1,6
上表中NetID就是router所知道如何到达的网路而“M”值我们暂时将之看成metric数值“G”指的是通往该网路的下一个要经的router名字。这时我们看到M都为1而G都指向router自己。
好了各router经过一轮资料交换之後然後将从相邻router“学”来的路由加入到自己的路由表格中并且metric值也相应的增加“1”。这时我们看到各router的路由表将会变成这样
Router 1 Router 2 Router 3 Router 4 Router 5 Router 6
Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G
1
2
3
4
7 1,1
2,2
1,1
2,2
2,4 1
2
3
4
5
6
7
8 1,2
1,2
2,1
1,2
2,3
2,3
2,5
2,5 1
2
4
5
6
7
8 2,2
1,3
2,2
1,3
1,3
2,5
2,5 1
3
4
5
7
8 2,1
1,4
2,5
2,5
1,4
2,5 1
2
3
4
5
6
7
8 2,2
2,2
2,4
1,5
1,5
2,3
1,5
1,5 2
4
5
6
7
8 2,3
2,5
2,3
1,6
2,5
1,6
或许您初初比较这两个表的时候会无所适从但其实也不是很难的我们先找到相邻的router之路由表然後比较本身的路由表看看有没有新的NetID有则加到自己的路由表中并且“M”增加“1”而“G”则跟随所“学”的router之名字。如果有相同的NetID则相加metric值如果得出来的值比自己还低则抄过来M也加1如果比自己的值高则保留自己的。
我们以router1来看看与之相邻的router分别是router2和router4。它们的路由表分别是
Router 2 Router 4
Net ID M,G Net ID M,G
1
2
4 1,2
1,2
1,2 3
7 1,4
1,4
而router1自己的路由表则是这样的
Router 1
Net ID M,G
1
3 1,1
1,1
和router2比较可以发现NetID 2和4是新的那麽router1将之抄过来M加1成了2然後G指向router2成了2。其中NetID1相同将router2的metric值加1等於2比自己的高保留自己的。
和router4比较可以发现NetID 7新的那麽router1将之抄过来M加1成了2然後G指向router4成了4。其中NetID3相同将router4的metric值加1比自己的高保留自己的好了。
那麽经过整理之後就得出
Router 1
Net ID M,G
1
2
3
4
7 1,1
2,2
1,1
2,2
2,4
好了到了自己动手练习的时候了看看您能不能为各router算一算会否最终得出下面的路由表
Router 1 Router 2 Router 3 Router 4 Router 5 Router 6
Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G Net ID M,G
1
2
3
4
5
6
7
8 1,1
2,2
1,1
2,2
3,2
3,2
2,4
3,2 1
2
3
4
5
6
7
8 1,2
1,2
2,1
1,2
2,3
2,3
2,5
2,5 1
2
3
4
5
6
7
8 2,2
1,3
2,2
3,2
1,3
1,3
2,5
2,5 1
2
3
4
5
6
7
8 2,1
3,1
1,4
2,5
2,5
3,5
1,4
2,5 1
2
3
4
5
6
7
8 2,2
2,2
2,4
1,5
1,5
2,3
1,5
1,5 1
2
3
4
5
6
7
8 3,3
2,3
3,5
2,5
2,3
1,6
2,5
1,6
如果您第一次未能算出正确的答案也不要紧啦想当初老师要我们算的时候全班也没一个算对啦~~~ ^_^ 或许您的智商要比我们高些吧如果您够细心的话或许能够看出G下面的名字永远只有相邻的router而M下面的数值则取决於所“学”的次数。如果有超过一条路径到达同一个目的地而且metric值也一样在实际应用中router只会听取最先获得的路由信息。
不过在非RIP协定中它们也有各自的规矩这里也不再详细讨论了而且每种协定都有其优缺点这里也不作论述了。有兴趣的朋友大可自己多找些资料回来研究。
另外您可以在Windows系统下面使用一个叫 tracert 的命令来追踪路由路径。如果您在internet上面跟陌生人聊天他忽然告诉您哦我知道您住哪里了您或许觉得好神奇但只要你知道对方的IP地址使用上面这个命令您最终可以得到对方所连接的router名称。如果这个router的名称资料齐全的话(如TaiPei-R01-P11.BR.HiNet.NET )也不难估到对方的位置啦。在Linux上面这个命令则叫做traceroute您自己可以试试哦~~~