声明: 这篇文章是对网上的这几篇博客的摘录,仅供我自己以后看的时候方便,且不需要再看太多的内容,

如果大家对BGP不是很了解,建议看原博客或者直接看RFC

    BGP只支持基于目的地址的路由,即路由时,我们并不需要知道这个Packet从哪里来,只需要知道它的目的地在哪,

我们便可做出路由决策。因此,一些新型网络体系,即不基于目的地址路由的网络是不支持BGP协议的。

Terminology:

  • BGP Speaker:

    是指配置了BGP协议的路由器,一个AS中可以只有一个BGP Speaker,也可以有多个。
  • BGP Identifier:

    一个4字节的无符号整数,也就是BGP Speaker的IP地址。
  • EBGP,IBGP:

    分别指External BGP和Internal BGP,与本身AS之外的BGP Speaker通信的BGP称为EBGP,IBGP同理。
  • External Peer, Internal Peer:

    其中Peer指的是与一个BGP Speaker通信的对等体,即另一个BGP Speaker,External和Internal也是相当于AS

    而言的。
  • RIB:

    Routing Information Base,路由信息库。
  • Adj-RIB-In:

    本地BGP Speaker收到的RIB信息,表示还未经处理的路由信息。
  • Adj-RIB-Out:

    本地BGP Speaker即将要发出去的RIB信息,表示经过选择要告知邻居的路由信息。
  • Loc-RIB:

    从Adj-RIB-In中选出来供本地路由使用的路由信息。
  • Feasible Route, Unfeasible Route:

    Adj-RIB-In中可用的和不可用的路由。

RIB:

    Adj-RIBs-IN, Loc-RIB, Adj-RIBs-Out三者的关系。

    Adj-RIBs-In包含了被告知的,未经处理的路由信息。经过本地路由策略之后,从这部分路由信息中挑选一部分可用

的作为Loc-RIB。

    虽然在我们看来这三者有较大的区别,需要分别维护。但是在有些BGP实现里只保留一份内存,通过指针来相互区分。

BGP的四种消息:

    正如上文所述,被本地BGP Speaker发出去的路由信息我们称之为Adj-RIB-Out。当BGP连接建立,对端收到初始路由

信息并根据本地策略建立Loc-RIB。BGP不要求某个BGP Speaker定时的公布自己的路由表信息(不像RIP),但是当

本地路由表发生改变时,需要把更新情况告知它的对等体(即其他的BGP Speaker),而这种类型的消息我们定义为

UPDATE消息。


    因为BGP不要求定时地公布路由信息,所以需要额外的方式来确保通信双方依然保持连接,这也是KEEPALIVE消息的

来由。另外当错误发生时,如数据包格式错误,超时等情况发生时,也需要NOTIFICATION消息来传递错误类型。

    因此BGP只有四种消息类型:建立连接的OPEN, 更新连接的UPDATE, 保持连接的KEEPALIVE, 错误信息的

NOTIFICATION.

    BGP限制最大报文长度为4096(包括报文头)

    OPEN消息最小长度为10字节,加上BGP协议头19字节,因此OPEN消息最短为29字节.

    一个KEEPALIVE就等于一个BGP协议头,即19字节.

    下面单独对UPDATE消息进行详细的介绍:

UPDATE消息格式:

    UPDATE消息用来沟通BGP Speaker之间路由变化,它可以告知哪些路由被撤销,或者告知可用路由(那些拥有统一路

径参数的可用路由).

    The UPDATE message always includes the fixed-size BGP header, and also includes the other fields, as shown

below(note, some of the shown fields may not be present in every UPDATE message):

