一、BGP简介

1、自治系统(Atuonomous System):由同一个技术管理机构管理、使用同一选路策略的一些路由器的集合。自治系统内部的路由协议--IGP。自治系统之间的路由协议--EGP。AS号是2字节(4字节)。两字节范围取值1-65535,其中1-64511为公有,64512-65535为私有。

2、IGP主要有RIP、OSPF、ISIS,着重于发现和计算路由,EGP主要有BGP,着重于控制路由的传播和选择最优的路由。

3、BGP属于边界网关路由协议,是一种增强的距离矢量路由协议

AS内部使用IGP来计算和发现路由,如OSPF,ISIS,RIP等。

AS之间使用BGP来传递和控制路由。

(1)可靠的路由更新机制;

丰富的Metric度量方法;

从设计上避免了环路的发生;

BGP为路由附带属性信息,支持 CIDR,支持丰富的路由过滤和路由策略。

(2)BGP可靠的路由更新:

传输协议:TCP,端口号179(目的端口号 ),无需周期性更新

路由更新:只发送增量路由

周期性发送keepalive报文检测 TCP的连通性

4、BGP报文种类

BGP通过报文的交互完成邻居建立、路由更新等操作,共有Open、Update、Notification、Keepalive和Route-refresh等5种报文类型。

(1)Open:负责和对等体建立邻居关系

(2)KeepAlive:该消息在对等体之间周期性地发送,用以维护连接

(3)update:该消息被用来在BGP对等体之间传递路由信息

(4)Notification:当BGP Speaker检测到错误的时候,就发送该消息给对等体

(5)Route-refresh:用来通知对等体自己支持路由刷新能力

Open报文:是TCP连接建立后发送的第一个报文,用于建立BGP邻居之间的连接关系。BGP邻居在接收到Open报文并协商成功后,将发送Keepalive报文确认并保持连接的有效性。确认后,BGP邻居间可以进行Update、Notification、Keepalive和Route-refresh报文的交换。

Update报文:用于在BGP邻居之间交换路由信息。Update报文可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。

一条Update报文可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性。所有包含在一个给定的Update报文里的路由属性适用于该Update报文中的NLRI(Network Layer Reachability Information)字段里的所有目的地(用IP前缀表示)。

一条Update报文可以撤销多条不可达路由。每一个路由通过目的地(用IP前缀表示),清楚地定义了BGP路由器之间先前通告过的路由。

一条Update报文可以只用于撤销路由,这样就不需要包括路径属性或者NLRI。相反,也可以只用于通告可达路由,就不需要携带撤销路由信息了。

Notification报文:当BGP路由器检测到错误状态时,就向邻居发出Notification报文,之后BGP连接会立即中断。

Keepalive报文:BGP路由器会周期性的向邻居发出Keepalive报文,用来保持连接的有效性。

Route-refresh报文:Route-refresh用于在改变路由策略后请求对等体重新发送路由信息。

BGP对等体交互过程

BGP路由器报文交互过程:Idle状态是BGP初始状态。在Idle状态下,BGP路由器拒绝邻居发送的连接请求。只有在收到本设备的Start事件后,BGP路由器才开始尝试与其邻居进行TCP连接,并转至Connect状态。

在Connect状态下,BGP路由器启动连接重传定时器(Connect Retry),等待TCP完成连接。

如果TCP连接成功,那么BGP路由器向邻居发送Open报文,并转至OpenSent状态。

如果TCP连接失败,那么BGP路由器转至Active状态。

如果连接重传定时器超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器继续尝试与其邻居进行TCP连接,停留在Connect状态。

在Active状态下,BGP路由器总是在试图建立TCP连接。

如果TCP连接成功,那么BGP路由器向邻居发送Open报文,关闭连接重传定时器,并转至OpenSent状态。

如果TCP连接失败,那么BGP路由器停留在Active状态。

如果连接重传定时器超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器转至Connect状态。

在OpenSent状态下,BGP路由器等待邻居的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。

如果收到的Open报文正确,那么BGP路由器发送Keepalive报文,并转至OpenConfirm状态。

