HCIP(BGP基础)

一、BGP 基础概念

1. 网络分类与协议定位
  • IGP(内部网关协议):用于自治系统(AS)内部路由,如 RIP、OSPF、EIGRP,关注选路效率、收敛速度和资源占用。
  • EGP(外部网关协议):用于 AS 之间的路由传递,BGP 是主流 EGP 协议,负责跨 AS 路由信息交换。
2. 自治系统(AS)
  • 定义:由单一组织管理的网络(含设备),通过AS 号唯一标识。
  • 编号规则
    • 传统 16 位 AS 号范围:0-65535(如中国骨干网 AS 号为 4134)。
    • 扩展 32 位 AS 号:解决 16 位 AS 号耗尽问题,由 IANA 管理。
3. BGP 版本特性
  • BGPv4:传递 IPv4 路由,是最常用版本。
  • BGPv4+:支持 IPv6 等多网络环境,适应复杂拓扑。

二、BGP 协议核心特性

1. 路由协议类型
  • 路径矢量路由协议:以 AS 为单位传递路由,下一跳为发送设备,不依赖算法计算路径,仅传递路由表中已存在的路由。
  • 无类别路由协议:路由条目携带子网掩码,支持 CIDR(无类域间路由)。
2. 可靠性与可控性
  • 可靠性
    • 基于 TCP(端口 179)传输,通过确认机制保证报文可靠交付,无需周期更新。
    • 唯一使用 TCP 的路由协议,其他 IGP 多基于 UDP 或跨层封装(如 OSPF)。
  • 可控性:通过路径属性(如 AS_PATH、本地优先级 LP、MED 等)干预选路,解决 AS 间路由冗余和策略控制问题。

三、BGP 对等体(邻居)机制

 

1. 对等体类型与建邻规则
  • EBGP 对等体
    • 位于不同 AS,需直连建立(默认 TTL=1,仅一跳),路由传递时携带 AS_PATH 防环。
    • 例:AS100 与 AS200 的边界设备通过直连接口建立 EBGP 邻居。
  • IBGP 对等体
    • 同一 AS 内,支持非直连建邻(TTL=255),推荐使用环回接口(LoopBack)建立逻辑连接,需确保 IGP 可达。
    • 例:AS 内部设备通过环回接口 IP 建立 IBGP 邻居,需配置connect-interface指定更新源。
2. 建邻过程与状态机
  1. TCP 连接建立
    • 双方发起 TCP 三次握手,建立两个连接,最终保留 Router ID 较小者发起的连接(Router ID 生成规则与 OSPF 一致,需唯一)。
  2. Open 报文协商
    • 携带版本、AS 号、保活时间(默认 180 秒,协商取最小值)、Router ID 等参数,AS 号不一致会导致建邻失败。
  3. Keepalive 确认与保活
    • 周期发送 Keepalive 报文(默认 60 秒),确认参数协商成功并维持连接活性。

四、BGP 报文类型与功能

报文类型功能描述关键字段 / 特性发送时刻
Open协商建邻参数,建立对等体关系版本、AS 号、保活时间、Router ID、可选参数(认证、路由刷新)BGP TCP连接建立成功之后
Update发布路由更新(新增 / 撤销路由),携带路径属性和可达网络信息撤销路由列表、路径属性(AS_PATH、MED 等)、NLRI(网络层可达信息)BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文
Keepalive确认 Open 参数,周期保活(默认 60 秒),维持对等体连接无有效负载,仅公共头部当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体
Notification报告错误(如参数不匹配、路由无效),终止对等体关系错误代码、子代码、错误数据BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接
Route-refresh请求对等体重新发送路由(需双方支持路由刷新功能)用于策略变更后同步路由,减少人工干预当路由策略发生变化时,触发请求对等体重新
通告路由

 open报文---建立BGP对等体

update报文--更新报文用来承载BGP路由信息的报文

公共头部格式

  • Marker(16 字节):用于认证(若启用),通常为全 0 或特定值。
  • Length(2 字节):报文总长度(含头部)。
  • Type(1 字节):标识报文类型(1-5 分别对应 Open 到 Route-refresh)。

