一、报文种类

1、open报文

        用于建立BGP邻居的连接,协商BGP参数的报文

2、undae报文

        用于BGP邻居间交互路由信息的报文。

3、notification报文

        差错报文,用于报错,且终端邻居关系的报文。

4、Keep alive报文

        用于保持邻居连接的报文,用于保活。

5、route-refresh报文

        用户在策略改变之后,请求邻居重新发送路由信息。

二、报文结构

        BGP报文默认是由两部分组成,分别是BGP报文头和具体的报文内容。

        1、BGP报文头

        marker:占用16字节,默认全F,用于检查BGP邻居头部的消息是否完整。

        length:占用2字节,用于描述BGP报文的总长度,包括了头部和具体部分。

        type:类型,用于描述当前BGP报文类型,分别分1 2 3 4 5这五种类型。

        2、open报文

        version:BGP版本,默认都是版本4.

        my as:用于描述发送报文的BGP路由器所处的AS号,如果对端的AS号和本地配置的不一致,则协商失败,发送notification报文。

        hold time:描述路由器邻居失效的时间,默认情况是Keep alive的3倍,当两端的hold time不一致时需要协商,使用数值低的使用。

        2.1  默认情况下holdtime是keepalive的3倍关系即180秒,keepalive默认60秒。

        2.2  如果从邻居接收到的holdtime和自己的holdtime相同,则不做改变。

        2.3  如果从邻居接收到的holdtime大于自己的holdtime,则不做改变。

        2.4  如果从邻居接收到的holdtime小于自己的holdtime,则协商结果是使用数值小的holdtime执行。

                 2.4.1  如果自己的keepalive值小于协商后的holdtime值除以3,那么不做改变。

                 2.4.2  如果自己的keepalive值大于协商后的holdtime值除以3,那么选用数值小的执行。

        BGP id:用来描述发送该报文的路由器BGP route-id。

        optional parameters length:BGP协商参数字段长度。

        optional parameters:BGP协商参数。

        3、Update报文

        withdrawn  routes length:用来描述失效的路由长度。

        total path attributes length:用来描述携带的属性长度。

        path attributes:携带的属性。

        Network Layer Reachability Information (NLRI):网络层可达信息,用来描述所携带的路由的网络号和掩码长度。

        针对属性不同的路由条目,需要分开update报文发送。

        具有相同属性的路由条目,可以在一条update报文发送。

        withdrawn routes length:如果这个参数不为空,那么下面就回携带的需要删除的路由信息。