如果发现收到的Open报文有错误,那么BGP路由器发送Notification报文给邻居,并转至Idle状态。

在OpenConfirm状态下,BGP路由器等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。

在Established状态下,BGP路由器可以和邻居交换Update、Keepalive、Route-refresh报文和Notification报文。

idle状态下每32秒进行TCP连接,进入connect状态,没有TCP连接进入Active状态,连接建立成功进入OpenSent状态,互相收发open报文,进入OpenConfirm状态,互相收发Keepalive报文,进入最后的Established状态。

5、BGP数据库

(1)IP路由表(IP-RIB):全局路由信息库,包括所有IP路由信息(dis ip routing-table)

(2)BGP路由表(Loc-RIB):BGP路由信息库,包括本地BGP Speaker选择的路由信息(dis bgp routing-table)

(3)邻居表:对等体邻居清单列表

(4)Adj-RIB-In:对等体宣告给本地Speaker的未处理的路由信息库

(5)Adj-RIB-Out:本地Speaker宣告给指定对等体的路由信息库

6、基于TCP连接的BGP邻居关系

(1)BGP邻居分为IBGP(自治系统内邻居)和EBGP(自治系统外邻居)。

(2)在建立邻居过程中,使用回环地址需要配置更新源为回环口,否则会导致邻居建立失败。命令如下:
bgp 100

peer 2.2.2.2 as-number 100

peer 2.2.2.2 connect-interface loopback 0

对于EBGP,一般使用环回口来建立邻居,环回口使用静态路由来打通。除了需要配置更新源外,还需要配置跳数,因为对于EBGP来说,TTL数值默认为1,当经过一跳后,TTL减为0,所以需要手动配置跳数来避免TTL减到0。(IBGP的TTL数值为255)

bgp 100

peer 3.3.3.3 as-number 200

peer 3.3.3.3 connect-interface loopback 0

peer 3.3.3.3 ebgp-max-hop              //配置EBGP多跳,默认为255,后面可以跟数字指定跳数

基本配置:

首先配置AR1-AR5的端口地址和AS 200内的OSPF:

AR1:int lo0ip address 1.1.1.1 32int lo1ip address 11.1.1.1 24int g0/0/0ip address 10.1.12.1 24AR2:int lo0ip address 2.2.2.2 32int g0/0/0ip address 10.1.12.2 24int g0/0/1ip address 10.1.23.2 24ospf 100 router-id 2.2.2.2area 0network 2.2.2.2 0.0.0.0network 10.1.23.2 0.0.0.0AR3:int lo0ip address 3.3.3.3 32int g0/0/0ip address 10.1.34.3 24int g0/0/1ip address 10.1.23.3 24ospf 100 router-id 3.3.3.3area 0network 3.3.3.3 0.0.0.0network 10.1.23.3 0.0.0.0network 10.1.34.3 0.0.0.0AR4:int lo0ip address 4.4.4.4 32int g0/0/0ip address 10.1.34.4 24int g0/0/1ip address 10.1.45.4 24ospf 100 router-id 4.4.4.4area 0network 4.4.4.4 0.0.0.0network 10.1.34.4 0.0.0.0AR5:int lo0ip address 5.5.5.5 32int g0/0/1ip address 10.1.45.5 24

然后,配置AR1、AR2、AR4、AR5的BGP

AR1:bgp 100                            //AS号router-id 1.1.1.1                   //router-idpeer 10.1.12.2 as-number 200        //使用端口地址建立邻居关系network 1.1.1.1 32                 //宣告网络network 10.1.12.0 255.255.255.0network 11.1.1.0 24AR2:bgp 200router-id 2.2.2.2peer 10.1.12.1 as-number 100 dis bgp peer                             //查看bgp邻居情况peer 4.4.4.4 as-number 200                 //使用AR4的lo0地址建立邻居关系peer 4.4.4.4 connect-interface lo 0            //手动设置更新源为回环口network 2.2.2.2 32network 10.1.12.0 24network 10.1.23.0 24 AR4:bgp 200router-id 4.4.4.4peer 2.2.2.2 as-number 200peer 2.2.2.2 connect-interface lo 0peer 5.5.5.5 as-number 300peer 5.5.5.5 connect-interface lo 0peer 5.5.5.5 ebgp-max-hop 2                   //手动配置EBGP最大跳数network 4.4.4.4 32network 10.1.34.0 24network 10.1.45.0 24 quitip route-static 5.5.5.5 32 10.1.45.5AR5:bgp 300router-id 5.5.5.5peer 4.4.4.4 as-number 200          peer 4.4.4.4 connect-interface lo 0peer 4.4.4.4 ebgp-max-hop 2network 5.5.5.5 32network 10.1.45.0 24quitip route-static 4.4.4.4 32 10.1.45.4dis bgp routing-table                          //查看BGP路由