五、BGP 工作流程与状态机

1. 状态机阶段与迁移

BGP 建邻通过 6 种状态机实现:

Peer状态名称用途
Idle开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的资源
Connect正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Active状态,反复尝试连接
ActiveTCP连接没建立成功,反复尝试TCP连接
OpenSentTCP连接已经建立成功,开始发送Open包,Open包携带参数协商对等体的建立
OpenConfirm参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包
Established已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息

Idle--空闲状态:在指定建立对等体对象时,监测设备是否存在路由,如果存在那么进入下一 个状态并准备建立三次握手,如果没有路由,那么停留在idle状态

 

2. 完整工作流程
  1. 路由可达性:依赖 IGP(如 OSPF、静态路由)确保 BGP 设备间 IP 连通,为 TCP 连接建立的前提。
  2. 对等体建立:通过 TCP 三次握手和 Open/Keepalive 报文完成参数协商,生成邻居表。
  3. 路由交换
    • 使用 Update 报文传递路由,携带 AS_PATH、MED 等属性,存储于 BGP 路由表。
    • 仅传递最优路由(默认无负载均衡),路由表中标记 “>” 为优选路由。
  4. 选路与安装:根据路径属性筛选最优路由,加载到全局路由表(需下一跳可达)。
  5. 连接维护:周期发送 Keepalive(默认 60 秒);路由变化时触发 Update,故障时发送 Notification 终止连接。

六、路由黑洞与防环机制

1. 路由黑洞问题与解决方案
  • 问题本质:AS 内部非 BGP 设备无路由,导致控制平面可达但数据平面不可达(如 IGP 与 BGP 路由不一致)。
  • 解决方案
    1. 全互联 IBGP:AS 内所有设备两两建立 IBGP 邻居(适用于小规模 AS)。
    2. 路由反射器(RR):通过反射器减少邻居数量,Client 与非客户机制优化路由传递(反射规则:Client→全反射,非客户→仅反射给 Client)。
    3. MPLS(多协议标签交换):通过标签转发绕过 IGP 路由缺失问题。
    4. 重发布 IGP 到 BGP:将 AS 内路由注入 BGP,但需结合路由策略过滤无关路由。
2. 防环机制
  • EBGP 防环
    • AS_PATH 属性:路由每经过一个 AS,其 AS 号添加到路径列表,接收方若发现本地 AS 号在列表中则拒绝路由(核心防环手段)。
  • IBGP 防环
    • 水平分割原则:从 IBGP 邻居学到的路由不转发给其他 IBGP 邻居。
    • 路由反射器辅助防环:通过Originator ID(反射源 RID)和Cluster List(反射器 RID 列表)避免环路。
    • 联邦防环:将大 AS 划分为小联邦 AS(私有 AS 号 64512-65535),内部使用 EBGP 规则防环,外部统一为公共 AS 号。

七、路由发布与聚合

1. 路由发布方式
  • Network 命令
    • 精确发布路由表中存在的网段(需掩码完全匹配),Origin 属性为 “i”(IGP)。
    • 例:[r1-bgp] network 1.1.1.0 24 发布直连路由,要求路由表中存在该精确路由。
  • 重分布(Import-route)
    • 引入 IGP 路由(如 OSPF)到 BGP,Origin 属性为 “?”(Incomplete),需结合路由策略(如 IP 前缀列表、Route-policy)过滤。
    • 例:[r2-bgp] import-route ospf 1 route-policy filter 引入 OSPF 路由并过滤非目标网段。
2. 路由聚合
  • 自动聚合
    • 仅对重分布路由有效,聚合成主类网络(如 192.168.0.0/16),生成空接口路由防环,但灵活性低,易产生黑洞路由,默认不推荐。
  • 手工聚合
    • 自定义聚合网段和掩码,支持抑制明细路由(detail-suppressed)和保留 AS_PATH(as-set)。
    • 例:[r1-bgp] aggregate 172.16.0.0 22 detail-suppressed as-set 聚合路由并抑制明细,保留 AS 路径防止环路。

