非IP数据传输 (NIDD)
非IP数据传输允许一个蜂窝物联网/NB-IoT设备与应用服务器交换小的非IP消息,而无需分配IP地址。数据通过NAS信令平面(控制平面CIoT EPS优化)在用户设备(UE)和MME之间传输;MME通过T6a将其转发给OmniSCEF;OmniSCEF通过T8将其暴露给应用服务器。
NIDD架构和程序在3GPP TS 23.682 §5.13中定义;T6a直径接口在TS 29.128中定义;T8 NIDD API在TS 29.122中定义。
目录
概述
NIDD会话有两个相关的部分:
- NIDD配置由应用服务器通过T8创建。它命名设备(通过外部标识符、MSISDN或组),通知回调和NIDD选项。
- T6a绑定是在MME为该用户建立非IP连接时创建的。它将直径会话和MME身份与用于到达UE的
{IMSI, EBI}绑定在一起。
OmniSCEF通过用户身份将两者关联起来,因此上行数据找到正确的AS回调,下行数据找到正确的实时连接。
连接生命周期
MME管理T6a连接,随着UE的附加和分离。应用服务器也可以通过删除其NIDD配置来结束连接。
如果为没有NIDD配置的用户建立了连接,OmniSCEF会用DIAMETER_ERROR_USER_UNKNOWN (5001)响应CMR — 该用户未配置NIDD。
移动发起数据 (上行)
UE发送的上行非IP数据作为T6a **MO-数据请求 (ODR)到达OmniSCEF。OmniSCEF通过向配置的回调POST通知将其传递给应用服务器,并用MO-数据应答 (ODA)**响应MME。
如果OmniSCEF无法解析配置或回调失败,它会用DIAMETER_UNABLE_TO_COMPLY (5012)响应ODA。
示例上行通知(POST到回调):
{
"externalId": "device01@iot.example.org",
"data": "AQIDBA=="
}
| 字段 | 描述 |
|---|---|
externalId / msisdn | 设备身份,按配置提供。 |
data | 非IP有效载荷,base64编码。 |
rdsSourcePort / rdsDestinationPort | 当可靠数据服务启用时存在。 |
moExceptionDataCounter | 当上行被标记为MO异常数据时存在。 |
移动终止数据 (下行)
应用服务器通过向配置的downlink-data-deliveries集合POST来发送下行非IP数据。OmniSCEF将其作为T6a MT-数据请求 (TDR)转发给MME,并在AS可以检索的单个交付资源上记录结果(来自MT-数据应答,TDA)。
当UE处于空闲状态时,MME会缓冲数据并对UE进行寻呼,一旦它对交付承担责任,就用成功响应TDA。OmniSCEF在交付的deliveryStatus中反映结果(见交付状态值)。
示例下行请求:
{
"data": "SGVsbG8=",
"maximumLatency": 3600,
"priority": 5
}
| 字段 | 描述 |
|---|---|
data | 要交付的非IP有效载荷,base64编码。必填。 |
maximumLatency | 可选。最大可接受缓冲延迟,以秒为单位。 |
priority | 可选。排队交付中的相对优先级。 |
pdnEstablishmentOption | 可选。当没有连接存在时的行为 — 见PDN建立选项。 |
rdsSourcePort / rdsDestinationPort | 可选。RDS端口 — 见可靠数据服务。 |
示例下行响应:
{
"self": "https://scef01:8443/api/3gpp-nidd/v1/as01/configurations/AbC.../downlink-data-deliveries/XyZ...",
"data": "SGVsbG8=",
"deliveryStatus": "SUCCESS"
}
组NIDD
使用externalGroupId(而不是单个externalId/msisdn)创建的NIDD配置表示一个设备组(TS 23.682 §5.13.3A)。对组配置的单个下行交付会分发给每个具有活动T6a连接的组成员。
���的成员从组映射中解析。交付的聚合deliveryStatus反映每个成员的最差结果,因此组交付仅在每个可达成员都被服务时报告SUCCESS。
可靠数据服务
可靠数据服务(RDS)通过使用端口号在单个非IP连接上复用多个应用流,具体见TS 23.682 §4.5.14.3。通过在创建配置时设置reliableDataService: true来启用RDS。
当启用RDS时:
- 下行 — 如果交付指定了
rdsDestinationPort和rdsSourcePort,OmniSCEF会在发送TDR之前用携带这些端口的RDS头帧化非IP有效载荷。 - 上行 — OmniSCEF会从ODR有效载荷中解析RDS头,并在上行通知中显示
rdsSourcePort和rdsDestinationPort,将内部有效载荷作为data交付。
端口范围为0–255。当未启用RDS或交付省略端口时,有效载荷将以未帧化的方式传输。
MO异常数据
NB-IoT设备可以通过RRC建立原因将上行传输标记为异常报告(紧急的、非模式的报告),在T6a RRC-Cause-Counter中计数(TS 23.682 §5.13.4)。当OmniSCEF在ODR上看到此指示时,它会在上行通知中包含moExceptionDataCounter,以便应用服务器可以优先处理。
T8资源参考
NiddConfiguration
通过POST /api/3gpp-nidd/v1/{scsAsId}/configurations创建。
| 字段 | 类型 | 必需 | 描述 |
|---|---|---|---|
notificationDestination | 字符串 (URI) | 是 | AS接收上行和状态通知的回调。 |
externalId | 字符串 | 可选 | 设备外部标识符(user@domain)。externalId、msisdn或externalGroupId之一。 |
msisdn | 字符串 | 可选 | 设备MSISDN。 |
externalGroupId | 字符串 | 可选 | 组NIDD的组标识符。 |
dnn | 字符串 | 可选 | 非IP连接的数据网络名称/APN。 |
pdnEstablishmentOption | 字符串 (枚举) | 可选 | 当下行时没有连接存在的行为 — 见PDN建立选项。 |
maximumPacketSize | 整数 | 可选 | 非IP有效载荷的最大大小(以字节为单位,默认为配置的default_max_packet_size,255)。 |
reliableDataService | 布尔值 | 可选 | 启用可靠数据服务。 |
mtcProviderId | 字符串 | 可选 | MTC服务提供商标识符。 |
validityTime | 字符串 (日期时间) | 可选 | 配置过期的时间。 |
status | 字符串 (枚举) | 只读 | 生命周期状态 — 见配置状态值。 |
self | 字符串 (URI) | 只读 | 资源的自身URI。 |
NiddDownlinkDataTransfer
通过POST /api/3gpp-nidd/v1/{scsAsId}/configurations/{configurationId}/downlink-data-deliveries创建。字段在移动终止数据下描述。deliveryStatus和requestedRetransmissionTime字段为只读,并从TDA设置。
通知
OmniSCEF向配置的notificationDestination POST以下内容:
| 通知 | 何时 |
|---|---|
NiddUplinkDataNotification | 上行非IP数据到达(来自ODR)。 |
NiddDownlinkDataDeliveryStatusNotification | 先前接受的下行交付的结果发生变化(异步状态)。 |
应用服务器用204 无内容确认每个通知。
参考值
交付状态值
| 值 | 意义 |
|---|---|
SUCCESS | MME已交付数据(或通过缓冲/寻呼空闲UE承担责任)。 |
SENDING | 交付正在进行中。 |
BUFFERING | MME为空闲UE缓冲数据。 |
FAILURE_UE_NOT_REACHABLE | 无法到达UE。 |
FAILURE_REMOTE_FAILURE | MME/服务节点拒绝或失败请求。 |
FAILURE | 交付因其他原因失败。 |
PDN建立选项
| 值 | 当下行时没有连接存在的行为 |
|---|---|
WAIT_FOR_UE | 缓冲直到UE建立连接。 |
INDICATE_ERROR | 立即拒绝交付。 |
ESTABLISH_PDN_CONNECTION | 触发UE建立非IP连接。 |
配置状态值
| 值 | 意义 |
|---|---|
ACTIVE | 配置已授权并可用。 |
TERMINATED_UE_NOT_AUTHORIZED | 该用户未被授权使用NIDD。 |
TERMINATED | 配置已过期或被移除。 |