来自知识星球

5G-NAS消息解码实现流程

NAS信令有两种信令格式,NAS信令的解码过程分两部分进行。
首先,根据NAS信令是否加密进行分类,根据关键字段判断消息类型,进行不同的处理。其次,要区分是
5GMM消息还是5GSM消息,不同类型消息的头部字段含义不同。
移动性管理消息有40种信令类型,会话管理消息有22种信令类型, 无论是移动性管理消息还是会话管理
消息,其每种消息类型字段具有唯一标识, 例如,Registration request消息的值为0x41。
由于NAS信令种类有限,消息类型字段可以唯一标识每种类型的信令,故预先为每种消息类型设计相应的
解码函数,后续解码同样类型的消息时直接调用相应解析函数即可。
具体的NAS解码实现流程如下图所示:

Step1:获取待解析的NAS信令,将NGAP解码模块中无法解析的NAS信令转发到NAS解码模块的消息队
Step2:解析NAS消息第二个8bit的安全头类型,对“安全头类型”字段的 数值进行判断。若“安全头类型”
=0,则此NAS消息为明文消息,已获得明文消 息;若“安全头类型”=1、2、3、4,此NAS消息为受安全保
护的消息,进入 Step3。
Step3:将带有安全保护的NAS信令的消息头部信息送入NAS解密模块进行解密操作,获得明文信息。
Step4:解析NAS消息第一个8bit,得到扩展协议鉴别符,判断当前的消息是 会话管理消息还是移动性管
理消息。若“EPD”=0x7E,则该消息为移动性管理 消息,跳转到Step5;若“EPD”=0x2E,则该消息为会话
管理消息,跳转到Step6。 根据不同消息相应的字段含义进行解析。
Step5:解析安全头类型,解析NAS消息第三个8bit的消息类型标识,根据 解析出的Message type调用相
应的解码函数,对具体的NAS信令进行解析。
Step6:解析PDU会话标识、过程处理标识,解析NAS消息第三个8bit的消 息类型标识,根据解析出的
Message type调用相应的解码函数,对具体的NAS信 令进行解析。
根据不同消息类型封装的解码函数的实现流程如下图所示。

NAS信令除去 前面字段的信息后,后面是由若干信元(IE)组成。在每个信元严格按照TLV编 码规则进
行编码。其中,T是Type,代表信元类型,是该信元的唯一标识代码; L是Length,代表Value域的长
度;V是Value,是数据本身的编码内容。此外, 有些信元编码中还有扩展内容,E代表Extend。此外,
NAS协议还定义了IE存在 性,分为三种:M、O、C,具体含义如表2-4所示。对于非必选IE会有相应的信
元标识(Information Element Identity,IEI)。解码函数的实现流程为:
Step1:获取待解析的NAS剩余编码内容,以及NAS剩余部分长度L0、NAS 消息类型Message type。
Step2:按照Message type在协议中查找该信令类型的编码格式,对信元逐个 解析。
Step3:判断NAS信令的有效性,是否还有待解码的信元。
Step4:根据Message type获得每个信元的存在性(Presence)。若“Presence” = M,则按照LV编码格式
进行解码,即信元包含信元长度(L)和信元值(V); 若“Presence”=O、C时,存在IEI,则按照T-L-V
编码格式(类型-长度-数值) 或T-V编码格式(类型-数值)进行解码。
Step5:一个信元解析完成后,判断是否还有需要解析的信元。若“L0-L”>0, 则还有信元需要解码,继续
循环上述解码过程;若“L0-L” = 0,后续没有信元需要,解码完毕,结束进程。