EPS/NR 承载管理的完整生命周期深度分析

5 阅读5分钟

第一阶段:附着(Attach)

1. 控制面流程

UE                        基站(eNodeB/gNodeB)          核心网(MME/AMF)
│
├─ RRC Connection Setup ─→ eNodeB ─────────────────────→ MME/AMF
│                                   (SIB 信息)
│
├─ NAS Attach Request ───→ eNodeB ─────────────────────→ MME/AMF
│  (IMSI/GUTI + 功能)                                (附着请求+鉴权)
│
├─ Authentication ───────→ eNodeB ─────────────────────→ UE
│  (Challenge: RAND+AUTN)
│
├─ Auth Response ────────→ eNodeB ─────────────────────→ MME/AMF
│  (RES)                              (验证成功)
│
├─ Security Commands ───→ UE                         (激活密钥)
│
└─ Attach Accept ────────→ UE  (临时标识P-TMSI/GUTI + VoLTE能力)

关键代码位置

// 附着结果类型(3GPP TS 24.301)
DataSpecificRegistrationInfo.java:
  - LTE_ATTACH_TYPE_EPS_ONLY = 1      // 仅EPS附着
  - LTE_ATTACH_TYPE_COMBINED = 2      // 组合附着(PS+CS)

// Android获取附着信息
EutranRegistrationInfo.aidl:
  AttachResultType:
    - EPS_ONLY       // 仅数据面
    - COMBINED       // 数据+语音
  
  LteVopsInfo:
    - isVopsSupported            // VoLTE能力
    - isEmcBearerSupported       // 紧急承载

AttachResultType 的含义

类型说明应用场景
EPS_ONLY附着到LTE EPS domain数据专网(5G NSA/SA、LTE Category M)
COMBINED附着到LTE+2G/3GCSFB场景(VoLTE不可用时)、SMS场景

附着中的关键参数

// 来自核心网(MME/AMF)的附着接受消息
AttachAccept {
  P-TMSI / 5G-GUTI              // 临时标识(用于后续寻呼)
  EPS network feature support   // VoPS/EMC BS标志
  ESM Information Container     // ESM消息(包含默认承载参数)
  TAI List                      // 允许的TA列表
  Equivalent PLMNs              // 等效PLMN
}

第二阶段:默认承载建立(Default Bearer Setup)

ESM(EPS Session Management)层的默认承载激活

附着过程必然伴随默认承载建立。这是 EPS 的强制特性

