<!-- title: N2切换三阶段信令与数据转发博弈 -->
<!-- domain: core-network -->

# 5G N2切换核心网侧NGAP/PFCP三阶段信令与数据转发博弈

## 1 N2切换的触发条件与设计哲学

5G系统中，当源gNB与目标gNB之间不存在Xn接口、Xn接口不可用或Xn切换被拒绝时，系统回退到**N2-based Handover**——即核心网控制的切换流程。与Xn切换的gNB直连旁路架构不同，N2切换将AMF推上"信令中继仲裁者"的位置，所有控制面信令经由AMF在两个gNB之间转发。

N2切换在3GPP TS 23.502 V18.x中定义为Section 4.9.3.2（Intra-AMF N2 Handover）和Section 4.9.3.3（Inter-AMF N2 Handover）。NGAP层面由TS 38.413定义Handover Preparation/Resource Allocation/Execution/Completion四阶段状态机。PFCP层面由TS 29.244定义SMF与UPF之间的会话修改规则。

**设计意图**：N2切换是Xn切换的"安全网"。它的代价是更高的切换时延（约20-40ms额外开销），但换来了对任意网络拓扑的普适支持——跨厂商、跨AMF区域、跨PLMN边界均可工作。

## 2 N2切换完整信令时序图（Intra-AMF场景）

以下信令流基于TS 23.502 Section 4.9.3.2 Figure 4.9.3.2.2-1，覆盖从测量报告到路径切换的全链路：

```mermaid
sequenceDiagram
    participant UE
    participant S_gNB as Source gNB
    participant AMF
    participant SMF
    participant UPF as UPF(PSA)
    participant T_gNB as Target gNB

    Note over UE,T_gNB: Phase 1: Handover Preparation
    UE->>S_gNB: Measurement Report (Event A3/A5)
    S_gNB->>S_gNB: HO Decision (Xn unavailable)
    S_gNB->>AMF: NGAP Handover Required
    Note right of S_gNB: IE: Target ID, Source-toTarget-TransparentContainer,<br/>PDU Session Resource List,<br/>HO Type (intra5GS)

    AMF->>SMF: Nsmf_PDUSession_UpdateSMContext Request
    Note right of AMF: IE: HO State=PREPARING,<br/>Target ID, N2 SM Info

    SMF->>UPF: PFCP Session Modification Request
    Note right of SMF: IE: Create FAR(forwarding),<br/>DL PDR with forwarding action

    UPF-->>SMF: PFCP Session Modification Response
    Note right of UPF: IE: F-TEID(forwarding tunnel)

    SMF-->>AMF: Nsmf_PDUSession_UpdateSMContext Response
    Note right of SMF: IE: N2 SM Info,<br/>QoS Flow Profile,<br/>Forwarding Tunnel Info

    AMF->>T_gNB: NGAP Handover Request
    Note right of AMF: IE: UE AggregateMaxBitRate,<br/>PDU Session Resource Setup List,<br/>Security Context,<br/>Source-toTarget-TransparentContainer

    T_gNB->>T_gNB: Allocate Radio Resources
    T_gNB-->>AMF: NGAP Handover Request Acknowledge
    Note right of T_gNB: IE: Target-toSource-TransparentContainer,<br/>PDU Session Resource Admitted List,<br/>UL NG-U UP TNL Info(TEID)

    Note over UE,T_gNB: Phase 2: Handover Execution
    AMF->>S_gNB: NGAP Handover Command
    Note right of AMF: IE: Target-toSource-TransparentContainer

    S_gNB->>UE: RRC Reconfiguration (HO Command)
    Note right of S_gNB: IE: targetCellIdentity,<br/>newUE-Identity,<br/>reconfigurationWithSync

    Note over S_gNB,UPF: Data Forwarding (DL data buffered)
    S_gNB->>T_gNB: DL Forwarding (direct/indirect)

    UE->>T_gNB: RRC Connection Reconfiguration Complete
    Note right of UE: Random Access + RRC Complete

    Note over UE,T_gNB: Phase 3: Handover Completion
    T_gNB->>AMF: NGAP Handover Notify
    Note right of T_gNB: IE: User Location Info(T-gNB)

    AMF->>SMF: Nsmf_PDUSession_UpdateSMContext Request
    Note right of AMF: IE: HO State=COMPLETED,<br/>UL Tunnel Info(T-gNB N3 TEID)

    SMF->>UPF: PFCP Session Modification Request
    Note right of SMF: IE: Update FAR(DL→T-gNB),<br/>Remove Forwarding FAR

    UPF->>UPF: Send End Marker on old DL path
    UPF-->>SMF: PFCP Session Modification Response

    SMF-->>AMF: Nsmf_PDUSession_UpdateSMContext Response

    AMF->>S_gNB: NGAP UE Context Release Command
    S_gNB-->>AMF: NGAP UE Context Release Complete
```