八、路径属性与选路规则

1. 关键路径属性详解
属性名称类型传递范围选路逻辑典型应用场景
Preferred-Value(PV)本地属性不传递值越大越优(华为私有,仅影响本地选路)单设备多路径选路策略
Local Preference(LP)公认强制IBGP 内传递值越大越优(AS 内出口策略控制)AS 内统一路由出口优先级
MED(多出口鉴别)可选非过渡EBGP 间传递值越小越优(影响相邻 AS 选路)控制相邻 AS 进入本 AS 的路径
AS_PATH公认强制所有对等体路径越短越优,防环核心属性选路时优先选择 AS 跳数少的路径
Origin公认强制所有对等体优先级:i(IGP)> e(EGP)> ?(Incomplete)路由来源可信度判断
2. 选路规则优先级(自上而下)
  1. 丢弃下一跳不可达的路由:BGP 路由表中 “* valid” 表示可用,下一跳不可达则无效。
  2. 比较 PV 值:华为设备本地属性,值大优先(如[r4-bgp] peer 3.3.3.3 preferred-value 100)。
  3. 比较 LP 值:AS 内统一策略,值大优先(如[r3-bgp] default local-preference 200全局设置)。
  4. 本地始发路由优先:优先级顺序为手工聚合 > 自动聚合 > Network > 重分布。
  5. AS_PATH 最短优先:通过策略添加 AS 号(如apply as-path 123 additive)延长路径,引导选路。
  6. Origin 类型优先:i > e > ?,可通过策略修改(如apply origin igp将路由来源标记为 IGP)。
  7. MED 值最小优先:仅在相同 AS 的 EBGP 邻居间比较,跨 AS 比较需配置compare-different-as-med
  8. EBGP 路由优先于 IBGP:相同路由来源时,EBGP 路由优先级更高。
  9. IGP 度量值最小优先:到下一跳的 IGP 路径开销越小越优(如 OSPF Cost)。
  10. Cluster List 最短优先:路由反射器环境中,簇列表越短越优,避免环路。
  11. Router ID 或对等体 IP 较小者优先:当所有属性相同时,取设备标识较小者。

起源者ID--在一个AS内部反射路由的源头设备的RID--当设备产生反射路由时如果没有起源者ID 那么将添加该属性,如果反射器反射路由时该路由已经存在起源者ID那么将仅反射

簇列表--AS_path---每经过一个反射器的反射均会添加该反射器的RID(簇ID)到簇列表中,之 后设备一旦收到一条IBGP路由时,如果路由携带的簇ID和自身设备的簇ID一致,那么将拒绝 学习该路由

九、BGP 基础配置示例

1. 启动 BGP 与基本参数配置
[r1] bgp 100          # 启动BGP,指定AS号为100  
[r1-bgp] router-id 1.1.1.1  # 配置Router ID(需全局唯一)  
2. 建立 EBGP 对等体(直连)
[r1-bgp] peer 12.0.0.2 as-number 200  # 对端IP为12.0.0.2,AS号为200  
3. 建立 IBGP 对等体(环回接口,非直连)
[r3-bgp] peer 4.4.4.4 as-number 100    # 对端Router ID为4.4.4.4,同属AS100  
[r3-bgp] peer 4.4.4.4 connect-interface LoopBack0  # 指定更新源为环回接口  
[r3-bgp] peer 4.4.4.4 ebgp-max-hop 255  # 允许非直连建邻(默认TTL=1,需调整)  
4. 发布路由与策略配置
  • Network 发布精确路由
    [r1-bgp] network 1.1.1.0 24  # 发布路由表中存在的1.1.1.0/24网段  
    
  • 重分布 IGP 路由并过滤
    [r2] ip ip-prefix filter permit 3.3.3.0/24  # 抓取目标网段  
    [r2] route-policy filter permit node 10     # 创建路由策略  
    [r2-route-policy] if-match ip-prefix filter  # 匹配目标网段  
    [r2-bgp] import-route ospf 1 route-policy filter  # 引入OSPF路由并应用策略  
    
