小白笔记
我们前面学的是一个自治区内的路由选择协议,我们现在要学习自治区之间的路由选择协议,学习ISP之间的路由这些:BGP
层次路由
·一个平面的路由
·一个网络中的所有路由器的地位一样
·通过LS,DV,或者其它路由算法,所有路由器都要知道其它所有路由器(子网)如何走
·所有路由器在一个平面
·平面路由的问题
·规模巨大的网络中,路由信息的存储、传输和计算代价巨大
·DV:距离矢量很大,而且不能够收敛
·LS:几百万个节点的LS分组的泛洪传输,存储以及最短路径算法的计算
·管理问题:
·不同的网络所有者希望按照自己的方式管理网络
·希望对外隐藏自己网络的细节
·当然,还希望和其它网络互联
·层次路由:将互联网分成一个个AS(路由器区域)
·某个区域内的路由器几乎,自治系统(AS)
·一个AS用AS Number(ASN)唯一标示
·一个ISP可能包括1个或者多个AS
·路由变成了:2个层次路由
·AS内部路由:在同一个AS内路由器运行相同的路由协议
·“intra-AS"routing protocol:内部网关协议
·不同的AS可能运行着不同的内部网关协议
·能够解决规模和管理问题
·如:RIP,OSPF,IGRP
·网关路由器:AS边缘路由器,可以连接到其他的AS
·AS间运行AS间路由协议
·”inter-AS"routing protocol :外部网关协议
·解决AS之间的路由问题,完成AS之间的互联互通
层次路由的优点
·解决了规模问题
·内部网关协议解决:AS内部数量有限的路由器互相到达的问题,AS内部规模可控(如AS节点太多,可分割AS,使得AS内部的节点数量有限)
·AS之间的路由的规模问题
·增加一个AS,对于AS之间的路由从总体上来说,只是增加了一个节点=子网(每个AS可以用一个点来表示)
·对于其它AS来说只是增加了一个表项,就是整个新增的AS如何走的问题
·扩展性强:规模增大,性能不会减的太多
·解决了管理问题
·各个AS可以运行不同的内部网关协议
·可以使增加网络的细节不向外透露
之前的LS,DV或者其它路由算法都是平面路由,然而一个平面路由解决路由问题不管是对计算代价还是传输代价而言都是很大的,要是有几百万个,你泛洪得泛洪到什么时候,用Disjikate算法算的过来嘛,把你的路由矢量信息传给邻居,通过邻居的邻居传到全网从而得到几百万的网络拓扑你搞的过来嘛,所以是不行的,也满足不了管理方面的述求。
那怎么办呐?互联网把那么大范围内的网络路由问题实际上分为了两个层面,分成哪两个层面呢?分成一个个自治区域,好比清华的网络组成一个自治区域然后那个机构的网络跟它底下的单位构成一个自治区域。第一个层面是自治区内,每个自治区采用自己的路由选择协议和算法,然后另外一个层面是自治区间,每个自治区域通过路由信息的聚集,实际上可以收敛成一道子网可达信息向外发布,那这样的话,自治区域之间的路由而言,一个自治区相当于一个点,所以说互联网路由问题怎么解决呢,就把互联网按照组织机构地域覆盖范围物理覆盖范围分解成一个个的自治区域,每个自治区有一个AS number,我们把它叫做ASN,一个ISP可能包括一个AS可能包括为数非常少的几个若干的AS,那这样的话,路由问题是不是就变成了两个层面的问题,第一个层面的问题是自治区域内,每个自治区域内部它的子网数量或者路由的数量都有限,不管采用LS还是DV路由算法都可以搞定,所以每个自治区可以选择自己的路由选择协议;第二个层面,就是外部网关协议,外部网关协议解决的是什么问题呢?解决的是自治区域之间可达的问题,我怎么样把分组从一个自治区传到另外一个自治区,那么在这个层面上,每个自治区域相当于整个路由算法当中的一个点或者为数非常少的几个点,那这样的话,自治区之间的路由的规模也不是特别大。这样既能够满足管理性问题,你是一个自治区你是一个ISP的网络,你可以选择自己的路由选择协议和算法,而且对于其它网络而言,其它网络拓扑不出来你的拓扑信息,所以方便管理也很安全。而且也能解决规模性问题,分成了两个层面,自治区域内部,因为我把整个网络分成了一个个自治区,每个自治区内部子网数量路由器数量都是非常有限,那么不管采用LS算法还是DV算法都能解决,自治区之间的路由难道不是规模性问题不是一个大问题吗?是,是一个大问题,而且必须解决,你必须解决每个自治区到所有其它自治区该怎么走的问题,但是呢,由于路由聚集了,在自治区域内部做路由聚集了,透到自治区之间的路由问题就变成每个自治区就是为数非常少的一个点或有限的几个点,这样的话,虽然自治区之间的路由虽然规模也是非常的大,但是每个自治区在自治区之间的路由问题上是变成了一个点,所以说自治区之间路由的规模问题也不是一个很大的问题。
互联网AS间路由:BGP(边界网关协议)
·BGP:自治区域间路由协议“事实上的”标准
·”将互联网各个AS粘在一起的胶水“
·BGP提供给每个AS以下方法:
·eBGP:从相邻的ASes那里获得子网可达信息
·iBGP:将获得的子网可达信息传遍到AS内部的所有路由器
·根据子网可达信息和策略来决定到达子网的“好”路径
·允许子网向互联网其它网络通告“我在这里”
·基于距离矢量算法(路径矢量)
·不仅仅是距离矢量,还包括各个目标网络的详细路径(AS序号的列表)能够避免简单DV算法的路由环路问题
我收集我这个区域的子网可达信息,然后通过eBGP告诉其他的网关。
这个网关收到了其它自治区域的子网可达信息,通过iBGP告诉本自治区域内部的路由器包括其他的网关路由器它收到的其它区域的子网可达信息。
上图的红色连接如1c和2a并不是一个链路,它代表一个TCP的连接,1c和2a这两个节点是网关,这网关一方面参与到内部网关的运算即收集内部子网可达信息,另外一方面又通过eBGP把我(1c)这个子网可达信息告诉2a,跟她说2a呀你不是网关吗咱也是网关啊,我连了那么多子网,这些子网的子网可达信息我告诉你,关于这些子网你都可以通过我来进行转发,相当于做出了这些子网可达信息的承诺。那你说你怎么把子网信息告诉2a?TCP呀。那你说TCP怎么路由呀?内部网关协议呀。2a把1c告诉它的信息告诉给2b2c2d,告诉它们关于这些子网可达信息你们都可以通过我来传。然后2c把1c传过来的信息和AS2自治区域内的信息告诉3a。
距离矢量算法这里有所改进,我不仅仅告诉你代价,同时还告诉你到这些子网的详细的路径即穿过哪些自治区域的序列才能到达子网,这样你就能检查出环路了,收敛的也就快一些了。
BGP基础
·BGP会话:2个BGP路由器(”peers“)在一个半永久的TCP连接上交换BGP报文(报文中包括一些子网可达信息)
·通告向不同的目标子网前缀的”路径“(BGP是一个”路径矢量“协议)
·当AS3网关路由器3a向AS2的网关路由器2c通告路径:AS3,X
·3a参与AS路由运算,知道本AS所有子网X信息
·语义上:AS3向AS2承诺,它可以向子网X转发数据报
·3a是2a关于X的下一跳(“next-hop")
X上线了,3a这个网关能不能感受的到呀?通过内部网关协议,最后所有路由器都知道X在线X这个子网是可达的,3a3b3c3d都知道,3a知道关于X子网可达这个信息之后会向2c发出一个通告,告诉2c关于X,你通过我3a可达,我的这个IP是目标X你2c的下一跳,2c再告诉2a2b2d。
·路由器AS2.2c从AS3。3A接收到的AS3,X路由通告(通过eBGP)
·基于AS2的输入策略,AS2.2c决定接受AS3,X的通告,而且通告iBGP向AS2的所有路由器进行通告
·基于AS2的策略,AS2路由器2a通过eBGP向AS1.1c路由器通告AS2,AS3,X路由信息
·路径上加上了AS2自己作为AS序列的一跳
路由表项是由AS内和AS间的路由共同决定的
路径的属性&BGP路由(补充:BGP报文:是使用TCP协议交换BGP报文)
·当通告一个子网前缀时,通告包括BGP属性
·prefix+attributes="route"
·2个重要的属性:
·AS-PATH:前缀的通告所经过的AS列表:AS 67 AS 17
·检测环路:多路径选择
·在向其它AS转发时,需要将自己的AS号加在路径上
·NEXT-HOP:从当前AS到下一跳AS有多个链路,在NETX-HOP属性中,告诉对方通过那个I转发。
·其它属性:路由偏好指标,如何被插入的属性
·基于策略的路由:
·当一个网关路由器街道了一个路由通告,使用输入策略来接受或过滤
·过滤原因1:不想经过某个AS,转发某些前缀的分组
·过滤原因2:永久有了有一条往某前缀的偏好路径
·策略也决定了是否向其它别的邻居通告收到这个路由信息
网关路由器可能获取有关有关子网X的多条路径,从多个eBGP会话上:
·ASI网关路由器1c从2a学习到路径:AS2,AS3,X
·AS1网关路由器1c从3a处学习到路径AS2,X
·基于策略,ASI路由器1c选择了路径:AS3,X,而且通过iBGP告诉所有ASI内部的路由器
BGP路径选择
·路由器可能获得有关网络前缀的多个路径,路由器必须进行路径的选择,路由选择可以基于:
1.本地偏好值属性:偏好策略决定
2.最近AS-PATH:AS的跳数
3.最近的NEXT-HOP路由器:热土豆路由
4.附加的判据:使用BGP标示
·一个前缀对于着多种路径,采用消除规则知道留下一条路径