## 3 三阶段深度解析

### 3.1 Phase 1: Handover Preparation（准备阶段）

**NGAP Handover Required**（TS 38.413 Section 8.3.1）是N2切换的起点。源gNB在以下条件下发送此消息：
- Xn接口不存在或不可用
- Xn切换被目标gNB拒绝
- 源gNB决定需要核心网参与（例如跨AMF区域）

关键IE解析：

| IE名称 | 来源 | 说明 |
|--------|------|------|
| **Target ID** | S-gNB | 目标gNB的Global NG-RAN Node Identifier（含PLMN ID + gNB ID） |
| **Source-toTarget-TransparentContainer** | S-gNB | AS层上下文容器：含目标Cell ID、UE History、AS Security Context、RRM配置 |
| **PDU Session Resource List** | S-gNB | 待切换的PDU会话列表，每个会话携带UL NG-U TNL Info（源侧N3 TEID） |
| **Handover Type** | S-gNB | intra5GS / inter5GS（EPS互操作场景） |
| **Cause** | S-gNB | 触发原因（如ho-desired-reason-ran-oper） |

AMF收到Handover Required后，需要对每个PDU会话调用`Nsmf_PDUSession_UpdateSMContext`服务（TS 29.502 Section 6.1.3.2），将HO State设为"PREPARING"。SMF收到后判断是否需要建立数据转发隧道。

**PFCP Session Modification**（TS 29.244 Section 7.5.4）是数据转发的关键步骤。SMF在UPF上创建转发规则：

| PFCP Rule | 操作 | 说明 |
|-----------|------|------|
| **PDR（Packet Detection Rule）** | 创建转发DL PDR | 匹配DL数据流，关联到转发FAR |
| **FAR（Forwarding Action Rule）** | 创建转发FAR | Apply Action=FORWARD，Forwarding Parameters含目标侧F-TEID |
| **BAR（Buffering Action Rule）** | 可选 | 在转发隧道建立前缓存DL数据 |

**NGAP Handover Request**（TS 38.413 Section 8.4.1）从AMF发往目标gNB。这是AMF作为"信令中继"的核心体现——AMF将源gNB的上下文打包转发，加上SMF提供的QoS信息：

| IE名称 | 来源 | 说明 |
|--------|------|------|
| **UE Aggregate Maximum Bit Rate** | AMF/UDM | UE聚合速率上限 |
| **PDU Session Resource Setup List** | AMF+SMF | 含QoS Flow Profile、S-NSSAI、Session-AMBR |
| **Security Context** | AMF | 含Security Key、Next Hop Chaining Count |
| **Source-toTarget-TransparentContainer** | 透传 | 直接从源gNB透传到目标gNB |
| **Masked IMEISV** | AMF | 终端标识 |

目标gNB资源分配成功后，回复**NGAP Handover Request Acknowledge**（TS 38.413 Section 8.5.1），其中最关键的IE是`PDU Session Resource Admitted List`——表示目标侧接受了哪些PDU会话（可能只接受部分），并携带`UL NG-U UP TNL Information`（目标侧N3上行TEID）。

### 3.2 Phase 2: Handover Execution（执行阶段）

