Files

11 KiB
Raw Permalink Blame History

网络拓扑图模板

⚠️ 本模板生成的是位图(PNG),不是 NetBox / Cisco Packet Tracer / draw.io 可编辑网络拓扑。 需要可编辑请用 NetBox / Lucidchart / draw.io / Cisco Packet Tracer。

本文件用于生成"工程感网络拓扑图":

  • 公司 / 数据中心 网络拓扑
  • 多区域 / 多 zone 部署拓扑
  • 微服务 / 服务网格 拓扑
  • VPC / 子网 / 路由表拓扑
  • 边缘 / CDN / 多云互联拓扑

特征:

  • 设备节点用类型化 glyph:路由器(菱形交叉)/ 交换机(矩形多端口)/ 服务器(带散热条小机箱)/ 防火墙(砖墙)/ 云(云朵)/ DB(圆柱)
  • 物理连线用粗线,逻辑连线用虚线
  • 大虚线框包围 zone / VLAN / VPC
  • 带宽 / 协议标在线上(如 "10 Gbps" / "BGP" / "TLS 1.3")
  • 暗色 grid + 等宽字体(沿用视觉系统)

适用范围

  • 数据中心 / 机房网络拓扑
  • 云架构网络拓扑(VPC / subnet / NAT / IGW)
  • 多区域 / 多云互联
  • 服务网格拓扑(service mesh)
  • 边缘 / CDN / 公网入口拓扑

何时使用

  • 用户提到 "网络拓扑 / network topology / 部署拓扑 / VPC / 子网 / 数据中心 / 机房 / 服务网格"
  • 用户希望「带网络设备 glyph + 区域分组 + 连线带宽标注」标准网络图
  • 用户接受位图

不要使用:

  • 用户要的是「应用层系统架构」 → 用 technical-diagrams/system-architecture.md
  • 用户要的是「业务流程」 → 用 technical-diagrams/flowchart-decision.md
  • 用户要的是「时序图」 → 用 technical-diagrams/sequence-diagram.md

缺失信息优先提问顺序

  1. 拓扑名称("AWS VPC 拓扑 / 公司机房拓扑 / 多区域部署")
  2. 主要 zones / subnets / VPCs(建议 2-5 个区域)
  3. 每个区域内的设备 / 实例(路由器 / 交换机 / 服务器 / DB / 负载均衡)
  4. 区域间的连接(VPN / Peering / IGW / Direct Connect)
  5. 连线的协议 / 带宽(可选)
  6. 是否标 IP 段 / CIDR
  7. 比例(默认 16:9 横版)

主模板:标准云 / 数据中心 网络拓扑图

📖 描述

整张图按 zone / VPC 划分大虚线框区域,每个区域内放设备节点(带类型化 glyph),节点间用粗线连接(标带宽 / 协议),跨区域连接用专门的网关 / VPN 节点。整体在暗色 grid 背景上呈现工程感。

📝 提示词

