BGP简介、BGP状态机、BGP的各种属性详解

一、简介
1、BGP全称为边界网关路由协议,典型的外部网关路由协议,是一种无类别的路径矢量(高级的距离矢量)型协议,又可以是一种路径优先协议,采用分布式计算,用于管理AS之间的路由信息传递。
2、特性
(1)可靠性:采用tcp作为可靠性机制,单播建邻,基于tcp的179端口工作,因为更新量巨大,所以只能采用触发更新;
(2)可控性:AS之间提供丰富的属性来干涉选路,用来灵活的选择路由并且都需要人工干涉;
(3)AS-by-AS:使用AS号识别不同的 AS路由的标识,该AS号具有唯一性,范围1-65535,可以扩展为32位以解决AS号不够用的情况,在传递路由的过程中以AS为单位不改变属性;
(4)BGP最小使用单位是一个路由器,故同一个路由器上只能运行一个BGP进程;
(5)BGP协议中,一条路由存在的时间越久,BGP会认为其越稳定;
(6)BGP默认不被用于负载均衡,只选择产生一条最佳路径,并且BGP支持链路聚合和认证;
二、数据包–所有的数据包基于TCP传输
Open: 存在hold time 和 RID;用于邻居关系建立;默认仅收发一次即可;
Keeplive: 周期1min,保活 TCP会话 hold time 180s;
Update :更新包携带路由条目: 目标网络号+ 属性;
Notification :报错包 错误信息出现时发送;
三、BGP的状态机
1、idle(空闲)状态
BGP 总是以 Idle 状态为起始点,该状态拒绝所有入站连接。启动(Start)事件(IE 1)发生后,BGP 进程会初始化所有 BGP 资源、启动 ConnectRety(连接重试)定时器、初始化去往邻居的 TCP 连接、侦听来自邻居的 TCP 初始化并将状态更改为 Connect(连接)状态。启动事件由配置 BGP 进程或重置现有进程的操作员发起,或者由重置 BGP 进程的路由器软件发起。

如果发生差错,BGP 进程将迁移到 Idle 状态。此时,路由器可能会自动尝试发起另一个启动事件,但应对路由器的这种行为做一定的限制—这是因为在持续性地差错条件下,经常性地重启会导致波动。因而在第一次迁移到 Idle 状态之后,路由器会设置 ConnectRety 定时器,在定时器到期时才会重新再启 BGP。IOS 的初始 ConnectRety 时间为 120 秒,该值不可更改,以后每次ConnectRety 时间都是之前两倍,也就是说,连续等待时间呈指数式递增。
2.Connect(连接)状态
该状态下,BGP 进程一直等待 TCP 连接的完成。如果 TCP 连接建立成功,BGP 进程将会向邻居发送 Open 消息并进入 OpenSent(打开发送)状态。如果 TCP 连接建立不成功,BGP进程将继续侦听由邻居初始化的连接、重置 ConnectRety 定时器,并迁移到 Active(激活)状态。
如果 ConnectRety 定时器到期时仍处于 Connect 状态,则重置定时器,并再次尝试与邻居建立 TCP 连接,进程也将继续维持在 Connect 状态,其他输入事件将会让 BGP 进程迁移到 Idle 状态。
3.Active(激活)状态
该状态下,BGP 进程会尝试与邻居初始化 TCP 连接。如果 TCP 连接建立成功,BGP 进程会清除ConnectRetry 定时器、完成初始化过程、向其邻居发送 Open 消息,并迁移到 OpenSent(打开发送)状态。IOS 默认的保持时间为 180 秒(3 分钟),可以通过 timers bgp statement命令设置保持时间。
如果 ConnectRetry 定时器到期时 BGP 进程仍处于 Active 状态,那么进程将返回 Connect状态并重置 ConnectRetry 定时器,而且还要与对等体进行 TCP 连接的初始化并继续侦听来自对等体的连接。如果邻居试图以非期望的 IP 地址建立 TCP 会话,则重置ConnectRetry 定时器、拒绝该连接,且继续维持在 Active 状态,其他输入事件(启动事件除外,因为 Active 状态会忽略启动事件)将会让 BGP 进程迁移到 Idle 状态。
4.OpenSent(打开发送)状态
该状态下,已经发送了 Open 消息,BGP 会一直等待直至侦听到来自邻居的 Open 消息。
接收到 Open 消息后,会检查该消息的每个字段,如果存在差错,则会发送 Notification 消息
并迁移到 Idle 状态。
如果接收到的 Open 消息没有差错,则发送 Keepalive 消息并设置 Keepalive 定时器,此外还要协商保持时间,以确定一个较小的保持时间值,如果协商后的保持时间为零,则不启动保持定时器和 Keepalive 定时器。根据对等体的 AS 号,可以确定对等连接是内部连接还是外部连接,并迁移到 OpenConfirm(打开确认)状态。
如果收到断开 TCP 连接的请求,则本地进程将关闭 BGP 连接、重置 ConnectRetry 定时器、开始侦听由邻居发起的新连接,并迁移到 Active 状态。其他输入事件(启动事件除外,因为该状态会忽略启动事件)则会让 BGP 进程迁移到 Idle 状态。
5.OpenConfirm(打开确认)状态
该状态下,BGP 进程将等待 Keepalive 消息或 Notification 消息,如果收到的是 Keepalive消息,则迁移到 Established(建立)状态;
如果接收到的是Notification 消息或断开 TCP 连接请求,则迁移到 Idle 状态。
如果保持定时器到期,或检测到差错,或发生了终止事件,则向邻居发送一条 Notification
消息、关闭 BGP 连接,并将状态更改为 Idle 状态。
6.Established(建立)状态
该状态下,BGP 对等连接已完全建立,对等体之间可以相互交换 Update、Keepalive 和Notification 消息。如果接收到的是 Update 或 Keepalive 消息,则重新启动保持定时器(如果协商好的保持时间不是零)。
如果接收到的是 Notification 消息,则迁移到 Idle 状态。其他事件(启动事件除外,因为该状态会忽略启动事件)将会让 BGP 进程发送一条 Notification 消息并迁移到空闲状态。
四、BGP的属性
1、BGP 的属性:weight ,origin ,as_path ,next_hop ,local_pref ,atomic_aggregate , Aggregator ,community ,MED,originator_id ,cluster_list
2、 属性分为 4 类: (1)公认必尊 --必须传递必须识别 ,所有 BGP 路由器必须识别遵守的原则有origin,as_path ,next_hop
(2)公认可尊–必须识别, 所有路由器都能识别但是不一定要遵守,local_pref,atomic_aggregate
(3)可选传递–打开传递 ,不是所有 BGP 路由器都能识别,但是所有 BGP 都能传递,aggregator 和 community
(4)可选非传递–打开不传递 不是所有路由器都被识别,不能识别的 BGP 路由器就丢弃它,MED,originator_id 和 cluster_id,weight

