BGP-基础
BGP 系列第一篇: BGP-基础
资料来源:
https://www.bilibili.com/video/av38160343
http://ccietea.com/Folder_TechNotes/BGP.pdf更新
1
2020.11.19 初始
导语
BGP 的笔记整理快半个月了,还没敲定终稿.先发着吧…
目前应用最多的就剩下俩路由协议了 OSPF 和 BGP.一个域内,一个域间就构成了经典的地面网络架构.
于是开了俩天坑,到现在还没到半山腰
这一篇是 BGP 的综述 && 基础.
BGP
BGP 全称是 边界网关协议 是一个互联网上去中心的自治路由协议.
- 维护IP路由表或‘前缀’表来实现自治系统(AS)之间的可达性
- bgp 更应该称为矢量性协议,而不是路由协议
- 大多数 isp 之间使用的都是 bgp
- 最新的是 BGP-4 于 2006 年 RFC 4271
最通俗来说,bgp 主要用来协调维护 AS 之间的路由表,使用 tcp 通信.
- AS: Autonomous system 自治系统,可以说是一个大型的局域网.然后互联网就建立在这些局域网(AS) 的互联互通上.一个 isp 可能有很多 AS.
- 每个 AS 都有一个编号,2字节 1-65535.(64512-65535 私有).
- bgp 运行在 tcp 之上,使用 179 端口.这让 bgp 可以运行在 vpn 组网上(好像没别的路由协议是传输层往上的).
bgp 协议运行在 AS 之间,当路由信息变化时交换路由信息选择最佳路径,最基础的原则 AS 跳数最少.
- 原则上只有路由信息变化后,bgp 对等体之间才会有路由信息更新.
- 每一条 bgp 更新消息都带有一个 AS-PATH 属性,携带这条路由信息走过的所有 AS ,这条属性最根本的作用是防止路由环路.
- bgp 对等体分为两种v
- ebgp: 不同 AS 的出口路由器之间.一般是直连.
- ibgp: AS 内部运行路由器之间,只要求 tcp 通.
- 在 ebgp 和 ibgp 之间的路由信息交换如何设计隐藏了陷阱.
BGP 表
bgp 默认有 3 张表
- 邻居表 Neighbor table:
show ip bgp summary
- 保存有 bgp 邻居的信息
- bgp 表 BGP table:
show ip bgp
- 存放所有路由条目,bgp 会按照选路规则选出最优路径放到路由表.
- 路由表 Routing table:
show ip route
- 实际使用 ip 路由表
BGP 报文
Tcp 179端口,无需对等直连,只要能通,就能建立连接.
L2 hrader | ip header | tcp header | bgp packets | fcs |
---|---|---|---|---|
协议号6 | 179端口 | bag header,bgp packet |
BGP消息报头:
bgp header | ||
---|---|---|
marker(16B) | length 2B | Type 1B |
- Marker:用于检测BGP对等体之间同步丢失情况,并且在支持验证功能的情况下进行消息验证如果消息类型为open或open消息中 没有包含验证消息,标志字段被置为全1,否则标志字段通过某些计算得到(作为验证进程的一部分)
- Length:表示BGP报文的全部长度,包括头部
- TYPE:1-open;2-update;3-Notification;4-keepalive
BGP消息报文:
bgp packet | ||||
---|---|---|---|---|
OPEN | Update | Notification | Keepalive | Route-refresh |
open: 协调 bgp 邻居的参数,tcp建立后第一个报文.
update: (对等邻居)更新路由信息
notification: 检测到错误,通告对等体,之后链接可能断开.
keepalive: 保活,保持邻居关系.(建立链接时,第二个报文)
route-refresh: 刷新 bgp 路由.
BGP 状态机
Peer状态名称 | 发什么包 | 在做什么 |
---|---|---|
idel | 尝试建立 tcp 连接 | 路由表寻找到邻居,准备TCP的连接,监视远程peer启动TCP连接. |
Connect | 发 tcp 包 | tcp 连不上,进入 Active.成功连上进入 Opensent 发送 Open 消息 |
Active | 发 tcp 包 | 连不上一直连 |
OpenSent | 发 Open 包 | 发送 Open 包协商.存在错误,发送 Notification消息.正常没错,则进入OpenConfirm |
OpenConfirm | 发 Keepalive 包 | 协商成功,发 Keepalive,收到对等体的 Keepalive 进入 Established |
Established | 发 Update 包 | 收到对等体 Keepalive,开始发送路由信息 |
update-source
BGP无法自动发现邻居,而需手工指定.
邻居的 ip 由本地的 BGP neighbor命令指定,而该 BGP 连接的源 IP(更新源)默认情况下为流量的出接口 IP.注意只有当本地配置的邻居IP与邻居用于BGP连接建立的源IP相同时,BGP连接才能被正常建立.同时,仅需保证一方满足条件即可.
更详细示例在后续.
中转 AS 的路由黑洞问题
问题
- 两个边界 bgp 路由没有直连路径,但是是 igbp 对等体.
- as 内连接这俩路由路径上的其他非 bgp 路由,没有 as 外的路由表.
- 当流量需要途经这俩路由,目的地不是这俩路由的情况下.进入 as 内部,有可能因为其他非 bgp 路由没有相应路由表,进入黑洞.
解决
- bgp 同步规则(鸡肋,一般默认关闭): EBGP 得来的路由,同时在本地或 IGP 也能找得到时.才通报给其他 EBGP 对等体.
- 全网路由 bgp 改造.
- mpls 标签交换.(这又是另一个天坑了)
IBGP 水平分割规则
问题:
- BGP 防环是通过 AS_PATH 实现的,as_path 只在跨 as 时才发生改变,不能用于 as 内 bgp 放环.
解决 -> IBGP 的水平分割规则 :
IBGP 的水平分割规则 : bgp 收到的 ibgp 规则,不会继续向下一个 ibgp 对等体发送
确实能防环了,缺点是 bgp 路由消息有可能无法通过 as.
改进:
- as 内组 bgp mesh,bgp 无需直接链接,正好.换一种说法是,要求 as 内 ibgp 邻居的关系全互联.
- 但是 bgp mesh 消耗资源有点大,于是有
- [[路由反射器]]
- [[联邦]]
BGP 通告规则
同一目的地存在多条路径,bgp 只取一条 best 通告.(没有开启负载均衡)
bgp 只将自己认为 best 的路由传递给 bgp 对等体.
bgp 从 ebgp 对等体获取的路由会向全部 bgp 对等体通告(ibgp / ebgp)
bgp 从 ibgp 对等体获取的路由不会向 ibgp 对等体通告.(路由反射器除外) -> IBGP 水平分割规则
bgp 从 ibgp 对等体获取的路由,是否向 ebgp 对等体通告,视 igp 和 bgp 同步是否开启而定.
路由更新,只发送更新的路由.
结束语
BGP 算是给天坑,希望期末前能弄完…