5. 路由反射器(RR)配置
[r3-bgp] peer 2.2.2.2 reflect-client  # 将2.2.2.2设为客户端,允许反射路由  
6. 联邦(Confederation)配置
[r2] bgp 64512          # 启动联邦内AS号(私有AS号)  
[r2-bgp] confederation id 2  # 声明所属公共AS号为2  
[r2-bgp] peer 3.3.3.3 as-number 64512  # 联邦内IBGP邻居使用私有AS号建邻  

十、常见问题与解决方案

  1. 下一跳不可达
    • 原因:IBGP 环境中,路由下一跳为对端环回接口 IP,若 IGP 未通告该路由则不可达。
    • 解决:配置[r2-bgp] peer 3.3.3.3 next-hop-local,将下一跳修改为本地接口 IP。
  2. IBGP 全互联规模问题
    • 原因:AS 内设备较多时,全互联邻居数量呈平方级增长(N*(N-1)/2)。
    • 解决:引入路由反射器(RR)或联邦,减少邻居数量,优化拓扑。
  3. 聚合路由环路
    • 原因:手工聚合未保留 AS_PATH,导致路由环路风险。
    • 解决:聚合时添加as-set参数(如aggregate ... as-set),继承明细路由的 AS 路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HarmonyOS 5】 ArkUI-X开发中的常见问题及解决方案

一、跨平台编译与适配问题 1. 平台特定API不兼容 ‌问题现象‌:使用Router模块的replaceUrl或startAbility等鸿蒙专属API时,编译跨平台工程报错cant support crossplatform application。 ‌解决方案‌: 改用ohos.router的跨平台封装API&a…

Matlab2018a---安装教程

目录 壹 | 引 言 贰 | 安装环境 叁 | 安 装 肆 | 结 语 壹 | 引 言 大家好,我是子正。 最近想学习一下DSP数字信号处理有关的知识,要用到Matlab进行数据处理,于是又重新把Matlab捡了回来; 记得上学那会儿用的还是Matlab2012a&#xff…

分布式流处理与消息传递——Kafka ISR(In-Sync Replicas)算法深度解析

Java Kafka ISR(In-Sync Replicas)算法深度解析 一、ISR核心原理 #mermaid-svg-OQtnaUGNQ9PMgbW0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OQtnaUGNQ9PMgbW0 .error-icon{fill:#55222…

ARM GIC V3概述

中断类型 locality- specific peripheral interrupt(LPI):LPI是一个有针对性的外设中断,通过affinity路由到特定的PE。 为非安全group1中断边沿触发可以通过its进行路由没有active状态,所以不需要明确的停用操作LPI总…

蓝桥杯国赛训练 day1

