网工-BGP协议全面学习笔记(待更新和完善...)

server/2025/1/15 21:44:56/

作者:BSXY_19计科_陈永跃
BSXY_信息学院
注:未经允许禁止转发任何内容

网工-BGP协议全面学习笔记

    • 1、OSPF基础
    • 2、BGP报文
    • 3、BGP案例
    • 4、BGP属性
    • 待更新和完善...

1、OSPF基础

在EGP协议中,引入了AS(Autonomous System,自治系统)的概念。AS是指由同一个技术管理机构管理,使用统一选路策略的一些路由器的集合。
AS的内部使用IGP来计算和发现路由,同一个AS内部的路由器之间是相互信任的因此IGP的路由计算和信息泛洪完全处于开放状态,人工干预很少。
不同AS之间的连接需求推动了外部网关协议的发展,BGP作为一种外部网关协议用于在AS之间进行路由控制和优选。

首先大类上的路由协议分为蓝色字体IGP(内部网关协议)和EGP(外部网关协议)

  • 在外部网关协议里面才真正有AS(Autonomous System)的概念,也就是说只有EGP的路由协议才和AS真正打交道。IGP不牵扯到AS的概念,因为他们都是在一个AS内,所以不用关系到底在那个AS内
  • AS是属于一个管理机构(运营商,互联网公司)下的,使用统一的选路策略的一些路由器的集合
  • AS的内部使用IGP来计算和发现路由,同一个AS内部的路由器之间是互相信任的,因为你要想,一个AS 内,我们运行OSPF或IS-IS都是一个企业内部或者园区网。因此IGP的路由计算和信息泛洪完全处于放状 态,人工干预很少(通是主要目的,大部分企业的内部网络路由选路也不会很复杂)
  • BGP是一个AS下可以进行跨地域的,并且不同AS之间如何传递路由,例如三大运营商,他们的路由必须是 互通的,不然电信的网只能访问电信的服务,这不是扯吗,因此呢,牵扯到一个大规模的非常巨型的网络。这是需要非常复杂的选路策略和路由特性才能满足这些需求
    在这里插入图片描述

BGP的基本作用

  • AS内部使用IGP来计算和发现路由,如OSPF,ISIS,RIP
  • AS之间使用BGP来传递和控制路由(一个AS内是有大量的路由,因此,必须在AS之间运行一个能够支 撑大量路由,并且控制选路的技术)
    在这里插入图片描述
  • 不同的AS内有企业,运营商。只不过在一个AS内,有很多企业。可能也很复杂,但一个AS是要把AS内所有公网路由汇总传递出去给其他AS
    在这里插入图片描述

AS自治系统

  • 在internet中,AS是指在一个实体管辖下的拥有相同选路策略的IP网络
  • AS号范围:
AS号的类别2字节AS号4字节AS号
公用AS号1-645111-64511,65536-4294967295
私有AS号64512-655344200000000–4294967294
  • 为什么有私有AS,这是为了联盟技术。专门给联盟使用
  • 国内较有名的AS号:中国电信163(4134),中国电信CN2(4809),中国网通(9929)
  • AS号同时在BGP中还有关键性的作用:最佳路由选举,避免环路,路由过滤
    在这里插入图片描述

BGP版本

  • 早期发布的三个版本分别为BGP-1(RFC1105),BGP-2(RFC1163)和BGP-3(RFC1267)。在1994 年开始使用BGP-4(RFC1771),2006年后单播IPv4网络使用的版本是BGP-4(RFC4271),其他网络,如IPv6,组播等使用的版本是MP-BGP(RFC4760)
  • MP-BGP是对BGP-4进行了扩展,来达到在不同网络中应用的目的,BGP-4原有的消息机制和路由机制并 没有改变
  • MP-BGP在IPv6单播网络上应用称之为BGP4+,在IPv4组播网络上应用称为MBGP(Multicast BGP)

BGP特点

  • 采用认证和GTSM的方式,保证了网络的安全性
  • 提供了丰富的路由属性,能够进行灵活的路由选路
  • 提供了路由聚合(自动&手动)和路由衰减功能用于防止路由震荡(惩罚机制),有效提高网络的稳定性
  • 使用TCP端口号=179(TCP原生就是可靠的),并支持与BFD联动,BGPTraking,BGP GR和NSR,提高网络的可靠性
  • 邻居数目多,路由量大且大部分邻居具有相同出口策略的场景下,使用按组打包技术极大的提高了打包发包性能(批量功能)
  • 增量式增加或减少),触发式有变化发更新BGP承载的路由太多了,所以没有周期性更新
  • BGP的下一跳永远只有一个。(多个下一跳中比较,永远默认只选一个,13条选路规则死活会比出一个。 可以手动改)