{
  "type": "工程感网络拓扑图",
  "goal": "生成一张工程感网络拓扑图作为部署文档 / 网络架构 review / 培训材料",
  "canvas": {
    "aspect_ratio": "{argument name=\"aspect_ratio\" default=\"16:9\"}",
    "background": "deep slate #0F172A with subtle 1px grid #1E293B at 32px spacing",
    "outer_padding": "60px"
  },
  "title_strip": {
    "title": "{argument name=\"title\" default=\"AWS Multi-AZ VPC Topology\"}",
    "subtitle": "{argument name=\"subtitle\" default=\"production · ap-northeast-1\"}",
    "position": "top-left, JetBrains Mono / SF Mono, light gray"
  },
  "device_glyphs": {
    "rule": "每种设备使用统一的极简几何 glyph,避免使用真实厂商图标",
    "types": [
      { "type": "router", "glyph": "diamond shape with X cross inside", "color": "amber #FBBF24" },
      { "type": "switch", "glyph": "rectangle with multiple port dots along the bottom edge", "color": "amber #FBBF24" },
      { "type": "firewall", "glyph": "stylized brick wall pattern (small rectangles in 2-3 rows)", "color": "rose #FB7185" },
      { "type": "load_balancer", "glyph": "trapezoid funnel with 3 lines coming in, 1 going out", "color": "blue #60A5FA" },
      { "type": "server", "glyph": "small rack rectangle with 3-4 horizontal slots", "color": "emerald #34D399" },
      { "type": "container", "glyph": "rounded square with sail / shipping container symbol", "color": "emerald #34D399" },
      { "type": "database", "glyph": "cylinder (3D-suggested)", "color": "violet #A78BFA" },
      { "type": "cloud_service", "glyph": "cloud outline with abbreviation inside (e.g. 'S3', 'CDN')", "color": "cyan #22D3EE" },
      { "type": "user", "glyph": "stick figure", "color": "cyan #22D3EE" },
      { "type": "internet", "glyph": "globe with latitude / longitude lines", "color": "slate #94A3B8" },
      { "type": "nat_gateway", "glyph": "small rectangle labeled 'NAT'", "color": "amber #FBBF24" },
      { "type": "vpn_gateway", "glyph": "small rectangle with key icon, labeled 'VPN'", "color": "rose #FB7185" }
    ]
  },
  "zones": {
    "count": "{argument name=\"zone_count\" default=\"4\"}",
    "items": [
      { "id": "Z1", "label": "Public Internet", "color_border": "slate #94A3B8 dashed", "cidr": "0.0.0.0/0" },
      { "id": "Z2", "label": "VPC · ap-northeast-1\\n10.0.0.0/16", "color_border": "amber #FBBF24 dashed", "cidr": "10.0.0.0/16" },
      { "id": "Z3", "label": "Public Subnet · 10.0.1.0/24 (AZ-a)", "color_border": "blue #60A5FA dashed", "parent": "Z2" },
      { "id": "Z4", "label": "Private Subnet · 10.0.2.0/24 (AZ-a)", "color_border": "emerald #34D399 dashed", "parent": "Z2" }
    ],
    "zone_label_position": "top-left of each zone box, mono 11pt with CIDR on second line"
  },
  "nodes": {
    "items": [
      { "id": "N1", "type": "user", "label": "End Users", "zone": "Z1" },
      { "id": "N2", "type": "internet", "label": "Internet", "zone": "Z1" },
      { "id": "N3", "type": "cloud_service", "label": "CloudFront\\n(CDN)", "zone": "Z1" },
      { "id": "N4", "type": "load_balancer", "label": "ALB", "zone": "Z3" },
      { "id": "N5", "type": "nat_gateway", "label": "NAT GW", "zone": "Z3" },
      { "id": "N6", "type": "container", "label": "ECS Tasks\\n(2 instances)", "zone": "Z4" },
      { "id": "N7", "type": "database", "label": "RDS PostgreSQL\\n(Multi-AZ)", "zone": "Z4" },
      { "id": "N8", "type": "cloud_service", "label": "S3\\n(static assets)", "zone": "Z1" }
    ],
    "node_label_format": "device name + optional second line with detail (count / class / role),mono 10pt 标在 glyph 下方"
  },
  "connections": {
    "items": [
      { "from": "N1", "to": "N2", "type": "physical", "label": "" },
      { "from": "N2", "to": "N3", "type": "physical", "label": "HTTPS / TLS 1.3" },
      { "from": "N3", "to": "N4", "type": "physical", "label": "Origin pull" },
      { "from": "N4", "to": "N6", "type": "physical", "label": "HTTP" },
      { "from": "N6", "to": "N7", "type": "physical", "label": "TCP 5432" },
      { "from": "N6", "to": "N5", "type": "physical", "label": "egress" },
      { "from": "N5", "to": "N2", "type": "physical", "label": "" },
      { "from": "N3", "to": "N8", "type": "physical", "label": "Origin pull" }
    ],
    "line_style": {
      "physical": "solid line 2px slate #94A3B8 (carries actual traffic)",
      "logical": "dashed line 1.5px slate #64748B (logical relation, e.g. 'IAM allows access')",
      "redundant": "double-line in violet #A78BFA (HA pair, redundant link)",
      "encrypted": "solid line 2px emerald #34D399 with small lock glyph in middle"
    },
    "label_format": "protocol + optional bandwidth, e.g. 'HTTPS / 443' / '10 Gbps' / 'BGP' / 'TLS 1.3',mono 9pt 标在线中央",
    "rule_routing": "正交走线为主;跨 zone 时穿过 zone 边界画"
  },
  "annotations": {
    "ip_cidr_labels": {
      "enabled": "{argument name=\"ip_labels_enabled\" default=\"true\"}",
      "rule": "每个 zone 标 CIDR;关键节点标 IP 或 hostname"
    },
    "az_labels": {
      "enabled": "{argument name=\"az_labels_enabled\" default=\"true\"}",
      "rule": "云环境下标可用区 (AZ-a / AZ-b)"
    }
  },
  "legend": {
    "enabled": true,
    "position": "bottom-right",
    "content": "device glyph → device type,line style → connection type (physical / logical / redundant / encrypted),zone color → zone type",
    "style": "small panel, semi-transparent bg, mono 10pt"
  },
  "constraints": {
    "must_keep": [
      "每种设备 glyph 一致,不混用",
      "zone 用大虚线框清晰包围",
      "zone 标签含 CIDR / AZ(云环境)或 VLAN ID(数据中心)",
      "连线粗细 / 颜色编码反映连接类型",
      "暗色 grid 背景 + 等宽字体",
      "legend 必画"
    ],
    "avoid": [
      "用真实厂商 logo (Cisco / AWS / Azure 真实图标) → 容易侵权 + 破坏统一视觉",
      "设备 glyph 不一致 (一个用方框一个用真实图标)",
      "用 emoji 当设备图标",
      "zone 不用虚线框 → 失去区域感",
      "连线无 protocol 标 → 失去工程价值",
      "节点 > 15 个 → 拥挤,考虑分子图",
      "用 3D / 渐变 / 玻璃质感",
      "声称这是可编辑 SVG"
    ]
  }
}

