边界网关协议学习指引( 五 )


很明显 , 我们附加在路由上面的代表具体ISP的数值就是AS号 , 因为AS号唯一区别了一个ISP(可以简单的这样认为) 。这样在通告路由的时候 , 就应该按照下列格式:
{IP网络号 , 掩码位数 , 下一跳IP地址 , {起始AS号 , 经过的AS1 , 经过的AS2 , 。。。} , 。。。}
可以看出 , 我们附加的这些AS号也是作为路由属性出现的 , 该属性反映了路由经过的AS , 也就是到达起始AS经过的AS路径 , 所以叫做AS-PATH属性 。
& 本部分有下列要点:
1、为了从根本上解决路由自环问题 , 我们引如AS-PATH属性的概念 , 在通告的每条路由上 , 都附加AS-PATH属性 , 假如接收到该路由的路由器发现自己所在的AS号出现在AS-PATH属性列表中 , 则拒绝接收该路由 。
2.4 需求之四—ISP内部连接
在上面我们介绍的都是跨越ISP来传递路由的情况 , 而把每个ISP看做一个黑盒子 , 下面我们将揭开这个黑盒子 , 看一看其中的秘密 。
首先一个问题就是怎样把从其他ISP获得的路由通告给ISP内部路由器 。通常情况是 , ISP通过几台高端路由器组成一个核心网络 , 在该核心网络的边缘连接一些会聚路由器 , 来完成专线接入向核心层的会聚 , 如下面图形所示:
在这个例子中 , 核心路由器CR1通过高速链路连接其他ISP , 通过我们扩展的RIP协议来从其它ISP获得路由 , 并把自己的内部路由通告给其他ISP 。按照我们上面讨论的结果 , CR1上已经从其他的ISP获得了大量的路由(这些路由的数目可能非常大 , 在INTERNET上达到10万条) , 这时候 , CR1要通过某种方式把这些获得的路由通告给同是核心路由器的CR2和CR3 。
很明显 , 我们也选择扩展RIP协议进行完成该任务 。这时候 , 就需要CR1和CR2 , CR1和CR3分别建立TCP连接 , 并协商自己的能力 , 完毕后开始传输路由 , 传输完毕后 , 并不拆除该TCP连接 , 而是继续保持为后来使用 , 并不停的周期性的相互发送HELLO报文来确保对方存活 。这些过程跟前面介绍的相同 。但上面介绍的一个问题出来了 , 就是AS-PATH属性(正是这个属性的存在才使得自环得以从根本上避免)的改写问题 。
按照我们的假设 , 路由器在把路由通告给其他邻居的时候 , 需要把自己所在的AS系统号追加在通告的路由后边 , 但在ISP内部(AS内部) , 所有路由器都属于同样的AS , 假如通告的时候再把自己所在的AS号加上 , 则当接收路由器接收到该路由后 , 会发现自己的AS号已经出现在AS-PATH属性里面 , 于是丢弃该路由 。所以我们在通告路由给AS系统内部的邻居的时候 , 必须不修改AS-PATH属性 。
而假如不修改AS-PATH属性 , 自环又可能发生了 。为了解决这个矛盾 , 我们再研究一下自环产生的原因 , 如下所示:
假设RT1的一条路由通告给RT3 , RT3又通告给RT2 , 而RT2重新通告给RT1 , 这样往返通告就轻易产生自环 。假如 我们引入这样一条规则:
路由器从AS内部邻居接收的路由永远不通告给AS内部邻居路由器 。
这样当RT3接收到RT1的路由后 , 就把这些路由保存下来供自己使用 , 而不会再通告给其他设备 , 假如RT2想获得RT1的路由 , 唯一的办法就是跟RT1建立TCP连接来获得 。这样做路由自环就避免了 。
还可以看出 , 在这条规则的约束下 , 假如AS内部路由器想获得任何其它一台路由器的路由 , 唯一的办法就是跟其他路由器建立邻居关系来获得路由 。因此 , 要达到路由的同步 , 在AS内部运行RIP协议扩展的路由器必须两两之间建立TCP连接 , 反映在整个网络上就是运行扩展RIP协议的路由器之间建立全网状连接 。

推荐阅读