BGP 边界网关路由协议,管理AS之间路由传递 距离矢量型,分布式计算 采用TCP来传递路由信息,端口号179,保障可靠性,但是这样做了就会丧失邻居自动发现的功能,只能单播建立邻居,并且可以非直连建立邻居关系。 BGP设计是用来处理AS之间的路由协议重点处理AS之间的路由,AS之内的路由不作为重点,所以内部AD值是200,外部是20. BGP使用AS号作为识别不同AS路由的标识,该AS号需要具有唯一性,范围1-65535,可以扩展为32位,解决AS不够使用的情况 BGP的使用单位是一个路由器,所以每个路由器只能使用一个BGP的进程。
由于BGP管理的路由信息非常庞大,不能够使用周期更新,只能触发更新,并且BGP会认为一条路由时间越久越稳定,在这种情况下BGP必然不会使用复杂的算法来处理BGP收到的路由信息,又由于每个AS情况不一致,管理范围有限,必然需要丰富的管理参数,不能像之前的IGP协议依靠AD,metric值。综上所述,BGP必然需要多种参数共同来决定路由的选择,并且不能依赖某种特定的全局算法,只能单独去计算某一条路由不能全盘考虑,并且需要依赖所属AS管理员手工配置,路径优先协议,通过给每一个路由器设置大量的属性参数来进行灵活的管理或者选路,并且这些属性参数大量都需要人为来操控。
BGP邻居状态机制 idle state 配置了neighbor或重置了邻居,BGP初始化所有资源打开connect retry计时器,初始化邻居的TCP连接,初始化信息并将它的状态转到connect状态。 为了防止差错的持续出现造成BGP邻居的摆动,connect retry计时器会呈现数级的增加,第一次60S,下一次就是120S,再下一次就是240S connect state BGP等到TCP连接完成以后再决定后续的动作 1.如果TCP同步完成,BGP将connect retry清零,完成初始化并发送一个open报文给邻居并把状态设置为open 2.如果失败,继续监听邻居发出的连接,重置计时器并转移到active状态 3.如果计时器超时,计时器重新开始,在试图与邻居建立TCP连接,BGP保持connect状态,出现其他事件转入idle状态
active state BGP试图与邻居建立一个TCP的连接 1.如果TCP连接成功,BGP将connect retry计时器清零,完成初始化,给邻居发送open消息并将状态置为open,hold时间为4分钟 2.如果在active状态,connect retry计时器超时回到connect状态并重置计时器 3.如果试图与一个未知IP建立TCP会话,同时计时器重置,连接拒绝并保持active 4.任何一个事件都会导致重回idle状态
open send state 在此状态,已经发送了open消息,BGP等待邻居发送的open消息 1.收到open消息,如果发现差错,给邻居发送一个notification消息并置为idle 2.如果收到正确的open消息,将发生keepalive给邻居,并建立IBGP或者EBGP状态为open confire state 3.如果收到TCP断开消息则断开BGP连接重置计时器,状态置为active
open confire state 在此状态下BGP会等待一个keepalive消息或者notification消息 1.如果后收到一个keepalive消息状态置为establish 2.如果收到notification消息状态置为idle断开tcp连接 3.如果hold计时器超时,检测到一个差错或者stop事件,BGP给邻居发送一个notification并断开连接,状态置为idle
establish state 此状态BGP对等体间的连接已经完全建立,可以交换updata,keepalive和notification消息
BGP建立邻居失败的情况: 参数与配置: 1. neighbor 10.1.1.1 //代表向该地址发送TCP端口为179的数据,并且自己也需要在发出地址上打开TCP 179的监听,该配置可以指定源地址也可以不指定源地址,不指定就是出接口地址,意外着得打开该出接口关于TCP 179的监听。 本端指的地址需要是对方的源地址,对方指的地址需要是本端的源地址 2. Neighbor 10.1.1.1 remote-as XX, 对端建立邻居的AS号必须和本端remote-as号一致 3. 建立双方保证数据TCP 179能够发送,不丢失,不被拦截
邻居之间路由传递规则 BGP有两种邻居关系 IBGP邻居关系,相同AS路由器建立邻居关系 EBGP邻居关系,不同AS路由器建立邻居关系 1. BGP不管什么邻居关系只传递最优路由(不优不传,优的标志是> ) 2. EBGP邻居关系路由传递,只要不违背环路原则或人工策略EBGP邻居传递无限制的,前提必须优,EBGP之间传递路由会更新next-hop为自己的更新源地址 3. IBGP邻居关系路由传递,IBGP自己产生的路由(自己宣告的,重发布进来的)和EBGP邻居传递的都可以传递给他的IBGP邻居,但不可以在IBGP之间中转,也就是不能传递到邻居的邻居。 IBGP之间传递路由不会更新next-hop地址,只有next-hop为0.0.0.0的情况才会更新,或者建立邻居的时候输入neighbor X.X.X.X next-hop self 更新为自己的更新源地址 这个设定的好处:IBGP之间拥有了水平分割,从而避免了IBGP环路的产生,BGP也不必设置防环算法。 这个设定的坏处:IBGP之间路由传递必须直接建立邻居,导致IBGP邻居关系是一种全互联状态。
BGP属性 一共10个属性(cisco 11 种),分为四类: well-known mandatory well-known discretionary optional transitive optional nontransitive 11条属性:weight origin as-path next-hop local-pre atomic-aggregate aggregator community MED originator-id cluster-id 1.公认必尊 所有BGP路由器必须识别并遵守的原则: origin as-path next-hop 2.公认可尊 所有路由器都能识别但是不一定要遵守 local-pref atomic-aggregate 3.可选传递 不是所有路由器都能识别,但是所有BGP可以传递 aggreator community 4.可选非传递 不是所有路由器都被识别,不能识别的就丢弃 MED,originator-id cluster-id weight
配置: BGP的宣告是依赖路由表的,宣告满足: 1.被宣告路由必须在路由表中 2.被宣告的路由必须和路由表中的前缀掩码一致
Community 团体属性,为了更好的标识BGP路由,标识格式为x:y 团体值的设置不能在EBGP之间,IBGP之间可以,传递可以在IBGP之间也可以在EBGP之间 设置: Route-map p permit 10 Match IP address prefix-list p Set community 111 Route-map p permit 20 Router bgp 1 Neighbor X.X.X.X route-map p out 设置必须在IBGP之间可以in也可以out
传递设置: Standard 做路由标识符 extended MPLS VPN,可读性好 neighbor X.X.X.X send-community both 团体属性如果要传递必须开启该指令(standard extended both)
匹配设置: IP community-list ? //与ACL一样,标准与扩展 IP community-list expanded k permit 111 匹配完成后用route-map调用。
查看: Show IP bgp 10.1.1.1//查看路由详情可以看到团体值 Show IP bgp community 查看所有具有团体值的路由 Show IP bgp community 111 查看某个团体值的路由
子属性 Bgp always-compare-med 开启比较不同 IP bgp-community new-format 开启扩展格式匹配 :
Internet 默认属性,可以给任何BGP发送,不对携带团体值的路由做任何限制No export 只能在一个AS内传递,可以在联盟内传递,该属性就是限制携带团体属性的路由传递给EBGP邻居,联盟EBGP除外No advertise 不再IBGP EBGP邻居间传递,禁止传递给任何邻居Local-AS 不向任何EBGP邻居发送包括联盟EBGP邻居