目录
3.1.1 公认必遵 (Well-Know Mandatory)
3.1.2 公认任意 (well-known Discretionary)
3.1.3可选属性(Optional Transitive )
一、BGP的五个报文类型及报文根式
BGP中除了keepalive为周期更新,其他都是为触发更新(需要一定的触发条件)
1) open 用于发现、建立邻居关系
2) keepalive 维护邻居关系
每60s发送一次更新,hold time( 保持时间):180s
3) update 用来路由更新(删减、增加),携带路由的属性
4) notification 当设备检测到错误状态(BGP邻居建立过程中的报错状态),发送该报文,用来显示错误情况
5 ) route-refresh(路由重置)向邻居重新请求路由信息
软清 --> 重新请求路由信息
思科设备更新效率较慢,一般需要软清
思科 clear ip bgp * soft
硬清--> 重新请求建立邻居更新
思科 clear ip bgp *
1、抓包分析
BGP抓包过程
BGP固定头部
固定报文
1)标记 Maker 16bytes 用来检测对等体间同步丢失的情况,以及在支持验证功能时用于验 证信息(当不使用验证时所有的比特都为1)
2)长度 Length 2 bytes BGP 报文总长度(包括包头在内)以字节为单位(范围19~4096)
3)类型 type 1bytes 用来标识BGP报文类型取值为1 ~ 5
Open 1
Update 2
Notification 3
Keepalive 4
Route-refresh 5
1.1 BGP open报文
1)Version: 版本字段 1bytes 用来标识BGP版本号
2)My AS:我的自治系统 2bytes BGP 用来标识邻居建立发起者的AS号,用于决定双方是IBGP邻居关系,还是EBGP邻居关系。
3)Hold time: 保持时间 2 bytes 是该设备收到一个keepalive报文前允许等待的最长时间,如果在该时间内未收到对端发送的keepalive报文,则认为BGP连接中断,该时间为0则不发生keepalive报文,不为0的情况下最少为3s,在对等体建立过程中,双方都要协商保持时间,并采用open保持最短时间作为双方保持时间,默认保持时间为180s,发送更新时间为60s。
4)BGP Identifier: BGP标识符 4bytes发送者的BGP路由器ID,以IP地址形式标识。
(类似于OSPF的路由ID)
5)Optional Parameters Length: 可选参数长度 1bytes表示可选参数总长度,如果为0,则表示没有可选参数。
6)Optional Parameter :可选参数 长度可变 用来BGP验证或多协议扩展等功能,包括参数列表,每个参数由1bytes类型字段,1字节字段及有关包含参数值的可变字段来确定,即TLV (Type-Length-Value)方式
1.2 Update报文
1)Withdrawn Routes Length: 0不可用路由长度2bytes,用来表示撤销路由字段的总长度,如果为0,则说明没有路由被撤销,并且在该报文中没有撤销路由字段
2)Total Path Attribute Length: 28全部路径属性长度2bytes 用来表示路径属性总长度,如果为0则说明没有路径属性字段
3)Path attributes路径属性可变长度 可以列出与NLRI相关的所有路径属性列表
4)Network Layer Reachability Information(NLRI) 网络层可达信息可变长度用来指明可达路由的前缀和前缀长度二元组(网段及掩码)
1.3 Notification报文
1) 错误代码 1bytes 错误类型
2)错误子码 1bytes 错误类型更详细的信息
3)数据:可变长度,用于判断错误原因 这边表示路由被重置
1.4 Keepalive报文
用来保持BGP对等体连接的有效性,只包含BGP头部,不添加其他任何字段
采用周期性更新(以60s为周期发送keepalive报文,为保持时间的1/3,不能低于1s)
保持为180s,如果协商后对等体保持时间为0s则不发送keepalive报文
1.5 Route-refresh报文
1)AFI地址族标识用来标识IPV4或IPV6等
2)子网地址族标识 用来表示单播路由或组播路由(224.0.0.13)
2、BGP认证
BGP认证一般使用MD5或者密钥 keychain
其中使用密钥认证,路由器使用密钥和消息作为参数生成一个消息摘要用的最多是为BGP的md5认证
针对TCP三次连接时进行配置,才会后续报文建立
1、路由器生成并检查至TCP连接上发送的每段MD5摘要
2、路由器对其收到的每个路由更新数据包的来源进行认证
MD5 验证只能为TCP连接检验密码,而keychain 不仅可以检验TCP的连接设置,还可以对BGP报文进行检验。
其中如果只做一边的 MAD认证,思科设备报文提示
当两边都做配置但是认证密码不一致,思科设备报文提示
再次抓取BGP的任意一个报文发现TCP字段部分会发现多一个option字段
BGP的MD5 验证只能为TCP连接检验密码
3、BGP 路径属性
任何一条bgp路由都拥有多个路径属性
当路由器将BGP路由通告给它的对等体时,一并被通告的还有路由所携带的各个路径属性。 BGP的路径属性将影响路由优选
3.1 BGP的公认属性---所有BGP路由器必须识别
3.1.1 公认必遵 (Well-Know Mandatory)
必须存在update消息中 如果缺少该类属性,则路由更新信息报错
-
Origin 起源代码 (类型代码1) 用于说明路由来源(3个源),用来标记该条路由是怎么成为BGP路由的
可以通过(路由图/路由策略)修改
1) IGP :i 本地BGP路由器通过network方式注入BGP 2) EGP :e
通过EGP方式学习
3) Incomplete :?
通过重分布的方式学习
优先程度:IGP > EGP>Incomplete <==> i > e > ?
-
As_Path AS路径 (类型代码2 ) 用来记录BGP路由从本地到目标地址所需要经过所有的AS号
如果AS_Path发现有收到自己发回的本AS号,不会接收该路由,从而避免路由环路
同时也可以通过BGP选路原则(最短优先)人为增加其他的AS路径路径
#注意 BGP路由通告给IBGP对等体时,不会修改该条路由的AS_Path的属性
- Next_hop (类型代码3 ) 用来指明路由器获取的BGP路由的下一跳地址 (一般看转发表)
IBGP对等体 下一跳有二种情况
1、起源AS内部的路由下一跳为通告该路由的邻居路由器的源IP地址
eg:
R1与R2属于IBGP关系 如果从 AS起源R1:100--> R2:100 通告1.1.1.0给R2 IBGP对等体
R2学到1.1.1.0路由下一跳为邻居路由器的源地址(为R1的1.1.1.1 环回口通告)
2、通过EBGP的路由传递给本AS的IBGP邻居时,下一跳保持不变
EBGP对等体 下一跳会变成通告该条路由的邻居路由源IP地址
eg:
R1:100 -- > R2: 200 (属于12.12.12.0网段) 通告1.1.1.0 路由 R1与R2属于EBGP关系
--> 对于R2收到R1通告 1.1.1.0 路由 下一跳保持不变仍为12.12.12.1 (邻居源地址R1源接口地址12.12.12.1)
R2:200 --> R3:300 (属于12.12.12.0网段) R2将从R1学到1.1.1.0传递到R3时 邻居源地址保持不变(23.23.23.2)
R3:300--> R4:300 (属于34.34.34.0网段) R3从R2 学到的1.1.1.0 路由下一跳保持不变为(23.23.23.2为R2地址)
如果想让R4学习到1.1.1.0 路由下一跳为R3而不是R2则可以将R3到R4的下一跳地址改为自己
使得R4下跳地址为R3(邻居路由器源地址3.3.3.3)R4学习到的内容为由R3传递过来的
3.1.2 公认任意 (well-known Discretionary)
属于属于BGP设备都可以识别该属性,但不要求存在Update报文中,就是缺少该属性,路由信息没有错
-
Atomic_aggregate 原子聚合用来指出被丢失了信息,当路由汇总时会导致路由信息丢失,因为聚合来自不同属性的不同源的路由信息,如果一台路由器1发送时导致信息丢失聚合,则改路由器发送的update报文中必须被要求添加原子聚合属性。
-
Local_Preference 本地优先级(local_ pre)(属性类型5)常用的公认任意属性
仅在IBGP对等体之间交换,不传递其他AS,用于判断流量离开AS时最佳路由路径,相当于告诉自治系统的路由器有对条路径可选时,该怎么离开该自治系统
3.1.3可选属性(Optional Transitive )
不需要被BGP路由器识别,如果该属性不能被BGP进程识别,它会去看过渡标志,如果过渡标志有被设置,则BGP会接收该属性并且不加改变的传递 .并可以传递给其他的BGP对等体
- Aggregator 汇聚者 用来标识进行路由汇聚的BGP路由器ID和汇聚路由的路由的AS号
- Community 团体 指共享一个公共属性的一种路由器
3.1.4 可选非传递(Optional Nontransitive )
- Cluster-List 簇列表 用来显示采用的反射路径
- Originator-lD 起源ID号 路由发布路由时在加入Originator-lD ,该属性用来携带RR自身的路由器ID,用来防止环路
- MED Attribute (多出口鉴别器)
- MED(类型代码为4) 相当于为BGP的度量值,用于比较流量进入AS时最佳路径(可选非传递) 通常使用在AS间选路 仅当路由来自同一自治系统的不同邻居时,才需要比较他们的MED值
- 一台BGP路由器将路由传递给EBGP对等体时,是否携带MED属性 1) 通过本地始发的(network或者重分布方式),默认携带MED属性 2) BGP对等体学习到的,传递给EBGP对等体,默认不携带 3) 在IBGP对等体之间进行传递,默认携带MED属性
4、路由决策过程
-
选择首选值(Preferred-Value)/权重(Weight)大的
(仅在本地,不会传递给其他对等体)
针对本地产生的路由 优先级为32768
从其他对等体学习的 优先级为0
针对从邻居学习到的路由的权重/首选值 #思科 neighbor 192.168.16.6 weight 100 华为/华三 peer 192.168.16.1 preferred-value 90(地址族配置 ) 修改从邻居学习到的某一路由条目的权重 采用ACL + 路由图 修改从对等体学来的路由的权重 #思科 access-list 1 permit 7.7.7.0 0.0.0.255 access-list 1 permit 77.77.77.0 0.0.0.255 route-map a permit 10 match ip address 1 set weight 120 route-map a permit 20 //设置一条空的路由图发行所有 R1(config)#router bgp 100 R1(config-router)#neighbor 192.168.16.6 route-map a in 从in 学习到的方向调用,out方向一般为发布(如重分布时适用)(链路状态协议)
- 选择本地优先级(Local_Preference)大的,
默认优先级为100,且仅IBGP对等体中传递
修改本地路由的本地优先级 默认为(100)
思科配置 bgp default local-preference 120
修改从邻居学习到的路由的本地优先级
#思科配置
access-list 1 permit 6.6.6.0 0.0.0.255
route-map a permit 10
match ip address 1
set local-preference 130
route-map a permit 20
router bgp 200
neighbor 2.2.2.2 route-map a in - 本地始发的路由优于其他对等体学习到的路由
- 选择AS路径最短 AS路径,只能增加,不能删减 (仅在EBGP对等体有效、IBGP不会记录路径)
-
选择Origin最优
-
选择MED (MED Attribute 多出口鉴别器)最小的
-
EBGP路由优先级高于IBGP路由 AD 20 > 200
-
优选到下一跳的IGP度量值最小的路由
-
华为/华三 优选Cluster-list最短的路由 经过的RR(路由反射器)最少 思科 优选最老EBGP路径 EBGP路径越老越稳定
-
优选RID最小的设备通告的路由(都去通过同一条路由)
-
优选邻居IP地址最小的路径
华三设备开启tracert追踪功能
ip unreachables enable ip ttl-expires enabl
需要BGP实验文档可查看https://blog.csdn.net/m0_63121194/article/details/137387801?spm=1001.2014.3001.5501