此时各个邻居正常建立,但路由是不通的,AR5无法PING通AR1:

7、BGP路由通告原则

(1)连接一建立,BGP Speaker将把自己所有BGP路由通告给新对等体;多条路径时,BGP Speaker只选最优的给自己使用;BGP Speaker只把自己使用的最优路由通告给对等体。

(2)BGP Speaker从EBGP获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP)

从EBGP获得的路由,下一跳地址是AS外的地址,其他路由器是没有该条路由的,这样当BGP Speaker将EBGP发给IBGP时,收到的路由会因为下一跳将不可达;为保证IBGP下一跳可达,手动设置改下一跳为本地,也就是传递路由时,将NextHop地址变更为自己建立邻居使用的地址,从而保证其他路由器收到后,该路由NextHop地址一定可达。

保证nexthop一定可达,这条路由就被标记为最优路由,就可以继续通告给其他对等体,非最优路由是不会被通告给其他对等体的。

bgp 100

peer 1.1.1.1 as-number 100

peer 1.1.1.1 next-hop-local

以第6条案例为例,更改前的bgp routint-table

进行如下配置后,NextHop地址变更为2.2.2.2(也就是AR2和AR4建立邻居关系使用的回环口地址)

AR2:

bgp 200

peer 4.4.4.4 next-hop-local

(3)BGP Speaker从IBGP获得的路由不会通告给它的IBGP邻居,从而防止环路,这也叫IBGP的水平分割。

还是以第6条为例,AR5去往AR1的数据包,到达AR3时,因为AR3没有去AR1的路由,就会把数据包丢掉,因此AR5、AR1无法互通。

解决方案:IBGP全互联

IBGP逻辑全互联,会导致AS内部的路由器需要维护更多的IBGP会话,可以使用路由反射器和联盟这两个工具来简化

(4)BGP Speaker从IBGP获得的路由是否通告给 它的EBGP对等体要依靠IGP和BGP同步的情况来决定。华为设备里,默认关闭这个功能,且无法打开。

8、BGP路由的宣告途径

(1)network 命令,使用的正掩码。BGP中network的是路由信息,而不是OSPF中的接口信息。路由表中的路由都可以在BGP中精确的宣告,网络位和掩码要严格匹配,不要求接口下必须有这个地址。

(2)import-route命令,类似于OSPF

bgp 200

import-route ospf

import-route direct

