不同AS之间的连接需求推动了外部网关协议的发展,BGP作为一种外部网关协议,用于在AS之间进行路由控制和优选
BGP不进行路由计算像rip一样直接发送路由信息
使用TCP作为协议建立连接 端口号179
AS之间的路由器是不完全相互信任的
为实现路由按需求进行控制和优选,BGP设计了诸多属性
BGP的前身EGP
非常简单,只能在AS之间简单地传递路由信息
不会对路由进行任何优选,也没有考虑如何在AS之间避免路由环路等问题
EGP最终被BGP取代
相比于EGP,BGP更具有路由协议的特征
邻居的发现与邻居关系的建立
路由的获取,优选和通告
提供路由环路避免机制,并能够高效传递路由,维护大量的路由信息
在不完全信任的AS之间提供丰富的路由控制能力
AS自治系统
每个自治系统都有唯一的一个编号,这个编号由IANA分配
2009年1月之前,只能使用最多2字节长度的AS号码,即1-65535
中1-64511为公有AS,64512-65534为私有AS
在2009年1月之后,IANA决定使用4字节长度AS,范围是65536-4294967295
建立连接
BGP可以跨越多跳路由器建立邻居关系
1. 邻居发现
AS之间是广域网链路 在广域网上数据包传递会出现不可预测的链路拥堵或丢失等情况
所以BGP使用TCP作为保证
TCP只能采用单波建立连接 也使BGP只能手动指定邻居
三次握手
2. 关系建立
Open OSPF的Hello报文拆成了Open和Keepalive
TCP连接建立发送的第一个报文 用于建立邻居连接
Open报文协商成功后 发送Keepalive保持连接
Update
可以发布多条可达的路由信息,也可以撤销多条不可达的路由信息
可以发布多条具有相同路由信息的可达路由,这些路由共享一组属性
Ntification
当BGP路由检查测到错误状态时,发送该报文,BGP连接立即中断
KeepAlive
周期向邻居发送该报文,保证连接有效性
Route-refresh
用于改变路由策略后请求对等体重新发送路由信息
3. 邻居状态
上面为TCP连接
下面为邻居连接
TCP连接成功不代表可以传输数据
Idle状态 空闲
BGP初始状态 BGP路由器拒绝邻居发送的连接请求
收到本设备Start事件后才开始尝试进行TCP连接
如果TCP连接成功,那么BGP路由器向邻居发送Open报文,并转至OpenSent状态
如果TCP连接失败,那么BGP路由器转至Active状态 可能是双方参数有问题或者被拦截了
BGP邻居类型
如果直接将将公网路由引入AS内部 再将AS内部的路由信息直接引入出去
首先公网路由条目肯定比IGP协议多很多 引入后IGP协议无法承载大量的BGP路由
并且双方不一定可以无误的识别不同协议的路由信息 可能会丢失
所以还需要内部路由器进行路由传递
EBGP
用于AS之间传递路由
IBGP
用于AS内部传递路由
通告路由
使用network命令将IP路由表中已经存在的路由逐条通告到BGP中
network 10.0.0.1 24
使用import引入
为防止其他路由被引入到BGP中,需要配置ip-prefix进行精确匹配,调用route-policy在BGP引入路由时进行控制
import-route 【direct/static/ospf/rip…… 】【route-policy【自己创建的协议或者系统自带】】
ip-prefix 前缀列表
ip ip-prefix ip-prefix-name[ index index-number ] {permit | deny} ipv4-address mask-length
Name参数是本IP前缀列表的名称。
Index关键字及参数指示本表项在本IP前缀列表中的序号(或索引号),该关键字及参数是可选的。缺省情况下,该序号值按照配置先后顺序依次递增,每次加10,第一个序号值为10。
ip ip-prefix mkbk index 10 deny 10.0.0.0 24
import-route ospf route-policy mkbk
引入ospf中不包括10.0.0.0/24的所有网段
通告原则
BGP路由器——仅向邻居通告最优路由
* 可用路由
> 最优路由
Origin : i -IGP e -EGP ? –incomplete 表示通告来源 i network通告 e 自动从EGP学习 ? import通告
Network:显示BGP路由表中的网络地址
NextHop:报文发送的下一跳地址
MED:路由度量值
LocPrf:本地优先级
PrefVal:协议首选值
Path/Ogn:显示AS路径号及Origin属性
Community:团体属性信息
IBGP获得的路由不向其它IBGP邻居发送
为了防止AS内部形成环路
RTA将100.0.0.0/24网段发布给RTB RTC 但是RTB RTC之间不会互相转发
IGP BGP同步
理论上 IGP内部路由器发现路由表中没有BGP路由器转发进来的路由条目,不知道该怎么到达,丢弃目的地址不可达报文
当只有RTB RTD建立IBGP连接时,RTA将网络通告进去,RTB通过IBGP连接通告给RTD再利用EBGP连接通告给E。
当RTE访问100网络时,会发给D,D查询路由器表发现下一跳是B,但是出接口还是到C,但是此时C并不知道A的100网络,所以会将不可达报文进行丢弃。形成路由黑洞
Null0是系统保留的逻辑接口,当转发网络设备在转发某些数据包时,如果使用出接口为Null0的路由,那么这些报文会被直接丢弃,就像直接丢进一个黑洞里,因此出接口为Null0的路由被称为黑洞路由。
所以解决的办法一个就是保证IGP BGP保持同步,但是外网数量巨大,IGP无法承受,所以不可行
另一种就是IGP内部全部建立IGBP连接,保证外部网络全部通告出去
BGP属性
分为四类
公认 所有BGP路由器必须识别并可支持的属性
必遵 Origin AS_Path Next_hop(Update必须包含)
任意 Local_Pref Atomic_aggregate(自由选择)
可选 不要求所有BGP路由器都能识别的属性
过渡 Aggregator Communtiy (BGP不能识别,但是可以接收并转发)
非过渡 MED (BGP可以忽略包含该属性的消息并且不转发)
Origin 路径信息来源
优先级 i>e>incomplete
AS_Path AS路径
可以防止环路 当收到含有自己AS区域号的消息就不再接受转发
并且 AS编号越少 路径越优先
当你需要换条线路时 也可以对AS_Path进行更改 AS_Path(2,4)-->AS_Path(2,2,2,4)在不改变路径的情况下增加他的数量
AS_Path四种类型
AS_Sequence
AS_Set
AS_Confed_Sequence
AS_Confed_Set
Next_hop
缺省情况下,向EBGP对等体/对等体组发布的所有路由,都将下一跳属性修改为自身的地址;
向IBGP对等体/对等体组发布的EBGP路由,不修改下一跳属性。
Local_Preference
仅在IBGP邻居之间有效,不通告其它AS 可以判断最佳路由
可以通过ip-prefix前缀列表设置
默认100 越高越优先
MED
仅在相邻AS间传递
相当于IGP的度量值
当一个运行BGP的路由器通过不同的EBGP邻居获得目的地址相同但下一跳不同的多条路由时,在其它条件相同的情况下,将优先选择MED值较小者作为最佳路由
Community
peer ebgp-max-hop命令用来配置允许BGP同非直连网络上的对等体建立EBGP连接,并同时可以指定允许的最大跳数。
BGP使用Loopback口建立EBGP邻居时,必须配置命令peer ebgp-max-hop(其中hop-count≥2),否则邻居无法建立。
前置条件
配置本命令前,需要先使用peer as-number命令建立相应的对等体关系。