参数策略

  • 必问:title、zones 列表(含 CIDR / 名称)、nodes 列表(含 type + zone)、connections(含 from/to)
  • 可默认:background(暗色 grid)、device_glyphs(默认全套)、ip_labels_enabled(true)、az_labels_enabled(true)
  • 可随机:节点摆放位置(在 zone 内自动布局)

自动补全策略

  • 用户给"AWS 单 AZ VPC + ALB + ECS + RDS" → 用 default 拓扑
  • 用户没给 CIDR → 反问(不能瞎编 IP 段)
  • 用户说"加多 AZ HA" → 复制 private subnet 到 AZ-b,标 redundant 连线
  • 用户说"加 WAF / Shield" → 在 ALB 前加 firewall glyph
  • 用户说要 light 模式 → 用变体 1

变体 1:浅色 Light 网络拓扑

{
  "modify": {
    "background": "warm off-white #F8FAFC + faint grid #E2E8F0",
    "node_glyph_fill": "device color × 8% opacity",
    "node_glyph_border": "1.5px solid (deeper shade for white bg)",
    "label_color": "deep slate #0F172A",
    "zone_border_color": "deeper shade",
    "vibe": "白底文档 / 印刷版"
  }
}

变体 2:服务网格 (Service Mesh) 拓扑

{
  "modify": {
    "title_format": "Service Mesh Topology",
    "node_emphasis": "每个 service node 旁边贴一个小 sidecar (proxy) glyph,表达 sidecar 模式",
    "connections_emphasis": "service-to-service 连线全部经过 sidecar;标 mTLS 加密",
    "extras": "可加 control plane node (Istio / Linkerd) 在右上角,连线用虚线表示控制流",
    "use_case": "Istio / Linkerd / Consul / Cilium service mesh 文档"
  }
}

适用:服务网格架构、零信任网络、SRE 培训材料。

变体 3:多云互联拓扑(hybrid cloud)

{
  "modify": {
    "zones": "横向并排画多个云的大框:'AWS Region' + 'GCP Region' + 'On-Prem DC'",
    "interconnect": "云间用 'Direct Connect' / 'Cloud Interconnect' / 'VPN' 粗连线连接,标带宽 / SLA",
    "extras": "可加 transit gateway / 中央 routing hub 在画布中央",
    "use_case": "混合云 / 多云架构、灾备拓扑、迁移规划"
  }
}

适用:混合云架构、多云部署、灾备 / DR 拓扑。

避免事项

  • 用真实厂商图标(容易侵权)
  • 设备 glyph 不一致(同一种设备用不同形状)
  • 用 emoji 当设备图标
  • zone 没有虚线框 → 失去区域感
  • 连线无 protocol / 带宽标 → 失去工程价值
  • 节点 > 15 → 视觉爆炸
  • 用 3D / 渐变 / 玻璃质感(破坏工程感)
  • 中央 hub-and-spoke 但中心节点没标"作什么"
  • 把"应用层"组件塞进网络拓扑(应该用 system-architecture)
  • 假装这是可导出可编辑的 SVG
  • IP / CIDR 信息缺失(云环境网络图核心信息)