华为NP课程笔记7-BGP1相关推荐

  1. 斯坦福大学李飞飞团队图像分类课程笔记

    斯坦福大学李飞飞团队图像分类课程笔记 Stanford image classification course notes 这是斯坦福CS231n课程图像分类基础知识. 目标:这一节先介绍图像分类基本 ...

  2. Udacity机器人软件工程师课程笔记(五)-样本搜索和找回-基于漫游者号模拟器-自主驾驶

    9.自主驾驶 在接下来的环节中,我们要实现漫游者号的自动驾驶功能. 完成这个功能我们需要四个程序,第一个为感知程序,其对摄像头输入的图片进行变换处理和坐标变换使用.第二个程序为决策程序,功能是帮助漫游 ...

  3. CS231n课程笔记翻译:图像分类笔记(下)

    译者注:本文翻译自斯坦福CS231n课程笔记image classification notes,课程教师Andrej Karpathy授权翻译.本篇教程由杜客进行翻译,ShiqingFan和巩子嘉进 ...

  4. CS231n课程笔记翻译:图像分类笔记(上)

    译者注:本文翻译自斯坦福CS231n课程笔记image classification notes,由课程教师Andrej Karpathy授权进行翻译.本篇教程由杜客翻译完成.ShiqingFan对译 ...

  5. Coursera吴恩达《优化深度神经网络》课程笔记(1)-- 深度学习的实用层面

    红色石头的个人网站:redstonewill.com Andrew Ng的深度学习专项课程的第一门课<Neural Networks and Deep Learning>的5份笔记我已经整 ...

  6. Coursera吴恩达《神经网络与深度学习》课程笔记(3)-- 神经网络基础之Python与向量化

    红色石头的个人网站:redstonewill.com 上节课我们主要介绍了逻辑回归,以输出概率的形式来处理二分类问题.我们介绍了逻辑回归的Cost function表达式,并使用梯度下降算法来计算最小 ...

  7. 数据挖掘课程笔记6 : Numpy、Pandas和Matplotlib包基础知识

    #2018-03-22 10:23:16 March Thursday the 12 week, the 081 day SZ SSMR http://blog.csdn.net/eastmount/ ...

  8. 西湖大学张岳老师NLP课程笔记1 Introduction

    西湖大学张岳老师NLP课程笔记1 Introduction 参考资料 B站链接 课程主页 <Natural Language Processing: A Machine Learning Per ...

  9. 【CS231n】斯坦福大学李飞飞视觉识别课程笔记(四):图像分类笔记(上)

    [CS231n]斯坦福大学李飞飞视觉识别课程笔记 由官方授权的CS231n课程笔记翻译知乎专栏--智能单元,比较详细地翻译了课程笔记,我这里就是参考和总结. [CS231n]斯坦福大学李飞飞视觉识别课 ...

  10. CS231n课程笔记翻译3:线性分类笔记

    译者注 :本文 智能单元 首发,译自斯坦福CS231n课程笔记 Linear Classification Note ,课程教师 Andrej Karpathy 授权翻译.本篇教程由 杜客 翻译完成, ...

最新文章

  1. 关于卡券系统设计--待续
  2. 点击一百万次(详解)——bugku
  3. 强化学习(十七) 基于模型的强化学习与Dyna算法框架
  4. C算法编程题(一)扑克牌发牌
  5. Windows——系统盘隐藏分区功能
  6. 怎么在数据库服务器解压文件,数据库服务器9怎么解压
  7. oracle报错00838,oracle11g的内存分配不当,导致的错误ORA-01034,ORA-00838,ORA-27101
  8. Android UI之困 横跨四个屏幕的战争
  9. java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题...
  10. 【翻译】Prometheus 2.4.0 新特性
  11. 小白python教学视频教程_小白零基础入门Python开发全套完整版
  12. powerbuilder只能支持cp850字符集吗_杜比全景声是什么?哪些电视支持杜比全景声...
  13. nginx普通配置/负载均衡配置/ssl/https配置
  14. [机器学习]-[数据预处理]-中心化 缩放 KNN(二)
  15. essential c++源码_Goldenmask - 一键化保护你的 Python 源码
  16. mysql如何输出一句话_MySQL/ACCESS导出一句话拿WebShell后门命令
  17. 两年半php,两年半,我收获了什么?
  18. AdminLTE登录页设置背景图片
  19. android webview加载H5链接时 没有加载权限弹框的问题
  20. Java实现短信验证

热门文章

  1. 空间相关性分析:空间权重矩阵
  2. 安卓编程用什么软件_手机上能安装PLC编程软件吗?为什么?
  3. c语言贪吃蛇 纯c,纯C语言贪吃蛇游戏
  4. 排名前5位的免费Java电子书
  5. java私塾 shiro_第二章:Shiro入门——深入浅出学Shiro细粒度权限开发框架——私塾在线原创...
  6. 思科模拟器之工大瑞普版(u7)下载地址
  7. 电子技术专业基础与实务(中级)考试经验
  8. HTML代码页面无法跳转为什么,html跳转新页面代码_html页面跳转代码
  9. Flowable官方指定中国社区成立了
  10. 一年中所有节日的排列顺序_中国传统节日有哪些 按顺序排列全部