Weihgt :cisco 私有属性,对于离开 AS 的路由在路由器选择那一条最优,本台路由器产生为 32768,学习 的为 0.不能传递,适用于一台路由去 往别的 AS 有多个出口。
Origin :起源,0 表示宣告(i),1 表示 EGP 学到(E),3 表示其他手段得到(重发布?),越低越好。
AS path: 一条路由在传输过程中经历了那些 AS(不算自己),可用来放环。越短越好
Nei x.x.x.x allowas-in 允许和具有自己相同的 AS 的路由进入本
AS Nei x.x.x.x as-override 把具有和其他 AS 相同 AS 号的路由放入这个 AS
Next_hop 到达路由的下一跳路由器 IP 地址
通告路由器和接受路由器不在一个 AS,next_hop 为通告路由器的更新地址 ;
通告路由器和接受路由器在一个 AS 内,next_hop 为通告邻居的更新地址 ;
通告路由器和接受路由器在一个 AS 内且为邻居关系更新地址为不同 AS,则为外部更新地址
Local_pref :不能传输到其他 AS,值越高越优,用于本 AS 选择,离开 AS 的出口路由器默认为 100;
MED: 用于选择流入 AS 的入口路由器,可以在俩个 AS 之间传递,越低越好默认 0(只能在一个 AS 内 比较);
Atomic_aggregate: 用来警告下游路由器路由聚合后产生的路由路径丢失。
BGP 支持向 BGP 邻居传递重叠路由可以选择多种方式
(1)明细和粗略的都公布
(2)只公布明细
(3)只公布没有重叠的
(4)聚合后公布聚合后的路由
(5)明细和粗略都不公布
Aggregator :用来通告汇总路由的汇聚路由器 BGP_ID(cisco)
Community :(1)internet 默认属性,可以给任何 bgp 发送
(2)no_export 只能在一个 AS 内传递,可以在联盟内传递。
(3)no_advertise 不在 IBGP 邻居间传递
(4)local-as 不向任何 EBGP 邻居发送包括联盟的 EBGP 邻居
标准和扩展 community
标准是普通路由可以设置的团体公有和私有
扩展是 mpls 中的 vrf 路由传递定义的
Originator_id :路由反射使用,是路由发起者产生的一个 32 比特的值,该值是本地路由发起者的 RID,如果路 由发起者从属性上看到 自己的 RID,说明有环路就忽略 ;
Cluster_list: 路由反射器使用,是路由进过反射器簇 ID 的一个序号。如果反射器在属性里看到自己的簇 ID 就说明有环路,忽略 簇 ID 列表:记录了所有反射器的 RID。
未完待续。。。。。。

你可能感兴趣的:(BGP简介、BGP状态机、BGP的各种属性详解)