+---------------------------------------------------+
| Withdrawn Routes Length (2 octets) |
+---------------------------------------------------+
| Withdrawn Routes (variable) |
+---------------------------------------------------+
| Total Path Attribute Length (2 octets) |
+---------------------------------------------------+
| Path Attributes (variable) |
+---------------------------------------------------+
| Network Layer Reachability Information (variable) |
+---------------------------------------------------+

    UPDATE消息中各字段含义如下:

  • Withdrawn Routes Length:

    2个字节,撤销路由的长度(以字节为单位), 如果为0,则表示下一个Withdrawn Routes字段为空.下同.
  • Withdrawn Routes:

    可变长度,以形如二元组的形式储存,标识应该撤销的路由.
  • Total Path Attribute Length:

    2个字节,标识Path Attributes长度.
  • Path Attributes:

    可变长度,以形如三元组的形式存储.
  • Network Layer Reachability Information:

    可变长度,且由UPDATE message length - 23 - Total Path Attribute Length - Withdrawn Routes Length

    决定(其中23由19字节的BGP协议头,4字节的Total Path Attribute Length和Withdrawn Routes Length).此

    字段包含了一系列二元组以表示网络可达信息(即路由终点)。

    Reachability information is encoded as one or more 2-tuples of the form <length, prefix>, whose fields are described below:

+---------------------+
| Length (1 octet) |
+---------------------+
| Prefix (variable) |
+---------------------+

The use and the meaning of these fields are as follows:

a) Length:

The Length field indicates the length in bits of the IP address prefix. A length of zero indicates a

prefix that matches all IP addresses (with prefix, itself, of zero octets).

b) Prefix:

The Prefix field contains an IP address prefix, followed by enough trailing bits(the minimum number

of trailing bits needed)to make the end of the field fall on an octet boundary. Note that the

value of the trailing bits is irrelevant.

    而Prefix则表示IP前缀,但是值得注意的是,它必须要在末尾补全0,以满足字节边界。讲个小例子: 比如Length是13,

Prefix至少有13位比特,且满足字节边界,则Prefix应该有16比特,即2字节。下一个二元组则从第三字节开始.以此类推

    对于NLRI有一点说明,因为他们都是以二元组储存了一系列IP前缀,他们表示的是路由的终点。比如说

Withdrawn Route中有个1.1.0.0/13则表示撤销到1.1.0.0/13的路由。以此类推。


    路由信息只存在于UDPATE消息中。何谓路由,即给定某个地址和到这个地址的路径信息的键值对。在BGP的

UPDATE消息中,目的地址被保存在NLRI域中,如果多条路由拥有相同的路径参数,那么只需在同一个UDPATE

的NLRI域中包含多个目的地址前缀,即可完成多条路由的传输


    路由更新分为三种:撤销,修改以及添加(增,删,改)。

    其中添加比较简单,直接添加并告知BGP Speaker对等体即可。修改只需要撤销老路由,添加新路由即可。因此撤销

路由有三种原因:

1.在UDAPTE消息中的WITHDRAWN ROUTES域不为空,则域内的路由需要撤销。

2.拥有相同的目的地址的路由到达,即修改路由时。

3.BGP Speaker连接关闭,则两者之间的所有路由均需要撤销(因为很可能那个路由器坏了,自然无法完成路由功能)。

UPDATE消息中的Path Attributes:

    在BGP UPDATE中,拥有同样的Path Attribute的路由才允许被包含在同一个UPDATE包中。Path Attributes是一个可

变字段,由Total Path Attribute Length指定长度,以三元组形式储存。

    Each path attribute is a triple <attribute type, attribute length, attribute value> of variable length.

  • Attribute Type is a two-octet field that consists of the Attribute Flags octet, followed by the Attribute

    Type Code octet.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Attr. Flags |Attr. Type Code|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Attribute Flags

    Attribute Flag的各个比特位说明如下:

    #Bit 0 :

    0表示well-known,1表示optional;标识了此路径属性是否可选(optional意味着允许BGP不用理解该属性).

    #Bit 1 :

    0表示non-transitive,1表示transitive;标识了此路径属性是否可传递(non-transitive意味着BGP Speaker

    不一定会把该属性传递其他对等体).

    #Bit 2 :

    0表示complete,1表示partial;标识了此路径属性是否只是局部的.

    #Bit 3 :

    0表示Attribute Length占了1字节,1表示占了2个字节;标识了路径属性长度是否可扩展(即占用几个字节).

    #Bit 4-7 :

    未使用
  • Attribute Code

    Attribute Code对应各个Path Attribute,下面罗列对应关系,之后再对每个属性做解释:
    Code 1 : ORIGIN