AMF收到Handover Request Acknowledge后，将目标gNB的容器透传回源gNB（`NGAP Handover Command`）。源gNB从Ack中提取Target-toSource-TransparentContainer，封装到`RRC Reconfiguration`消息中发送给UE。

**数据转发是执行阶段的关键博弈点**。根据TS 23.502 Section 4.9.3.2，存在三种转发模式：

```mermaid
graph TB
    subgraph Direct["直连转发 (Direct Forwarding)"]
        S1[Source gNB] -->|Xn-U / 直接IP| T1[Target gNB]
    end

    subgraph Indirect["间接转发 (Indirect Forwarding)"]
        S2[Source gNB] -->|N3 tunnel| UPF1[UPF PSA]
        UPF1 -->|N9/N3 tunnel| T2[Target gNB]
    end

    subgraph NoForward["无转发 (No Forwarding)"]
        S3[Source gNB] -->|丢弃DL数据| X[Discard]
        UPF2[UPF PSA] -->|新N3 tunnel| T3[Target gNB]
    end

    style Direct fill:#e8f5e9
    style Indirect fill:#fff3e0
    style NoForward fill:#ffebee
```

**三种转发模式的选择逻辑**：

| 模式 | 触发条件 | 优缺点 |
|------|---------|--------|
| **Direct Forwarding** | S-gNB与T-gNB间有IP可达性 | 时延最低，但需要gNB间直接IP路由 |
| **Indirect Forwarding** | 无直接IP路径，需经UPF中转 | 普适性强，但引入额外UPF跳数和PFCP规则开销 |
| **No Forwarding** | 源侧无缓存数据或对丢包容忍 | 零转发开销，但可能丢包 |

**SMF如何决定转发模式**：根据TS 23.502 Section 4.9.3.2 Step 7a/7b：
- 若SMF判断S-gNB和T-gNB间可直接转发，在N2 SM Info中只携带T-gNB的N3 TEID
- 若需间接转发，SMF创建额外的PFCP转发规则，在UPF上建立S-gNB→UPF→T-gNB的N9隧道

**End Marker机制**（TS 23.502 Section 4.9.3.2 Step 16b）：当UPF将DL路径切换到T-gNB后，必须在旧路径上发送一个或多个GTP-U End Marker包。这些标记包的作用是通知目标gNB"旧路径数据已全部到达，之后的数据来自新路径"，从而让目标gNB正确排序数据并转发给UE。

### 3.3 Phase 3: Handover Completion（完成阶段）

UE成功接入目标gNB后，T-gNB发送**NGAP Handover Notify**（TS 38.413 Section 8.6.1），通知AMF切换完成。此时AMF触发SMF执行路径切换：

1. SMF通过PFCP Session Modification将UPF的DL FAR更新为指向T-gNB的新N3隧道
2. UPF在旧DL路径上发送End Marker
3. SMF可选地释放数据转发隧道（PFCP Session Modification删除转发FAR）
4. AMF通过NGAP UE Context Release Command释放源gNB资源

## 4 Inter-AMF N2切换：N14接口信令博弈

当源gNB和目标gNB属于不同AMF的服务区域时，切换涉及**Inter-AMF N2 Handover**（TS 23.502 Section 4.9.3.3）。核心区别在于：

```mermaid
sequenceDiagram
    participant S_gNB as Source gNB
    participant S_AMF as Source AMF
    participant T_AMF as Target AMF
    participant SMF
    participant UDM

    S_gNB->>S_AMF: NGAP Handover Required
    Note right of S_AMF: S-AMF判断Target ID<br/>不属于自己服务的gNB

    S_AMF->>T_AMF: Namf_Communication_CreateUEContext Request (N14)
    Note right of S_AMF: IE: Target ID,<br/>UE Context(Security,MM State),<br/>PDU Session List,<br/>Source-toTarget-Container

    T_AMF->>UDM: Nudm_UECM_Registration
    T_AMF->>SMF: Nsmf_PDUSession_UpdateSMContext Request

    SMF-->>T_AMF: UpdateSMContext Response

    T_AMF->>T_AMF: Forward to Target gNB

    T_AMF-->>S_AMF: Namf_Communication_CreateUEContext Response

    Note over S_AMF,T_AMF: HO Execution...

    T_AMF->>SMF: Path Switch (UpdateSMContext)
    S_AMF->>S_AMF: Release Source UE Context
```

