当前位置: 首页 > article >正文

网络层7——外部网关协议BGP

首先我们来搞清楚一个问题:
那就是为什么要分内部和外部协议?
直接搞同一个协议不就行了吗?
好的,例如我们现在只有内部协议,RIP和OSPF
对RIP协议:最多支持15路由器,无法实现全球联网

对OSPF协议:每个路由器保存一个链路状态数据库
如果要将全世界划分为一个区域
想象一下,链路状态数据库得有多大?
数据分组每查找一次路由表,可能需要经过上千万乃至亿级别的查找
而且路由器的硬件成本也会很大!
所以,没法用
划分为内外协议的本质原因
还是全世界的网络太大了
规模很小时,暴露的问题并不多
但是,一旦规模变得很大时,涉及到的问题的复杂程度将以指数级别的速度增长
因此,需要将问题分割,化简,各司其职
于是,有了内外网络协议的划分和设计

目录

一、BGP协议的特点

1、运行环境

2、BGP路径选择必须解决的几个问题

二、BGP路由选择算法

1、eBGP和iBGP

2、iBGP 和 eBGP的区别

3、BGP路由信息格式

4、BGP路由器转发表的更新

三、三种不同自治系统AS

1、末梢AS

2、穿越AS

3、对等AS

四、BGP路由选择

1、选择本地偏好值高算法

2、选择AS跳数最少算法

3、热土豆路由选择算法

4、BGP标识符最小算法

五、BGP-4四种报文

1、open报文

2、update报文

3、keeplive报文

4、BGP报文格式


一、BGP协议的特点

1、运行环境

相对于内部网关协议RIP和OSPF,
BGP用于不同自治系统之间的路由通信
这就必须要解决一个问题:
那就是不同自治系统的差异问题
不同的自治系统评判路径好坏的标准不同
有的是路径长短、有的是速度、有的是带宽
因此,BGP无法使用任何一个自治系统的标准,也无法兼容
那应该用什么作为BFP寻找最佳路由的标准呢?
还需要考虑更多的因素,综合考量

2、BGP路径选择必须解决的几个问题

我们只是简单举几个例子,例如
政治与安全问题
我们国家的消息,最好不要绕过其他对我们有敌意的国家
否则有可能造成泄密问题

经济问题
路径算法的实现,需要考虑到经济成本
不能开销太大

综上,
到底用什么作为BGP寻找最佳路由的标准呢?
退而求其次,只能只用能否到达终点为标准
首先保证能不能到,其他的,管不了了
事实上,技术上也是可以办到的
但是那会使得BGP协议变得过于复杂
不利于该协议技术的普遍应用
应用成本会很高

二、BGP路由选择算法

1、eBGP和iBGP

一个自治系统有两个不同的路由器:边界路由器和内部路由器

两个边界路由器通信时,必须进行TCP链接(179号端口)
边界路由器之间进行的连接叫做:eBGP连接
他们之间互相发送的逻辑信息格式为:“X  AS1  R1”
    目的为X,AS1是自治系统,R1是边界路由器
意为:R1发送给其他边界路由器,告诉其他边界路由器,
       到达网络X,可以发送给R1路由器,经过AS1自治系统到达

但是,该路由不能仅仅让边界路由器知道
其他内部路由器也应该知道
因此,内部路由器之间也要进行连接
叫做iBGP连接,使用TCP连接
一个AS内部所有的iBGP必须连通
BGP协议不仅运行在AS之间,也运行在AS内部

2、iBGP 和 eBGP的区别

iBGP和eBGP遵循同样的协议BGP、报文格式和属性类型
只是通告方式不一样
对内部路由器来说:
GBP报文来自eBGP,报文可以接收,也可以发送
如果来自iBGP,就不会转发
因此,iBGP端口每收到一个BGP报文
首先判断该报文是来自eBGP还是iBGP

说人话就是:
对iBGP端口来说,内部不能互相传
你告诉我,就到我这就行了,不要再传了

3、BGP路由信息格式

BGP路由 = 前缀 + AS-path + next-path
前缀:目的网路
AS-path:需要途经的自治系统路径
next-path:下一跳,也是整个路径的起点

4、BGP路由器转发表的更新

设想一个情景,如图:


R1发送给R2一个eBGP报文:
“X,AS1,R1”(到达X,需要经过AS1,下一跳是R1)
对AS2的内部路由器R4来说
当收到该报文时,需要做的是:
1、将下一跳改为本自治系统的eBGP对等端口R2
2、在内部使用内部网关协议,找到R4到达R2的最短路径
3、根据最短路径更新下一跳
4、更新转发表
对于其他的内部路由器也是一样的道理
(下一跳使用IP地址)

三、三种不同自治系统AS

末梢、穿越、对等

1、末梢AS

人如其名,末梢AS是最后的网络终点,即不允许其他系统的分组通过自己,不会再传下去,我到头了
末梢AS只从直接连接的AS接收 / 发送分组
但是,末梢AS必须给人家付费才可

