网络层7——外部网关协议BGP
首先我们来搞清楚一个问题:
那就是为什么要分内部和外部协议?
直接搞同一个协议不就行了吗?
好的,例如我们现在只有内部协议,RIP和OSPF
对RIP协议:最多支持15路由器,无法实现全球联网对OSPF协议:每个路由器保存一个链路状态数据库
如果要将全世界划分为一个区域
想象一下,链路状态数据库得有多大?
数据分组每查找一次路由表,可能需要经过上千万乃至亿级别的查找
而且路由器的硬件成本也会很大!
所以,没法用
划分为内外协议的本质原因
还是全世界的网络太大了
规模很小时,暴露的问题并不多
但是,一旦规模变得很大时,涉及到的问题的复杂程度将以指数级别的速度增长
因此,需要将问题分割,化简,各司其职
于是,有了内外网络协议的划分和设计
目录
一、BGP协议的特点
1、运行环境
2、BGP路径选择必须解决的几个问题
二、BGP路由选择算法
1、eBGP和iBGP
2、iBGP 和 eBGP的区别
3、BGP路由信息格式
4、BGP路由器转发表的更新
三、三种不同自治系统AS
1、末梢AS
2、穿越AS
3、对等AS
四、BGP路由选择
1、选择本地偏好值高算法
2、选择AS跳数最少算法
3、热土豆路由选择算法
4、BGP标识符最小算法
五、BGP-4四种报文
1、open报文
2、update报文
3、keeplive报文
4、BGP报文格式
一、BGP协议的特点
1、运行环境
相对于内部网关协议RIP和OSPF,
BGP用于不同自治系统之间的路由通信
这就必须要解决一个问题:
那就是不同自治系统的差异问题
不同的自治系统评判路径好坏的标准不同
有的是路径长短、有的是速度、有的是带宽
因此,BGP无法使用任何一个自治系统的标准,也无法兼容
那应该用什么作为BFP寻找最佳路由的标准呢?
还需要考虑更多的因素,综合考量
2、BGP路径选择必须解决的几个问题
我们只是简单举几个例子,例如
政治与安全问题
我们国家的消息,最好不要绕过其他对我们有敌意的国家
否则有可能造成泄密问题
经济问题
路径算法的实现,需要考虑到经济成本
不能开销太大
综上,
到底用什么作为BGP寻找最佳路由的标准呢?
退而求其次,只能只用能否到达终点为标准
首先保证能不能到,其他的,管不了了
事实上,技术上也是可以办到的
但是那会使得BGP协议变得过于复杂
不利于该协议技术的普遍应用
应用成本会很高
二、BGP路由选择算法
1、eBGP和iBGP
一个自治系统有两个不同的路由器:边界路由器和内部路由器
两个边界路由器通信时,必须进行TCP链接(179号端口)
边界路由器之间进行的连接叫做:eBGP连接
他们之间互相发送的逻辑信息格式为:“X AS1 R1”
目的为X,AS1是自治系统,R1是边界路由器
意为:R1发送给其他边界路由器,告诉其他边界路由器,
到达网络X,可以发送给R1路由器,经过AS1自治系统到达
但是,该路由不能仅仅让边界路由器知道
其他内部路由器也应该知道
因此,内部路由器之间也要进行连接
叫做iBGP连接,使用TCP连接
一个AS内部所有的iBGP必须连通
BGP协议不仅运行在AS之间,也运行在AS内部
2、iBGP 和 eBGP的区别
iBGP和eBGP遵循同样的协议BGP、报文格式和属性类型
只是通告方式不一样
对内部路由器来说:
GBP报文来自eBGP,报文可以接收,也可以发送
如果来自iBGP,就不会转发
因此,iBGP端口每收到一个BGP报文
首先判断该报文是来自eBGP还是iBGP
说人话就是:
对iBGP端口来说,内部不能互相传
你告诉我,就到我这就行了,不要再传了
3、BGP路由信息格式
BGP路由 = 前缀 + AS-path + next-path
前缀:目的网路
AS-path:需要途经的自治系统路径
next-path:下一跳,也是整个路径的起点
4、BGP路由器转发表的更新
设想一个情景,如图:
R1发送给R2一个eBGP报文:
“X,AS1,R1”(到达X,需要经过AS1,下一跳是R1)
对AS2的内部路由器R4来说
当收到该报文时,需要做的是:
1、将下一跳改为本自治系统的eBGP对等端口R2
2、在内部使用内部网关协议,找到R4到达R2的最短路径
3、根据最短路径更新下一跳
4、更新转发表
对于其他的内部路由器也是一样的道理
(下一跳使用IP地址)
三、三种不同自治系统AS
末梢、穿越、对等
1、末梢AS
人如其名,末梢AS是最后的网络终点,即不允许其他系统的分组通过自己,不会再传下去,我到头了
末梢AS只从直接连接的AS接收 / 发送分组
但是,末梢AS必须给人家付费才可
末梢系统可以连接多个网络,
这种末梢系统交做多归属网络
2、穿越AS
人如其名
其他系统的数据分组可以通过穿越系统
穿越系统一般具有很好的高速通信干线
为其他系统提供有偿转发分组
注意,是有偿
3、对等AS
A和B之间约定,二者之间的数据分组互传免费
因此叫做对等
4、BGP路由兜圈子问题
为了避免分组在各个自治系统之间兜圈子
因此,对BGP路由信息中,如果AS-path有重复的自治系统
则删除该路由
四、BGP路由选择
1、选择本地偏好值高算法
在BGP路由中有一个属性值叫做本地偏好值
意思是:从本地AS开始,到达同一个网络
选择一条最好的路径
至于路径好坏的标准,有管理员决定
标准可以是带宽速度、经济等
缺点:一定路径选定,全部的通信都通过该路径
导致负荷过重,BGP协议无法自适应调整,只能人工修改
如果所有路径本地偏好值都相等,执行下一条算法
选择AS最少算法
2、选择AS跳数最少算法
哪条经过的AS少走哪条,不管AS的大小
缺点:AS少的路径不一定经过的路由器少
有可能只经过一个AS,但是该AS内有100万个路由器
那还玩个锤子
如果本地偏好值一样,经过的AS也一样,
就执行下一跳算法:热土豆路由算法
3、热土豆路由选择算法
核心算法:尽快让分组离开本AS,因此经过本地的路由器越少越好
这部分算法由内部网关协议执行
(其实按照中国人的说法,应该叫做烫手山芋算法,棘手)
如果本地偏好值一样,途径AS数量一样,内部转发出去也一样
上述三个算法都无法算出路径
则执行下一个算法:BGP标识符最小算法
4、BGP标识符最小算法
BGP报文中,首部有四个字节的字段,叫做BGP标识符,记作BGP ID
是一个无符号整数,作为运行BGP路由器的唯一标识
赋予它路由器所有接口中最大IP地址的值
于是,就转发给该接口
五、BGP-4四种报文
刚开始运行时,对等BGP端口交互整个BGP路由表
后期变化时,只更新变化部分
open(打开)、update(更新)、keeplive(保持连通)、notfication(通知)
1、open报文
用来建立BGP连接
建立TCP连接后发送
2、update报文
更新
用于撤销、添加新的BGP路由信息
每次可以撤销多条,但每次只能增加一条
3、keeplive报文
如何得知两个端口之间的TCP连接是否正常工作?
如果使用BGP路由表定期传送
不可取,因为BGP路由表很大
对网络负担大
因此周期性互相传keeplive报文,表示正常工作
keeplive报文只包含BGP报文的通用首部(19字节)
那么隔多久发一次?
每个路由器有一个保持时间计时器
每收到一个BGP报文,该计时器置为0
如果约定时间内不能收到任何BGP报文,则认为对方不能工作
发送kepplive报文的时间为保持时间的1/3
如果对等端保持时间不一致,选小的
保持时间可以置为0,表示该链路总是正常工作
不会发送keeplive报文
BGP协议解决了RIP距离向量“坏消息传的慢”的问题
因为一个路由器可以从很多相邻路由器得到信息
4、BGP报文格式
四种类型的BGP报文使用相同的首部
BGP报文作为TCP报文的数据部分来传送