Inter-AMF切换的额外信令开销：

| 额外步骤 | 接口 | 增量时延 |
|----------|------|---------|
| S-AMF→T-AMF Context Transfer | N14（Namf） | +5-10ms |
| T-AMF→UDM Registration Update | Nudm | +3-5ms |
| S-AMF→T-AMF Response | N14 | +5-10ms |

**关键设计点**：S-AMF通过`Namf_Communication_CreateUEContext`服务（TS 29.518 Section 6.1.6.2.3）将完整的UE上下文（含SUPI、Security Context、MM State、PDU Session列表）传给T-AMF。这个服务调用是同步阻塞的——S-AMF必须等T-AMF完成资源准备后才能向S-gNB发送Handover Command。

## 5 NGAP切换状态机

NGAP层面的切换过程可抽象为以下状态机（基于TS 38.413 Section 8.2）：

```mermaid
stateDiagram-v2
    [*] --> HO_None : UE in Connected Mode

    HO_None --> HO_Preparing : Handover Required sent
    
    HO_Preparing --> HO_Prepared : Handover Request Ack received
    HO_Preparing --> HO_Failed : Handover Preparation Failure<br/>or Handover Cancel
    
    HO_Prepared --> HO_Executing : Handover Command sent
    
    HO_Executing --> HO_Completed : Handover Notify received
    HO_Executing --> HO_Failed : Handover Failure (T304 expiry)
    
    HO_Completed --> HO_None : UE Context Release Complete
    HO_Failed --> HO_None : RRC Reestablishment<br/>or Connection Release
```

**关键定时器**：

| 定时器 | 位置 | 超时动作 |
|--------|------|---------|
| **T304** | UE侧 | HO执行失败，发起RRC Reestablishment |
| **NGAP HO Guard Timer** | AMF侧 | Preparation超时，发Handover Cancel给T-gNB |
| **PFCP Response Timer** | SMF侧 | UPF无响应，切换流程失败 |

## 6 抓包识别与排错实战

### 6.1 Wireshark抓包过滤

```
# NGAP Handover Required
ngap.procedureCode == 7 && ngap.handoverRequired

# NGAP Handover Request
ngap.procedureCode == 8 && ngap.handoverRequest

# PFCP Session Modification（HO期间）
pfcp.message_type_value == 53 && pfcp.f_teid

# HTTP/2 Nsmf UpdateSMContext（SBI接口）
http2.header.value contains "sm-contexts" && http2.header.value contains "modify"
```

### 6.2 常见故障点

| 故障现象 | 可能原因 | 排错方法 |
|----------|---------|---------|
| Handover Required后无Handover Request | AMF无法解析Target ID，或SMF无响应 | 检查AMF日志中Target ID解析，检查Nsmf接口HTTP状态码 |
| Handover Request被拒绝 | T-gNB资源不足或QoS无法满足 | 检查T-gNB的NGAP Cause IE（radio-resources-not-available） |
| UE发送RRC Complete后数据不通 | UPF路径未切换或End Marker未发送 | 检查PFCP Session Modification中的FAR更新，确认DL TEID指向T-gNB |
| 间接转发隧道建立失败 | UPF不支持N9转发或F-TEID分配失败 | 检查PFCP Response中是否有Create FAR失败的原因码 |
| Inter-AMF切换超时 | N14接口不可达或T-AMF过载 | 检查S-AMF→T-AMF的Namf服务调用HTTP 503 |
## 7 与Xn切换的对比分析

