news 2026/10/6 7:12:32

网络监控拓扑图选型与落地:从SNMP到VRRP的高可用监控体系

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
网络监控拓扑图选型与落地:从SNMP到VRRP的高可用监控体系

简介:一份汇集五十四种网络监控拓扑图的PDF文档,是网络管理员、IT运维人员与网络架构师可参考的实用资料。内容从星型、环形、总线、树形等基础拓扑,延伸到集线器、交换机、路由器等设备组网方式,并覆盖虚拟局域网、软件定义网络、网络功能虚拟化、云计算、物联网、网络安全及混合云等应用场景。每种类型均给出结构特征、适用场景与优缺点分析,可直接用于网络规划、故障排查和方案汇报。文档共55页,资源包仅包含1个PDF文件,大小约12.43MB,便于跨设备阅读、打印或嵌入技术文档。目前已有208人学习/浏览,适合需要快速获取多类网络拓扑示意图的读者。通过该文档可系统对比不同拓扑的可靠性、扩展性与部署成本,辅助网络选型决策,也可作为培训课件或项目文档的配图素材,整体实用性强。

1. 五十四种网络监控拓扑图,真正值钱的是背后的选型逻辑

你手里拿到一份《各种网络监控拓扑图(共54种).pdf》的时候,第一反应大概是翻图、找最接近自己机房的那张,然后照着画。但干过几年运维的人会告诉你,54张图里真正值钱的不是图形本身,而是每张图背后对"监控数据往哪儿流"这个问题的回答——监控服务器该旁路还是串接、核心交换机要不要做镜像口、告警通道走带内还是带外、被管设备用SNMP轮询还是推送。这些选型逻辑才是可以复用到任何一张拓扑上的东西。本文按从业者的真实落地顺序来拆:先建立分类坐标系,再给一套最小可运行的监控拓扑方案,然后用eNSP跑通双核心场景,最后把高频翻车点列清楚。无论你是刚接手公司网络想从零搭监控,还是准备把现有单点拓扑升级成高可用架构,照着这套思路走,都比对着PDF硬抄要稳。

2. 网络监控拓扑图的四种骨架:把54种形态归类成可选的坐标系

2.1 按规模划分:小型单核心到大型多中心,拓扑复杂度不是线性的

拿到这份54种的图集,先不要逐张看。我习惯按网络规模先把所有拓扑粗分成四档:小型单核心、中型双核心、大型分层、多中心互联。四档之间不是简单加几台设备,而是监控架构都要跟着变。

小型网络(一两台核心、几台接入)最常见的形态是旁路单点监控,也就是监控服务器单独接在核心交换机旁边,用SNMP轮询设备状态,用镜像口抓关键链路的流量。这种拓扑在PDF里至少能找出七八张变体,区别只在镜像口接在接入层还是核心层、监控服务器是否双网卡分开管理网和业务网。中型网络开始出现双核心,这时监控拓扑的头号问题是监控服务器接在哪台核心上——接在单侧,另一台核心故障时监控链路也会断,所以衍生出了双链路接入监控交换机的变体。大型分层网络里监控系统本身也要分层,接入层交换机往往只做SNMP轮询,核心层才做流量镜像,监控服务器按区域拆分,避免单台采集器压力过大。到了多中心场景,拓扑里必然会出现专线或公网通道的监控探针,以及告警平台的异地冗余。

我一般会建议读者拿到PDF后先做一件事:用标签把每张图按这四档归类,再去看同一档内部的差异点。54张图里至少有30张属于同一骨架下的参数调整,真正需要单独研究的跨界形态通常只有几类。

2.2 按部署方式划分:带内监控、带外监控与流量旁路,决定故障时还能不能看见

看网络监控拓扑图,外行看设备连线,内行看监控数据通道。同样是"监控服务器连核心交换机",这条链路走业务网还是独立管理网,决定了核心设备挂掉的时候你还剩多少可见度。带内监控最简单,监控服务器和被管设备共用一个网络平面,部署成本低,但核心交换机一旦宕机,监控数据也跟着断了——你只知道"断网了",不知道断在哪一层。带外监控单独拉管理网,监控服务器通过独立网口接到每台设备的管理口,业务全挂也能定位到具体设备,代价是多一套布线、多一档交换机端口。