Code 2 : AS_PATH
Code 3 : NEXT_HOP
Code 4 : MULTI_EXIT_DISC
Code 5 : LOCAL_PREF
Code 6 : ATOMATIC_AGGREGATE
Code 7 : AGGREGATOR
\# **ORIGIN**<br>
ORIGIN参数说明该路由是怎么产生的,有三种原因,按优先级排列分别为IGP,EGP,<br>
IMCOMPLETE。其中最后一种表示来源不明。此参数是由产生该路由的BGP Speaker指定,属于<br>
well-known mandatory,即要求必须被支持且不可或缺。<br>
ORIGIN is a well-know mandatory attribute. **The ORIGIN attribute is generated by the<br>
speaker that originates the associated routing infromatiion. _Its value SHOULD NOT be<br>
changed by any other speaker._**<br>
\# **AS_PATH**<br>
AS_PATH标识了从本地到目的路由所经过的AS,由一系列AS Segments(包括Set,Sequence两种)<br>
组成,属于well-known mandatory。AS_PATH修改分为两种情况:<br>
1.由BGP Speaker自己产生的路由:<br>
若准备向Internal Peer发,即往同一个AS内的BGP Speaker发布,显然此AS_PATH为空.<br>
若准备向External Peer发,则把本身的AS Number包装成AS_SEQUENCE放在AS_PATH第一个<br>
Segment.<br>
2.BGP Speaker收到UPDATE,并转发到其他的BGP Speaker:<br>
若准备向Internal Peer发,显然不需要修改AS_PATH.<br>
**若准备向External Peer发,且AS_PATH里的AS已经以AS_SEQUENCE形式储存,则把本身<br>

的AS放在该AS_SEQUENCE的第一个;若之前以AS_SET储存,则把本身的ASNumber包装成

AS_SEQUENCE,置于AS_PATH最前面**.

有些时候需要在AS_PATH添加不止一个AS Number,这需要在本地进行配置.<br>
\# **NEXT_HOP**<br>
这应该很熟悉的参数吧,属于well-known mandatory即**到某个目的地的下一跳地址,但是和一般的<br>
不一样,这里的NEXT_HOP不一定是邻居路由器的IP地址,即可能不是直接相连的**.<br>
NEXT_HOP的修改分为两种:<br>
1.由BGP Speaker自己产生的路由,并发向自己的邻居:<br>
则把NEXT_HOP改成自己的IP地址(即和对端对应的那个IP地址)。<br>
2.BGP Speaker收到并转发向其他BGP Speaker:<br>
若准备发向Internal Peer,不改变该NEXT_HOP;<br>
若准备发向External Peer则改成自己和对端对应的IP地址.<br> \#**MULTI_EXIT_DISC**<br>
当某个AS和外部某个AS有多条路由时,MULTI_EXIT_DISC用来区分每条路由,以让本地选择哪条<br>
路由为最优。属于optional non-transitive, 即BGP Speaker可以支持也可以不支持该属性,而且不必<br>
向邻居转发该属性。<br>
\#**LOCAL_PREF**<br>
和MULTI_EXIT_DISC类似,不过是用来区分AS内部的路由的.<br>
\#**ATOMIC_AGGREGATE**<br>
当BGP Speaker对路由进行一定的聚合之后,向邻居公布自己的路由时需要加上该属性。<br>
\#**AGGREGATOR**<br>
BGP Speaker在做路由聚合时,需要加上自己的信息,如AS Number和自己的IP地址。<br>

