《BGP设计与实现》一2.2 BGP进程和内存使用

简介:

本节书摘来自异步社区《BGP设计与实现》一书中的第2章,第2.2节,作者【美】Randy Zhang , Micah Bartell,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.2 BGP进程和内存使用

BGP设计与实现
Cisco IOS软件有3种主要的BGP进程:

输入输出(I/O);
路由器(Router);
扫描仪(Scanner)。
图2-1显示了3种BGP进程以及在IOS中所有主要的BGP组件之间的相互作用。

BGP I/O进程处理读、写和执行BGP消息的任务。它为TCP和BGP之间提供了一个接口。一方面,它从TCP套接字(socket)中读取消息,并把它们放到BGP输入队列(Input Queue,InQ)中,以便被BGP Router进程操作。另一方面,积聚在输出队列(Output Queue,OutQ)中的消息也被BGP I/O进程移到TCP套接字中。
image

BGP Router进程是BGP主进程,它负责初始化其他的BGP进程,维护与邻居的BGP会话,处理来自对等体和源自本地网络的入站更新,用BGP表项更新IP RIB,以及向对等体发送更新。特别是,BGP Router进程通过语法分析程序(parser)接收来自命令行接口(Command Line Interface,CLI)输入的命令。BGP Router进程与BGP I/O进程相互作用,并使用每个邻居的队列对更新进行处理(包括发送和接收),如例2-1所示。在所有的有效路径都被安装进BGP RIB中后,BGP Router进程将运行路径选择算法,并且把最佳路径安装进IP RIB。IP RIB和BGP RIB中发生的事件也能够触发BGP Router进程做出适当的反应。例如,当一条路由需要从其他路由选择协议被重分布到BGP中时,IP RIB会通知BGP Router进程更新BGP RIB。

例2-1 BGP队列

image

BGP Scanner进程的主要功能是BGP的内部管理。特别是,BGP Scanner进程对BGP RIB执行周期性的扫描,以确定是否应该删除前缀和属性,以及是否应该刷新路由映射或过滤缓存。这个进程也可以扫描IP RIB,以便确保所有的BGP下一跳仍然有效。如果下一跳不可达,那么所有使用该下一跳地址的BGP表项都会从BGP RIB中被清除。BGP衰减信息也会在每一个周期内被更新。通常,每60秒执行一次扫描。BGP Scanner进程也可以通过语法分析程序接受来自CLI输入的命令,从而改变它的扫描时间。

例2-2是一台Cisco 12000路由器上BGP进程和内存使用情况的快照。“Allocated”(分配)列显示了该进程自创建以来所分配的内存的总字节数。“Freed”(释放)列提供了该进程自创建以来已经释放的内存的字节数。“Holding”(占用)列显示了当前被该进程所消耗的实际内存的字节数。在这个例子中,BGP Router进程消耗了超过34MB的内存,而BGP I/O和BGP Scanner进程分别只消耗6KB的内存。

例2-2 BGP进程和内存使用

image

该例子表明,BGP Router进程占用了BGP使用的大部分内存(即“Holding”列)。BGP I/O和BGP Scanner进程占用的内存则是微不足道的。BGP Router进程的3个主要组件占用了大部分内存:

BGP RIB;
通过从BGP学到的前缀而构成的IP RIB;
从BGP学到的前缀所使用的IP交换组件。
BGP RIB中持有的信息包括网络表项、路径表项、路径属性以及路由映射和过滤列表缓存。通过命令show ip bgp summary的输出可以显示存储这些信息的内存。

IP RIB中,从BGP学到的前缀以两种类型的结构被保存:

网络描述符块(Network Descriptor Blocks,NDBs);
路由选择描述符块(Routing Descriptor Blocks,RDBs)。
IP RIB中的每一条路由针对每一条路径都需要一个NDB和一个RDB。如果该路由是子网化的,还需要额外的内存来维护该NDB。可以使用命令show ip route summary来显示IP RIB直接使用的内存。

BGP Router进程的第三个主要组件具有大量的内存需求,它就是IP交换组件,例如FIB结构。交换路线将在本章后面讲述。

BGP Router进程除了需要用来保存路由选择信息的内存外,也需要少量的内存用于它自身的操作;不过,该进程本身所使用的内存大约在40KB左右,因此,和BGP Router进程消耗的全部内存相比是微不足道的。本章结尾时的案例研究详细描述了这些组件的内存使用。

相关文章
|
3月前
|
Linux
|
23天前
|
存储 Linux 程序员
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
【Linux C/C++ 堆内存分布】深入理解Linux进程的堆空间管理
69 0
|
30天前
|
消息中间件 Linux
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
Linux进程间通信(IPC)教程 Linux共享内存介绍:介绍POSIX共享内存的基本概念、用途和编程实践
22 2
|
1月前
|
Linux 数据安全/隐私保护
进程间通信之共享内存及其shm函数的使用【Linux】
进程间通信之共享内存及其shm函数的使用【Linux】
|
2月前
|
Linux
百度搜索:蓝易云【深入解析Linux进程内存:VSS、RSS、PSS、USS及查看方式】
通过以上方法,你可以深入了解Linux进程的内存使用情况,包括VSS、RSS、PSS、USS等指标,帮助你进行性能优化和资源管理。
40 12
|
2月前
|
网络协议 Linux
【系统DFX】如何诊断占用过多 CPU、内存、IO 等的神秘进程?
【系统DFX】如何诊断占用过多 CPU、内存、IO 等的神秘进程?
106 0
|
3月前
|
存储 JSON 运维
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
【运维】Powershell 服务器系统管理信息总结(进程、线程、磁盘、内存、网络、CPU、持续运行时间、系统账户、日志事件)
49 0
|
3月前
|
Linux
进程通信——共享内存
进程通信——共享内存
41 0
|
4月前
|
存储 消息中间件 算法
Linux进程间通信【共享内存】
Linux进程间通信【共享内存】
59 0
|
4月前
|
存储 监控 安全
C++ 共享内存ShellCode跨进程传输
在计算机安全领域,ShellCode是一段用于利用系统漏洞或执行特定任务的机器码。为了增加攻击的难度,研究人员经常探索新的传递`ShellCode`的方式。本文介绍了一种使用共享内存的方法,通过该方法,两个本地进程可以相互传递ShellCode,从而实现一种巧妙的本地传输手段。如果你问我为何在本地了还得这样传,那我只能说在某些时候我们可能会将`ShellCode`打散,而作为客户端也不需要时时刻刻在本地存放`ShellCode`代码,这能保证客户端的安全性。
46 0

相关实验场景

更多