流量旁路则是另一维度。需要做性能分析、抓包排障、安全审计的时候,要在核心交换机的观察口上做流量镜像,把业务流量复制一份给监控分析平台。这时的拓扑图里会出现一条"虚拟链路"——数据不走物理线路,而是从镜像口流向分析服务器。这条虚拟链路在54种拓扑图里频繁出现,但新手画图时最容易漏掉它,导致最后交付的网络拓扑图只画了实线没画虚线,排障的时候根本看不出流量是从哪镜像过来的。

三种部署方式不是互斥,而是按层混用。我见过最合理的组合是小规模机房用带内监控加关键链路镜像,中大型机房管理网单独走带外,核心链路全部做流量旁路。你在PDF里看到那些"又复杂又好看"的大图,拆开看基本就是这三层的叠加。

2.3 按高可用要求划分:单机、双机热备与集群,告警平台不能成为新的单点

监控拓扑里最容易忽略的高可用对象,恰恰是监控系统本身。网络拓扑图画得再完整,如果监控服务器只有一台、存储只有一块盘,那这套监控自身的可靠性就成了整个运维体系的短板。我处理过一个真实案例:某分支机构的监控服务器磁盘写满,告警静默了两周,核心交换机CPU跑满都没人知道。

所以看PDF里的高可用拓扑时,我建议只关注三个点:监控服务器是否双机热备、数据库是否独立存储、告警通道是否有备用线路。双机热备的常见做法是用两台服务器跑监控主备,共享存储放历史数据,备机通过心跳检测主机的存活状态。告警通道的备用线路通常是独立于业务网络的短信猫或4G模块,确保业务网故障时告警还能发得出来。54种拓扑里带高可用标注的图不多,但每一张都值得仔细看——它们解决的问题不是"怎么监控",而是"监控自己别死"。

3. 从零搭一套最小监控拓扑:硬件选型、数据流设计与落地步骤

3.1 最小硬件清单与拓扑规划:一台旧服务器加一台可镜像的交换机就能起步

不绕弯子,直接给一套我验证过多次的最小方案。硬件三件:一台监控服务器(2核4G以上即可,旧PC甚至树莓派都行)、一台支持端口镜像的交换机(绝大多数企业级交换机都支持)、一台被管设备(随便一台路由器或交换机)。拓扑规划按带内旁路来画:监控服务器单独占用交换机一个普通口,核心业务口上配一个镜像口把流量复制一份给监控服务器,被管设备开启SNMP供监控服务器轮询。

这套拓扑对应了PDF里最常见的那一类"入门级网络监控拓扑图"——它看起来简单,但五脏俱全:有SNMP轮询链路、有流量镜像链路、有告警出口。先把这张图跑通,再往上面加双核心、带外管理、监控集群,每一步都有明确的技术动因,而不是照搬大图。

这张最小拓扑的监控软件我推荐从Zabbix或Prometheus里选一个。Zabbix对网络设备监控更友好,自带SNMP模板和拓扑图功能,适合网络工程师上手;Prometheus更偏云原生,如果后续要接K8s再考虑它。下文配置以Zabbix为例,因为它在传统网络监控场景里覆盖面最广。

3.2 Zabbix监控平台的三个必配项:SNMP轮询、告警媒介与自监控

Zabbix装好之后,前三个配置直接决定了监控能不能用:一是添加对网络设备的SNMP监控,二是配置告警媒介让报警真正发出来,三是打开Zabbix自身的监控项防止"监控系统自己死了都不知道"。SNMP添加网络设备很简单,在Zabbix Web界面里点"创建主机",填上设备IP,选择SNMP模板,指定共同体名。设备端的SNMP配置放在后面eNSP章节一起讲,这里先说Zabbix侧的关键参数。