####References:

    [BGP(一) 协议简介](http://www.it165.net/network/html/201303/1010.html)

    [BGP(二) BGP的行为](http://www.it165.net/network/html/201303/1012.html)

    [BGP(三) BGP的消息格式](http://www.it165.net/network/html/201303/1013.html)

    [BGP(四) BGP的路径属性](http://www.it165.net/network/html/201303/1015.html)

BGP Basic Knowledge的更多相关文章

  1. NLP related basic knowledge with deep learning methods

    NLP related basic knowledge with deep learning methods  2017-06-22   First things first >>> ...

  2. Python基础知识(Basic knowledge)

    Python基础知识(Basic knowledge) 1.认识Python&基础环境搭建 2.Python基础(上) 3.Python基础(中) 4.Python基础(下) 5.Python ...

  3. 计算机基础知识 一 Basic knowledge of computers One

    计算机硬件由CPU(Central Processing Unit).存储器.输入设备.输出设备组成. CPU通常由控制单元(控制器)和算数逻辑单元(运算器)组成. 运算器:负责进行算数运算和逻辑运算 ...

  4. Android Studio accelerator key(shortcut)& Basic knowledge

    shift + F6 重构(选文件,ok->下面的控制台,do refactor option + return 快速修复 Activity@Extra() Intent: @FragmentA ...

  5. NoSql basic knowledge

    The big picture to keep in mind first is: There are lots of articles and resources out there: http:/ ...

  6. [Tango] Basic Knowledge

    Project Tango类设备能够给开发者在哪些领域带来机会. 室内导航*:室内GPS信号的缺失,使得Project Tango设备会成为室内导航重要应用场景之一.有了它,你就不会在不熟悉的室内商场 ...

  7. [SLAM] 01 "Simultaneous Localization and Mapping" basic knowledge

    发信人: leecty (Terry), 信区: ParttimeJobPost标 题: 创业公司招SLAM 算法工程师发信站: 水木社区 (Thu Jun 16 19:18:24 2016), 站内 ...

  8. Basic knowledge of javaScript (keep for myself)

    1. 函数表达式 JavaScript 函数可以通过一个表达式定义.eg. var x = function (a, b) {return a * b}; so: var x = function ( ...

  9. Basic knowledge of html (keep for myself)

    1. 通常标签 <strong> 替换加粗标签 <b> 来使用, <em> 替换 <i>标签使用. 2. 在 <head>元素中你可以插入脚 ...

随机推荐

  1. Atitit.播放系统规划新版本 v4 q18 and 最近版本回顾

    Atitit.播放系统规划新版本 v4  q18  and 最近版本回顾 1 版本12 (ing)4 1.1 无映射nas系统..4 1.2 图片简介搜刮其4 1.3 12.8. 电影图片增加png, ...

  2. seo-mask -- 为单页应用创建一个适合蜘蛛爬取的seo网站

    seo-mask seo-mask是利用搜索引擎蜘蛛的爬取原理(蜘蛛只会爬取网页的内容,并不会关心解析网页里的css和js),制作一套专门针对seo的镜像网站,鄙人称它为针对seo的mask,让蜘蛛看 ...

  3. VM603:1 Uncaught SyntaxError: Unexpected token o in JSON at position 1

    再用JQuery解析json的时候出现了这样一个问题 VM603: Uncaught SyntaxError: Unexpected token o 通过查阅资料发现,是由于解析json文件的时候解析 ...

  4. 记录下push推送优化改进点

    一)自主研发的push服务的特点及优势: 1) 消息回执确认(ack); 2) 有效期推送(设置消息的有效期); 3) 精准推送(设置设备组别推送); 4) 下发任务分解(拆分任务,多进程); 5) ...

  5. EasyUI DataGrid 相同连续列合并

    扩展方法:$.extend($.fn.datagrid.methods, { autoMergeCells: function(jq, fields) { return jq.each(functio ...

  6. Hibernate每个具体类一张表映射(使用XML)

    在每个具体类一个表中,数据库中将有三个表但彼此之间没有关系(关联). 根据具体类策略将表格映射到表有两种方法. 由union-subclass元素指定 通过自我为每个类创建表 我们来了解映射的层次结构 ...

  7. 创建一个动作-Action类:

    让我们创建一个Java文件HelloWorldAction.java的Java资源> SRC下一个的包名com.yiibai.struts2与下面的内容. package com.yiibai. ...

  8. 寒城攻略:Listo 教你用Swift 语言编写 IOS 平台流媒体播放器

    先展示播放器效果:   依然继承 Listo 本人的强迫症,还是从最初到完毕完整的写一个攻略来记录一下,这里声明 Listo 本人也是看了非常多的戴维营攻略才总结分享给大家这一篇攻略的. 首先,Lis ...

  9. ubuntu 中wget (下载)命令用法

    Linux wget是一个下载文件的工具,它用在命令行下. 对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器 1.使用wget下载单个文件 ...

  10. Marple表演电影字幕

    119501:15:59,702 --> 01:16:02,782我的幸运死了 而我很清楚是谁杀了她的 (格雷格)My Lucky is dead, and I know perfectly w ...