HCIP-ICT实战进阶06-BGP基础
HCIP-ICT实战进阶06-BGP基础
0 前言
运营商内部网络通过RIP、OSPF、ISIS实现网络互联, 但运营商之间要怎么办?
能不能互相引入路由?
理论上可行, 但考虑到网络机密问题和内部路由协议的一些缺陷(如OSPF会产生大量五类LSA).
考虑其他协议
BGP: 实现全世界所有运营商之间的网络互联.
基于以上概念, 路由协议分为两个类别:
- IGP协议, 内部网关协议: 在同一个局域网内部通信使用;
- EGP协议, 外部网关协议, 实现不同局域网之间的协议, 典型的EGP协议: BGP、EGP(这个EGP是外部网关协议类别里面的一个EGP路由协议, 现在基本被淘汰)
使用XShell查看全球BGP:
telnet route-views.routeviews.org
Username: rveiws
show ip route
show bgp all summary
1 了解BGP
1.1 BGP自治系统AS
在IPv4网络中, 通过判断IP地址信息可以区分不同路由位置.
BGP中用于全世界互联, 所以需要一种标识用于告诉网络工程师, 当前路由信息从那个区域传递过来, 这个区分方式就是AS自治系统.
AS: 一个企业/机构统一管理的设备集合, 比如中国电信, 会有自己专属的AS号码(向国际标准化组织买来的),
AS如何划分: 是IANA(互联网数字分配机构管理和分配组织), BGP网络中每一个AS都会有一个唯一的AS号码.
AS号码分为两种: 2字节(old)(公有: 1-64511, 私有: 64512-65535)、4字节(new)(1-2^32)
2字节不太够用了, 所以开放4字节. 新旧两种AS号码都是采用TVL结构, 所以能互相兼容.
1.2 BGP发展史
最早是EGP路由协议实现AS直接网络互联, 后面因为EGP协议问题比较多, 所以需要更新迭代, 在更新了三个版本BGP协议(-1 -2 -3)之后, 从有类路由协议迭代到如今无类路由协议BGP-4(RFC 4271).
1.3 使用BGP传递路由
为此AS之间专门使用BGP, 相较于传统的IGP协议:
- BGP基于TCP, 只要能够建立TCP连接即可建立BGP(可以跨越设备传递);
- 只传递路由信息, 不会暴露AS内的拓扑信息;
- 触发式更新, 而不是进行周期性更新.
1.4 BGP在企业中的应用
2 BGP的基本概念
2.1 BGP概述
BGP(Border Gateway Protocol, 边界网关协议)是一种实现自治系统AS之间的路由可达性, 属于外部网关协议, 着重于路由传递和最佳路由选择, 不在乎网络拓扑自动发现, 不需要进行路由计算, 只需要选择最优路由传递即可.
MP-BGP(多协议BGP): 在BGP-4版本之上进行了TLV扩展, 可以支持IPv6网络, 这个版本也称为BGP-4+.
BGP特性
BGP是距离(路径)矢量路由协议之一;
- BGP目前版本是无类路由协议;
BGP工作在应用层, 采用TCP连接(TCP能保证网络传输的可靠性), 端口号为179.
BGP最佳路由选择依靠大量路径属性, BGP不需要任何算法进行选择路径;
TVL结构, 易于扩展;
BGP是世界性互联协议, 提供了一种防路由震荡机制: 路由衰减和路由聚合;
BGP可以扩展支持MPLS VPN网络.
MPLS VPN网络是目前互联网上最好用的VPN, 需要向运营商购买;
运行BGP的设备称为BGP Speaker(BGP路由器);
BGP更新方式
BGP有增量更新和触发更新
增量更新就是发生变动之后, 可以在同一个报文里面携带不同信息用于更新.
触发更新就是发生变动, 立刻发送更新变化.
BGP没有任何周期性更新概念, 原因是其路由体量过于庞大, 周期更新会触发网络卡顿. 所以如果没有特殊情况, 一般发生更新的时候, 只会发送发生变化的内容.
BGP对等体关系
两个建立BGP会话的路由器互为对等体(Peer), BGP对等体之间不一定需要直连(TCP), BGP对等体之间交换BGP路由表.
如果两台BGP对等体在同一个AS里面, 该对等体关系称为IBGP(Internal BGP), 在不同AS间称为EBGP(External BGP).
2.2 BGP报文
BGP存在5种类型的报文, 不同类型的报文拥有相同的报文头部(header).
BGP报文头部格式
- Marker: 16字节, 用于检查BGP对等体的同步信息是否完整, 以及用于BGP验证的计算, 如果不使用验证, 则该字段全为1;
- Length: 2字节, BGP消息的总长度;
- Type: 1字节, 具体BGP消息种类:
- type=1, OPEN消息;
- type=2, UPdate消息;
- type=3, Notification消息;
- type=4, Keepalive消息;
- type=5, Route-refresh消息.
Open报文
作用: 用于BGP建立对等体之前, 进行参数协商, 在BGP TCP连接建立成功后发送.
version: 1字节, BGP版本, 目前为4, 版本号码是需要协商的, 理论上能向下兼容, 但现实中3和4无法通信,
My AS: 2字节, 表示发送该报文的BGP设备的AS号码, 用于判断关系为IBGP/EBGP;
hold time: 2字节, 发送该报文BGP设备对等体关系老化时间(默认180s), 该字段会决定最后发送keepalive的周期(默认60s), 如果两边不一致会协商为间隔时间较小的一边, 为0表示不需要发送keepalive, 不为0则需要大于3s.
BGP ID: 4字节, 表示发送该报文的Router ID;
Option length: 可变长度, 表示可选项option有多少字节, 没有则显示0或空.
Option: TLV格式的可选项.
type: 可选参数类型, 目前数值为2才有意义;
length: value长度;
value: 也是一个TVL:
type: 参数
type=1: 地址族能力;
- AFI
- AFI=1: IPv4地址族;
- AFI=2: IPv6地址族;
- AFI=196: 二层地址.
- Res: 预留;
- SAFI: 子地址族标识:
- SAFI=1: 单播地址;
- SAFI=2: 组播地址;
- SAFI=128: VPN地址.
type=2: refresh能力;
type=65, 4字节AS.
- AFI
length;
value...
Update报文
作用: BGP的路由更新和路由撤销, 在对等体关系建立后需要发送路由变化时发送
Unfeasible route length (撤销路由的长度), 表示需要撤销多少字节, 为0表示没有路由需要撤销.
Withdrawn Routes(撤销的路由): 表示具体撤销的路由, 有两部分组成:
- length: 待撤销路由的掩码, 为0时表示匹配所有路由;
- prefix: 传送的IP地址前缀必须用整字节表示.
Total Path Attribute Length(全部路径属性长度): 表示后续新增需要更新的路由, 路径属性有多少内容;
Path Attribute(路径属性): 根据教育厅的路径属性, 字这一部分进行填写, 路径属性通过TLV形式呈现:
type: 2字节, 分成两个部分:
flag:
O(Optional bit): 属性可选性, 公认(well-known)为0, 可选(optional)为1.
T(Transitive bit): 属性可传递性, 公认必须为1, 可选为1, 非可选为0.
P(Partial bit): 属性的局部性;
E(Extend Length bit): 决定该属性长度的字段, 需要扩展为1, 不需要扩展为0.
U: 未使用
type;
length;
vlaue;
Network Layer Reachability Information(NLRI, 地址前缀信息): 跟上述撤销路由一样, 有两个部分:
- length;
- prefix;
注意: 同一个Update消息, 只能携带路径属性相同的路由, 换句话说: BGP路径属性一致的路由信息可以放在一个Update报文内传递.
flag里面为了标识路径属性时哪一类别, 使用O和T来那个比特位来表示:
O T 含义 0 1 公认必遵和公认任意 1 1 可选过渡 1 0 可选非过渡
路径属性会在我的下一篇博客展开细说
Notification报文
作用: 报错提示, 将当前BGP出现的问题通过报错消息告知设备和用户, 可以用来终止对等体关系.
Error Code、Error subcode: 差错码、差错子码, 用于告知对端具体的错误信息;
Data: 用于辅助描述详细的错误内容, 长度不固定.
Keepalive报文
作用: 用于保持BGP对等体之间的活性, 在建立对等体关系后会定期发送来保持连接.
没有报文格式, 只有BGP报文的报头, 是一个纯粹的告知, 只要对方收到就能知道对等体没有断开.
Route-Refresh报文
作用: 该报文用于告知其他设备, 现在需要进行部分路由的更新, 在路由策略发生变化时会触发请求对等体重新告知路由.
- 如果是出方向发生策略变化, 想要立刻更新路由, 基本只能重置BGP, 否则只能等待其他条件更新;
- 如果是入方向发生策略变化, 可以依靠route-refresh.
- AFI(Address Family Identifier): 地址族标识, 比如ipv4;
- Res: 预留, 全置为0;
- SAFI(Subsequent Address Family Identifier): 子地址族标识;
通过以上三个内容, 就是告知其他设备, 本机当前需要更新哪一种路由.
2.3 BGP状态机
状态 | 含义 | 备注 |
---|---|---|
idle | 开始准备TCP连接并监视远程对等体, 启用BGP时需要足够的资源 | 当前BGP进程空闲, 没有在建立对等体. |
connect | 正在进行TCP连接, 等待完成中, 如果TCP建立失败则进入active状态, 尝试反复连接 | 认证都是在TCP建立期间完成的 |
active | TCP建立失败, 反复尝试TCP连接 | |
opensent | TCP建立完成了 | 发送Open消息, Open报文携带参数协商对等体的建立 |
openconfirm | 收到对方的Open消息并确认完成 | 发送了keepalive, 在等待对方的keepalive |
establish | BGP对等体建立完成 | 收到了对方的keepalive包, 双方协商一致后开始使用Update通告路由信息 |
BGP建立过程
idle: 是BGP初始状态, 拒绝邻居发送的连接请求, 只有当本设备产生一个start事件, 才会开始尝试和其他BGP设备建立TCP连接, 然后设备会进入connect状态.
strat事件: 是操作者配置一个BGP的过程, 或者是重置BGP进程.
注意: 任何状态下, 如果收到Notification消息(主要是open消息错误), 或者是TCP拆链消息, BGP都会回到idle状态.
connect: 设备会启动重传定时器(默认32s), 等待TCP建立完成, 有下面三种情况:
- TCP建立成功, BGP会发送open报文并进入opensent状态;
- TCP连接失败, BGP会进入active状态;
- TCP重传定时器超时, BGP停留在connect状态并继续尝试TCP连接.
active: BGP会一直尝试TCP连接
同样是三种情况:
- TCP建立成功, BGP会发送open报文并进入opensent状态;
- TCP连接失败, BGP会停留在active状态;
- TCP重传定时器超时, BGP退回connect状态.
以上过程都是为了TCP连接的建立, TCP建立完成之后才继续下面的对等体协商.
opensent: BGP会等待对等体的open消息, 如果收到open消息, 则需要检查version、holdtime、ID、AS、认证.
检查通过则发送keepalive消息并进入openconfirm状态, 等待对方回复keepalive;
检查不通过则发送notification消息并回到idle状态.
openconfirm: 等待对等体发送keepalive/notification报文:
收到keepalive则进入establish;
收到notification回到idle.
establish: 此时BGP对等体之间交互Update、keepalive、refresh、notification报文.
- 如果收到正确Update/keepalive, 则保持BGP关系;
- 如果收到错误Update/keepalive, 则判断是否出现问题:
- 出现问题, 进入idle状态;
- 没有问题, 保持establish状态.
一些小知识点
refresh不会改变BGP的状态.
active和connect状态保持很久时间之后, 理论上会重新进入idle, 然后重新进入connect和active, 但实际上TCP建立失败可能会导致BGP停留在connect或active状态.
BGP除了establish和idle之外,其他状态机大部分都不是稳定停留, 比如TCP连接有问题,则idle、connect、active之间会切换, 只是查看的时候看到的是停留.
2.4 BGP的表
2.4.1 BGP对等体表
也叫BGP的邻居表, 就是对等体邻居列表.
- Peer: 对等体地址;
- V: version, 版本号;
- AS: 对等体AS号;
- Up/Down: 该对等体已经Up或Down的时间;
- State: 对等体状态, 这里显示的为BGP状态机的状态;
- PrefRcv: prefix received, 从对等体收到的路由前缀数目.
查看对等体表的命令:
display bgp peer
2.4.2 BGP路由表
BGP的路由信息数据库, 该数据库中, 有一些路由需要加入路由表, 有一些路由信息发送给其他设备做路由更新.
BGP Local Router ID: BGP本地Router ID;
在每条路由前面, 会出现: *、>、d、h、i、s、S, 含义如下:
符号 描述 备注 * 该路由时有效路由(可用的路由) BGP协议只是为了传递路由, 所以BGP学到的路由不一定都是可用的 > 该路由是当前设备的BGP进程选择出来的最优路由 BGP有非常多的选路属性(路由属性) d 该路由时衰减路由 为了防止频繁震荡引起的世界性路由不稳定, BGP针对一台频繁发生震荡的路由, 会设置惩罚值 h 这条路由最后一次收到的update中时一个需要撤销的路由 i 该路由时AS内部传递来的 IBGP之间的路由传递 s 该路由被抑制 BGP配置路由聚合的时候, 可能会出现s来抑制路由发送. S 该路由正在被删除 惩罚值: 为了让一些频繁震荡的路由不能更新, 被标识了d的BGP路由, 说明该路由不稳定, 且惩罚值超出了设定的阈值, 所以该路由不能进行路由更新, 也不会参加路由计算.
network: 路由的目的网络地址和网络掩码;
Nexthop: 下一跳地址;
MED: 路由度量值;
LocPrf: 本地优先级;
PrefVal: 协议首选值;
Path/Ogn: 显示传递路由信息的设备的AS路径号和Origin属性.
这些属性值的用处会在下一篇博客展开.
查看BGP路由表情况的命令:
display bgp routing-table [ipv4-address {mask|mask-length}]
全局查看或详细查看.
2.4.3 Adj-RIB-IN
对等体发送给本机的BGP路由, 但是目前没有进行处理过, 接收BGP更新的接口是否配置策略:
- 如果有配置策略, 则需要将BGP路由表加入该表项, 然后进行策略处理, 处理完之后再进入路由表.
- 如果没有策略, 则直接进入BGP路由表.
2.4.4 Adj-RIB-OUT
本机发送出去的BGP路由更新, 已经被BGP的策略处理过了的路由会加入该表项, 用于告知设备, 这些路由信息是需要发送的.
2.5 BGP路由的生成
如果BGP想要通告路由, 使用的方式只有network和import-route.
BGP不管是network、import-route都称为引入路由, 是把路由引入并传递出去, 不会自动生成路由, 需要手动通告出去, 不同于OSPF中的network(通告, 把接口加入OSPF协议, 路由会自动生成并传递); import-route没啥特殊差别, 只是BGP会标出来而已.
2.5.1 Network
生成BGP路由: BGP可以将路由表中存在的任意一条路由通过network转换成BGP路由.
比如路由表中存在这些路由:
目的地址 来源 192.168.1.0/24 ospf 192.168.2.0/24 isis 192.168.3.0/24 rip BGP如果想传递192.168.3.0/24, 则直接在BGP进程中输入命令:
network 192.168.3.0 24
精确匹配, 路由前缀和掩码必须一致, 要引入多少条就写多少条.
该命令会让BGP进程生成相关的BGP路由.
生成该路由之后, 本地设备会先将该路由放到BGP路由表中;
之后在BGP Update消息中传递该路由会更新给其他设备;
其他设备在收到路由之后, 直接将路由加入到BGP路由表中, 之后再进行路由有效性判断, 并选择最优路径.
例子:
- AS 200内的BGP路由器已经通过IGP协议OSPF学习到了两条路由: 10.1.0.0/24和10.2.0.0/24, 在BGP进程内通过network命令注入这两条路由, 这两条路由将会出现在本地BGP路由表中;
- AS 200内的BGP路由器通过Update报文将路由传递给AS 300内的BGP路由器;
- AS 300内的BGP路由器收到路由后, 将这两条路由加入到本地BGP路由表中.
2.5.2 Import-route
import-route本身就是引入某一个其他协议的路由引入到BGP, 使用方法和其他协议一致.
例子:
Network方式注入路由虽然是精确注入, 但是只能一条条配置逐条注入IP路由表中的路由, 如果注入的路由条目很多配置命令将会非常复杂, 为此可以使用import-route方式, 能将直连路由、静态路由、ospf路由、ISIS路由等路由注入到BGP路由表中.
2.6 BGP聚合路由
回顾OSPF路由聚合和ISIS路由聚合: 路由聚合会将明细路由聚合成一条汇总过后的路由, 然后向外发送路由更新的时候, 也是只发送一条汇总路由, 明细路由则不再发送.
BGP路由聚合的效果: 首先明细路由会汇总成一条汇总路由, 路由更新的时候, 会发送汇总路由+明细路由.
举例:
路由信息 |
---|
192.168.1.0/24 |
192.168.2.0/24 |
192.168.3.0/24 |
如果是OSPF或者ISIS进行路由汇总, 最后传递的路由只存在192.168.0.0/22;
如果是BGP, 最后传递的路由会存在192.168.0.0/22、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24四条路由.
配置命令
bgp 200
aggregate 192.168.0.0 22
以上命令会导致汇总之后反而路由变多, 使用所以需要加上参数, 抑制明晰路由:
bgp 200
aggregate 192.168.0.0 22 detail-suppressed
配置了明晰路由抑制, 在BGP路由表中这些路由条目前会出现"s"标识.
2.7 BGP通告原则
BGP路由能否传递出去给其他设备, 是需要考虑BGP路由传递原则
只发布最优且有效的路由
只有BGP路由表中, 显示为"*"(有效)并且">"(最优)的路由才可以被BGP传递出去;
从EBGP对等体获取的路由, 会发布给所有对等体
如果两台BGP设备之间是EBGP关系, 则从EBGP关系学到的BGP路由, 可以传递任何任何邻居;
IBGP水平分割(防环)
从IBGP对等体获取的路由, 不会发送给IBGP对等体. 即如果两台BGP设备之间是IBGP关系, 则从IBGP关系学到的BGP路由, 只可以传递给EBGP邻居, 不会传递给IBGP.
BGP同步原则
当一台设备从自己的IBGP对等体学习到一条BGP路由时, 他将不能使用该路由或者将该路由通告给自己的EBGP对等体, 除非它又从其他IGP协议中学习到这条路由.
说人话就是这条IBGP路由需要同时从BGP和IGP中学习到才能向EBGP使用/传递.
举例
假设A有一个192.168.1.0/24的BGP路由需要传递, B C E F都能学到, D无法学到.
解决办法:
在C设备上通过network重新引入一遍.
理论上可行, c设备network相当于就是重新生成BGP路由信息, 这样会导致网络中路由关系混乱(D无法判断该路由信息是A还是C产生的).
通过TCP跨设备建立对等体(BGP全互联网络结构):
将B和D之间建立IBGP关系, 这样B收到的EBGP信息就能发送给自己的IBGP邻居.
所以一般在现实网络中, 同一个AS内的BGP设备都会建立IBGP关系, 实现IBGP全互联.
RR反射器(这个会在我的, 不知道是哪一篇博客中展开);
BGP联盟.
BGP同步和BGP路由黑洞
BGP路由黑洞: BGP能跨设备传递路由, 但数据转发需要逐台设备, 一旦网络路径上有设备未开启BGP, 就会导致需要该设备转发的数据被丢弃.
BGP同步: 当一台设备从IBGP邻居学到一个路由, 然后该路由需要发送给EBGP邻居的时候, 需要判断是否在IGP协议里也学习到该路由, 该路由需要同时被BGP和其他IGP协议同时学习到才能传递. BGP同步机制一般是为了防止BGP路由黑洞影响范围扩大.
BGP在任何厂商的说明里面, 都是不建议打开的, 华为默认关闭BGP同步机制.
从一个案例了解BGP同步和BGP黑洞
C设备未开启BGP, B和D通过TCP建立了IBGP关系.
BGP路由可以从A传给B、B传给D、D传给E, 但是C不会学到BGP路由(C没有开启BGP), 这样导致了一个问题: E虽然学到了通告的192.168.1.0/24, 但是无法ping通.
BGP路由可以跨设备传递的, 中介设备不要学会路由信息, 但是数据转发一定是需要逐台设备转发的.
D设备的下一跳是C, C收到ICMP报文, 查询路由表, 发现没有192.168.1.0/24路由, 于是C设备丢弃ping数据.
此时就形成了BGP黑洞.
解决方法:
开启同步之后, D设备不会把路由发送给E, 因为BCD(OSPF)的B向D交互的是BGP路由, 所以OSPF根本不会学习到BGP路由, 最后D也不能将路由信息传递到E;
注意: 这里的路由黑洞是存在的, 只是不会影响其他区域.
将BGP引入IGP(如OSPF), 但会导致OSPF内出现巨量五类LSA, 隐患很大.
3 BGP的基本配置
- BGP进程和之前学习的一些IGP协议的进程(一台设备可以有多个进程号, 每个进程相当于独立的协议)不大一样, BGP协议中只能有一个进程, 且进程号就是该BGP设备所处AS的AS号码.
- BGP没有自动发现邻居的机制, BGP需要手动指定邻居信息.
配置命令
启动BGP进程:
[Huawei]bgp {as-number-plain|as-number-dot}
[Huawei-bgp]router-id ipv4-address
启动BGP, 指定本地AS编号, 并进入BGP视图, 使用router-id命令配置BGP的Router ID, 建议将BGP的RID配置为环回口地址.
配置BGP对等体:
[Huawei-bgp]peer {ipv4-address|ipv6-address} as-number {as-number-plain|as-number-dot}
创建BGP对等体, 指定对等体的地址和AS号.
配置建立对等体使用的源地址, EBGP对等体最大跳数, IBGP修改下一跳属性:
[Huawei-bgp]peer ip-address connect-interface interface-type interface-number [ipv4-source-address]
[Huawei-bgp]peer ipv4-address ebgp-max-hop hop-count
[Huawei-bgp]peer ipv4-address next-hop-local
指定发送BGP报文的源接口, 并可指定发起连接时使用的源地址.
指定建立EBGP连接允许的最大跳数, 缺省情况下, EBGP连接允许的最大跳数为1, 即只能在物理直连链路上建立EBGP连接;
设备B在收到EBGP A的路由再传递给IBGP C时, C下一跳默认为A, 但是可以通过命令修改这个配置.
配置案例
举例1:
创建BGP:
bgp 100
router-id 1.1.1.1
创建AS 100内设备的BGP进程, 设备RID为1.1.1.1;
两边对等体都要配置.
指定对等体信息:
bgp 100
peer 10.1.1.2 as-number 100
邻居的IP地址为10.1.1.2, 且对方的AS号码是100;
这里如果Open报文在交互报文时, My as字段不是100, 就会导致对等体关系失败, 这里如果对对等体建立过程遗忘的可以倒回去看.
默认情况下BGP指定了peer命令之后, 设备会根据对等体信息查找路由表, 找到通往该对等体的路由, 该接口的IP地址用于作为TCP源地址和对方通过TCP连接建立对等体关系.
但如果当前设备想要用的TCP源地址和对等体指定的源地址不一致, 那就需要采用其他方法配置.
指定TCP源地址配置对等体:
peer route-id connect-interface interface-type interface-number
比如:
peer 1.1.1.1 connect-interface loopback0
建立EBPG对等体
peer 1.1.1.1 ebgp-max-hop 5
将建立EBGP时的open报文的TTL置为5.
不同于建立IBGP关系(TTL=255), 建立EBGP的open报文中TTL=1. 所以指定环回口建立EBGP对等体的时候, TTL需要改大一点(ebgp-max-hop).
所以EBGP关系建立的时候一般采用物理接口, IBGP关系建立的时候一般使用环回口(优势: 冗余、稳定)作为TCP源地址.
将EBGP学来的路由下一跳属性置为自己, 然后再传递给其他IBGP对等体.
peer 4.4.4.4 next-hop-local
所以IBGP之间通常会加上这条命令:将下一跳指定为自己, 但这条命令只能在对等体刚开始建立时才能生效, 否则需要重置BGP进程.
从EBGP学来的路由, 传递给IBGP时不会修改下一跳属性, 比如A--EBGP-->B--IBGP-->C, C学习到这条路由的下一跳是A, 但C不一定用通往A的路由, 所以这条路由可能会无法使用.
重置bgp进程:
reset bgp 200
一般情况下, 为设备配置bgp属性时, as-number、connect-interface、next-hop-local这三条命令是必须的.
举例2:
BGP对等体关系、AS号、设备互联地址如图所示, 所有设备的Loopback1接口地址为10.0.x.x/32, 其中x为设备编号, 所有设备都使用Loopback1地址作为Router ID. R1、R3之间使用Loopback1地址作为更新源地址建立IBGP对等体关系, R3、R4之间使用互联接口地址作为更新源地址建立EBGP对等体关系. ospf已经预配完成.
R1:
bgp 100
router-id 10.0.1.1
peer 10.0.3.3 as-number 100
peer 10.0.3.3 connect-interface loopback1
R3:
bgp 100
router-id 10.0.3.3
peer 10.0.1.1 as-number 100
peer 10.0.1.1 connect-interface loopback1
peer 10.0.34.4 as-number 200
R4:
bgp 200
router-id 10.0.4.4
peer 10.0.34.3 as-number 100
问题
在BGP路由选择规则中, 为什么EBGP > IBGP ?
如果BGP设备通过IBGP设备学习到的路由, 表示该路由可能是在自己的AS里传递了有些时间了, 相较于从EBGP学习到的相同的路由会更劣质.
就算这条路由是由IBGP产生的, 通过EBGP再通过EBGP传递给与产生这条路由相同的IBGP设备, 也会因为BGP的防环机制(水平分割, 设备会将AS_Path中有自己AS号的路由信息拒收)被相同AS的设备拒收.
抓包观察BGP认证是封装在传输层还是封装在应用层.
还没抓, 有时间再搞.
HCIP-ICT实战进阶06-BGP基础的更多相关文章
- 项目实战12.1—企业级监控工具应用实战-zabbix安装与基础操作
无监控,不运维.好了,废话不多说,下面都是干货. 警告:流量党勿入,图片太多!!! 项目实战系列,总架构图 http://www.cnblogs.com/along21/p/8000812.html ...
- DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述)
本系列文章 DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述) DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一) 近年来,关于如何开发基于 ...
- DDD实战进阶第一波(四):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架三)
上一篇文章我们讲了经典DDD架构对比传统三层架构的优势,以及经典DDD架构每一层的职责后,本篇文章将介绍基础结构层中支持DDD的轻量级框架的主要代码. 这里需要说明的是,DDD轻量级框架能够体现DDD ...
- DDD实战进阶第一波(三):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架二)
了解了DDD的好处与基本的核心组件后,我们先不急着进入支持DDD思想的轻量级框架开发,也不急于直销系统需求分析和具体代码实现,我们还少一块, 那就是经典DDD的架构,只有了解了经典DDD的架构,你才能 ...
- 无线网络安全攻防实战进阶(杨哲) PDF|网盘下载内附提取码|
面对当前国内企事业单位及soho无线网络的飞速发展.智能手机等便携式设备的广泛使用.无线网络犯罪案例日益递增的发展现状,<无线网络安全攻防实战进阶>作为<无线网络安全攻防实战> ...
- MongoDB实战开发 【零基础学习,附完整Asp.net示例】
MongoDB实战开发 [零基础学习,附完整Asp.net示例] 阅读目录 开始 下载MongoDB,并启动它 在C#使用MongoDB 重构(简化)代码 使用MongoDB的客户端查看数据 使用Mo ...
- DDD实战进阶第一波(二):开发一般业务的大健康行业直销系统(搭建支持DDD的轻量级框架一)
要实现软件设计.软件开发在一个统一的思想.统一的节奏下进行,就应该有一个轻量级的框架对开发过程与代码编写做一定的约束. 虽然DDD是一个软件开发的方法,而不是具体的技术或框架,但拥有一个轻量级的框架仍 ...
- DDD实战进阶第一波(五):开发一般业务的大健康行业直销系统(实现产品上下文领域层)
从这篇文章开始,我们根据前面的DDD理论与DDD框架的约束,正式进入直销系统案例的开发. 本篇文章主要讲产品上下文中的领域层的主要实现,先简单讲下业务方面的需求:产品SPU与产品SKU,产品SPU主要 ...
- DDD实战进阶第一波(六):开发一般业务的大健康行业直销系统(实现产品上下文仓储与应用服务层)
前一篇文章我们完成了产品上下文的领域层,我们已经有了关于产品方面的简单领域逻辑,我们接着来实现产品上下文关于仓储持久化与应用层的用例如何来协调 领域逻辑与仓储持久化. 首先大家需要明确的是,产品上下文 ...
- DDD实战进阶第一波(八):开发一般业务的大健康行业直销系统(业务逻辑条件判断最佳实践)
这篇文章其实是大健康行业直销系统的番外篇,主要给大家讲讲如何在领域逻辑中,有效的处理业务逻辑条件判断的最佳实践问题. 大家都知道,聚合根.实体和值对象这些领域对象都自身处理自己的业务逻辑.在业务处理过 ...
随机推荐
- java 进阶P-3.3+P-3.4
Array list的操作 ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素.ArrayList 继承了 AbstractList , ...
- k210 cpu、asm、rust、smpboot、ipi
介绍 k210的datasheet主要讲了与外设相关的内容,k210并不支持最新的完整的riscv指令集,而是实现了一部分.本文想要通过汇编来一点点摸索k210的寄存器,布局,mmu,缓存等结构 相关 ...
- (二) MdbCluster分布式内存数据库——分布式架构1
(二) MdbCluster分布式内存数据库--分布式架构1 分布式架构是MdbCluster的核心关键,业界有很多相关的实现,却很少有文章详细的解释每个架构实现背后的细节和这么做的原因.在Mdb ...
- VS Code windows系统C/C++环境配置_添加路径
1.安装cygwin 2.配置VS Code 按ctrl + shift + p ,选择 c/c++:Edit configuration(json) { "configurations&q ...
- C++练习2 强制类型转换
const可以把有关的数据定义为常量. const类型可以修饰:对象,指针,引用 使用const_cast为强制类型转换,将常量强制转换非常量. 1 #include <iostream> ...
- EPICS Archiver Appliance 单点极限储存速率测试
https://blog.csdn.net/weixin_43767046/article/details/113748775 这个测试一直在进行,虽然因为摸数据库设置而重启过并清过库,但读示波器波形 ...
- concurrent-map 和 sync.Map,我该选择哪个?
concurrent-map 和 sync.Map,我该选择哪个? 官方的map并不是线程安全的,如果我们在多线程中并发对一个map进行读写操作,是会引发panic的.解决方案除了使用锁来对map进行 ...
- 数值的扩展方法以及新增数据类型BigInt
二进制和八进制表示法 ES6提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o或(0O)表示 0b111110111 === 503 // true; 0o767 === 503; / ...
- ABAP 辨析ON INPUT|REQUEST|CHAIN-INPUT|CHAIN-REQUEST
1.逻辑流 在屏幕开发中,存在如下逻辑流: PBO(Process Before Output):屏幕输出之前触发 PAI(Process After Input):用户在屏幕中执行操作触发 POH( ...
- Cesium源码之Label(二)
我们查看Cesium源码时,有时会发现源码中有大量的includeStart开头的注释,如下图所示. 这里面大多是调试信息,当使用gulp打包时,removePragmas参数设置为true,则会删除 ...