创建主机时最容易被忽略的两个参数是"轮询间隔"和"重试次数"。轮询间隔默认1分钟,对接入层交换机可以放宽到3分钟,减轻设备CPU压力;重试次数默认3次,如果设备在某些时段CPU繁忙导致SNMP响应超时,重试次数太低会误报。实际配置时我一般把存活检查的重试调成5次、超时3秒,监控项的重试保持默认即可,避免告警风暴。

告警媒介是另一个必配项。Zabbix默认不配任何媒介,也就是说配置了触发器也只会在Web界面看到告警,短信、邮件、企业微信全都不通。我习惯配两条通道:一条邮件通道接收常规告警,一条Webhook通道对接企业微信或钉钉,用于紧急告警。Webhook的配置方式在Zabbix 5.0之后统一走"告警脚本"或"Webhook媒介类型",网上模板很多,关键是定义好告警等级到通道的映射——什么级别发邮件、什么级别额外推手机,这决定了你半夜会不会被P1告警轰炸。

自监控这一项,多数人都不配。在Zabbix里最少要加三个监控项:监控服务器自身的磁盘使用率、CPU负载、Zabbix Server进程存活状态。这三个监控项各自配一个触发器,磁盘使用率超85%告警、负载超核数两倍告警、进程挂了立即告警。配好之后,这套监控系统才算有了兜底——你监控的一切挂了都还有最后一双眼睛在看着。

3.3 数据流设计的核心原则:监控数据和控制数据分离,告警数据优先保障

画监控拓扑图的时候,很多新手把监控数据流画成一条粗线从被管设备到监控服务器,总觉得"数据能到就行"。干到第二年你就会发现,这条线上要跑三种完全不同的数据:SNMP轮询的指标数据、端口镜像的业务流量数据、告警的通知数据。三者对带宽和实时性的要求完全不同,混在一起传输,迟早出问题。

我的设计原则是三条:第一,SNMP轮询数据走管理VLAN,不要让轮询报文和设备业务流量挤在同一个广播域里;第二,镜像流量走独立端口,镜像口的带宽至少要达到被镜像链路带宽的1.5倍以上,否则高峰期镜像口就是天然的丢包点;第三,告警数据优先走独立通道,短信猫或4G模块单独路由,不依赖业务网。这三条原则应用到拓扑图上,你会发现54种图里那些"看起来多了一台设备"的拓扑,多出来的往往就是为这三条原则服务的管理交换机或带外网关。

以最小拓扑为例,数据流应该是这样的:监控服务器在VLAN 100(管理网段),被管设备的管理口也在VLAN 100,SNMP轮询就在这个VLAN内完成;镜像口配置在业务VLAN的物理端口上,把业务流量复制一份通过独立物理链路送到监控服务器的第二个网口。这样即使业务VLAN因广播风暴瘫痪,SNMP轮询和告警通道依然畅通,监控平台还能告诉你"业务网挂了"。

4. 用eNSP仿真跑通双核心监控拓扑:VRRP与镜像口的关键配置

4.1 为什么先用eNSP验证拓扑再上真机:零成本试错与配置回滚

直接在生产交换机上敲配置,敲错了可能就是一次全网中断。我的习惯是任何涉及双核心、VRRP、端口镜像的拓扑变更,先在华为eNSP模拟器里完整跑一遍,确认配置无误再搬到真机。eNSP对VRRP、链路聚合、SNMP、端口镜像这些网络监控拓扑里最常用的特性支持得很完整,模拟出来的行为和生产环境几乎没有差别。更重要的是,eNSP里可以随便删配置、重启设备、模拟链路故障,这些操作在真机上都是要审批的。

这套工作流对应到PDF里的价值是:54种拓扑图里凡涉及高可用和流量采集的,都可以先在eNSP里还原一张,验证通过再落地。下面给一套我常用的双核心监控拓扑的完整配置,你可以在eNSP里照着敲,跑通了再迁移到真实设备。

