首页 › tech › 谁掐断了N2链路

谁掐断了N2:一场SCTP闪断追凶

概述

某省5G SA网络在防火墙一次「会话老化优化」割接后,凌晨突发批量gNB脱管、附着成功率跳水,且越空闲越断、重启即好、过几天又犯。本文以18年一线运维视角复盘这场闪断的完整排查:从无线误判到SCTP心跳与防火墙60秒老化的时间差对决,锚定IETF RFC 9260与3GPP TS 38.413还原协议机理,给出可复用的排查决策树、参数对照表与工具链清单,以及一条最容易被忽视的教训——安全设备变更必须进核心网评审会。

目录

一、开局:凌晨一点,成功率跳水

故事从一张变更单开始。某省5G SA网络,N2接口(gNB到AMF)的信令经由省干汇聚层的两台边界防火墙进入核心网机房。2026年8月中旬的一个周四凌晨,安全部门按演练整改要求,对这两台防火墙做了一次「会话老化优化」:启用SCTP深度检测,并把空闲会话的兜底老化时间统一压到60秒,目的是压降会话表资源占用。

变化在40分钟后显形。网管大屏上,首批gNB的NGAP断链告警弹出,随后越滚越多;附着成功率KPI曲线从99.2%一路跌到96.8%。到了凌晨3点,累计约300个基站(占全省5G站的2.3%)反复脱管又恢复,恢复几十分钟后再次掉线,呈现出诡异的周期性。

现场整理的时间线如下(案例细节已脱敏,数据为真实项目的还原值):

时间 事件
00:30 防火墙SCTP深度检测与60秒兜底老化策略生效
01:12 网管出现首批gNB的NGAP断链告警,约40站
01:30 附着成功率跌至96.8%,部分站业务中断数十秒
02:05 无线代维按常规流程巡检光路、重启站点,短暂恢复
03:40 发现断链集中在「心跳5分钟」批次的老gNB,成批成批地掉
04:30 防火墙会话表比对:空闲60秒后对应N2五元组无会话
05:10 防火墙为SCTP单独配置长老化,告警逐步收敛
次日 全网gNB心跳参数对齐,连续24小时观察零复发

两个细节值得先记下:第一,断链不是一次性的,是「断—自愈—再断」的循环;第二,话务越低的时间段断得越狠,白天反而风平浪静。这两个特征后来都成了破案的关键证词。

二、第一轮误判:重启能好,锅在无线?

告警一响,第一反应永远是无线队上场。代维上了三个站,光功率正常、无驻波告警、尾纤干净;重启之后立竿见影地恢复。于是工单上写下「单站射频类故障,观察处理」。到了第二天凌晨,同样的告警换了一批站又来。

这里有一个运维老手都懂的陷阱:「重启能好」不等于「无线的问题」。对任何基于状态的协议来说,重启的实质是推倒状态机重新握手——如果故障的根源是「中间某个设备保存的状态和两端不一致」,那么重启当然能暂时治好,治好的只是状态不同步,病灶一点没动。

第二个线索在传输队手里:他们调了当周的光路性能数据,误码率全程干净,可以排除传输闪断。第三个线索来自核心网:AMF侧的SCTP关联统计显示,这些出问题的站关联ID反复新建,NG Setup请求的时间戳呈现出一种「集合性的规律」——同一批次型号的老gNB总是凑在一起掉线。

三个队的数据拼到一起,问题的形状变了:不是无线、不是光路、不是AMF本身,而是「某个只在空闲时才发作的中间环节」。这时候,该把协议文本翻出来了。

三、锚定协议:SCTP心跳机制速览

N2接口的NGAP信令跑在SCTP上,这是3GPP TS 38.413《NG Application Protocol (NGAP)》的硬性规定(规范页面见文末参考来源3)。SCTP是IETF专为信令设计的传输协议,本文的机理依据全部锚定RFC 9260《Stream Control Transmission Protocol》(2022年6月发布,废弃了2007年的经典版RFC 4960,见参考来源1、2),下面几个事实全部出自该规范原文,不是经验之谈。

心跳保活:规范第8.3节规定,对于空闲的目的地址,SCTP端点应当周期性发送HEARTBEAT探活包,对端必须以HEARTBEAT ACK回应;两次心跳的间隔由参数HB.interval控制,建议值30秒。心跳的意义就在「空闲」二字——链路上一旦有业务数据流动,心跳可以歇着;没有数据时,心跳就是这条链路的脉搏。

