网络拓扑图:PlantUML 与 Mermaid 双引擎绘制

网络拓扑图:PlantUML 与 Mermaid 双引擎绘制

puml.online

简介 / Introduction

网络拓扑图是运维与架构文档里最常见的一张图:把公网、DMZ、核心网段的服务器和链路画清楚。本文用同一套「公网 → DMZ → 核心网」的拓扑,分别演示 PlantUML 的 nwdiag 语法和 Mermaid 的 flowchart + subgraph 写法,并逐项对比两者的表达能力。


PlantUML 版

PlantUML 内置了 Takeshi Komiya 开发的 nwdiag 引擎,用 @startnwdiag 声明。网络用 network 块定义,块内可以写网段 address;节点用 id [address = "..."] 声明;跨网络的链路用 -- 连接,同一网络内的节点会自动挂到网络的”总线”上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@startnwdiag
title Data Center Topology

group internet_zone {
color = "#E8F0FE";
description = "Public Internet";
internet [shape = cloud, address = "0.0.0.0/0"];
}

network dmz {
address = "10.0.0.0/24";
color = "palegreen";
proxy [address = "10.0.0.10"];
web [address = "10.0.0.20"];
}

network core {
address = "10.1.0.0/24";
app [address = "10.1.0.10"];
db [address = "10.1.0.20"];
}

internet -- proxy;
proxy -- web;
proxy -- app;
app -- db;
@enduml

注意 nwdiag 的几条硬性限制:网段名和 group 名不能加引号,链路后面不能跟 [label = "..."] 标签(会直接报 Syntax Error),箭头只有 -- 一种写法。


Mermaid 版

Mermaid 没有专门的拓扑引擎,用 flowchart 加 subgraph 就能达到同样的视觉效果。subgraph 对应 PlantUML 的 network / group 区块,节点标签里用 <br/> 换行写 IP,链路边用 -->|"文字"| 标注协议与端口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
flowchart TB
subgraph EXT["Public Internet"]
internet["Internet Cloud"]
end
subgraph DMZ["DMZ — 10.0.0.0/24"]
proxy["Reverse Proxy<br/>10.0.0.10"]
web["Web Server<br/>10.0.0.20"]
end
subgraph CORE["Core Network — 10.1.0.0/24"]
app["App Server<br/>10.1.0.10"]
db["Database<br/>10.1.0.20"]
end
internet -->|"HTTPS :443"| proxy
proxy -->|"HTTP :80"| web
proxy -->|"gRPC :9090"| app
app -->|"SQL :5432"| db

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 进行许可。
目录
网络拓扑图:PlantUML 与 Mermaid 双引擎绘制