4.2 eNSP中搭建双核心拓扑:VRRP网关冗余与监控服务器旁路接入

在eNSP里拖出两台核心交换机(CE12800或S5700均可)、一台接入交换机、一台监控服务器、两台PC。拓扑结构如下:两台核心通过两条链路互联(做链路聚合),接入交换机分别上联两台核心,监控服务器接入核心1的普通口,核心1的G0/0/1口配置为镜像口复制业务流量给监控服务器。两台PC分属两个VLAN,通过VRRP虚拟网关访问外部网络。

按以下配置在eNSP中逐一执行。先配置核心1的VRRP主备和镜像口:

# 核心交换机1:创建业务VLAN并配置VRRP主角色 <Huawei> system-view [Huawei] sysname Core-SW1 [Core-SW1] vlan batch 10 20 100 # VLAN 10为办公业务网段,VLAN 20为服务器网段,VLAN 100为管理网段 # 配置与核心2的互联链路为Eth-Trunk [Core-SW1] interface Eth-Trunk1 [Core-SW1-Eth-Trunk1] trunkport GigabitEthernet 0/0/2 0/0/3 [Core-SW1-Eth-Trunk1] trunk allow-pass vlan 10 20 100 [Core-SW1-Eth-Trunk1] quit # VLANIF接口配置VRRP,VLAN 10的虚拟网关为192.168.10.254 [Core-SW1] interface Vlanif 10 [Core-SW1-Vlanif10] ip address 192.168.10.1 24 [Core-SW1-Vlanif10] vrrp vrid 10 virtual-ip 192.168.10.254 [Core-SW1-Vlanif10] vrrp vrid 10 priority 120 # 优先级120高于核心2的默认值100,确保核心1为主 [Core-SW1-Vlanif10] quit # 配置镜像口:将G0/0/1的入方向流量复制到观察口 [Core-SW1] observe-port 1 interface GigabitEthernet 0/0/1 [Core-SW1] interface GigabitEthernet 0/0/2 [Core-SW1-GigabitEthernet0/0/2] port-link-type trunk [Core-SW1-GigabitEthernet0/0/2] port trunk allow-pass vlan 10 20 [Core-SW1-GigabitEthernet0/0/2] mirror to observe-port 1 both [Core-SW1-GigabitEthernet0/0/2] quit

这段配置里最关键的是VRRP优先级和镜像方向。VRRP优先级120是主备切换的唯一依据,配角优先级保持默认100,主角色故障时备角色自动接管虚拟IP。镜像方向both表示双向流量都复制,如果只关心下行流量可以改成inbound,注意镜像口本身不能再承载业务流量,否则会造成环路。

接着配置核心2的备角色和接入交换机的上联。核心2的VLANIF配置除IP不同外,VRRP优先级保持默认100即可。

# 核心交换机2:VRRP备角色 <Huawei> system-view [Huawei] sysname Core-SW2 [Core-SW2] vlan batch 10 20 100 [Core-SW2] interface Eth-Trunk1 [Core-SW2-Eth-Trunk1] trunkport GigabitEthernet 0/0/2 0/0/3 [Core-SW2-Eth-Trunk1] trunk allow-pass vlan 10 20 100 [Core-SW2-Eth-Trunk1] quit [Core-SW2] interface Vlanif 10 [Core-SW2-Vlanif10] ip address 192.168.10.2 24 [Core-SW2-Vlanif10] vrrp vrid 10 virtual-ip 192.168.10.254 # 不配置priority,默认值100,本设备为备 [Core-SW2-Vlanif10] quit # 被管设备开启SNMP,供Zabbix轮询 [Core-SW2] snmp-agent [Core-SW2] snmp-agent sys-info version v2c [Core-SW2] snmp-agent community read cipher Zabbix@Monitor2024 # 共同体名相当于SNMP的密码,建议用强密码并定期更换 [Core-SW2] snmp-agent sys-info contact "NetworkOps" [Core-SW2] quit