失败判定:规范第8.2、8.3节规定,一个心跳发出后在RTO内收不到ACK,该路径的错误计数器加一;连续超过Path.Max.Retrans次(建议值5次),该路径被标记为inactive;整体错误计数超过Association.Max.Retrans(建议值10次),关联直接进入CLOSED状态——这就是网管上看到「NGAP断链」的协议级时刻。

防火墙如何识别SCTP:规范第12.3节专门讲了SCTP与防火墙的配合——INIT建链包必须独占一个SCTP报文、且其Verification Tag必须为0,这两条强制性要求的存在,正是为了让防火墙能「只看第一个包」就无歧义地识别出建链请求。换句话说,SCTP从设计之初就给了防火墙一个抓手:认得INIT,就能追踪整条关联的状态。市面上具备SCTP深度检测能力的防火墙,靠的正是这套机制。

关键参数汇总如下,全部为RFC 9260第16节的建议值:

参数 RFC 9260建议值 含义 对本故障的意义
HB.interval 30秒 空闲地址心跳间隔 若大于防火墙老化时间,必埋雷
Path.Max.Retrans 5次/路径 路径失败判定门限 连续5次心跳无ACK即判死
Association.Max.Retrans 10次 关联整体失败门限 断链前的最后一道闸
RTO.Min / RTO.Max 1秒 / 60秒 重传超时上下限 心跳重传按指数退避拉长
Max.Init.Retransmits 8次 建链重试上限 决定重连风暴的持续时长

特别说明:各厂家gNB的SCTP心跳默认值与可调范围存在差异(工程上常见30秒到5分钟不等),标准允许多种实现,具体行为以各厂家官方文档为准。本次故障里,那批「心跳5分钟」的老gNB,正是当年为了「省一点空口信令」人工调慢的——伏笔就此埋下。

四、真凶现身:防火墙的60秒

协议机理一摆,案情就通了。把两边的时钟放在一起看:

于是老站的命运是一条精确的循环链:业务空闲60秒后,防火墙删掉这条N2的会话;5分钟后gNB发出HEARTBEAT,防火墙一看——不是INIT、我也没有这条关联的状态,丢;gNB按指数退避再发,连续5次无ACK,超过Path.Max.Retrans,路径判死,NGAP断链告警,站上用户掉线;gNB随后发起INIT重建,INIT恰好是防火墙唯一放行的包,建链成功,业务恢复;再过60秒空闲、5分钟心跳间隔……如此往复。

用一张时序图看这段「死刑循环」:

sequenceDiagram
    participant G as gNB
    participant F as 防火墙
    participant A as AMF
    Note over G,F: 空闲60秒 FW删会话
    G->>F: HEARTBEAT 心跳
    F->>F: 非INIT 无状态 丢弃
    G->>G: 连续5次无ACK
    G->>F: INIT 重建链路
    F->>A: INIT 放行转发
    A->>F: INIT ACK
    F->>G: INIT ACK 回传
    Note over G,F: 建链成功 5分钟后重演

这张图也解释了前文所有「证词」:

为什么越闲越断? 白天话务密、业务包秒秒都在流,防火墙会话不断被刷新,永远活不到60秒老化线;凌晨和午后低谷,空闲动辄超过一分钟,雷区才开始爆炸。而那批心跳30秒的新站,就算完全空闲,心跳每30秒刷新一次会话,也踩不到60秒的雷——所以掉线的清一色是5分钟心跳的老批次。

为什么重启能好? 重启即重新INIT,防火墙放行,一切归零;但空闲循环还在,几十分钟后必然复发。

为什么凌晨01:12才开始告警? 策略00:30生效,第一批「空闲满60秒+5分钟心跳+5次重传退避」的时间累计,恰好落在一小时上下,与告警起点严丝合缝。最后一条实锤来自防火墙自身:调出会话表对那条N2五元组做倒计时观察,60秒整,会话消失——当场人赃并获。

五、处置与验证:三步收网

第一步,止血。 在防火墙上为SCTP配置专用会话类型:识别到SCTP流后按协议状态机跟踪,空闲老化设置为不小于1800秒,同时保留深度检测能力。这一步做完不到20分钟,断链告警不再新增。

第二步,正本清源。 全网gNB的SCTP心跳参数统一对齐到30秒以内(RFC 9260建议值即30秒),分批次夜间执行。有个反对声音值得记录:有同事担心「心跳变密信令变多」,算了一笔账——一个站30秒一个心跳包,百来字节,一个月的流量不过几十兆,相比一次批量脱管的代价,这点信令开销约等于零。「省信令省到把链路省断」,这个学费不能白交。