使用与不使用BGP的原因
使用BGP的理由:

  • 大量的路由需要承载,IGP只能容纳千条,而BGP可以容纳上万甚至几十万
  • 支持MPLS/VPN的应用(ISP主流VPN技术)。传递客户VPN路由
  • 策略能力强,可以很好的实现路由决策与数据控制。(BGP有很多路由属性,所以可以用很多策略来 进行调整)

什么情况下尽量不要使用BGP:

  • 设备不够强
  • 中小型企业没有必要
  • 管理员本身能力不足时,特别是对路由策略理解不透彻
    在这里插入图片描述
命令备注
Peer ip connect-interface int配置指定更新源
Peer ip ebgp-max-hop n配置eBGP的TTL,缺省=1
  • PS:建立eBGP邻居关系时,推荐使用直连接口IP地址
  • PS:建立iBGP邻居关系时,推荐使用环回口IP地址
    在这里插入图片描述

BGP身份验证

  • 启用验证后,会在所有数据报文内启用
  • 加密后,具体是在TCP的Options字段实现加密
命令备注
peer ip psaaword cipher n配置身份验证,采用加密方式

2、BGP报文

BGP报文结构和类型

  • BGP所有报文都封装在TCP后面,以单播形式发送的。(单播才可靠)(保证身份正确)
  • BGP有5种数据包类型,和OSPF差不多,BGP数据包也分头部(header)数据包类型(packet)
BGP头部备注
Marker固定的值,32个大B的F
LengthBGP数据包长度
TypeBGP数据包类型
BGP数据包类型备注
Open类似Hello包,包含关键参数(RID,AS,版本,超时时间,支持的功能)用于建立 邻居关系。三次握手后发送,只发一次
Update路由更新,包含丰富的路由属性
Notification当检测到错误,发送后关闭BGP连接(说白了就是配置出错,BGP发起关闭三次握手)
Keepalive类似Hello包,用于维护邻居关系会话,默认发送周期60s。保持时间180s,最少三倍 的时间间隔
Route-refresh当路由策略发送变化时,触发请求邻居重新通告路由(主动行为)
可以通过手动请求操作,让邻居把路由更新重新发送,分为im/export方向。
import:向邻居请求路由刷新
export:给邻居发送路由更新

BGP状态

类型备注
Idle初始,路由器查找路由表,是否有到达邻居的路由。《重置,问题错误时,也会回到idle状态。
Connect发起TCP连接,等待TCP连接完成。《成功则发送Open数据包
ActiveTCP连接失败,继续尝试TCP连接
Open SentTCP连接成功,以发送Open数据包
Open Confirm以收到邻居正确的Open数据包。《这个时候就叫Open confirm》如果没有收到,会进入active。收到错误进入idle
Established收到Keeplive后,邻居建立完成,开始传递路由

BGP正常会话建立流程图:

  • 初始状态都是idle,当我们查找到路由后,b第一次TCP握手发送出去后,会进入connect,a收到TCP报文后回复确认时,同样进入connect,这个状态是转瞬即逝,正常情况下三次握手成功后进入open sent状态。如果失败就进入active
  • b向a出第一个open包,这证明了两件事,第一个就是三次握手成功。第二个就是B进入了open sent状态。同样a三次握手完成后,同样给b发送了open包,然后进入open sent状态。同时a收到b的open包, 进入open confirm状态,b收到a的open包,也同样进入open confirm状态。(前提是open包参数是没有问题的)
  • a和b同时进入open confirm状态后,互相发送keeplive包,互相收到后,进入established。成功建立BGP会话,邻居正式建立,可以开始传递路由
  • 正常BGP邻居建立完成后,周期性发送keeplive用于保证BGP会话正常。剩下的有update,route-refresh 就正常发送。如果有错误会发送notification,然后终止BGP会话连接
    在这里插入图片描述
    BGP状态交互图:

正常情况

  • Idle-connect(三次握手)-open sent(发送open包)-open confirm(发送keeplive包)-established(邻居建立)

错误情况

  • connect三次握手连接成功,那么进入opensent,失败则进入active。active有重连计时器,connect也有。connect发送握手开始后,重连计时器会开始倒计时,在超时时间前还是没有成功连接,那么会进入active,active 如果也失败了,那么他会不断进行重试(所有的TCP连接失败都会进入active)。但active自己也他重连计时器,在 连续的几次重试连接都失败后,重连计时器时间到了以后,就会回到connect状态
  • connect和active会不断尝试,只要成功就会进入open sent
  • 这边可以理解为三种情况,一种是成功,一种是失败,一种是超时(计时器时间到了)
  • Open confirm也有计时器,计时器用于收到对方keeplive包,如果在超时前没有收到邻居的keeplive包,一样不会进入establis
  • established的计时器用于持续发送keeplive包,如果对端在计时器超时后没有回复,则断开BGP连接
  • Open sent,open confirm,established状态中,发生任何的错误都会回到idle状态
    在这里插入图片描述
    状态图解:
    在这里插入图片描述
    BGP中active故障可能存在的情况:
    在这里插入图片描述
    BGP数据库:
类型备注
BGP邻居表BGP邻居数据库
BGP路由表
(转发数据库)列出从BGP邻居那里获取到的路由及属性
IP路由表列出最佳路由
Adj-RIB-in
(邻居路由信息表-入)
BGP邻居宣告本地的未处理的路由信息库
Adj-RIB-out
(邻居路由信息表-出)
本地宣告指定邻居的路由信息库

BGP路由信息处理过程

  • 一台路由器收到BGP路由发来的更新后,先放在adj-rip-in信息表中(相当于缓存的存储模块)
  • 为什么要放在这里,因为往往BGP会有入方向的路由策略。那么这个时候,我们要把adj-rib-in中的路由经过路由策略的处理后,再经过路径选择,放到本地数据库(BGP路由表),BGP路由表经过选路才会把最优路由放置到IP路由表
  • 要把更新发布给邻居时,会从BGP路由表提取出最优路由。当然会有出方向的策略。经过出方向策略处理,处理完的路由放置到adj-rip-out信息表,最后在发布给邻居
    在这里插入图片描述

3、BGP案例

BGP路由宣告原则

  • BGP协议本身不发现路由(BGP没有发现路由的机制,也没有计算路由的算法。他只是把其他路由协议 引入到自己的路由表)
  • 只有明确宣告的路由才会发布给邻居。(单独的命令去宣告路由,BGP邻居建立和宣告是互相独立的)
  • 宣告的路由必须能精确地在路由表中找到。(在IP路由中能找到精确的路由,掩码要一模一样的路由才能宣告)
  • 多条路径时,只选取最优的给自己使用和发布给邻居。(只有在BGP路由表中的路由,才会发布给邻居和 自己使用,前提此路由是最优的)
  • 从iBGP学到的路由发布给eBGP。(内部会发送给外部)
  • 从eBGP学到的路由发布给所eBGP和iBGP。(外部会发送到内部)
  • 从iBGP学到的路由不会发布给iBGP。(内部不会发送给内部)(防环机制)

路由宣布/引入
宣告方式:

方式备注
Network逐条将IP路由表中已存在的路由引入到BGP路由表中
Import将直连,静态,OSPF,IS-IS,RIP等协议通过import引入到BGP路由中
PS在相同路由宣告情况下,路由表项会存在。但Network优先级大于import。i>?
PSBGP本身没有发现路由机制,都是靠以上两种方法引入

引入配置命令:

命令备注
network IP mask宣告路由,需精确匹配并在路由表中存在
import route-protocol Route-Policy引入其他路由,通常结合路由策略使用
default-route imported允许引入缺省路由,默认不允许
Peer IP default-route-advertise向邻居宣告一条缺省路由,不论本地是否存在
dis BGP routing-table查看BGP路由表

引入案例
Network方式:
在这里插入图片描述
Import方式:
在这里插入图片描述


