简介:网络拓扑图绘制与编辑工具源码包,面向网络管理员、运维工程师及需要设计网络架构的开发者,可用于规划网络、定位故障、分配资源等场景,无论小型办公网络还是大型数据中心都能借助它快速梳理设备与链路关系。压缩包共507个文件,大小2.65MB,包含285个svn-base版本库记录、71个xml界面配置、60个png图形资源及23个gif动态图示,另有js、jsp、css、java等前后端源码,其中xml与properties负责界面和参数配置,js与jsp实现前端交互与页面逻辑,便于二次开发定制拓扑工具。目前已有1083人学习下载。资源提供完整的项目工程结构,涵盖图形编辑器核心模块与常见拓扑图形元素,既能用于物理拓扑、逻辑拓扑等制图教学,也可支撑后续功能扩展,如添加自定义图标或自动发现网络设备,还能对照学习拓扑编辑器的前后端实现思路。
1. 网络拓扑图:图上每条线,都是排障时的证据
网络拓扑图最大的价值,不是画出来漂亮,而是排障时能救命。我刚接手某公司的网络时,面前是一张三年没更新过的图纸:图上核心交换机画了一台,机房实际躺着两台做堆叠的设备。后来办公网半夜中断,我对着旧图找了一整夜,最后发现问题根源恰恰是图上没标的那条堆叠链路。做网络运维的人大多有类似体会,一张拓扑图如果信息标注不全,还不如没有。
这份网络拓扑图资源整理了从信息模型、绘制规范、参数标注到踩坑经验的一整套做法,核心结论只有一句话:图上每一条线,都要能回答三个问题——什么介质、跑什么协议、带宽多大。适合刚入门的网络工程师照着画第一张图,也适合运维老手拿来做图纸自检清单。
2. 拓扑图的信息模型:先定物理还是逻辑,再谈画法
2.1 物理拓扑与逻辑拓扑:别把两张图画成一张
动手画图之前,我习惯先问一句:这张图给谁看、解决什么问题。这不是套话。物理拓扑和逻辑拓扑表达的是两套完全不同的信息,硬塞进一张图里,图面会迅速失控,排障时反而被冗余连线干扰。
物理拓扑画的是设备、接口、线缆的真实连接关系:核心交换机的哪个端口接到哪台接入交换机的哪个端口,中间是光纤还是铜缆,链路拐进哪个弱电井。它的读者是机房维护和硬件排障的人,断电、换板卡、修光模块时用的是它。
逻辑拓扑画的是业务视角:VLAN 划在哪个网段,OSPF 在哪些设备之间建邻接,防火墙两侧是什么安全区域,流量从用户终端到服务器端经过几跳。它的读者是规划网络和排查业务连通性的人,VLAN 不通、路由丢失、策略拦截时看的是它。
两者的关系是:物理拓扑决定了逻辑拓扑的下限,但逻辑拓扑不是物理拓扑的缩放。比如两台交换机做了链路聚合,物理上是两条线,逻辑上就是一个聚合口。把两张图混在一起画,图面全是重复线,拓扑的主线反而看不清。
我一般把两张图分成两个文件,文件名直接写明「物理」或「逻辑」。下面这个对比表,新手可以先拿它判断当前要画哪一类:
| 对比项 | 物理拓扑 | 逻辑拓扑 |
|---|---|---|
| 核心要素 | 设备、接口、线缆、配线架 | 子网、VLAN、路由、安全区域 |
| 典型读者 | 机房维护与硬件排障 | 网络规划与业务排障 |
| 更新时机 | 硬件变更、链路调整 | 业务调整、分区变更 |
| 常见图素 | 光纤、光模块、堆叠线 | 防火墙区域、VRF、OSPF 区域 |
需要特别提醒的是,逻辑拓扑里的防火墙、负载均衡这类设备,默认画成「区域边界」而不是一颗普通交换机图标,否则策略关系完全看不出来。
2.2 核心/汇聚/接入:三层架构的图面布局与标注
最常见的园区网拓扑是三层架构:接入层在底部,汇聚层在中间,核心层在顶部,再往上走是出口区的防火墙和运营商专线。画图时流量方向我统一按自下而上走,少数项目按数据流从左到右也可以,但整张图必须同一个方向,不能一半上下、一半左右。
每一层画完后,用一条水平虚线或一个色带把层级隔开,在右侧标注「接入层 / 汇聚层 / 核心层 / 出口区」。这个细节看起来多余,实际非常有用:新人瞄一眼就知道某台设备属于哪个层级,把故障定位到「接入层上不去」还是「核心层丢包」能快很多。
层级之间的链路标注要尽量双向。我画上联口时,会按「上行设备端口 ↔ 下行设备端口」的格式写,例如「CORE-AB-01 GE0/0/1 ↔ ACC-AB-01 GE0/0/48」,而不是只写「上联 10G」。因为排障时常常要顺着物理连接逐跳核对,端口号缺失意味着每查一跳都得登录设备敲状态命令,效率完全不同。接入交换机上联汇聚的口通常是 Trunk,Trunk 上的 native VLAN 要显式标出来,我踩过好几次「图只标了允许 VLAN 10-20、漏标 native VLAN」导致的放行错乱。
每个设备节点至少要标三样:设备命名、管理 IP、角色。命名建议用「角色-位置-序号」格式,比如 ACC-AB-01 表示 A 栋 B 机房的第一台接入交换机;即使图纸换过好几任人,新人也能从命名推断设备大概位置,不用先翻台账。
VLAN 标注我习惯分两行:一行写范围,一行写用途。比如「VLAN 100 / 管理段」「VLAN 200-210 / 办公业务」,避免整张图十几个 VLAN 数字堆在一起,谁都记不住哪个数字对应什么业务。这些看似细碎的规范,决定了这张图三个月后还能不能当准图用。
2.3 信息标注规则:IP、VLAN、端口、链路,一个都不能少
拓扑图画得好不好,差距全在标注密度。我见过不少设备框排得整整齐齐、但一条链路标注都没有的图,这种只能叫设备摆放图,排不了障。下面这份标注清单,每画完一轮图我都照着逐条核对:
| 标注对象 | 必填项 | 说明 |
|---|---|---|
| 设备 | 设备命名、管理 IP、角色 | 命名按「角色-位置-序号」 |
| 接口 | 设备名 + 接口编号 | 双向标注,两端都要出现 |
| 链路 | 介质、带宽、Trunk 或 Access 状态 | 光纤标明速率与距离 |
| 子网 | 网段、掩码、网关 | 优先标注在逻辑拓扑 |
| 安全设备 | 区域名、策略编号 | 图面不展开策略细节 |
| 外联 | 运营商名、带宽、对端 IP | 专线要标对端节点 |
标注不是一次性工作,每次变更(加设备、换链路、调 VLAN)都必须同步更新。我给自己定过一条死规矩:图上标注与现网不一致,变更记录就不算完成。这个规矩一开始执行很痛,但坚持半年后,图纸准确率会有肉眼可见的回升。颜色也可以辅助分区,业务网、管理网、外联网用不同颜色,并在右下角固定放一个图例;很多绘图工具支持把颜色存成模板,后续画图直接复用,省得每次重调。
3. 从零绘制网络拓扑图:工具选型与五步实操流程
3.1 工具选型:没有最好,只有边界
画拓扑图这些年,我的结论是:工具真不是最重要的,标注规范才是。但选错工具确实会拖慢效率。这里把主流选择的使用边界说透。
draw.io(现在叫 diagrams.net)免费、支持本地文件、能导出 SVG/PNG/PDF,图层和样式足够用,最适合个人维护、中小团队用 Git 管理图纸文件。缺点是多人同时在线编辑体验一般,网络不稳时保存容易冲突。Visio 是老牌工具,图标丰富,适合公司已采购授权、需要输出对外汇报图的场景,缺点是授权成本高、文件格式难以做版本 diff。亿图上手最快、模板多,适合完全没画过拓扑图的新手起步,或者内部培训带教用。PPT 不推荐用于正式运维图纸,但临时给上级画个流程示意完全够,注意它没有图层概念,后续调整很痛苦,不要拿它当长期准图。
如果团队不超过五个人,我优先推荐 draw.io,理由很实际:文件本质是 XML 文本,可以进 Git,改一个接口标注都能在 diff 里看到差异,而且任何文本编辑器都能打开。图纸也是资产,资产就该有版本历史。工具对比放一张表,方便决策:
| 工具 | 上手成本 | 协作方式 | 版本管理 | 推荐场景 |
|---|---|---|---|---|
| draw.io | 低 | 本地文件 + Git/SVN | 可直接 diff | 运维团队日常维护 |
| Visio | 中 | 文件流转 | 不支持 | 对外汇报、正式交付 |
| 亿图 | 极低 | 文件流转 | 弱 | 新手起步、教学演示 |
| PPT | 低 | 文件流转 | 无 | 临时示意,不做准图 |
3.2 五步流程:从设备清单到成图
第一步,先收集设备清单,不要凭记忆画。我一般登录核心交换机,用 LLDP/CDP 抓一次邻居关系,再抓 ARP 表,生成一份「设备 + 接口 + 邻居」的草稿。命令大致是这样:
# 在核心交换机执行,抓直连设备、本地接口、对端接口 show lldp neighbors detail | grep -E "Local Port|System Name|Port id|Port Description"不同厂商的命令格式略有差异,但思路一样:LLDP 邻居表就是物理拓扑的地基。设备不支持 LLDP 时,可以用 SNMP 抓 ifIndex 与 ifDescr 凑出接口清单,虽然信息少一些,但比猜靠谱。
第二步,搭骨架。按「接入层 → 汇聚层 → 核心层 → 出口区」的顺序把设备框放上去,先不连线。此时把图层规划好,我习惯设备放「设备层」、连线放「链路层」、标注放「标注层」,后面调整互不遮挡。
第三步,连线。先接接入到汇聚,再接汇聚到核心,最后画出口区和专线。连线时顺手把端口号写进线标签,不要攒到最后补,否则必然漏标。
第四步,标参数。按第 2 章的标注清单逐项核对:设备名、管理 IP、接口、链路带宽、VLAN、图例。参数齐了,图面信息才算完整。
第五步,自检。检查三件事:图例是否存在、版本号和日期是否更新、有没有悬空线(只连了一端)。悬空线是拓扑图最典型的低级错误,我每次画完都回头数一遍每条线两端的连接点。
这里给一段 draw.io 的 XML 模板,就是一个核心交换机接一台接入交换机的骨架,可以直接用文本编辑器打开修改,也可以导入 draw.io 再拖拽微调:
<mxfile> <diagram name="core-access"> <mxGraphModel dx="800" dy="600" grid="1" gridSize="10"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="core" value="CORE-AB-01 10.10.0.1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#ffe6cc;" vertex="1" parent="1"> <mxGeometry x="320" y="40" width="180" height="60" as="geometry" /> </mxCell> <mxCell id="acc" value="ACC-AB-01 10.10.1.1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;" vertex="1" parent="1"> <mxGeometry x="320" y="320" width="180" height="60" as="geometry" /> </mxCell> <mxCell id="link" value="10G 光纤 Trunk VLAN 10-20" style="endArrow=none;html=1;strokeWidth=2;" edge="1" parent="1"> <mxGeometry relative="1" as="geometry"> <mxPoint x="410" y="100" as="sourcePoint" /> <mxPoint x="410" y="320" as="targetPoint" /> </mxGeometry> </mxCell> </root> </mxGraphModel> </diagram> </mxfile>这段 XML 的要点:mxCell 的 id 不能重复,vertex 表示节点、edge 表示连线;value 里的「 」是换行符,用于把设备名和 IP 堆叠显示;style 里 fillColor 控制设备颜色,strokeWidth 控制链路粗细。团队里有人会写脚本的话,甚至可以用代码批量生成几十台设备的初始图纸,导入后再人工布局,能省掉大量拖拽摆放的时间。
3.3 图层与模板:让图纸变成活资产
很多新手画图是「一次性产物」:画完发给同事,之后再也不打开。要让图纸活起来,有两个习惯值得养成。第一个是图层分离,设备、链路、标注各占一层,改链路不挪设备。第二个是模板复用,把常用的三层架构、出口区、双机热备组件存成绘图工具的自定义库,新项目直接拖模板,图面风格统一,图例都不用重新画。
文件命名也建议固定格式,比如「物理拓扑_某园区_v2025.06.xml」「逻辑拓扑_某园区_v2025.06.xml」,日期版本号写进文件名。这样别人拿到文件能快速判断是不是最新版,也方便归档。这个习惯成本很低,收益却是长期且确定的。
提示:团队用 Git 管理 draw.io 文件时,XML 里如果画布缩放过,diff 会夹杂大量坐标变动,所以每次提交前先「对齐画布并整理」一遍,diff 会干净很多。
4. 拓扑图避坑指南:五条血泪经验与解决路径
这一章的内容都来自真实踩过的坑,每条按「现象 → 原因 → 解决」展开,新手可以直接把解决方案抄到自己的制图规范里。
4.1 堆叠设备画成单台,排障时找不到备板
现象:图纸上核心交换机只有一个框,现场实际是两台设备做了堆叠。某次断电后业务起不来,按图排查到「备板」时才发现根本没有备板,原计划两小时的割接变成通宵。原因:画图的人觉得两台堆叠设备对外逻辑上是一台,就图省事画了一个框。但堆叠的排障特点是主备角色可切换、板卡分布在两台物理机上,物理图必须把两台设备都画出来。解决:物理拓扑图里堆叠成员逐台画,用虚线连接堆叠口并标注堆叠组名(如 stack-1 member 1/2);逻辑拓扑图则可以把堆叠组合成一个框,但框名写成「CORE-AB-01(stack-1)」,一眼能看出物理构成,又不破坏逻辑视图。
4.2 链路带宽只标规划值,流量分析对不上号
现象:监控平台显示某条链路跑满,打开拓扑图一看标着 10G,全员认定是带宽不足。结果现场排查发现是 1G 光模块,链路协商在 1G,图上标的是规划值不是实际值。原因:图纸在规划阶段就画好了,部署时端口协商结果和设计不符,没人回头更新标注。解决:链路边标注写两段,「规划 10G / 协商 1G」,至少保证图面带宽与实际协商一致。每年巡检时批量拉一次端口协商速率,和图上逐条核对,协商只有 1G 的链路标注成 10G 就是误导信号。
4.3 双机热备画成两条独立链路,切换方向全错
现象:两台防火墙做了双机热备,图上画了两台设备各自连着核心和出口,看起来各有一条独立链路。业务切换时按图以为是 A 墙断了走 B 墙,实际主备共用虚拟 IP,流量全在主墙,备墙只同步状态,把维护窗口白白浪费在错误的操作顺序上。原因:把高可用设备画成了普通并联设备,既没画心跳线,也没标注主备关系。解决:两台 HA 设备之间必须画心跳线,标注所用协议(VRRP 或 keepalive);逻辑拓扑里把两台设备用虚线框成一组「HA 组」,对外只引出业务链路并标明主备切换方向,避免误导阅读者。
4.4 管理网与业务网混画,安全分区失真
现象:图上所有交换机画成一张网,领导问「管理网隔离了吗」没人答得上来。安全审计时发现办公网与服务器区之间画了防火墙,但服务器区的管理口实际上直连办公网交换机,图的「安全分区」与真实拓扑对不上。原因:画图只画了业务 VLAN 的连接,带外管理网要么没画,要么和业务网共用一组交换机时没有在图上区分。解决:管理网单独画一张逻辑图,用独立颜色标注「带外管理」与「带内管理」;管理口直连业务交换机的场景必须显式画出,不能因为少见就省略。安全相关的图,省略一条线就是埋一个雷。
4.5 图纸不维护,三个月后成历史文物
现象:半年后新同事接手,打开图纸对照机房,十几条链路对不上,最后只能把图当参考,排障还是得登录设备逐跳查。原因:没有把「图纸更新」绑定到变更流程,配置在交换机上敲完就生效了,没人打开画图软件同步。解决:把拓扑图文件纳入变更附件,任何割接、加设备、调 VLAN 的操作,变更单里必须附新版图纸文件或截图,否则流程不结束。版本号带日期,变更说明写在新版图里或文件名上,比如「逻辑拓扑_v2025.06」。版本管理不需要平台,有日期、有变更说明,就已经比大多数团队领先了。
5. 从图纸到配置:把拓扑图变成配置清单与自动核对工具
5.1 从拓扑图反推配置清单:让图纸不只是纸
如果前面几章的标注规范执行到位,拓扑图就不再是一张静态图纸,而是一份「配置的起点」。我在给设备开局时,习惯先从图上摘配置的骨架。图上的元素和配置动作之间存在清晰的映射:
| 图上标注 | 对应配置动作 |
|---|---|
| 设备管理 IP | 配置接口地址或 Loopback |
| VLAN 范围与用途 | 创建 VLAN 并命名 |
| Trunk 链路 | 端口模式、允许 VLAN 列表 |
| 链路带宽标注 | 端口速率、双工 |
| HA 组主备方向 | VRRP / keepalive 优先级 |
| 出口区带宽与对端 | 默认路由、NAT 策略 |
为了让摘配置的过程可重复,我会把链路标注导成 CSV,再跑一段小脚本生成端口配置草稿。CSV 长这样:
source,src_port,peer,dst_port,speed CORE-AB-01,GE0/0/1,ACC-AB-01,GE0/0/48,10G CORE-AB-01,GE0/0/2,ACC-AB-02,GE0/0/48,10G CORE-AB-01,GE0/0/3,FW-AB-01,GE0/0/1,10G对应的 Python 脚本:
import csv with open("links.csv", newline="", encoding="utf-8") as f: rows = list(csv.DictReader(f)) for r in rows: # 每条 CSV 行对应一条链路标注,输出端口描述、速率、双工三行配置 print(f"! 链路 {r['source']} {r['src_port']} -> {r['peer']} {r['dst_port']}, 带宽 {r['speed']}") print("config terminal") print(f"interface {r['src_port']}") print(f" description to-{r['peer']}-{r['dst_port']}") print(f" speed {r['speed'].replace('G', '000')}") # 10G -> 10000 Mbps print(" duplex full") print("end")这段脚本的逻辑很简单:每条 CSV 行对应一条链路标注,输出端口描述、速率和双工三行配置。参数上 speed 那一行把「10G」替换成「10000」,是因为多数设备配置语法的速率单位是 Mbps;如果图上写的是「1G」,会自动变成 1000,这个替换规则可以按设备品牌调整。
脚本的价值不在自动出配置,而在倒逼你检查图纸标注的完整性:CSV 里某一列是空的,输出就缺一块,你马上会发现哪里标漏了。生成的草稿我还会人工核对一遍,尤其是双工——高速光模块和自协商设备之间经常出现两端协商不一致的问题,脚本代劳不了。
5.2 用 LLDP 数据给图纸做定期比对
画好的图纸会随着时间失真,光靠人肉巡检不可靠。我每个季度会把图纸链路清单导出来,和核心交换机上的 LLDP 邻居表做一次 diff,过程很简单:
# 把图纸链路清单导出成两列:本地接口+对端标识 grep "↔" logical_topology.md | awk -F"↔" '{print $1, $2}' | sort > drawing.txt # 从核心交换机抓真实邻居关系 show lldp neighbors | tail -n +5 | awk '{print $1, $2}' | sort > now.txt # diff 结果里多出来的就是“图上没有但现网存在的线” diff drawing.txt now.txt第一段命令从文档里提取带双向箭头符号的链路标注行,把两端拆成两列;第二段命令抓现网 LLDP 邻居;第三段 diff 是核心动作。diff 出来「图上没有但现网存在」的线,大概率是最近变更没更新图;diff 出「图上有但现网没有」的线,可能是链路已拆除、图纸没清理。这个流程不复杂,但能把「图纸漂移」变成可量化的指标,每次巡检跑一遍,比年底突击补图靠谱得多。
5.3 排障时怎么读图:先层级、再链路、最后参数
再准确的图纸,读法错误也会把排障带偏。我自己的顺序是固定的:第一,先根据故障现象判断影响区域,比如「一个楼层上不去网」大概率在接入层和汇聚层之间,全网时断时续大概率在核心或出口;第二,顺着图上链路逐跳向下游看,找到第一个不符合预期的节点,再把登录设备验证集中到这个节点上;第三,回看参数标注,带宽、VLAN、主备方向任何一项和现网对不上,先怀疑图纸而不是设备。
提示:图纸回答的是「应该长什么样」,设备回答的是「现在长什么样」。两者矛盾时,以设备输出为准,但要立即标记图纸待更新,排障结束顺手改掉。
读图还有一个容易被忽略的点:图上的「捷径」往往是坑。比如业务 VLAN 跨汇聚直接透传到核心,图上画成了接入层的横向连线,排障时顺着这条线走会绕远。遇到这类特殊链路,我习惯在线上加一个「非常规」标签,提醒自己和同事这里不是普通上行。
6. 给图纸做十分钟体检:五个自检项与一个习惯
绘图规范讲再多,不落到一张检查表里,过两周就会被忘掉。我把拓扑图体检压缩成五个问题,每次翻图前花十分钟快速过一遍:
| 检查项 | 判定标准 |
|---|---|
| 设备命名 | 角色-位置-序号,无重名、无空名 |
| 接口标注 | 每条链路两端都写了端口编号 |
| 带宽标注 | 与端口实际协商速率一致 |
| 高可用表达 | 堆叠逐台画,HA 组标明主备方向 |
| 版本信息 | 文件或图面有日期版本号和变更说明 |
五个问题里只要有一个答不上来,这张图就不能当运维准图使用。我之前有一次花了大半夜排一个光模块故障,最后发现原因写在图上但标错了:图上标 10G 的链路,实际协商只有 1G,问题不在设备而在标注。从那以后,我给自己立了一条规矩:任何配置变更,必须先改图、再提变更记录;没有同步更新图纸的变更,直接打回重做。这个习惯执行大半年后,图纸准确率明显回升,新同事接手也能放心照着图操作。排查网络问题时,最快的路径从来不是登录一台台设备敲命令,而是先有一张准确的图,再顺着图去验证。希望这个习惯也能帮到你。
本文还有配套的精品资源,点击获取