BGP 协议概述和数据包分析
最编程
2024-06-18 10:12:37
...
BGP详细介绍
BGP概述
BGP(BorderGatewayProtocol)边界网关协议,是互联网上一个核心的互联网去中心化自治路由协议。
- 英文名称:Border Gateway Protocol
- 中文名称: 边界网关协议
- 缩写名称: bgp
- 传输层协议: tcp
- 服务端口 : 179
BGP理解
如果把广域网抽象成一个城市,其中包含的城域网抽象成城市中的小区,通过接下来的描述,大致就能了解BGP的功能了:
- 小区中的每栋楼象征着一个个的局域网,他们之间的路由信息由小区物业统一管理,我们要去某栋楼,只需要查物业的路由表就行了;
- 现在在这个小区的旁边又建了个新小区,新小区内部结构同上一个相同,这样两个小区内部相互访问没什么问题;
- 接下来问题来了,两个小区之间若想互相访问怎么办?答案是两个小区的物业互相分享一下本小区的路由表,互相都看一下就可以了;
- 随着越来越多的新小区建立,互相分享路由表,这个过程就是BGP协议的工作原理。
BGP的三个表
- 路由表:存放本网络中的路由信息表;
- 邻居表:保存所有BGP邻居的信息;
- BGP表:保存从每个邻居学到的路由信息。
BGP报文
- Open报文:用于建立BGP对等体连接。
- Update报文:用于在对等体之间交换路由信息。
- Notification报文:用于中断BGP连接。
- Keepalive报文:用于保持BGP连接。
- Route-refresh报文:用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新(Route-refresh)能力的BGP设备会发送和响应此报文。
BGP扫描
请求包
经测试,无论发什么请求包都可以得到BGP服务器的响应包,而且响应信息可以解析。
shodan发的包如下:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x1d\x01\x04\x4b\xb8\x00\xb4\xd8\x75\x02\xb4\x00
响应包
目前得到的响应包有如下三种类别:
- 只有OPEN报文
- 只有NOTIFICATION报文
- 有OPEN和NOTIFICATION两种报文
BGP识别
得到BGP服务器的响应信息之后发现,BGP协议的响应报文中有Maker位,即“ffffffffffffffffffffffffffffffff”,可以通过以下识别相应信息中是否以此开头,对BGP协议进行识别。
BGP解析
在识别位后第三个十六进制数表示的是此响应的类型,对照关系如下:
十六进制数 | 响应类型 |
---|---|
01 | OPEN |
02 | UPDATE |
03 | NOTIFICATION |
04 | KEEPALIVE |
05 | ROUTE_REFRESH |
06 | CAPABILIT |
通过判断响应类型确定解析函数(不同响应类型的解析有差异,目前只解析了OPEN类型和NOTIFICATION类型)
OPEN类型解析
以下位数表示以标志位结束位开始进行计数
- 第1、2位表示响应信息长度
- 第3位表示相应类型
- 第4位表示BGP协议版本
- 第5、6位表示自治系统编号(小区唯一标志)
- 第7、8位表示连接时间
- 第9、10、11、12位表示BGP识别码
NOTIFICATION类型解析
以下位数表示以标志位结束位开始进行计数
- 第1、2位表示响应信息长度
- 第3位表示响应类型
- 第4位表示主要错误识别代码
- 第5位表示辅助错误识别代码
主要错误识别码对应关系:
识别码 | 错误类型 |
---|---|
01 | MSG_HDR |
02 | OPEN_MSG |
03 | UPDATE_MSG |
04 | HT_EXPIRED |
05 | STATE_MACHINE |
06 | CEASE |
07 | CAP_MSG |
辅助错误识别码对应关系:
识别码 | 错误类型 |
---|---|
01 | Maximum Number of Prefixes Reached |
02 | Administratively Shutdown |
03 | Peer De-configured |
04 | Administratively Reset |
05 | Connection Rejected |
06 | Other Configuration Change |
07 | Connection Collision Resolution |
08 | Out of Resources |
09 | Hard Reset |
00 | NULL |
上一篇: python 使用哪些开源协议
下一篇: 链接聚合有哪三种方式
推荐阅读
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
第 20 课 SPI 协议细节和裸机程序开发分析
-
RTP 协议分析和详情
-
Linux 网络协议栈:NAPI 机制和处理流分析(图解)
-
AXI 协议(V)-AXI-STREAM 和访问思路分析
-
QUIC 协议分析和 HTTP/3.0
-
PKI 和 SSL 协议分析实验报告
-
数据分析概述:联合学习中的数据安全和隐私保护
-
基于 FRR (V) 的 BGP 协议综合分析:FRR 的 BGP 路由策略
-
基于 FRR 的 BGP 协议综合分析 (I):BGP 协议基础