UE                        RAN(eNodeB)              核心网(S-GW/PGW/UPF)
│
├─ Attach Accept 含 ESM
│  (含默认Bearer参数)
│
├─ Activate Default EPS Bearer Context Request
│  (EPS Bearer ID #5, QCI, APN, IP)
│
├─ RRC Connection Reconfiguration ────→ 分配无线承载资源
│  (DRB#1 with AMBR/MBR QoS)
│
├─ Activate Default EPS Bearer Context Accept ─→ 完成
│
└─ IP Address Allocation
   从PGW/UPF获取:
   - IPv4: 10.x.x.x(DHCP或静态)
   - IPv6: /64前缀 (SLAAC)

Android中的相应代码

// 数据承载生命周期状态机(DataNetwork.java)
DataNetwork.java:
  ConnectingState → setupData() → DataServiceManager.setupDataCall()
  
  // 传递的参数
  DataProfile {
    apn          // "internet", "IMS", "MMS" 等
    protocol     // IPV4, IPV6, IPV4V6
    authType     // PAP, CHAP, PAP_CHAP
    roamingProtocol
  }
  
  SetupDataCallRequest {
    accessNetwork: EUTRAN/NGRAN
    dataProfile
    isModemCognitive
    roamingAllowed
  }

默认承载的QoS参数(硬件接口):

// hardware_interfaces/radio/1.6/types.hal
SetupDataCallResult {
  int32_t cid                  // Call ID(1-255)
  int32_t ifname               // "rmnet_data0"等
  PdpProtocolType protocol     // IP/IPV6/IPV4V6
  string[] addresses           // IP地址列表
  string[] dnses               // DNS服务器
  string[] gateways           // 默认网关
  
  Qos defaultQos              // 默认承载QoS
  {
    QosPdu sessionFlow {
      int qfi                 // QoS Flow ID (5G)
      int maxUplinkBitrate
      int maxDownlinkBitrate
      int guaranteedUplinkBitrate
      int guaranteedDownlinkBitrate
    }
  }
  
  vec<QosSession> qosSessions // 专网承载(可选)
  int32_t pduSessionId        // PDU Session ID (5G)
  OptionalSliceInfo sliceInfo // 网络切片(5G)
}

EpsBearerQosSessionAttributes 的 QCI(QoS Class Indicator)

QCI优先级类型延迟丢包率应用
1-4GBR< 100ms10^-2VoLTE/视频
5中高GBR<100ms10^-6IMS信令
6GBR<300ms10^-3实时视频
7-9Non-GBR>100ms10^-6互联网数据

第三阶段:切换(Handover)

3.1 同一RAT内的切换(Intra-RAT HO)

UE(Cell A)  ──→  基站A/B         ──→  核心网(MME)
                (X2切换接口)
  
  UE发现信号差 → 测量报告(Measurement Report)
  
  基站A决策 → 准备切换(HO Preparation)
    │
    ├─ S1-AP: HandoverRequired (BSs in Target)
    │
    └─ 基站B: HandoverRequest
         │
         └─ 检查DRB资源是否可用
    
  UE进行HO: SynchInTime + RRC Reconfiguration
  
  基站B: Path SwitchMME更新UE路由

关键代码(IWLAN↔LTE切换):

// DataNetwork.java 中的Handover状态机
HandoverState {
  enter() {
    // 1. 通知源transport切换开始
    sendMessageDelayed(EVENT_STUCK_IN_TRANSIENT_STATE, 
                      handoverTimeoutMs);
    notifyPreciseDataConnectionState();
    updateNetworkScore(keepConnectedForHandover=true);
  }
  
  processMessage(EVENT_NOTIFY_HANDOVER_STARTED_RESPONSE) {
    // 2. 在目标transport上发起setupDataCall
    onStartHandover(retryEntry);
    // → DataServiceManager.setupDataCall() 在目标transport上
  }
  
  // 3. 接收新transport的setupDataCall响应
  processMessage(EVENT_SETUP_DATA_NETWORK_RESPONSE) {
    // 切换成功,转入ConnectedState(新transport)
    transitionTo(mConnectedState);
  }
}

// RIL层的切换接口(IRadio.hal)
startHandover(callId)    // 通知modem开始切换
cancelHandover(callId)   // 取消切换
deactivateDataCall(callId, HANDOVER)  // 源transport释放

3.2 数据层路由更新

当切换发生时,路由表必须更新

# 切换前(LTE)
ip route add default via 10.0.0.1 dev rmnet_data0
ip route add 8.8.8.8/32 dev rmnet_data0

# 切换后(IWLAN)
ip route add default via 192.168.1.1 dev wlan0
ip route add 8.8.8.8/32 dev wlan0

Android中的实现

// DataNetwork.java
mLinkProperties {
  mAddresses: [192.168.1.100/32]
  mRoutes: [
    RouteInfo{
      destination: 0.0.0.0/0
      gateway: 192.168.1.1
      interface: wlan0
    }
  ]
  mDnses: [8.8.8.8, 8.8.4.4]
}

// 通过NetworkAgent更新
mNetworkAgent.sendLinkProperties(mLinkProperties);

第四阶段:释放(Release)

4.1 正常释放流程

Framework决策             RIL                    核心网(MME/PGW)
   │                       │                          │
   ├─ tearDown()          │                          │
   │  (TEAR_DOWN_REASON)  │                          │
   │                       │                          │
   ├─ onTearDown()        │                          │
   │  (invoked deactivate)│                          │
   │                       │                          │
   └─ deactivateDataCall()├─ ESM: Deactivate       │
                          │  EPS Bearer Request    │
                          │──────────────────────→ PGW/UPF
                          │  删除承载、释放IP      
                          │
                          │←──────────────────────
                          │  Deactivate Confirm

DisconnectingState 中的优雅关闭

DisconnectingState {
  enter() {
    // 设置超时(默认10秒)
    sendMessageDelayed(EVENT_STUCK_IN_TRANSIENT_STATE,
                      disconnectingTimeoutMs);
    notifyPreciseDataConnectionState();  // 通知APP状态变化
  }
  
  processMessage(EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE) {
    int resultCode = msg.arg1;
    if (resultCode != DataServiceCallback.RESULT_SUCCESS) {
      // RIL没有及时响应,强制关闭
      transitionTo(mDisconnectedState);
    }
  }
  
  processMessage(EVENT_STUCK_IN_TRANSIENT_STATE) {
    // 超时未完成,异常关闭
    reportAnomaly("RIL did not send data call list changed...");
    transitionTo(mDisconnectedState);
  }
}

4.2 各类释放原因

// DataNetwork.java 中的TearDownReason
public @interface TearDownReason {}

TEAR_DOWN_REASON_NORMAL = 0
TEAR_DOWN_REASON_RADIO_SHUTDOWN = 1
TEAR_DOWN_REASON_AIRPLANE_MODE_ON = 2
TEAR_DOWN_REASON_CONNECTIVITY_SERVICE_UNWANTED = 3
TEAR_DOWN_REASON_NO_LIVE_REQUEST = 4
TEAR_DOWN_REASON_VCN_REQUESTED = 5
TEAR_DOWN_REASON_SIM_REMOVED = 6
TEAR_DOWN_REASON_ROAMING_NOT_ALLOWED = 7
TEAR_DOWN_REASON_DATA_DISABLED_BY_USER = 8
TEAR_DOWN_REASON_DATA_DISABLED_BY_POLICY = 9
TEAR_DOWN_REASON_VOICE_CALL_STARTED = 10
TEAR_DOWN_REASON_SUSPEND = 11
TEAR_DOWN_REASON_HANDOVER = 12

4.3 网络资源回收

DisconnectedState {
  enter() {
    // 1. 释放NetworkAgent
    if (mNetworkAgent != null) {
      mNetworkAgent.unregister();
      mNetworkAgent = null;
    }
    
    // 2. 关闭VPN策略监听
    if (mVcnPolicyChangeListener != null) {
      mVcnManager.removeVcnNetworkPolicyChangeListener(
          mVcnPolicyChangeListener);
    }
    
    // 3. 清空Link Properties(移除路由)
    mLinkProperties.clear();
    
    // 4. 通知ConnectivityService
    mDataNetworkCallback.onDisconnected(this);
    
    // 5. 释放PDU Session ID(5G)
    if (mPduSessionId > 0) {
      mDataServiceManager.releasePduSessionId(mPduSessionId);
    }
  }
}

第五阶段:空闲检测与自动释放

空闲超时机制

// ConnectedState 中的空闲检测
private void checkIfNetworkShouldTearDown() {
  if (mAttachedNetworkRequestList.isEmpty()) {
    // 所有应用已释放网络请求
    if (System.currentTimeMillis() - mLastActivityTime > idleTimeoutMs) {
      log("Idle timeout reached, tear down network");
      tearDown(TEAR_DOWN_REASON_NO_LIVE_REQUEST);
    }
  }
}

关键概念对标

概念3GPP术语Android实现作用
AttachEMM AttachModem自动向核心网注册、获得临时ID
Default BearerEPS Bearer #5DataNetwork(Connecting)创建基础数据通道
Dedicated BearerEPS Bearer #6-15QosSession(可选)低延迟/高可靠应用
HandoverS1-AP/X2 HandoverRequiredHandoverState基站间无缝切换
ReleaseESM Deactivate BearerDisconnectingState回收资源

这就是完整的 EPS/NR承载生命周期。其中最核心的是:

  1. Attach→Reg = EMM层(获得GUTI)
  2. Default Bearer Setup = ESM层(创建#5承载)
  3. Handover = RAN层(基站交接)+ 路由更新
  4. Release = ESM层(回收资源)

希望这个深度分析能够帮助你理解Android中承载管理的全貌!