SNMP配置这段是Zabbix能发现设备的前提。community read cipher是只读共同体,配置成Zabbix@Monitor2024这种强密码形式,不要用默认的public。sys-info contact填运维联系人,设备出问题时通过SNMP可以拿到这个信息。配置完成后在Zabbix里添加主机时填同样的IP和共同体名,模板选择"SNMP Generic"或对应的设备厂商模板,就可以看到CPU、内存、端口状态这些监控项了。

4.3 在eNSP里验证拓扑的三种方式:断链路、断设备、看数据流

拓扑配置完不是画完图就结束了,必须做验证。eNSP里我习惯做三个测试:第一个是断掉Core-SW1的Eth-Trunk1链路,看PC1的网关是否在几秒内切换到Core-SW2,同时观察Zabbix是否收到了VRRP切换的事件日志;第二个是直接Shutdown Core-SW1,看整个VLAN的通信是否快速恢复;第三个是打开eNSP的抓包功能抓取镜像口的流量,确认镜像链路确实把业务报文复制给了监控服务器。

这三个测试对应了三种真实故障场景:链路单点故障、核心设备宕机、流量分析链路失效。在eNSP里验证通过后,把配置导出保存,再拿到真机上执行。这套"先仿真后真机"的流程,是我做网络变更雷打不动的习惯,能避免绝大多数配置级事故。

5. 网络监控拓扑落地避坑:五个高频问题与排查思路

5.1 现象:镜像口抓不到流量,监控平台流量分析模块一直空白

原因大概率是镜像口的带宽配置不足或方向配反。镜像口复制的是被镜像口的进出流量,如果被镜像口是千兆而镜像口接的是百兆网卡,高峰期必然丢包,丢到一定程度流量分析模块看起来就是空白。另一个高频原因是mirror to observe-port的方向写错——只复制了inbound但需要看的是双向流量。

解决方法是先确认镜像口和被镜像口的速率匹配,再检查display observe-port的输出,确认镜像方向和观察口索引是否正确。还可以在被镜像口上用display interface查看计数器的增长情况,确认业务流量确实存在,再逐步缩小排查范围。在eNSP里可以用抓包功能直接看镜像口的报文,比真机上抓包方便得多,建议先仿真定位再回真机处理。

5.2 现象:双核心VRRP配置完成后,PC网关时通时不通

这通常不是VRRP本身的问题,而是Eth-Trunk或VLAN放行配置不一致导致的双向流量不对称。核心1和核心2上都配置了VRRP,但两台设备的Eth-Trunk成员端口、允许通过的VLAN列表如果不一致,二层转发就会出现黑洞。另一个隐蔽原因是STP在作祟——Eth-Trunk和VRRP叠加时,STP的阻塞端口可能导致流量绕路,造成间歇性丢包。

解决方法是先逐台核对display vrrp brief和display eth-trunk的输出,确认主备状态和成员端口一致;再检查两台核心的VLAN配置,用display vlan逐一比对;最后在PC上持续Ping虚拟网关,同时在两台核心上用display vrrp statistics看有没有切换记录。多数情况下,配置不一致是根源,逐项核对比反复重启设备有效得多。

5.3 现象:SNMP轮询频繁超时,Zabbix报"Unavailable"但设备业务正常

设备CPU繁忙导致SNMP响应慢是主要原因,尤其是接入层交换机开启了大量MIB查询时。Zabbix默认的轮询并发太高,一台设备几十个监控项同时发起SNMP GET请求,设备SNMP进程处理不过来就会超时。另一个常见原因是SNMP共同体名中的特殊字符在Zabbix里被转义了——比如共同体名里带了@,Zabbix配置时没有正确编码,导致认证失败。

解决方法是调大Zabbix的SNMP超时时间(从3秒改成5秒),并降低轮询频率;在设备侧限制SNMP的并发数或只允许管理网段的SNMP请求;检查共同体名配置时,看Zabbix的设备宏里有没有被URL编码过的痕迹。这些参数在eNSP里验证时不容易暴露,真机上随着设备数量增加会越来越明显,所以从一开始就要留好调整余量。