目录 k倍区间 舞狮 交换瓶子 k倍区间 取模后算组合数就行 import java.util.HashMap; import java.util.Map; import java.util.Scanner;public class Main {static Scanner sc new Scanner(System.in);public static void main(String[] args) {solve();}public static vo…

安装和配置 Nginx 和 Mysql —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录6

前言 昨天更新了四篇博客,我们顺利的 安装了 ubuntu server 服务器,并且配置好了 ssh 免密登录服务器,安装好了 服务器常用软件安装, 配置好了 zsh 和 vim 以及 通过 NVM 安装好Nodejs,还有PNPM包管理工具 。 作为服务器的运行…

鸿蒙版Taro 搭建开发环境

鸿蒙版Taro 搭建开发环境 一、配置鸿蒙环境 下载安装 DevEco 建议使用最新版本的 IDE,当前为 5.0.5Release 版本。 二、创建鸿蒙项目 打开 DevEco,点击右上角的 Create Project,在 Application 处选择 Empty Ability,点击 Ne…

Could not get unknown property ‘mUser‘ for Credentials [username: null]

最近遇到jekins打包报错: Could not get unknown property mUser for Credentials [username: null] of type org.gradle.internal.credentials.DefaultPasswordCredentials_Decorated。 项目使用的是gradle,通过pipeline打docker包;因为ma…

Spring Boot + MyBatis-Plus 读写分离与多 Slave 负载均衡示例

Spring Boot + MyBatis-Plus 读写分离与多 Slave 负载均衡示例 一、项目结构 src/main/java/com/example/demo/ ├── config/ │ ├── DataSourceConfig.java # 数据源配置 │ ├── MyBatisPlusConfig.java # MyBatis-Plus配置 ├── constant/ │…

android binder(1)基本原理

一、IPC 进程间通信(IPC,Inter-Process Communication)机制,用于解决不同进程间的数据交互问题。 不同进程之间用户地址空间的变量和函数是不能相互访问的,但是不同进程的内核地址空间是相同和共享的,我们可…

高密爆炸警钟长鸣:AI为化工安全戴上“智能护盾”

一、高密爆炸:一声巨响,撕开化工安全“伤疤” 2025年5月27日,山东高密友道化学有限公司的车间爆炸声,像一把利刃划破了化工行业的平静。剧烈的冲击波将车间夷为平地,黑色蘑菇云腾空而起,刺鼻的化学气味弥漫…

双擎驱动:华为云数字人与DeepSeek大模型的智能交互升级方案

一、技术融合概述 华为云数字人 华为云数字人,全称:数字内容生产线 MetaStudio。数字内容生产线,提供数字人视频制作、视频直播、智能交互、企业代言等多种服务能力,使能千行百业降本增效。另外,数字内容生产线&#…

Linux运维笔记:1010实验室电脑资源规范使用指南

文章目录 一. 检查资源使用情况,避免冲突1. 检查在线用户2. 检查 CPU 使用情况3. 检查 GPU 使用情况4. 协作建议 二. 备份重要文件和数据三. 定期清理硬盘空间四. 退出 ThinLinc 时注销,释放内存五. 校外使用时配置 VPN注意事项 总结 实验室的电脑配备了…

手机邮箱APP操作

收发电子邮件方式 邮箱可以在网络段登录,也可以在手机端登录。 大学网络服务 收发电子邮件有三种方式: 1、Web方式: 1)登录“网络服务”(https://its.pku.edu.cn),点页面顶端“邮箱”。 2&…

Dockerfile 使用多阶段构建(build 阶段 → release 阶段)后端配置

错误Dockerfile配置示例: FROM python:3.11 as buildENV http_proxyhttp://172.17.0.1:7890 ENV https_proxyhttp://172.17.0.1:7890WORKDIR /appENV PYTHONPATH/app# Install Poetry # RUN curl -sSL https://install.python-poetry.org | POETRY_HOME/opt/poetry…

webstrom中git插件勾选提交部分文件时却出现提交全部问题怎么解决

原因是我有个.husky的文件制定了执行提交的时候就是提交所有的文件 修改.husky/pre-commit文件就可以啦 #!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh"# 获取通过 WebStorm 提交的暂存文件(仅勾选的部分) STAGED_FILES$(gi…

OSG编译wasm尝试

最近遇到一个情况,需要尝试一下OSG到webassembly 发现官网有教程 于是顺着看了看,默认教程是xubuntu的一个系统跑的,但是我本着试一试的想法,拉下来直接在windows上跑,奇奇怪怪的报错简直头皮发麻 然后怎么办呢&#x…

QT中子线程触发主线程弹窗并阻塞等待用户响应-传统信号槽实现

目录 QT中子线程触发主线程弹窗并阻塞等待用户响应传统信号槽实现实现思路具体步骤1. 定义信号与槽2. 异步任务中触发弹窗3. 主线程处理弹窗4. 连接信号与槽关键点总结 更简单实现 QT中子线程触发主线程弹窗并阻塞等待用户响应 传统信号槽实现 场景需求:在子线程执…

STM32学习之WWDG(原理+实操)

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

【端午安康】龙舟争渡Plug-In

文章目录 正文附录A:关于Python的录屏方法总结(来自DeepSeek的回答)1. 使用 pyautogui 和 OpenCV 录制屏幕2. 使用 mss 库(高效屏幕捕获)3. 使用 PIL.ImageGrab 录制屏幕4. 使用 Windows 原生快捷键录制(非…