AS(自治系统;Autonomous System
)。一个自治系统就是处于一个管理机构控制之下的路由器和网络群组。它可以是一个路由器直接连接到一个LAN上,同时也连到Internet上;它可以是一个由企业骨干网互连的多个局域网。在一个自治系统中的所有路由器必须相互连接,运行相同的路由协议,同时分配同一个自治系统编号。
AS 号码划分为公有 AS 和私有 AS,公有 AS 的范围是 1-64511
,私有 AS 范围是 64512-65534
;公有 AS 只能用于互联网,并且全球唯一,不可重复;而私有 AS 可以在得不到合法 AS 的企业网络使用,可以重复:
BGP(Border Gateway Protocol
)属于外部网关路由协议,可以实现自治系统间无环路的域间路由。
BGP是沟通Internet广域网的主用路由协议,例如不同省份、不同国家之间的路由大多要依靠BGP协议。
BGP可分为IBGP(Internal BGP
, AS内部的路由)和EBGP(External BGP
, AS之间的路由)。
BGP的工作原理如下,假设有四个AS, 它们之间的拓扑如下:
初始路由表如下,每个AS只维护了自己的网段的路由:
通过与相邻的AS进行通讯,学习到了到相邻AS的路由:
AS 100(10.10.0.1)
并不直接与AS 300
有直接网络连接,但AS 400
和AS 200
会将到达AS 300
的路由传播给AS 100
。通过邻居间的互相信息交换,一个AS就逐渐学习到了到达整个互联网AS的路由:
i代表internal
在BGP中有多条路由可以到达目的地,例如上图中,AS 100
要与 AS 300
通讯,它可以先经过AS 400
, 也可以先经过AS 200
。应当如何进行选择呢?哪一条路径是比较优先的呢?这就引出了BGP选路的规则。
AS-PATH
是公认必遵(well-known mandatory)
属性,该属性用一串AS号来描述去往的指定目的地AS间路径或路由(例如上图中 200,300,i
)。
当BGP speaker发起一条路由,这条路由每经过一个AS区域,就会加上一个AS号,用来标示路径。AS号叠加得越多,说明经过的AS越多,那么这个路由的优先级也越低。相反,经过的AS越少,那么说明路由越优先。而且AS-Path还可以防止BGP的环路。
例如,AS 100(10.10.0.1)
从AS 400
学习到了到达AS 200
的路径400, 200, i
, 但它原始也有一条到达AS 200
的路径200,i
。很明显第二条路径长度更短,所以BGP会选择走第二条路径:
其实在真实的网络环境中,不一定AS号越少的链路质量越高。而AS-PATH这个功能又是根据AS号来判断路由的优先的,AS号越少越优先。
那么这个时候我们可能会用到AS-path的一个功能,来增加AS号的长度,从而实现选路的功能。
例如上图中,AS 100 -> AS 400 -> AS 200
这条路径的带宽都是10M,而AS 100 -> AS 200
路径的带宽为2M。虽然路径长,但是网络质量好
**一个路由的AS号附加得越多,路由的优先级越低。可以修改AS的附加,称为path-prepending。**在原来有的AS号前再进行人为的添加,让这条路劣于其他的路由。例如给AS 100 -> AS 200
路径再多加几个AS,让它的长度变长:
本地优先级用来AS内部选路,通过改变BGP路由流入本地路由器的优先级来达到。
看文字比较难理解,我们以下图为例,AS 100到达AS 300有两条路可以走,一个是先到AS 400,另一个是先到AS 200,该怎么选择呢?
假设我们以黑色路由器为例,如果为它设置到达上面路由器的LOCAL_PREF = 200
, 那么它会选择本地优先级最高的路由方向来传递,因为到达下面的LOCAL_PREF
是100。值越大优先级越高:
默认的本地优先级是100,只在AS内传递
适用场景:两个AS之间有多条路径(如下图) 。
控制数据怎么进入AS,通过告诉其他AS路由器到达我这条链路的开销值是多少来影响数据进入的方向,MED值越小链路越优先。med默认值为0,只在AS内传递。MED值的比较只能是对与同个AS
例如下面AS 100到达AS 400有两条路径,它们的LOCAL_PREF
和AS_PATH
都相同。此时下面路径的MED值较小,那么就会选择它来走:
上面介绍了三种规则,AS PATH
、LOCAL_PREF
、MED
,那么BGP是如何决定顺序的呢。其实规则不止这三种,针对这三种规则,顺序如下:
LOCAL_PRERENCE
- 越大优先级越高AS PATH
- 越小优先级越高MED
- 越小优先级越高