前言:在基础设施领域中,网络拓扑图在网络设计规划、施工建设、问题分析中有举足轻重的作用,但是这部分拓扑图目前还是以人工绘制为主。当前市面上有很多网络拓扑自动绘制的工具,但这些工具只是图模型的简单表达,只能孤立呈现单个简单的网络,也没有网络的分层设计理念,距离真实的企业网的网络设计差距非常大。本文就笔者为所在公司探索自动绘制网络拓扑图的经验,希望为将来致力于基础设施研究的同学贡献一部分思路。
前言
在基础设施领域中,网络拓扑图在网络设计规划、施工建设、问题分析中有举足轻重的作用,网络管理员们也是人手一卷网络拓扑图,奉之若珍宝。这些拓扑图基本都是用专业工具手动绘制生成,那么随着时间推移,网络规模越来越大,施工调整越来越频繁,拓扑图的准确性就备受挑战。目前市面上也有很多网络拓扑自动绘制的工具,但这些工具只是图模型的简单表达,只能孤立呈现单个简单的网络,也没有网络的分层设计理念,距离真实的企业网的网络设计差距非常大。从笔者的实施效果来看,自动绘制网络拓扑非常依赖网络本身的设计理念和基础数据的梳理情况,网络管理者的诉求影响也非常大,几乎可以说是“个例个看”,很难做到统一的技术方案。本文就笔者为某司探索自动绘制网络拓扑图的经验,希望为将来致力于基础设施研究的同学贡献一部分思路。
注:目前在拓扑还原问题中还没有出现通用的解决思路,本文只讨论传统的三层网络架构(Three-Tier)在某司的拓扑还原技术探索,同时对于现在发展迅速的叶脊架构(Spine-Leaf),笔者暂无有用的经历可以分享。
“拓扑还原”问题的提出
三层网络架构简单介绍
三层网络架构(Three-Tier)是企业常见的一种组网方案,网络上的相关资料非常多,但大同小异,主要就是接入-汇聚-核心这三层网络架构。
然而真实的企业网络可能远没有上述情况这么简单纯粹,拓扑图中还需要考虑路由器、防火墙、负载均衡等设备,汇聚层内部可能还会分层,连接互联网还需要考虑额外的设计,多数据中心还需要考虑数据交换问题,等等情况不是简单的三层架构可以描述的。
拓扑还原问题,就是让网络设备按合理排列和分布进行自动绘制的问题。
拓扑还原问题的背景情况
目前自动绘制拓扑中有关网络架构的拓扑资料非常少,有的只是纯连接的网络图,缺少架构层级。如果按各个网络设备互联成图,那么广域网中串接各个路由器可能具有一定的表现作用,但是对于主要以交换机互联形式的单个网络区域,纯碎的图并不能对网络管理员有所帮助。主要原因在以下几点:
- 网络设备是有层次的、功能丰富的。譬如交换机就有接入交换机、汇聚交换机、核心交换机等;同时还有具有特定功能的网络设备,比如负载均衡、防火墙、上网行为策略等,虽然这些设备对拓扑影响不大,但显示在拓扑图上却很关键。
- 企业通常会规划多个独立又有连接的网络区域。企业可能会根据业务特点或者回应安全要求,设计多个内部组网但又有一定连接的多个网络区域,例如用于交易的交易网、面向互联网的隔离区、连接数据库的私有网、用于办公的办公网、用于管理设备的带外网等等。
- 网络可能出现同城多机房或异地机房的情况。为了容灾考虑或者扩容的成本选择,网络区域不会固定在某个数据中心内,通常会通过波分设备或运营商专线将多个机房相互连接起来。
- 网络设计存在历史包袱,不存在理想化的模型。尽管三层设计是普遍的共识,但是网络的规模是逐步发展的,考虑规模、成本,并不是所有的企业都能土豪式的将网络整理成标准架构,只能是近似标准。
企业网的拓扑问题远比网络搜索出来的资料复杂的多,展示孤立的一张网络没有实践意义,简单的三层拓扑图难以发挥有效的作用。
拓扑还原问题的共性阻碍
市面上很多NOP产品有拓扑绘制的能力,但实际使用中可用性并不强,主要的原因有以下几点:
- 网络设备的互联关系采集问题。SNMP可以实现设备LLDP关系的采集,但是存量网络并不是所有的设备都支持LLDP采集,并且不同厂商在LLDP协议实现上有所差别。目前业内的经验,自动采集率只能达到80%。
- 网络设备所在架构层次标记问题。没有哪个设备在出厂就知道自己应该放在网络架构中的哪个位置,上下左右应该连接哪类网络设备。
- 网络区域间连接的规范问题。三层架构的标准仅描述了单个网络区域内的规范,但网络区域不是孤立存在的,仅描述网络内部结构对维护没有帮助,涉及相关外网络区域设备时如何展示也是一个需要考虑的问题。
某厂商的拓扑还原技术方案
笔者所在公司也交流过多家网络服务供应商,绝大部分的供应商在拓扑自动绘制上的功能都非常弱,可以说简单的网络用不到,复杂的网络不顶用。业内有某国内知名网络设备商在这一问题上走的比较远,并且在某商银行中应用效果不错。这里简单介绍以下某商银行的应用方案以供参考:
- 网络结构上,某商银行网络比较整齐,各个网络区域彼此是独立的三层架构,最后接入到所在数据中心的核心交换层,由核心交换层完成跨数据中心、区域间、内外网之间的网络访问,而核心交换层也是独立的三层架构。
- 技术上,供应商没有直接依赖LLDP采集能力,而是综合使用了多种技术进行拓扑还原,例如:
- 利用MAC信息标记出每个设备的上行口和上行连接设备。
- 利用流量曲线相似拟合判断端口直连情况。
- 利用设备30位掩码IP这一行业惯例判断物理直连。
但笔者所在公司在网络设计的思路上与某商行差距很大,技术上难以融入所在公司现有系统,难以直接应用该供应商产品,只能期待下次合作。虽然这些技术最终并没有在笔者所在公司实施任何一项能力,但是交流过程中笔者的拓扑还原思路受到了该设备商的启发。
某司的网络特点
由于缺少供应商支持,业内该类型产品也尚未成熟,笔者所在公司决定内部先投石问路,走一走拓扑还原后的应用场景,因此笔者根据所在公司的网络特点和显示基础数据的梳理情况,也设计了拓扑还原的技术方案。
网络区域的规划习惯
某司的网络区域大概分成5类:
- 业务承载类区域:依据业务划分的多种网络,例如交易、行情、报盘、资管,用于IT的研发测试区、数据库私网,用于内部的办公网等。
- 机房核心层区域:每个数据中心有S1S2交换机,用于同城间多机房通过波分设备连接。
- 互联通信类区域:用于异地数据交换的区域,例如对接运营商的互联网出口,对接公有云、异地机房的MSTP专线,以及对接重要的三方机构和客户。
- 辅助类区域:带有工具性质的网络,常用于基础设施管理员实现特定功能,例如流量采集、流量镜像、数据备份、网络管理、运维操作等。
- 带外区域:用来管理所有的网络设备,所有的网络设备以主机的身份接入到带外区的接入交换机,最终连接全国设备,自成一张大网。
已解决的问题
笔者所在公司在基础设施的台账数据上较为完善:
- 所有网络设备有完整的台账,且维护良好,有各自归属的网络区域;
- 使用LLDP采集和人工梳理的方式,基本完成网络设备端口互联关系的梳理,缺失部分对拓扑影响较小;
- 每个设备均有较为合理的标签,表明设备所在的大概的层次,主要包含区域接入、区域汇聚、区域核心、区域边界、机房核心等标签;
拓扑的特殊性问题
然而笔者所在公司的网络设计上不太规整,有许多特殊的问题:
- 很多网络区域不是标准的三层架构,往往是三层+二层混搭。即网络区域内既有接入交换机连接汇聚层也有接入交换机直连核心层。
- 汇聚层可能不只一层设备。有些大网一层汇聚可能不能汇聚完全,需要再次汇聚才能接入核心层。
- 核心层设备不只具有汇聚接入的能力,往往还担任对接其他区域的角色。例如某些核心层设备专门用来对接公网出口。
- 很多设备可能“一身兼多则”。大的网络区域会有专门连接其他区域的核心设备,但有些小的网络就直接使用汇聚层接入的核心层设备。
- 每个设备只记录了一个归属的网络区域,但实际上不同网络区域存在“设备借用”的情况,且没有设备如何借用的记录。
- 某些网络区域存在历史问题,是大二层架构,跨机房直连汇聚层。
某司的拓扑还原方案
在拓扑还原中,不仅要正确显示网络区域内设备的拓扑排列情况,还要“有限度”的展示相关联的网络区域。笔者经过思考,确定了拓扑还原需要解决的核心问题,并拆解成四个子问题,依次解决。
拓扑还原的核心问题
其实拓扑还原的问题很纯粹:
- 给定任意一个主体区域,能否知道要展示的设备以及相关联区域的设备
- 给定任意一个设备,能否知道它在某个图中其属的主体区域或关联区域在图中的位置(这里的位置主要指层级和顺序)
- 主体区域和相关区域如何布局
绘制范围问题
针对核心问题1,其实就是绘制范围的问题,主要解决当用户需要查看某个网络区域拓扑时,这个拓扑需要展示哪些设备。这里不考虑拓扑如何排列,指考虑如何筛选出相关的设备。
筛选步骤如下:
i. 定义与非自身所在区域相连的交换机设备为边界设备;
ii. 获取某数据中心指定的网络区域内的所有设备得到 <集合A> ;
iii. 获取 <集合A> 中所有交换机设备 <集合As> 的下一跳设备 <集合N> ,筛选出的所有边界设备得到 <集合Ne> ;
iv. 获取 <集合A> 和 <集合Ne> 的所有的下一跳设备得到 <集合NN> ;
v. <集合A>、<集合Ne>、<集合NN> 的并集 <集合S> 即为展示该区域需要的所有设备;
vi. 找到 <集合S> 中所有设备间的互联关系。
绘制布局问题
对于核心问题3,笔者选用的是网格布局:
i. 针对不同类型的网络区域设计了不同的网格布局模板,模板中包含层、块、行、格的概念;
ii. 当查询出绘制范围后,对设备进行分层和分组,将每组设备放入指定的布局块中,如果一层有多个块,则向下折块;
iii. 每个布局块每行只能展示固定网格数量的设备,超出的部分折行排列,计算每个设备在布局中的网格位置;
iv. 计算整体拓扑的占行,并给每个网格的设备分配Y轴偏移单位长;
v. 将空下来的网格删除,拉伸每块设备居中计算每个网格的设备分配的X轴偏移单位长。
设备层级问题
笔者所在公司设计的五个网络角色:区域接入、区域汇聚、区域核心、区域边界、机房核心,这种分类太粗,不能满足拓扑绘制的布局要求。这里笔者将网络层级进行了细化,通过染色法分析每个设备的连接关系的状况,根据设备的染色情况计算设备的层级:
i. 找到绘制范围内所有设备的互联关系 A -> N ;
ii. 根据 A -> N ,计算下一跳连接关系 A -> N -> NN,过滤出N不是交换机的关系,得到 A -> NN ;
iii. 对 A -> N 和 A -> NN 取并集,得到纯交换机的拓扑关系集 As -> Ns ;
iv. 根据连接关系区域标签和层级标签,对连线进行染色;
v. 按设备统计染色数量,得到设备的染色;
vi. 根据设备染色,计算设备的层级以及是否边界设备、是否是孤儿设备、是否是核心区直连等信息;
笔者这里大胆推测所谓的拓扑层级其实主要指的是交换机的拓扑层级,其他类型的设备对层级没有影响,因此笔者在(i - iii)步中,先计算出了纯交换机的网络互联关系。
对于染色方案层级方案,这里以业务承载区进行举例:
业务承载区最多划分为13层,从下到上依次是:
1. 本区域接入层:本区域的所有区域接入设备
2. 本区域汇聚层(低):本区域有接入设备直连的汇聚层设备
3. 本区域汇聚层(中):本区域不连接接入层和核心层的汇聚层设备
4. 本区域汇聚层(高):本区域中直连核心层的设备
5. 本区域未知层级:本区域中无法计算出染色的设备
6. 外业务区域核心层:外区域借用本区域核心层的核心设备
7. 本区域核心层(低):本区域直连汇聚层的核心层设备
8. 本区域核心层(中):本区域不连接汇聚层和机房核心的核心层设备
9. 本区域核心层(高):本区域连接机房核心的核心层设备
10.互联通信区接入层:本区域所连互联通信区的接入层设备
11.互联通信区核心层:本区域所连互联通信区的核心层设备
12.机房核心层边界层:本区域所连机房核心层的区域边界设备
13.机房核心层S1S2层:本区域所连机房核心层的S1S2设备
注:规则重叠下按顺序匹配即可
设备成对问题
网络设计具备冗余的特点,因此除部分接入层交换机外,所有的交换机都是成对出现。如果一个层级内展示多个设备,那么我们希望有互联关系的一对设备能相邻展示。
这个问题描述起来很简单:在互联关系 As->Ns 中,设备 Ai 所有的邻居中和设备 Ai 互联关系最像的那个邻居就是设备 Ai 的另一对。这个思路不一定完全正确,在互联关系基本完备的情况下,正确率很高。
这里列一下计算设备对的方法:
i. 根据互联关系 As -> Ns ,计算每个设备 Ai 和它的邻居 Nij ,把 Ai 并入 Nij 得到 Ai 的邻居 N'ij ;
ii. 根据互联关系 As -> Ns ,计算每个设备 Ai 的邻居 N'ij 的邻居 NNijk ,把 N'ij 并入 NNijk 得到Ai 的邻居 N'ij 的邻居 NN'ijk ;
iii. 比较 Ai -> N'ij 和 Ai -> N'ij -> NN'ijk ,NN'ijk 中和 Ai -> N'ij 重合度最高的 N'ij 即为设备 Ai 的另一对,并标记出设备对编号 NUM_pair;
iv. 在布局组内排序时,按 NUM_pair 顺序排列,在组内每次排两个网格,保证一对设备在一起展示。
设备分组问题
每一层级下设备需要分组展示,分组主要解决的是本层级设备如果连接了多个上层级设备,那么我们希望具有相同上层级设备的设备能够聚集在一起。
设备分组问题是基于成对问题后处理的,方法如下:
i. 根据互联关系 As -> Ns ,计算每个设备 Ai 和它的邻居 Nij;
ii. 对邻居 Nij 所有的设备对编号 NUM_pair 按层级从低到高排序,最低层级的设备对编号 NUM_pair 为分组编号;
iii. 在布局分层排序时,无邻居关系的排一组,区域相同且分组编号相同的排一组。
实施效果
拓扑还原后,较为简单的网络区域基本上可以直接适用自动绘制的结果。对于复杂一点的网络区域,还原后拓扑层级和分块比较明显,辅以少量手动调整可以即可完成展示。
后续问题
本次拓扑还原的方案主要还是针对交换机层面的还原结果,对于非交换机设备,还原的位置还比较差,需要进一步优化。