末梢系统可以连接多个网络,
这种末梢系统交做多归属网络

2、穿越AS

人如其名
其他系统的数据分组可以通过穿越系统
穿越系统一般具有很好的高速通信干线
为其他系统提供有偿转发分组
注意,是有偿

3、对等AS

A和B之间约定,二者之间的数据分组互传免费
因此叫做对等

4、BGP路由兜圈子问题

为了避免分组在各个自治系统之间兜圈子
因此,对BGP路由信息中,如果AS-path有重复的自治系统
则删除该路由

四、BGP路由选择

1、选择本地偏好值高算法

在BGP路由中有一个属性值叫做本地偏好值
意思是:从本地AS开始,到达同一个网络
         选择一条最好的路径
至于路径好坏的标准,有管理员决定
标准可以是带宽速度、经济等

缺点:一定路径选定,全部的通信都通过该路径
    导致负荷过重,BGP协议无法自适应调整,只能人工修改

如果所有路径本地偏好值都相等,执行下一条算法
选择AS最少算法

2、选择AS跳数最少算法

哪条经过的AS少走哪条,不管AS的大小

缺点:AS少的路径不一定经过的路由器少
有可能只经过一个AS,但是该AS内有100万个路由器
那还玩个锤子

如果本地偏好值一样,经过的AS也一样,
就执行下一跳算法:热土豆路由算法

3、热土豆路由选择算法

核心算法:尽快让分组离开本AS,因此经过本地的路由器越少越好
这部分算法由内部网关协议执行
(其实按照中国人的说法,应该叫做烫手山芋算法,棘手)

如果本地偏好值一样,途径AS数量一样,内部转发出去也一样
上述三个算法都无法算出路径
则执行下一个算法:BGP标识符最小算法

4、BGP标识符最小算法

BGP报文中,首部有四个字节的字段,叫做BGP标识符,记作BGP ID
是一个无符号整数,作为运行BGP路由器的唯一标识
赋予它路由器所有接口中最大IP地址的值
于是,就转发给该接口

五、BGP-4四种报文

刚开始运行时,对等BGP端口交互整个BGP路由表
后期变化时,只更新变化部分

open(打开)、update(更新)、keeplive(保持连通)、notfication(通知)

1、open报文

用来建立BGP连接
建立TCP连接后发送

2、update报文

更新
用于撤销、添加新的BGP路由信息
每次可以撤销多条,但每次只能增加一条

3、keeplive报文

如何得知两个端口之间的TCP连接是否正常工作?
如果使用BGP路由表定期传送
不可取,因为BGP路由表很大
对网络负担大
因此周期性互相传keeplive报文,表示正常工作
keeplive报文只包含BGP报文的通用首部(19字节)

那么隔多久发一次?
每个路由器有一个保持时间计时器
每收到一个BGP报文,该计时器置为0
如果约定时间内不能收到任何BGP报文,则认为对方不能工作

发送kepplive报文的时间为保持时间的1/3
如果对等端保持时间不一致,选小的

保持时间可以置为0,表示该链路总是正常工作
不会发送keeplive报文

BGP协议解决了RIP距离向量“坏消息传的慢”的问题
因为一个路由器可以从很多相邻路由器得到信息

4、BGP报文格式

四种类型的BGP报文使用相同的首部
BGP报文作为TCP报文的数据部分来传送


http://www.kler.cn/a/397594.html

相关文章:

  • Redis五大基本类型——String字符串命令详解(命令用法详解+思维导图详解)
  • go环境搭建
  • 数据研发基础 | 什么是流批一体
  • Springboot采用jasypt加密配置
  • 什么是PostgreSQL,有什么特点
  • Elasticsearch 8.16.0:革新大数据搜索的新利器
  • 数据结构《链表》
  • 基于Java Web 的家乡特色菜推荐系统
  • Redis性能优化——针对实习面试
  • 宝盒云影 3.3.3 | 高清秒播频道丰富,直播源每日更新
  • 大三学生实习面试经历(1)
  • Windows文件夹操作快捷键
  • 深入理解与实践 AWS IAM Roles Anywhere:提升混合云环境的安全性
  • Python爬虫知识体系-----正则表达式-----持续更新
  • leetcode hot100【LeetCode 5.最长回文子串】java实现
  • unity3d————异步加载练习题
  • [A-18]ARMv8/ARMv9-Memory-内存空间的属性(Attributes Properties)
  • OpenCV、YOLO、VOC、COCO之间的关系和区别
  • 前端pdf预览方案
  • Android LiveData 处理数据倒灌的几种措施
  • 计算机视觉 ---图像读取与显示(OpenCV与Matplotlib)
  • ‌EAC(Estimate at Completion)和ETC(Estimate to Complete)
  • c# Encoding.GetEncoding
  • 后端返回大数问题
  • rk3399开发环境使用Android 10初体验蓝牙功能
  • 计算光纤色散带来的相位移动 matlab