| 状态名称 | 用途 | 备注 |
|---|---|---|
| idle(爱豆) | 初始化状态。说明正在进行 TCP 三次握手的过程。 | tcp未连接状态,邻居的状态为idle , 当bgp设备和邻居进行tcp 连接时,会从当前的状态转为connect 状态 |
| connect(可埃克特) | TCP 已连接状态 | 如果tcp 建立连接成功,bgp 设备会向邻居发送open报文,状态也会转为opensent 状态 如果tcp 建立连接失败,bgp设备的状态会转为active 状态 |
| active(艾克替五) | 如果 tcp 连接失败,则进入 active 状态。依然试图建立 tcp 连接,如果成功,则转为下一状态 | 1.在当前状态下,bgp 设备依然没有放弃希望,依然试图继续建立tcp 连接,如果成功,状态依然可以转为opensent 状态 2.如果依然失败,bgp会停留在active 状态 3.如果重传计时器超时,依然没有收到邻居回应,bgp设备会心灰意冷的返回上一个状态,上一个是connect 状态 |
| opensent(哦盆森特) | 报文已发送状态,已向邻居发送 oepn 报文 | 1.如果bgp设备给邻居发送open报文后,如果收到来自邻居的回复,并且回复的报文是正确的,bgp 设备会继续发送报文,发送什么报文呢? 发送keep alive 报文,状态转为 open comfirm 状态 2.如果bgp设备给邻居发送open报文后,如果收到来自邻居的回复,但是回复的报文有错误,bgp 设备会向邻居发送notification 报文(用于断开bgp连接状态),断开后会跳转到最初的idle 状态 |
| open confirm(哦盆 肯佛木) | open 报文确认状态 | 1.如果收到邻居发来的keep alive 报文,状态会转为established 建立状态 2.如果收到邻居发来的notification 报文,状态会跳转为 idle 状态 |
| established(意思他不历史 d) | 连接已建立状态 | 1.如果收到邻居发来的正确的update 报文或者keepalive 报文,bgp就会认为邻居是正常的 2.如果收到邻居发来的错误的update 报文或者keepalive 报文,bgp设备会发送notification 报文,通知邻居,我们分手把,不做邻居了,会回到idle 初始化状态 |
在BGP中,通过network 或者import-route 宣告,将通告 IGP 学习到的路由信息,宣告进进入到BGP的数据库,然后在 BGP 邻居之间进行传递
BGP协议中的network 命令和之前在OSPF协议中的network命令不太一样,因为在BGP 协议中,network 后面跟的是与路由表中完全精确匹配的路由条目和掩码,不是反掩码,并且这种路由的类型,可以是任何类型。
bgp 400. //进入 AS 400
NETWORK 192.168.14.0 24 //将路由宣告入 BGP 协议
但是,当 AS 中的路由条目多的时候(成千上万条路由),逐条宣告太浪费时间
bgp 400
import-route direct|static|ospf|rip|...// 将通告某种 IGP 学习到的路由,统一进行宣告
/image/image_vku5azajro.png)
| status codes: | * | 该路由是有效的,能用 |
|---|---|---|
| > | 该路由是最优秀的,自己能用,别人也能用 | |
| Origin:表示的是一个BGP路由的起源属性,主要用来定义路径信息的来源,标记一条路由是怎么成为BGP路由的 | I | IGP,具有最高的优先级。通过network命令注入到BGP路由表的路由,其Origin属性为IGP。 |
| E | 优先级次之,通过EGP得到的路由信息,其Origin属性为EGP。 | |
| ? | 优先级最低。通过其他方式学习到的路由信息。比如BGP通过import-route命令引入的路由,其Origin属性为Incomplete | |
| network | 表示路由的网段和掩码 | |
| nexthop | 表示 BGP 路由的下一跳地址,如果是 0.0.0.0 代表该路由是自己产生的 | |
| MED | 路由度量值,表示去往一个 BGP 路由的距离 | |
| locPrf | 本地优先级,表示路由器的 BGP 本地优先级 | |
| PrefVal | 协议首选值,表示的是一个 BGP 路由的优选值,最高的路由 | |
| Path/Ogn | Path 代表一个 BGP 路由的 AS Path 属性,该属性顺序的记录了一个 BGP 路由从始发地到目的地经过了哪个几个 AS 编号 |
在学习 BGP 数据库时,最关注的就是路由前面的'>',一旦有这个标识符,代表该 BGP 路由是最好的,尝试放入自己的 BGP 路由表,尝试通告给自己的 BGP 邻居。
BGP 通告原则一:仅将自己最优的路由发布给邻居
BGP 通告原则二:通告 EBGP 获得的最优路由,发布给所有 BGP 邻居
BGP 通告原则三:通告 IBGP 获得的最优路由,不会发布给其他的 IBGP 邻居(IBGP的水平分割)
BGP 通告原则四:BGP 于 IGP 同步(华为路由器上默认是关闭同步检查的)也就是说,一个BGP路由器在宣告(通告)一条路由到外部网络之前,必须确保这条路由在内部网络(通过IGP)是可达的。
一台路由器从 IBGP 邻居那里学习到的路由,不会再传递给自己的 IBGP 邻居,可以防止路由环路
/image/image_sr4asnn1nr.png)
那怎么解决路由传递的问题呢?
1.IBGP 全互连(每一个运行 BGP 协议的路由器,都互相建立邻居)
全互联要建立多少邻居关系呢?
n(n-1)/2
5(4)/2=10
IBGP 全互联需要建立邻居系数量太多太麻烦了,而且会增加设备的资源消耗。
—怎么减少邻居关系?
将一个大的 AS 系统,划分成多分小的 AS 系统。
联盟 AS:和外部建立邻居的时候,使用共有的 AS 号,对外,联盟 AS 是一个独立的 AS 号
子 AS:一个联盟 AS 内部,可以包含多个子 AS,子 AS 之间是 EBGP 邻居关系,子 AS 内部是全互联的 IBGP 邻居关系。
/image/image_3hekvoa-jg.png)
BGP 联盟,降低了 AS 内部网络设备的 CPU 负担,适用于大型网络规模。
需求:
1.AS200 内使用 BGP 联盟,减少 IBGP 互连的数量。
2.R1 的 10.10.1.1 可以 ping 同 R7 的 10.10.7.7
/image/image_vwppbrq-iq.png)
[R4]bgp 64512 //进入子AS —相当于部落
[R4-bgp]confederation id 200 //声明子AS 所属的 联盟 即 公有AS
[R4-bgp]confederation peer-as 64513 // 声明 子AS 之间的 邻居关系 (联盟内部的EBGP 专属)
[R4-bgp]peer 192.168.45. 2 as-number 64513 // 子AS 之间 使用物理接口建立 内部 的 EBGP 邻居关
[R4-bgp]peer 10.10.2.2 as-number 64512
[R4-bgp]peer 10.10.2.2 connect-interface LoopBack 0
[R4-bgp]peer 10.10.2.2 next-hop-local
[R4-bgp]peer 10.10.3.3 as-number 64512
[R4-bgp]peer 10.10.3.3 connect-interface LoopBack 0
[R4-bgp]peer 10.10.3.3 next-hop-local
[R5]bgp 64513 //进入子AS —相当于部落
[R5-bgp]confederation id 200 //声明子AS 所属的 联盟 即 公有AS
[R5-bgp]confederation peer-as 64512 // 声明 子AS 之间的 邻居关系 (联盟内部的EBGP 专属)
[R5-bgp]peer 192.168.45. 1 as-number 64512 // 子AS 之间 使用物理接口建立 内部 的 EBGP 邻居关
[R5-bgp]peer 10.10.6.6 as-number 64513
[R5-bgp]peer 10.10.6.6 connect-interface LoopBack 0
[R6-bgp]peer 10.10.6.6 next-hop-local
传递路由的时候,会默认修改下一跳地址,将下一跳地址修改为了自己接口的 IP 地址(与对方建立邻居关系时,使用的 接口IP 地址),方便对方使用
传递路由的时候,不会修改下一跳地址。导致IBGP 邻居即使接收到BGP 路由,也不可用。
我们发现,EBGP 总是很让人放心,但是 IBGP 确已经遇到了两个问题:邻居无法建立,路由无法同步。
1.由于 IBGP 邻居关系是以 loopback 口建立的,所以需要手动更改更新源地址为 loopback 口
peer 10.10.2.1 connect-interface LoopBack0 //解决邻居无法建立的命令
2.由于 IBGP 传递路由时,不会修改下一跳地址,导致路由不可用。所以需要手动更改路由的下一跳地址
peer 10.10.2.1 next-hop-local //解决数据库(路由信息)无法同步的问题
需求:AR10能和区域 AS100 内的所有设备进行通讯(BGP)
/image/image_weepl-szes.png)
1.按照要求配置 IP 地址、loopback 接口地址。AS100 内的网段使用 ospf 互通(禁止宣告 EBGP 网段)
2.建立 EBGP 邻居关系
3.建立 IBGP全互联
4.全互联后,即通讯
R10(EBGP 邻居建立)
BGP 200
peer 192.168.1.2 as-number 100. //建立 EBGP 邻居,使用物理接口
network 10.10.10.10 24 //将想要通告的路由,引入到 BGP 当中
R20(EBGP 邻居建立)
BGP 300
peer 192.168.4.2 as-number 100. //建立 EBGP 邻居,使用物理接口
network 20.20.20.20 24 //将想要通告的路由,引入到 BGP 当中
R1(EBGP 邻居建立)
BGP 100
peer 192.168.1.1 as-number 200. //建立 EBGP 邻居,使用物理接口
R3(EBGP 邻居建立)
BGP 100
peer 192.168.4.1 as-number 300. //建立 EBGP 邻居,使用物理接口
R1(IBGP 全互联)
BGP 100
peer 23.23.23.23 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 23.23.23.23 connect-interface loopback 0. //更改更新源地址
peer 23.23.23.23 next-hop-local //修改传递路由的下一跳地址(IBGP)
peer 34.34.34.34 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 34.34.34.34 connect-interface loopback 0. //更改更新源地址
peer 34.34.34.34 next-hop-local //修改传递路由的下一跳地址(IBGP)
R2(IBGP 全互连)
BGP 100
peer 12.12.12.12 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 12.12.12.12 connect-interface loopback 0. //更改更新源地址
peer 12.12.12.12 next-hop-local //修改传递路由的下一跳地址(IBGP)
peer 34.34.34.34 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 34.34.34.34 connect-interface loopback 0. //更改更新源地址
peer 34.34.34.34 next-hop-local //修改传递路由的下一跳地址(IBGP)
R3(IBGP 全互联)
BGP 100
peer 23.23.23.23 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 23.23.23.23 connect-interface loopback 0. //更改更新源地址
peer 23.23.23.23 next-hop-local //修改传递路由的下一跳地址(IBGP)
peer 12.12.12.12 as-number 100. //建立 IBGP 邻居,使用逻辑接口
peer 12.12.12.12 connect-interface loopback 0. //更改更新源地址
peer 12.12.12.12 next-hop-local //修改传递路由的下一跳地址(IBGP)
R1(将 AS100 内的IGP 路由通告进 BGP 里)
BGP 100
import-route ospf 1
完成以上操作后,AS200 即可于 AS100 进行互通