BGP基础详解

BGP 边界网关协议

公有AS号:1-64511
私有AS号:64512-65535
状态机:
1.idle 空闲           这时候刚刚指定邻居               邻居一定要可达.通过IGP或者静态路由
                                                                    用loopback接口要注意更新源 
                                                                    ebgp邻居要写多跳
                                                                    边界路由器要对内写下一跳 

2.connect            这时候在建立三次握手            本地端口随机  目的端口TCP的179 三层ip协议号是6(tcp)

3.opensent          这时候发送了open报文            open报文只用来发现邻居.包含多个需要协商的参数.
                                                                     open报文在建立邻居之后就不再发送

4.openconfirm      这时候对邻居的open报文确认    对邻居发来的open报文内的参数进行协商.成功就confirm.
                                                                      confirm后就马上发送keepalive包
                                                                      keepalive默认60s   协商成最小的
                                                                      update报文包含路由信息以及相关属性
                                                                      对收到的update报文进行路由计算  准备得出路由表

5.established        这时候已经得出路由表              之后触发更新

注意:
1.active状态说明本地已经发送open包.但是一直未收到对方的open包.一直无法confirm.如果一直停滞于该状态.那么邻居在180s后就会断开连接.本地状态变成idle.如此循环.
2.notification报文只在出错的时候发送.收到就马上断开tcp连接.

BGP的4种报文

(1).OPEN消息中包含以下内容:
  1、版本
  2、自治系统号
  3、hold time 注意:这个时间是可以协商的,取两个BGP邻居中较小的保持时间。如果设置为0,那么说明永不超时,不发送keepalive包.
  4、BGP 路由器的 router-id,选择方法与OSPF中相同
  5、可选参数
(2).keepalive报文:    该报文只包含一个消息头,没有数据,整个报文长度为19字节.
  默认每60s发送一次.来确认邻居还存在.
(3).update报文:
  update包里只包含一条路径的信息.多条路径需要多条信息.消息中的所有属性都是关于同一条路径的.其中可以含有多个目的网络,这些目的网络都是通过该路径可到达的.
  update报文可能包含如下字段:撤销路由.(要撤销的路由的ip前缀)    路径属性(每个属性都包含属性类型,属性长度,属性值(TLV))       NLRI(即一系列通过该路径可达的目的网络的ip前缀)
(4).notification报文:
当BGP路由器检测到错误的时候.会发送该报文.然后立马关闭tcp连接.通知消息包含一个错误代码.一个错误子代码和有关错误的消息.

BGP的几个规则

1.同步:
从IBGP邻居得到的路由如果没有通过IGP学习到.那么不会传给EBGP邻居.同步一般影响边界路由器
同步是为了解决路由黑洞的问题.
解决办法:
(1).把BGP重分发到IGP中.让所有运行IGP的路由器都能学习到.现在这办法不可取
(2).构建全互联的BGP邻居.全互联可以解决黑洞.这样就可以关闭同步.
如果同步开启.又没有满足IGP也学到路由的条件,那么该路由不优.不会放入路由表也不会向后通告

2.IBGP的水平分割:
从IBGP邻居得到的路由不能传给IBGP邻居.IBGP的水平分割一般影响内部路由器
解决办法:
(1).全互联.这样等同于内部每台路由器的路由都是通过边界路由器得到的.而不是相互交互
(2).RR.可以使用RR打破水平分割
(3).联盟.
注意:一般情况下.把RR和联盟综合运用.

3.RR:
路由反射器
RR的规则:
(1).从C得到的路由反射给所有人(C.NC.EBGP邻居)
(2).从EBGP邻居得到的路由反射给所有人
(3).从NC得到的路由反射给除了NC的所有人.
注意:在一个AS内.可以有多台RR.一台路由器也可以同时为RR和C.不会回传形成环路.建议都配置成C

4.联盟:
配置三步:
(1).以小AS为基础建立邻居.
(2).每台路由器都要声明自己的大AS
(3).小AS边界的路由器要相互指定Peers AS
注意:对于外部.是看不到联盟的.所以外部建立邻居的时候要指大AS,联盟内的EBGP之间要配置多跳.还有对内的下一跳
总结:全互联  RR  联盟    最终目的就是为了让as内所有的路由器都学习到bgp信息

5.汇总:
汇总之后的汇总路由是由自己产生的(next hop=0.0.0.0).默认丢弃原有子网的所有属性
手工汇总:
BGP的汇总有两种办法:
(1).创建静态汇总路由指向null 0,然后network它.
这种办法不利于排错.因为看不到是谁汇总了
(2).用aggrigate汇总.
后面有三个参数:summary-only    as-set    suppress-map
第一个说明只发送汇总路由   抑制所有子网路由
第二个说明让汇总路由携带原有子网的as-path属性  防止回传(回传会造成不必要的流量产生)
第三个说明使用抑制列表来选择要抑制某些子网       suppress-map后面填的是route-map的名称
注意:写抑制列表的时候.route-map不能写空语句  否则会抑制所有路由
       抑制列表要挂在agg汇总语句后面.不能挂在邻居上.(记住.抑制列表是在汇总的时候用的)
自动汇总:
在重分发的时候.如果重分发时候有多个子网.那么自动汇总成主类.
自动汇总之后.不携带原有重分发子网的属性(包括下一跳和cost)
关闭自动之后.重分发进BGP的时候会携带原有子网的属性.
注意:至少要有一个子网被network进BGP.汇总路由才会被通告出去
注意:自动汇总还有一个功能.开启自动汇总后.只要路由表中有子网路由.那么就可以network它的主类网络(类似主类汇总)

6.模版:
使用模版可以:1.减少缓存空间  2.减少命令行
neig  XX  peer-group                         起模版名
neig  XX   remot 13                           为模版添加命令
neig  XX   up lo 1
neig  XX   router-reflect-client

neig  1.1.1.1 peer-group  XX               调用模版          特别注意:模版内的路由器必须要有相同的选路策略,如果不能相同,那么不应该放在一个模版里

7.EBGP能跨越AS来建立邻居,但是.会产生EBGP的路由黑洞,就类似于ibgp跨路由器建立邻居

8.重分发和bgp的修改属性都要写空的route-map,否则会deny其它子网路由.(控制层面都要加空语句)

9.如果BGP条目较少,可以开启同步并且把BGP重分发到IGP中.该重分发动作必须在引入该BGP路由的边界路由器上做

你可能感兴趣的:(路由交换)