| 维度 | Xn Handover | N2 Handover |
|------|-------------|-------------|
| **信令路径** | S-gNB ←Xn→ T-gNB | S-gNB ←N2→ AMF ←N2→ T-gNB |
| **AMF参与度** | 仅Notify阶段参与 | 全程中继控制 |
| **SMF参与度** | Path Switch Request | 三次Nsmf_UpdateSMContext |
| **UPF参与度** | 仅路径切换 | 可能需要间接转发隧道 |
| **典型时延** | 10-20ms | 30-60ms |
| **数据转发** | 默认直连 | 直连/间接/无转发 |
| **适用场景** | 同区域gNB间 | 跨区域/跨AMF/无Xn |
| **3GPP章节** | TS 23.502 §4.9.1.3 | TS 23.502 §4.9.1.4 |

## 常见问题

**Q1: N2切换中SMF被调用几次UpdateSMContext？各自的作用是什么？**

A: 标准Intra-AMF N2切换中SMF被调用3次：
1. **Preparation阶段**：AMF通知SMF准备切换，SMF在UPF上创建数据转发隧道规则
2. **Completion阶段（Handover Notify后）**：AMF通知SMF切换完成，SMF更新UPF的DL路径指向T-gNB
3. **资源释放阶段**：SMF可选地删除数据转发隧道规则，释放旧路径资源

**Q2: Direct Forwarding和Indirect Forwarding如何选择？**

A: 由SMF决策（TS 23.502 §4.9.3.2 Step 7）。SMF检查S-gNB与T-gNB之间是否有IP路由可达性——如果有，优先使用Direct Forwarding（转发数据直接从S-gNB发给T-gNB，不经过UPF）；如果没有，SMF在UPF上建立间接转发隧道，数据经UPF中转。SMF将决策结果通过N2 SM Info告知AMF和目标gNB。

**Q3: Inter-AMF N2切换中，S-AMF如何知道目标gNB属于另一个AMF？**

A: S-AMF根据Handover Required中的Target ID（Global NG-RAN Node Identifier）查询本地配置或NRF，判断目标gNB是否在自己的服务范围内。如果不在，S-AMF通过NRF发现T-AMF，然后通过N14接口（Namf_Communication_CreateUEContext）将UE上下文传递给T-AMF。

**Q4: 为什么UPF切换路径后必须发送End Marker？**

A: End Marker是GTP-U协议中定义的标记包（TS 29.281 Section 5.1）。在切换过程中，目标gNB可能同时收到来自旧路径（转发数据）和新路径（直接数据）的下行数据包。End Marker标记了旧路径的最后一个数据包，让目标gNB知道旧路径数据已全部到达，此后可以停止等待转发数据并将新路径数据直接发给UE，避免数据乱序。

**Q5: N2切换中PDU会话可以被部分接纳吗？**

A: 可以。目标gNB在Handover Request Acknowledge中通过`PDU Session Resource Admitted List`和`PDU Session Resource Failed to Modify List`分别指示成功和失败的PDU会话。对于未被接纳的会话，SMF需要在切换完成后决定是释放该会话还是保持其在源侧（取决于运营商策略和会话类型）。

## 参考来源

1. [3GPP TS 23.502 V18.10.0](https://www.etsi.org/deliver/etsi_ts/123500_123599/123502/18.10.00_60/ts_123502v181000p.pdf) — Section 4.9.3.2 (Intra-AMF N2 Handover), Section 4.9.3.3 (Inter-AMF N2 Handover)
2. [3GPP TS 38.413 V18.x](https://www.etsi.org/deliver/etsi_ts/138400_138499/138413/) — NGAP Handover Required/Request/Command/Acknowledge/Notify定义
3. [3GPP TS 29.244 V18.7.0](https://cdn.standards.iteh.ai/samples/73097/0149f7100f1d4132bab4a798c870ce17/ETSI-TS-129-244-V18-7-0-2024-09-.pdf) — PFCP Session Modification, PDR/FAR规则定义
4. [free5GC Blog — Introduction of Xn and NG (N2) based handover](https://free5gc.org/blog/20251105/20251105/) — 开源5GC实现中的N2切换分析
5. [ETH Zürich — A Comprehensive Formal Analysis of 5G Handover](https://people.inf.ethz.ch/rsasse/pub/5G-handover-WISEC21.pdf) — N2 Handover安全性与形式化分析

---
> 本文由「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学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