5.4 现象:告警风暴——设备一抖动,几十条告警同时涌进来

告警风暴几乎是每个监控系统上线后必经的阵痛。网络设备在链路切换、VRRP主备切换时,会产生大量的接口Up/Down事件,如果每个监控项都单独配了触发器,一个设备抖动就会触发几十条告警。灾备演练、批量升级的时候更是重灾区,告警平台直接被打爆,真正重要的告警反而被淹没。

解决思路是引入告警依赖和抑制机制。在Zabbix里给触发器配置依赖关系,比如接入交换机接口Down的告警依赖核心交换机的连通性告警——核心设备都挂了,接入层的接口Down就不需要重复报。再配合告警升级策略,同一设备在5分钟内重复告警只发一条合并通知。这个配置在Zabbix里需要逐个触发器手工设置依赖,工作量不小,但不做的话,告警平台上线一个月就会被吐槽到关停。

5.5 现象:监控服务器磁盘写满,历史数据全丢,监控图一片空白

Zabbix默认的Housekeeper进程会自动清理过期历史数据,但如果你修改过数据保留策略,比如把历史数据保留时间拉长到一年,磁盘很快就会被撑爆。更隐蔽的是,Zabbix的数据库和前端如果共用一块小容量系统盘,告警日志和PHP会话文件增长也会悄悄占满磁盘。

解决方法是部署时就给数据库单独挂一块数据盘,容量按每天新增监控数据量乘以保留天数来估算,预留30%余量。同时给/var/lib/mysql目录单独做分区,避免系统盘满影响整个监控服务。我这边机房里的监控服务器数据盘已经跑满过两次,每次都是从删除过期表开始救急,再调整保留策略,到现在终于形成习惯。所以这里直接建议:配完告警媒介之后,接着就配磁盘容量告警,没有之一。

6. 拓扑图验证与演进:从静态图纸到持续校准的监控基线

拓扑图画完、监控配通,还差最后一步:把这张图变成可验证、可演进的活文档。我的做法是每季度做一次"监控拓扑校准":逐个检查被管设备的SNMP联通性、镜像口的流量负载、VRRP主备状态与拓扑图标注是否一致。很多企业换过核心交换机、调整过VLAN规划,但拓扑图还停留在三年前,这种图不仅没有价值,还会误导排障。

具体校准方法有两种:一是用Zabbix自带的拓扑图功能,把已纳管设备的链路关系自动生成视图,和手画的拓扑图做比对,差异点就是网络变更漏更新的地方;二是在核心交换机上执行display mac-address和display arp,核对设备实际接入端口和拓扑图标注是否一致。这两种方法都不需要额外工具,纯命令行就能完成。我这边每个季度的校准结果都存档,半年之后差异点逐渐归零,说明拓扑图和真实网络终于对齐了。

遇到网络扩容或架构调整时,我的习惯是先改拓扑图再动真机——哪怕只是在图上加一条虚线,也要标注变更时间和审批单号。这个习惯救过我一次:某次机房搬迁,施工队按旧拓扑图的标注割接了光纤,结果割到一半发现图上的端口和实际设备对不上,还好有变更记录可以回溯,避免了全楼断网。PDF里的54种图你可以当作参考集,但真正属于你机房的拓扑图,永远只能从你现在的网络状态出发去画,并且持续更新。

做网络监控这几年,最大的教训就是"画图的人不维护图,维护图的人不画图"是运维事故的温床。希望这套从选型到校准的流程,能帮你把一张静态的PDF变成一套能用的监控体系。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 7:12:26

DeepSeek多平台本地部署实战:Ollama+Open WebUI打造私有AI服务

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 7:12:11

AXI Quad SPI FIFO配置深度指南:避免上板丢数据的实战要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 7:11:17

用嘉立创EDA设计STM32最小系统扩展板:从原理图到打样全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 7:10:35

植保机双电源无缝切换:LTC4416理想二极管控制器实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华