BGP:边界网关协议
协议应用范围:BGP , AS之间使用协议
协议更新中是否携带网络掩码:携带网络掩码(CIDR与VLSM都支持)
协议算法:无算法,一种规则,路径矢量型,简单理解:传输的路径怎么走,跨越不同AS
凡是数学算法肯定是有一个上限值的,当路由条目很多的话,算法不支持
协议封装:基于TCP封装 ,端口号 179
也正是因为BGP是基于TCP封装,所以报文没有ACK报文,同样的BGP是不需要周期更新的(路由条目过多),
一、BGP 特点:
- BGP 版本 V1 V2(EGP) V3 V4 (BGP) V4±–MP-BGP(支持多种协议)
BGP V4只是支持IPV4协议,所以引出V4+,默认功能是关闭的,需要命令激活。 - BGP一般被用于大型网络 —是一种路径矢量型路由协议
- BGP更新方式:触发更新
- BGP更新地址:单播更新 原因与TCP有关,建立三次握手机制是单播
- BGP存在大量的属性,基于策略(属性)选路
- BGP使用open报文建立邻居,使用keepalive 报文维持邻居关系
- keepalive 周期间隔60s hold 时间为180s
- BGP支持路由认证
- BGP支持路由聚合(汇总),支持VLSM CIDR
- BGP非常消耗路由器资源(一个路由器只能运行1个BGP进程)
二、BGP适合网络
1 .多宿主 到达外网有多条AS路径
2 .传输AS中 单宿主,比如电信进来多个用户,为其转发各自的需求
3 .对进行进入、离开的流量进行强大的路由策略时
三、BGP AS号 、邻居关系
AS号 :1-65535 ,公有AS—1-64511,私有AS—64512-65535
IBGP:内部BGP邻居关系,同一个AS之内建立BGP邻居
EBGP:外部BGP邻居关系,在不同AS之间建立BGP邻居
IBGP邻居学习到路由的AD: 200
EBGP邻居学习到路由的AD:20
至于原因也很好理解,我BGP本身就是为了不同AS之间传递路由,内部我根本就不想让运行BGP,传递路由完全可以依靠IGP协议,每一个都会比200小。
Local BGP 路由:本地BGP路由值 200 (与重发布有关)
四、BGP的防环机制
IBGP:IBGP水平分割,起源者属性,cluster ID 簇ID ,通过一个IBGP 邻居学习的路由不能传递给其他的IBGP邻居(IBGP只传一跳原则)
BGP可以跨越直连建立邻居,IGP为什么不行?这是因为IGP协议是使用组播更新,也叫本地链路组播地址,只能在局域网之间传递,所以IGP协议一般都是直连建立邻居,当然RIP可以关闭直连检测,但是路由只能传一跳。
而BGP建立邻居是基于TCP三次握手的,只要找到源和目标在哪就行。
IBGP的防环也叫IBGP的水平分割,但是这样做可能会导致数据层面的路由黑洞,这里后面会解决。
EBGP:AS-Path 防环,当一条路由传递出某个AS时,在AS-Path属性中增加自身所属AS号,所有路由器默认不接收AS-Path包含自身AS 号的路由信息
五、BGP消息数据包
Open:用于BGP邻居关系建立,仅仅发送一次
Keepalive :用于BGP邻居关系的维持,默认60s发送一次
Update :路由更新,用于通告路由;用于撤销路由
撤销路由withdrawn
路由通告,使用TCP 中的ACK进行确认
Notification :报告(错误报告),用于通告BGP错误
故意指定错误AS
六、BGP邻居关系建立
Down :关闭BGP状态 (比如出现错误报告时就会down)
idle :开始建立TCP连接状态(查看自己是否有到达对方的路由表项)
Connect (active):TCP会话建立完成 (主动发起会话的就是active,被动响应的就是connect)
Opensent (openconfirm):发送open (一般由先主动发起握手的发送open报文,进入opensent,收到open报文,进入openconfirm,也会恢复open报文,对方从opensent到openconfirm)
Established:BGP邻居建立(发送keepalive进入,其实在第二个open报文中就携带了keepalive报文)
在BGP邻居建立过程中,仅仅发送open报文
七、BGP部署
IBGP内部使用IGP协议
IBGP建立邻居
- 直连建立邻居
指定router-id的作用是为了标识唯一性,作用是为了非直连建立邻居,找到对方的位置在哪。Remote-as是对方的BGP进程号 - 非直连建立邻居(先保证三次握手,也就是非直连之间可以拼通)
接着查看邻居关系
为什么会处于active状态呢?
这个和三次握手没有什么关系,很正常,出现这个的问题是因为不管是R3访问R4还是R4访问R3,源地址都为递归到出接口地址上,也就是34.1.1.1和34.1.1.2,这样发送open报文,R4收到后,发现地址不是3.3.3.3就不会接收。
修改为应该发的地址即可:
改一边即可,当然两边都改也可以。
IBGP邻居表查看
简单介绍BGP邻居表
对方建立邻居的地址,对端AS 内部链路(internal link)
版本号V4(其实是V4+),对方router-id
BGP建立状态 时间
最后一次读写时间,hold时间,keepalive时间
Neighbor 特性
路由刷新(比如IGP之间改变后会经常down掉邻居关系,重新建立邻居,而BGP支持路由刷新,支持不断开TCP连接直接发送信息)
支持新的AS的标识
IPV4家地址标识符(默认是IPV4的,可以修改)
消息队列深度
进向深度
出向深度
BGP最小的通告间隔是5秒,上面显示0秒。什么意思?就是比如针对某一个不断变化属性的路由,就有最小通告间隔。其实会对这些路由进行惩罚。
在EBGP中,最小通告时间是30秒
这个说明R2是向R3发起TCP三次握手
简单查看
后面出现数字就是收到多少条路由,如果为字母就是BGP邻居的几个状态信息,默认established不会显示。
EBGP之间建立
1.采用直连建立邻居
2.非直连之间建立邻居
先保证非直连之间可以通信(这里不能写缺省,是建立不了的)
会发现这个依旧不能建立邻居,这个又是为啥?
EBGP之间非直连建立邻居,默认TTL值为1,换句话说就是检测是否直连,不是就不能建立。IBGP的TTL值为255.
解决办法
关闭直连检测:
一般情况下我们不支持这样做,因为运营商之间建立邻居中间有多少路由器我们不知道,这样的话TTL值还是为1,一样会建立不起来,当然我们把这条命令删除了,邻居关系也不会down,因为在建立过程中只发送一个OPEN报文,需要clear以下
这条命令只要后面的数字不为1,默认就是关闭直连检测,并且修改TTL值
八、路由通告
路由表版本号为2,因为触发更新了,本地router-id是2.2.2.2
状态码:* 有效 >最优路由 s 该路由被抑制(不会传递) d 惩罚路由 h 惩罚前的警告
i通过IBGP学到 r 加表失败 S 陈旧性的
起源码:i通过BGP引入到的(不管是IBGP 还是EBGP) e 通过EGP学习的
?重发布进入
Metric不是metric,是MED,多出口鉴别属性
只有最佳最优的才会加表
R3不加表是因为下一跳不可达
需要在R2上敲一条命令,意思是R2传递给R3的路由将下一跳变为自己
但是R4上是依旧学不到的,这是因为IBGP的水平分割。