网络拓扑图:PlantUML 与 Mermaid 双引擎绘制
简介 / Introduction
网络拓扑图是运维与架构文档里最常见的一张图:把公网、DMZ、核心网段的服务器和链路画清楚。本文用同一套「公网 → DMZ → 核心网」的拓扑,分别演示 PlantUML 的 nwdiag 语法和 Mermaid 的 flowchart + subgraph 写法,并逐项对比两者的表达能力。
PlantUML 版
PlantUML 内置了 Takeshi Komiya 开发的 nwdiag 引擎,用 @startnwdiag 声明。网络用 network 块定义,块内可以写网段 address;节点用 id [address = "..."] 声明;跨网络的链路用 -- 连接,同一网络内的节点会自动挂到网络的”总线”上。
1 | @startnwdiag |
注意 nwdiag 的几条硬性限制:网段名和 group 名不能加引号,链路后面不能跟 [label = "..."] 标签(会直接报 Syntax Error),箭头只有 -- 一种写法。
Mermaid 版
Mermaid 没有专门的拓扑引擎,用 flowchart 加 subgraph 就能达到同样的视觉效果。subgraph 对应 PlantUML 的 network / group 区块,节点标签里用 <br/> 换行写 IP,链路边用 -->|"文字"| 标注协议与端口。
1 | flowchart TB |
Mermaid 的 subgraph 标题里可以直接写网段,-->|"..."| 的边标签也没有 PlantUML nwdiag 那么严格,写法更自由。
对比 / Side-by-side
| 特性 | PlantUML nwdiag |
Mermaid flowchart |
|---|---|---|
| 引擎入口 | @startnwdiag / @enduml |
flowchart TB |
| 网络分区 | network dmz { ... } |
subgraph DMZ["..."] |
| 节点地址 | proxy [address = "10.0.0.10"] |
写在节点标签里 proxy["...<br/>10.0.0.10"] |
| 链路 | proxy -- app;(无标签) |
`proxy –> |
| 分组与颜色 | group / color = "palegreen" |
subgraph + style 指令 |
| 形状 | shape = cloud / shape = database |
需用 flowchart 节点形状或 Mermaid 精灵图 |
| 布局自由度 | 由 nwdiag 自动排布总线 | 由 Mermaid dagre 自动排布 |
小结 / Wrap-up
两种引擎都能画出可读的网络拓扑图,但取向不同:PlantUML nwdiag 是”网络语义优先”,天然带网段、总线和地址,适合表达真实网段划分;Mermaid flowchart 是”图形表达优先”,边标签和形状自由度高,更适合放在文档里做架构说明。需要强调的是,nwdiag 的语法限制比想象中严——网段名不能加引号、链路不能带标签,遇到这两点时改用 Mermaid 往往更省事。
- 标题: 网络拓扑图:PlantUML 与 Mermaid 双引擎绘制
- 作者: puml.online
- 创建于 : 2026-10-22 01:05:00
- 更新于 : 2026-10-22 01:06:32
- 链接: https://puml.online/blog/network-diagram-topology/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。