BGP路由表
在这里插入图片描述

  • 除了Network,剩下的都可以称为属性
  • 在BGP路由表中,标志各种属性说明
  • *:有效的。//没有代表无效的路由
  • “>”:最佳路由。//没有代表不是最佳路由
  • 左i:表示iBGP,没写表示eBGP
  • Network:目标地址
  • Nexthop:下一跳,全0表示自己
  • MED:外部路由保留开销
  • Local-Preference:本地优先级
  • PrefVal:优先值
  • Path/Ogn:路径=经过的AS / 标志:i=network宣告,e=EGP ,?=引入。i>e>?/dz

BGP下一跳

  • BGP在给邻居传递路由时下一跳=更新源
  • 在eBGP之间传递路由时会修改下一跳自己的更新源。(外部路由传递)
  • iBGP之间传递路由时不会修改下一跳为自己的更新源。保留原更新源。(iBGP传递路由时,下一跳本 来是多少就是多少,不会改变,除了是全0,0就是自己,所以写自己为更新源。)
  • iBGP下一跳命令:
命令备注
Peer IP next-hop-local修改下一跳更新源为自己。
PS在iBGP间最好启用,加了不会有问题,不加可能会有问题。百利而无一

BGP下一跳案例

  • eBGP:R5把5/32传递给R6时,5/32的下一跳为R5。R6把5/32再传递到R7,这时候因为是eBGP,所以会把5/32的下一跳修改为R6。R7就能正常访问5/32。

  • iBGP:R7把7/32传递给R6时,7/32的下一跳为R7,R6再把7/32传递给R5,但是由于是iBGP,R6传递给R5时,并不会把下一跳修改成R6自己,而是继续保留R7为下一跳。所以7/32这条路由在R5是不可达,不生效的。
    在这里插入图片描述

  • 为什么要这样子区分?主要目的还是为了防环。但这样的设计往往会导致我们学习到的路由不可用。
    在这里插入图片描述
    特殊现象:

  • 如下图所示,当BGP互联时属于MA网络环境时。b,c,d同处于同个网段。c和d之间是iBGP。b和c是eBGP。

  • 如果c宣告3/32,R2学到的地址为b发布的。但是如果是d发布的4/32呢?这里的情况有点类似OSPF中fa地址。

解决方案:

  • 当c收到d宣告的4/32时,会将该更新发往b,但是c会检测到,目的地址和自己处于同个网段内,所以他会自己把地址修改成d的,然后发送给b。这样子b自己找d就行,所以R2学到的4/32是d的地址。
  • 路由的本质是转发,就是要从一个口收到的数据通过查找路由表,在从另外一个端口转发出去。下图所示情况,就是让d把数据交给c,c交给b。但b可以直接找到d,没必要多转发一下。所以这里BGP协议很聪明,他会自动纠正
    在这里插入图片描述

4、BGP属性

BGP防环机制

场景备注
AS内-iBGP水平分割
AS间-eBGPAS_Path
  • AS内-水平分割:从iBGP学到的路由不会在传递给iBGP邻居,即iBGP路由只传一跳(次)

如下图所示,AS12的路由传递到RTA,RTA传递给RTB和RTC,B和C都不会传递给RTD。这就是水平分割,因为如果传给D,那么两端都传递,是否会造成路由环路,要知道在ISP内,网络环境及其复杂
在这里插入图片描述
所以如果要解决RTD收不到AS12路由的问题,主要有以下几种解决方法:

  • iBGP邻居全互联:配置,维护开销会很大
    在这里插入图片描述
  • 路由反射器(Route-Feflector)
  • 联邦/联盟(Confederation)

AS间-AS_Path
BGP路由内的重要属性,代表该路由所经过的AS号,如果接收路由器发现所包含的AS号和本地AS号一致,则丢弃。此更新只在eBGP发送时才记录,iBGP内不记录

  • AS_Path每经过一个AS,都会将AS号记录下来,当路由器再收到这条路由时,发现和本地AS号重复,则认为该路由重复,进行丢弃。(该原则可以打破,需手动配置)
    在这里插入图片描述
    在这里插入图片描述

BGP路由聚合

  • BGP承载了大量的路由,则更需要汇总。汇总的必要性就是减少了路由器的路由表,这样子路由查找,资源的占用会减少,查找的速度也会更快。我们应该时时刻刻想到汇总技术。
  • 路由聚合解决了两类问题,一是减轻了设备传输和计算路由所需资源的负担。二是隐藏了具体的的路由信息,减少了路由震荡的影响
    在这里插入图片描述

