来自知识星球

NGAP信令编码格式

NGAP信令编码使用抽象语法标记(Abstract Syntax Notation One,ASN.1)中的对齐的基本压缩编码规
则(Basic Packed Encoding Rules,Basic-PER)。
ASN.1是一种数据定义语⾔,描述了对数据进行表示、编码、传输和解码的数据格式。
ASN.1将NGAP协议数据以特定的格式存放在描述文本中,使用ProcedureCode区分不同的信令消息。在
协议具体实现时,发送方要设置一个ASN.1编码器,将要传送的消息经过ASN.1编码后再发送出去;然后
接收方要设置一个ASN.1解码器,将接收到的经过ASN.1编码的消息解码为符合接收方局部语法的消息格
所以要清楚ASN.1的编码方式和编码规则,在此基础上才能对NGAP协议正确解码。
PER的编码原则是使用最简单的规则获得最简洁的编码。PER的编码对象是 ASN.1定义的各种数据结构
类型,包括简单类型和复合类型。NULL、REAL、 BOOL、INTEGER、ENUMERATED、OCTE
TSTRING、BIT STRING、OBJECT IDENTIFIER都是简单类型的数据结构,它们是构成复合类型以及更
复杂的数据类型的基础。

复合类型数由一个或多个基本类型构成,例如有SET,SEQUENCE, CHOICE,SEQUENCE OF,SET
OF 等。
下面具体说明PER方式的编码格式。
PER的每种数据类型的具体编码格式都是:
前导码P(optional Preamble)、长度L(optional Length)、数据域V(optional Value)这三个字段,
其中数据域内部可以嵌套另一组前导码P、长度L、数据域 V结构,而且这三个字段P\L\V以比特为单位,
不一定要用字节。因为长度可以省略,那么因此不能直接从解码长度模块得知编码的边界,所以解码要完
全知道 编码格式才行,也就是清楚每条信令使用ASN.1抽象语法记法所描述的结构。
下面以一条具体的信令进行说明。
UE Context Release Request这条信令所包含的具体信元、各种属性如下表所 示,其中IE及其具体的值
就是我们要解码得到的信息,解码后将这些信息存入我 们设置的结构体中,供后续模块对解码结果的使

但上表所示的信息不能直接形成二进制流进行传输,需要以收发双方都 知道的方式进行编码,转化为
ASN.1抽象语法记法所规定的编码格式才能形成二 进制流进行传输。如下所示是3GPP中规定的UE上下
文建立这个流程中的UE Context Release Request这条信令的ASN.1抽象语法记法所规定的格式。

其中每一条信元的编码都有自己的代码,例如id-AMF-UE-NGAP-ID。
根据P,就能找到对应的信元类型。