BGP---边界网关协议
IGP---内部网关协议---RIP.OSPF...
EGP---外部网关协议---BGP
AS---自治系统
由单一的机构或者组织所管理的一系列IP网络及设备组成的集合
(1)范围太大,协议跑不过来,需要划分
(2)自治
为了方便对AS---自治系统进行管理,我们给每一个自治系统设置了一个编号,这个标号称为AS号---本质由16位二进制构成---取值范围:0-65535,其中0和65535为保留,可用的取值范围为1-65534,其中64512-65534这一部分的AS号称为私有AS号,公有AS号取值范围1-64511(这一部分AS号要求全球唯一,统一由IANA组织分配)
所以,目前大多数设备支持拓展版的AS号---32位二进制构成
目前,在IPV4领域下,我们使用最广泛的BGP需要版本为BGPV4版本,但是目前市面上也存在BGPV4+版本---其特点是可以支持多种地址族
在BGP的情况下,我们通过重发布技术也可以实现不同AS之间的路由信息共享,但是,之所以采用BGP而不是重发布,主要因为重发布本身存在缺陷:
①在实现多点重发布时,必然出现选路不佳的情况
②归属问题
BGP在AS之间共享路由信息的方式一定是共享路由条目信息,原因主要是:
(1)拓扑信息的数据量大
(2)拓扑信息将暴露AS内部的网络部署情况
BGP协议被称为无类别的路径矢量协议
路径矢量和距离矢量的区别:
①距离矢量中的距离指的是开销,也就是跳数,是以一台路由器作为一跳,而路径矢量中则是将一个AS看作一个整体,将一个AS作为一跳。
②EGP协议不存在算法的概念,而距离矢量是根据算法来划分的。BGP协议只是将IGP协议计算出来的路由信息传递给其他运行BGP的设备。
IGP协议的评判标准---选路佳,收敛快,占用资源少
EGP协议的关注点
1.可控性
AS之间需要传递大量的路由信息,所谓可控,就是可以更方便的干涉选路,更方便做策略---为了弥补重发布的缺陷
为了保证路由的可控性,方便选路.BGP协议直接舍弃了开销值,取而代之的是BGP给每条路由信息附加了丰富的路径属性.可以通过多种路径属性进行灵活的选路,使得BGP协议具有强大的可操控性
因为BGP需要传递的路由信息的数量非常庞大,所以无法采用周期更新,只存在触发更新
2.可靠性
BGP协议为了保证传输的可靠性,直接采用TCP协议作为传输层的协议来工作.使用TCP的179号端口来工作
IGP协议不选择TCP的原因
(1)TCP速度较慢
(2)TCP占用资源较大
(3)TCP只能实现单播---因为BGP采用TCP作为传输层协议,所以只能通过单播的形式建立邻居关系,需要手工指定邻居而不能自动发现
BGP支持非直连建邻----因为只要网络可达,即可以实现TCP会话通道的建立,则可以建立BGP的邻居关系
BGP的非直连建邻是承载在IGP(静态路由)的基础上的
AS之间的---EBGP对等体关系---如果建立对等体的两台路由器位于不同的AS中,则它们的关系就被称为EBGP对等体关系
AS内部的---IBGP对等体关系---如果建立对等体的两台路由器位于相同的AS中,则它们的关系就被称为IBGP对等体关系
一般情况下,IBGP对等体关系可以非直连建邻,而EBGP对等体关系之间是直连建邻的,所以,IBGP间建邻时,他所构成的数据包中的TTL值为255.但是,在EBGP对等体关系建邻时,他所构成的数据包中的TTL值为1.若EBGP对等体之间需要非直连建邻,则必须将数据包中的TTL值修改
3.AS-BY-AS
BGP始终将一个AS看作是一个整体
BGP的一个特性:BGP不支持负载均衡。不管到达相同网段存在多少条路由信息,BGP只会选择其中的一条加载到路由表中
1.BGP的数据包
因为BGP传输层使用的是TCP协议,所以传输的可靠性全部由TCP协议来保证,不需要额外的设计确认报文
ospf中的hello包可以实现周期性的发现、建立和保活邻居关系
BGP中发现邻居关系---需要通过人手工来指定邻居关系
BGP中建立邻居关系---由open报文来完成
BGP中保活邻居关系---Keeplive包来完成
OPEN包
---主要作用:用来建立BGP对等体关系,其实质就是协商参数
AS号---在创建邻居关系时需要指定对方的AS号,并且这个AS号会在OPEN报文中携带。若对方收到数据包中发的AS号和本地的AS号不同,则将无法正常建立邻居关系
认证---在BGP中也可以进行邻居间的认证,在数据包中将携带认证口令,口令相同则将正常建立邻居关系,不同则无法建立
Router-ID---其作用也是用来区分和标定不同路由器的,在OPEN报文中也会携带这个参数,对端在收到后将会比较数据包中的RID和本地的RID,相同则代表冲突,无法建立邻居关系,不同则可以正常建立邻居关系
BGP中的RID和OSPF中的完全一样---也是有32位二进制构成,按照IP地址的格式配置
生成方法:(1)手工配置(2)自动生成(先看本地环回接口,取最大的作为RID,如果没有环回,则取物理接口IP最大的作为RID)
手工指定邻居关系时,所配置的目标IP地址必须和邻居发来的OPEN报文中的源IP地址一致,否则将无法正常建立邻居关系 (检查机制)
OPEN报文中还会协商一些参数
---保活时间(Hold time)默认为180s---这个参数也会携带在OPEN包中,但不要求必须相同,但是执行时又必须相同。所以当双方保活时间不同时,则将按照数值小的来执行
---是否支持路由刷新功能---如果有一方不支持,则将不启用该功能
Keeplive包
---主要任务就是保活对等体之间的邻居关系,周期发送时间为保活时间的1/3,默认保活时间为180s,则周期发送时间为60s
除了可以正常的周期保活外,还将在收到对方OPEN报文后,临时充当确认包的作用---确认的不是OPEN报文是否收到,实际确认的是OPEN报文中的参数是否同意,体同意则回复keeplive报文进行确认
Update包
---更新包----主要包含目标网段及掩码信息,以及BGP附加给路由的各种路径属性
当一条路由信息失效时,BGP将直接把该路由信息携带在更新包中的撤销路由条目字段下,代表该路由失效,而不需要像RIP一样采用带毒传输的方式
Notification包
---BGP设置的一个告警机制
Route-refresh包
---用于改变路由策略后请求对等体重新发送路由信息,前提是对等体双方都需要支持路由刷新功能
2.BGP的状态机
BGP的状态机一共六种,主要描述的是BGP对等体建立过程中的状态变化,而不包含路由收发过程。因为BGP可以将邻居建立和路由收发分开
Idle---空闲状态
一开始,设备启动BGP进程后先进入空闲状态,当手工指定邻居关系后,将进入到一个检查步骤。需要先确认指定地址在本地路由表中的可达情况。如果可达,则进入到Connect,尝试建立TCP的会话;如果不可达,则将停留在空闲状态
Connect---连接状态
该状态需要完成TCP会话的建立
如果建立成功,则进入Opensent状态。如果建立失败,则进入Active状态,则将反复尝试建立TCP会话
在建立TCP会话的过程中,因为双方都会主动发起建立会话的过程,而最终建立的都是一个双向的会话。所以最终只需保持一个会话通道即可。选择方式是通过后续open报文中的RID进行比较,选择保留RID大的设备发起的TCP会话
Opensent
发送OPEN包,同时也会收到对方发送的OPEN报文,则将检查对方报文中的参数,如果没问题则将发送keeplive包进行确认
Openconfirm---Open确认状态
等待对方发送keeplive报文确认自己的参数,如果收到keeplive报文则进入下一状态
Established
标志着邻居关系建立成功
3.BGP的工作过程
(1)基于IGP(静态、直连)实现IP可达
(2)指定邻居关系,邻居间使用单播传输,建立TCP会话。之后,BGP多有的数据包都将基于TCP会话通道来传输
(3)发送Open报文以及Keeplive报文进行邻居关系的建立。BGP会将邻居关系进行记录,记录在一张表中---邻居表
(4)使用Update包共享路由信息。数据包中包含目标网络号及掩码信息,以及各种属性。在这个过程中,BGP会将所有收到的以及发送的路由信息都记录在一张表中---BGP表
(5)之后,BGP将会把BGP表中最优的路加载到路由表中。(BGP到达相同网段可能会存在多条路由信息,但是因为BGP不存在负载均衡,所以BGP只会将其中最优的路由信息加载到路由表中---通过路由的属性来进行判断)
(6)收敛完成后,BGP将周期性地发送Keeplive报文进行保活
(7)在任何过程当中,只要出现错误,都将使用notification报文进行告警
(8)若出现结构突变的情况,则将使用update报文进行触发更新
4.BGP的路由黑洞
由于BGP协议可以非直连建邻,故可能出现BGP协议跨越未运行BGP协议的路由器;导致BGP路由传递后,控制层面显示可达,但数据层面,流量流经未运行BGP协议的路由器时,将无法通过,形成了路由黑洞
(1)可以直接让未运行BGP协议的设备运行BGP协议
(2)可以让边界设备将BGP的路由信息重发布到IGP协议中
(3)MPLS
为了避免BGP的路由黑洞,BGP提出了同步机制---即当一台路由器从自己的IBGP对等体处学到一条BGP路由时,它不能发送给自己的EBGP对等体,除非它又从IGP(静态)协议中学到这条路由信息。相当于要求IBGP路由和IGP路由同步
华为设备默认关闭同步机制
5.BGP的防环
BGP的防环机制---水平分割
EBGP水平分割
---针对EBGP对等体之间可能出现的环路问题所提出的防环手段---BGP协议将在路由条目中记录所经过的AS的编号---AS_PATH---这个属性对应的是一张列表---接收到BGP路由条目中如果包含本地的AS号,则将不再结束该路由,以防路由回传,造成路由环路问题
因为BGP不存在开销,而是依据路由属性来进行选路的。但是,又因为BGP的AS-BY-AS的规则,导致AS内部在默认情况下,因为要把整个AS看做是一个整体,所以传递的路由属性都是相同的,所以IBGP之间想要防环无法通过属性防环
IBGP水平分割
---针对IBGP对等体之间可能出现的环路问题所提出的防环手段
IBGP的水平分割---当一个路由器从一个IBGP对等体处学习到某条BGP路由时,他将不再把这条路由信息传递给它的其他IBGP对等体
IBGP水平分割确实可以防止IBGP对等体之间的路由回传问题,但是,IBGP水平分割的规则相当于限制BGP路由在IBGP对等体间只能传递一跳。这样就可能造成BGP路由信息的传递障碍
最简单的方法解决IBGP水平分割带来的通讯障碍---建立全连的IBGP对等体关系
这种方法带来的问题:
(1)当网络中运行BGP的路由器数量较多时,则将造成资源占用过大
(2)造成网络的可扩展性变差
BGP为了解决IBGP水平分割带来的通讯障碍,专门设计了两个技术---①路由反射②联邦