BGP静态聚合
通过配置静态路由汇总明细路由,再用Network进行宣告
在这里插入图片描述


BGP自动聚合

  • 对引入和本地路由进行聚合
  • 手动聚合>自动聚合
命令备注
Aggregate IP Mask
Detail-supperssed
AS-set
配置手动聚合,缺省情况聚合和明细一起发布。
抑制发布明细路由。
保留原有明细路由的AS_Path属性。

在这里插入图片描述


BGP聚合问题

  • 路由聚合后,明细路由的AS_Path属性会丢失,存在产生环路的风险。(AS_Path丢失会导致路由环路)
    在这里插入图片描述
  • 这里需要在聚合时使用AS-set参数,保留AS_Path属性,当BGP路由回传时,BGP路由器看到设备相同的AS_Path属性则会进行丢弃,有效防止路由环路
    在这里插入图片描述
  • PS:如果路由聚合后携带所有明细路由经过的AS信息,当明细路由发生频繁震荡时,聚合路由也可能受到影响频繁刷新。因此,聚合路由是否携带丢失的AS_Path信息,需要设计者综合考虑网络环境

BGP路由属性

待更新和完善…


http://www.ppmy.cn/server/3006.html

相关文章

linux设置程序在开机时自启动

​常见的有三种方式:1、/etc/rc.local文件中添加自启动命令 对于某些没有使用systemd的Linux发行版,可以在/etc/rc.local文件中添加自启动命令。请确保该文件具有可执行权限。例如,在/etc/rc.local文件中添加以下内容: /…

使用go和消息队列优化投票功能

文章目录 1、优化方案与主要实现代码1.1、原系统的技术架构1.2、新系统的技术架构1.3、查看和投票接口实现1.4、数据入库MySQL协程实现1.5、路由配置1.6、启动程序入口实现 2、压测结果2.1、设置Jmeter线程组2.2、Jmeter聚合报告结果,支持11240/秒吞吐量2.3、Jmeter…

文心一言VSchatGPT4

文心一言和GPT-4各有优势,具体表现在不同的测试场景下。 在某些测试场景中心一言的表现优于GPT-4,例如在故事的完整度和情节吸引力方面,文心一言表现得更加符合指令,情节更吸引人。这可能得益于其模型在训练时对中文语境的深入理…

加载 docker 镜像文件 centos7 系统 lnmp 环境 php8.2 php5.2 php7.4

# 加载镜像从tar文件 链接&#xff1a;https://pan.baidu.com/s/1s2yf7iroI-tBTK5b9zxxnA 提取码&#xff1a;6666 docker load < my_migration_image.tar # 运行新容器&#xff0c;可以使用相同的参数和命令 8233 电脑访问时对应的端口 80 docker 上的nginx 端口号 …

ios ipa包上传需要什么工具

​ 目录 前言 一、IPA包的原理 二、IPA包上传的步骤 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包IPA包 6.上传IPA包 三、总结 前言 iOS IPA包是iOS应用程序的安装包&#xff0c;可以通过iTunes或者其他第三方应用商店安装到iOS设备上。…

多模态AnyGPT——整合图像、语音和文本多模态大规模语言模型算法原理与实践

概述 大规模语言模型在理解和生成人类语言方面具有非凡的能力&#xff0c;但迄今为止&#xff0c;它们的能力主要局限于文本处理。然而&#xff0c;现实世界是一个多模式的环境&#xff0c;信息通过视觉、听觉和触觉等多种感官进行交换。融入这种多样性是开发下一代系统的主要…

Go 单元测试基本介绍

文章目录 引入一、单元测试基本介绍1.1 什么是单元测试&#xff1f;1.2 如何写好单元测试1.3 单元测试的优点1.4 单元测试的设计原则 二、Go语言测试2.1 Go单元测试概要2.2 Go单元测试基本规范2.3 一个简单例子2.3.1 使用Goland 生成测试文件2.3.2 运行单元测试2.3.3 完善测试用…

36. UE5 RPG在激活技能时使用蒙太奇动画

在上一篇文章里面&#xff0c;我们实现了一个简单的火球术&#xff0c;创建了火球术的火球&#xff0c;以及能发射它的技能。很简陋&#xff0c;在技能触发的时候&#xff0c;直接在武器的位置生成火球发射出去。在一篇文章里&#xff0c;我们要实现使用技能时&#xff0c;角色…