BGP:边界网关路由协议
EGP:外部网关路由协议(BGP);IGP:内部网关路由协议(RIP,OSPF,EIGRP)
属于无类别的路径矢量协议(距离矢量升级版)
BGP是工作在AS之间的路由协议,以一个AS为一跳
AS之间不建议使用IGP
1.支持路由条目较少
2.两个厂商协议策略,特性不同,会产生环路,不利于管理
3.路由操控较差
BGP本身不产生路由,只是转发本地路由表(IGP学到的路由)中的路由条目(BGP承载于IGP之上)
BGP不会计算最佳路径,因此需要工程师干涉选路(可控性较高),默认不会负载均衡
BGP是纯触发更新为了保证可靠性:
1.单播邻居
2.TCP封装(端口179)
BGP支持认证和聚合
BGP数据包
首先需要TCP来寻找邻居
Open:建立邻居,正常只发一次即可,携带route-id,hold time 默认3分钟
Keep alive:保活,周期1分钟查询邻居是否存在,实际只是保证TCP会话不会down,不携带信息
Update:更新,携带路由条目
Notification:警告,报错
BGP工作过程
邻居间正常收发一次open报文建立BGP邻居后,生成路由表(open报文携带的RID与OSPF的RID生成方式一致)
建立邻居成功后,管理员选择性将本地路由表中的IGP路由宣告进BGP,使用update进行邻居间路由共享,之后生成BGP表(发出与接收所有的BGP路由),默认将最优路径加载在BGP表中(只是BGP 的选路规则,不一定是最佳路径,BGP默认不支持负载均衡)
之后使用keep alive周期保活邻居关系,默认1分钟
若出现错误信息,使用notification进行报错
若结构突变
新增路由条目:使用update向邻居告知,前提是该路由没有被聚合路由包含
断开路由条目:使用update向邻居告知,前提是该路由没有被聚合路由包含(若聚合路由中所有明细路由都断开,那么将会告知 邻居删除聚合路由)
断开邻居:hole time默认为3分钟,若3分钟内没有收到邻居的keep alive,则断开邻居关系,TCP会话,删除从该邻居学习到的 所有路由条目
BGP邻居关系
Active(失败):邻居建立失败
Idle:针对邻居更新源地址查找本地路由表(是否有去该地址的路径)(IGP出问题)
Connect:尝试进行三次握手,若过了connect计时器时间,则在active下(继续尝试握手)
Open sent:tcp建立完成,发送open报文
Open confirm:发送keep alive报文
Established(邻接):三次握手完成open报文交互,发送完keep alive报文
EBGP邻居关系:外部BGP邻居关系,两个邻居不在一个AS内
IBGP邻居关系:内部BGP邻居关系,两个邻居都在一个AS内
BGP路由黑洞
非直连建邻到达控制层面路由条目可以传递,计算路由可达
而实际数据层面在经过没有BGP协议的路由器时无法通过,最终有去无回
解决方法
使用网线一一互联实现物理全互联,太占资源,实际工程不现实
逻辑全互联(全部运行BGP),成本太高,实际工程不现实
重分发(IGP与BGP),运行IGP路由器,若使用一般的路由器,将承载不了大量的BGP路由(实验室环境)
Tunnel隧道建立邻居,BGP路由数量过多,使用tunnel增加报头使数据包过大,占用链路资源
Mpls 多协议标签交换技术---推荐做法
BGP防环机制(水平分割)
1.EBGP水平分割,解决EBGP路由环路
依赖BGP路由条目中的AS-path来进行防环,BGP路由在传递的时候会记录所有经过AS号
EBGP邻居收到一条EBGP路由时,查看AS-path,若包含自身,则丢弃,若不包含,则接受并传递
2.IBGP水平分割,解决IBGP路由环路
BGP路由在AS内部传递的时候不会修改任何属性,没法做到像EBGP一样的防环机制
通过IBGP邻居学习路由只能发送给EBGP邻居不能发送给IBGP邻居
BGP存在非直连建立邻居关系,为了稳定网络,在一个AS内的所有IBGP邻居都可以一一建邻,但因为邻居关系数量过多,配置量巨大,后期可以打破水平分割机制来解决。1.联邦 2路由反射器
建议使用BGP:
1.允许成为传输AS
2.多宿主,有多条选路空间(一条出口连接多个运行商,多条链路连接一个运营商)
3.大量路由策略,可配置外网访问内网路径
不建议使用BGP:
1.不熟悉BGP,影响整个因特网
2.单宿主,只有一条出口连接一个运营商
3.需要存储大量路由条目,路由器设备要强