第三步,闭环验证。 连续观察24小时:附着成功率回到99.3%以上,SCTP关联新建次数恢复基线,防火墙会话表不再出现「幽灵五元组」。随后把整条链路加进了例行巡检项——防火墙策略变更后,自动化脚本会抽查30条N2五元组的会话存活与心跳往返时延。

顺带排查次生灾害:批量INIT重建曾在凌晨造成AMF侧SCTP握手队列短暂拥塞,若干健康站的NG Setup时延被拉长。处置后建议将「同时重连的gNB数量」纳入告警门限,避免某次真正的批量故障把AMF的建链能力打满,让小故障滚成大雪崩。

排查过程中沉淀的决策树如下,可贴在值班室墙上:

flowchart TD
    A[N2链路批量闪断] --> B{断链有无时间规律}
    B -->|低谷时段集中| C[怀疑空闲触发]
    B -->|全天随机分布| D[查光路误码与传输]
    B -->|集中个别站点| E[查单站电源与尾纤]
    C --> F[比对心跳与老化参数]
    D --> F
    E --> F
    F --> G{心跳间隔大于中间设备老化}
    G -->|是| H[会话老化即真凶]
    G -->|否| I[查多宿主路径与双机同步]
    H --> J[中间设备为SCTP设长老化]
    I --> J
    J --> K[gNB心跳对齐30秒内]
    K --> L[连续观察24小时成功率]

配套的工具链清单:

排查层 工具/抓手 看什么
网管 告警工单+KPI曲线 断链告警与成功率跳水的时间相关性、是否周期性
核心网 AMF的SCTP关联状态 关联ID反复新建、RESTART/断链计数随批次分布
抓包 Wireshark过滤sctp HEARTBEAT重发无ACK的节奏、INIT重演周期是否等于心跳周期
安全设备 防火墙会话表 五元组会话是否存在、老化倒计时、深度检测的丢弃日志
变更管理 变更单时间轴 告警起点与策略生效时间是否对齐——最容易被跳过的一步

六、经验教训:给中间设备立规矩

这单故障没死人没上新闻,只留下一张KPI坑洼图,但它暴露的漏洞在运营商网络里普遍存在。五条教训,按优先级排:

第一,安全设备变更必须进核心网评审会。 防火墙团队眼里这是一次普通的资源优化;在核心网团队眼里,它改写了每一条N2链路的生存规则。两个团队的变更单如果永远不相交,这类「参数单看都合理、合起来才出事」的故障就会一犯再犯。本次之后,该省把边界防火墙的SCTP、GTP、DIAMETER相关策略全部纳入核心网变更评审范围。

第二,「重启能好」是线索,不是结论。 状态类协议的世界里,重启等于重新握手,它只能掩盖状态不一致,不能排除它。遇到「重启有效、复发准时」的故障,直接往中间设备的状态表上查,能省一半时间。

第三,把时间参数当成一张网来看。 心跳间隔、老化时间、重传门限,这些参数分散在不同设备上,单看每一条都合规,组合起来才杀人。凡是带「保活/老化/超时」字样的参数,登记进同一张台账,变更时横向比对。

第四,省资源要算全成本。 压会话表省下的是内存,赔上的是基站脱管、用户掉线和三支队伍的通宵。60秒老化对纯互联网流量或许无感,对信令链路就是死刑判决——中间设备的默认模板要按承载的业务类型分档,不能一套参数走天下。

第五,空闲才是信令链路的大敌。 这条反直觉的经验值得写进新员工教材:业务繁忙时链路反而安全,真正脆弱的时刻是无人说话的深夜。同理可推及PFCP心跳、IKE-SA、TCP长连接——所有靠保活包续命的状态,都受制于同一条铁律:保活周期必须显著短于链路上最严格的那道老化时间,且留足重传余量。

这场追凶的最终案卷只有一行结论:不是无线松了手,不是光路眨了眼,是防火墙的心跳表与gNB的心跳表,在60秒与5分钟之间,差了整整一个决策会的距离。

参考来源

  1. RFC 9260: Stream Control Transmission Protocol — 本文协议机理主锚点:第8.2/8.3节心跳与路径失败判定、第12.3节防火墙交互、第16节建议参数值(HB.interval 30秒、Path.Max.Retrans 5次等)
  2. RFC 4960: Stream Control Transmission Protocol — SCTP经典版本,大量现网设备实际遵循的蓝本,2022年被RFC 9260废弃
  3. 3GPP TS 38.413: NG-RAN; NG Application Protocol (NGAP) — 规定N2接口NGAP信令承载采用SCTP的3GPP规范
  4. RFC 1858: Security Considerations for IP Fragment Filtering — 防火墙分片过滤与首包识别的经典依据,被RFC 9260第12.3节引用

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入