4. NAS层协议分析(一):附着流程
各位同学,今天我们正式进入NAS层协议分析。说白了,NAS就是手机和核心网之间“聊天”的协议。附着流程,就是手机开机后跟网络说的第一句话:“嘿,我来了,给我注册上!”
这个流程涉及的信令很多,但核心就几个步骤:UE发起附着请求、网络侧身份验证、加密与完整性保护、附着接受与默认承载建立。我当年刚接触这个流程时,总觉得信令太多记不住。后来发现,只要抓住几个关键信令,整个流程就清晰了。
4.1 附着流程概述
附着流程,说白了就是UE向MME注册的过程。UE开机后,先跟eNodeB建立RRC连接,然后通过eNodeB向MME发送附着请求。MME收到后,会进行一系列检查:你是谁?你从哪来?你要干什么?
整个流程可以分为四个阶段:
- 附着请求:UE向MME发送附着请求消息,携带UE身份、能力等信息
- 身份验证:MME向HSS请求认证向量,对UE进行身份验证
- 安全模式控制:建立NAS层的加密和完整性保护
- 附着接受与默认承载建立:MME接受附着,建立默认EPS承载
嗯,这里要注意:附着流程不是一次性的。UE可能因为各种原因重新附着,比如从飞行模式恢复、跨TAU失败等。我在项目中遇到过UE频繁附着导致网络拥塞的情况,后来发现是UE的TAC配置有问题。
4.2 UE发起附着请求
UE发起附着请求时,会携带一个关键参数——EPS移动性管理(EMM)原因。这个原因告诉网络:我为什么要附着?
| EMM原因值 | 含义 | 常见场景 |
|---|---|---|
| #1 | IMSI未知 | 新SIM卡首次使用 |
| #2 | 非法UE | IMEI被列入黑名单 |
| #3 | 非法网络 | UE检测到网络异常 |
| #6 | PLMN不允许 | 漫游限制 |
| #9 | EPS服务不允许 | 网络侧拒绝附着 |
抓包时,我习惯先看Attach Request消息里的EPS attach type字段。这个字段告诉网络:是EPS附着(纯4G)还是combined附着(4G+2G/3G)。
nas-eps协议,然后搜索Attach request。注意看MS network capability字段,它告诉网络UE支持哪些加密算法。
4.3 网络侧身份验证
MME收到附着请求后,第一件事就是验证UE的身份。这个过程涉及认证向量的获取和认证挑战的交互。
认证流程是这样的:
- MME向HSS发送Authentication Information Request,请求认证向量
- HSS返回Authentication Information Response,包含一组认证向量
- MME从中选取一个向量,向UE发送Authentication Request,包含RAND和AUTN
- UE验证AUTN,计算RES,返回Authentication Response
- MME比较RES和XRES,如果一致,认证通过
我曾经遇到一个案例:UE一直认证失败,抓包发现AUTN中的SQN与UE本地维护的SQN差距太大。后来查出来是HSS的SQN计数器出了问题,导致UE认为网络是“非法网络”。
4.4 加密与完整性保护
认证通过后,MME会启动NAS安全模式控制流程。这个流程的目的是建立NAS层的加密和完整性保护。
流程如下:
- MME发送Security Mode Command,告诉UE使用哪种加密算法和完整性算法
- UE验证消息的完整性,然后返回Security Mode Complete
- 后续所有NAS消息都使用协商好的算法进行加密和完整性保护
抓包时,你会发现Security Mode Command消息里包含NAS security algorithms字段。这个字段指定了加密算法(EEA)和完整性算法(EIA)。
| 算法标识 | 算法名称 | 密钥长度 |
|---|---|---|
| EEA0 | 空加密 | 无 |
| EEA1 | SNOW 3G | 128位 |
| EEA2 | AES | 128位 |
| EEA3 | ZUC | 128位 |
4.5 附着接受与默认承载建立
安全模式建立后,MME会发送Attach Accept消息,告诉UE:你被接受了!同时,MME还会建立默认EPS承载,为UE分配IP地址。
附着接受消息里包含几个关键信息:
- GUTI:全球唯一临时标识,用于后续信令交互
- TAI列表:UE可以移动的跟踪区列表
- EPS承载上下文:默认承载的QoS参数
- APN:接入点名称,用于PDN连接
UE收到Attach Accept后,会返回Attach Complete消息,确认附着成功。至此,附着流程完成。
抓包时,我习惯看Attach Accept消息里的EPS bearer context status字段。这个字段告诉网络:UE当前有哪些承载是激活的。
4.6 抓包分析附着流程关键信令
好了,理论讲完了,我们来看看实际抓包怎么分析。我以Wireshark为例,给大家演示一下。
首先,过滤nas-eps协议,你会看到一系列NAS消息。按时间排序,找到Attach request消息。
双击打开,看NAS EPS Mobility Management部分:
- Protocol discriminator:0x07,表示EMM消息
- Security header type:0x00,表示未加密
- Message type:0x41,表示Attach request
接着看Attach type字段:
- 0x01:EPS attach
- 0x02:combined EPS/IMSI attach
- 0x03:emergency attach
然后看MS network capability字段,这里列出了UE支持的加密算法。我建议重点关注EEA0(空加密)是否被置位。如果置位,说明UE允许不加密通信,这在某些场景下是安全隐患。
接下来看Authentication Request消息。注意看RAND和AUTN字段。AUTN包含SQN xor AK和AMF,UE用这些信息验证网络的身份。
最后看Attach Accept消息。这里有个关键字段——GUTI。GUTI是MME分配给UE的临时标识,后续所有信令都用GUTI代替IMSI,保护用户隐私。
nas-eps.msg_type == 0x41(Attach request)或nas-eps.msg_type == 0x42(Attach accept)。这样可以快速定位关键信令。
下面我画了一张附着流程的时序图,帮助大家理解整个流程:
好了,以上就是附着流程的核心内容。记住,抓包分析时,重点关注Attach Request、Authentication Request/Response、Security Mode Command/Complete和Attach Accept/Complete这五对信令。掌握了它们,你就掌握了附着流程的精髓。