介绍

Untitled

AS AS号码划分为公有AS和私有AS,公有AS的范围是1-64511,私有AS范围是64512-65534;公有AS只能用于 互联网,并且全球唯一,不可重复,而私有AS可以在得不到合法AS的企业网络使用,可以重复。很显然,因为 私有AS可以被多个企业网络重复使用,所以这些私有AS不允许传入互联网,ISP在企业用户边缘,需要过滤掉 带有私有AS号码的路由条目。

BGP路由器之间的数据传输使用了TCP协议,端口号为179,并且指的是会话的目标端口号为179,而会话源端口 号是随机的。

一个配置了BGP进程的路由器只能称为BGP-Speaker,当和其它运行了BGP的路由器形成邻居之后,就被称为BGP -Peer,一个路由器运行BGP后,并不会主动去发现和寻找其它BGP邻居,BGP的邻居必须手工指定

一台BGP路由器运行在一个单一的AS内,在和其它BGP路由器建立邻居时,如果对方路由器和自己属于相同AS, 则邻居关系为internal BGP (iBGP),如果属于不同AS,则邻居关系为external BGP (eBGP)。BGP要求eBGP邻 居必须直连,而iBGP邻居可以任意距离,但这些都是可以改变的。

在BGP形成邻居后,最开始会交换所有路由信息,但是之后都采用增量更新,也就是只有在路由有变化时才更 新,并且只更新有变化的路由。

BGP建立邻居后,会通过相互发送类似hello包的数据来维持邻居关系,这个数据包称为Keepalive,默认每60秒 发送一次,hold timer为180秒,即到达180秒没有收到邻居的Keepalive,便认为邻居丢失,则断开与邻居的 连接。

BGP之间建立邻居,需要经历如下几个过程:

Idle—BGP进程被启动或被重置,这个状态是等待开始,比如等于指定一个BGP peer,当收到TCP连接请求后, 便初始化另外一个事件,当路由器或peer重置,都会回到idle状态。

Connect—检测到有peer要尝试建立TCP连接。

Active—尝试和对方peer建立TCP连接,如有故障,则回到idle状态

OpenSent— TCP连接已经建立,BGP发送了一个OPEN消息给对方peer,然后切换到OpenSent状态,如果失败, 则切换到Active状态。

OpenReceive— 收到对方peer的OPEN消息,并等待keepalive消息,如果收到keepalive,则转到Established 状态,如果收到notification,则回到idle状态,比如错误或配置改变,都会发送notification而回到idle状 态。

Established— 从对端peer收到了keepalive,并开始交换数据,收到keepalive后,hold timer都会被重置, 如果收到notification,就回到idle状态。

BGP 更新源

BGP并不能主动在网络中寻找邻居,必须手工指定BGP邻居的地址,那么BGP才会将数据包发往指定的地址来请 求建立邻居,与此同时,BGP发出的请求数据包除了写明目标IP地址外,还要写上自己的IP地址,即BGP源地址 。路由器自己产生流量后从接口发出时,流量从哪个接口被发出,那么这些数据包的源IP地址就是哪个接口的 地址。因此当BGP发出数据包寻找邻居时,这些数据包从哪个接口被发出,那么BGP源IP地址就是哪个接口的地 址。要两台BGP路由器要正常建立邻居,必须双方路由器都相互指定邻居,相互发送数据包才行。当一台BGP路 由器收到建立邻居的请求后,如果发现数据包的目标IP不是自己的BGP源地址,那么就拒绝该连接请求,只有 当请求数据包的目标IP与自己的BGP源地址相同时,才可建立BGP邻居。需要注意的是,这个条件只在两个邻居 之间,任意一个邻居满足条件即可,并不需要双方都满足,也就是说一方收到的数据包目标IP与自己的BGP源 地址相同即可,另一方收到的数据包目标IP与它的BGP源地址不同也没关系,只要单方面符合条件就行,但我 们通常都将BGP两端的源与目标保持一致。BGP的源地址是可以随意更改的,但只能是路由器上的接口地址。

BGP TTL

一台BGP路由器只属于一个AS,在建立BGP邻居时,如果对方路由器和自己属于相同AS,即在同一自治系统内部 ,则邻居关系为internal BGP (iBGP),如果属于不同AS,即邻居在自治系统外部,则邻居关系为 external BGP (eBGP)。考虑到外部自治系统的路由器对BGP发起DOS攻击,所以BGP要求外部BGP邻居,即eBGP 邻居必须与自己直连,而iBGP邻居可以任意距离。这些控制是通过控制BGP数据包的TTL值来实现的,将建立 eBGP邻居时发出的数据包的TTL值限制为1,就限制了eBGP邻居必须直连,而由于iBGP邻居可以在任意位置,所 以建立iBGP邻居时发出的数据包的TTL值为最大,即255。对于建立eBGP的数据包的TTL值可以随意修改,甚至 改为255都行

BGP AS_Path