1. 缩略语
1)SNDCP:SubnetworkDependence Converage Protocol,子网相关汇聚协议
2)NSAPI:Network Layer Service Access Point Identifier,网络层服务接入点标识,其实就是在使用SNDCP层的服务的PDP的PDP上下文的一个索引,SNDCP向上层提供的服务访问点;
3)SAPI: LLC 向上层提供的服务访问点
3)Qos:quality ofservice
4)BSS:Base StationSystem
5)SGSN:Service GPRSSupport Node
6)PDP:Packet DataProtocol
2. SNDCP功能
1)PDP的多路复用, 如图一,将不同协议的数据复用成 LLC PDU;
2)用户数据的压缩和解压缩;
3)协议控制信息的压缩和解压缩;
4)将网络协议数据单元(N-PDU)的分片层逻辑链路控制协议(LLC)的数据单元(LL_PDU),以及将逻辑链路控制协议的数据单元(LL_PDU)重组成网络协议数据单元(N-PDU);
图一 SNDCP 多路复用
§ SNDCP作用就为了让LLC不用管N-PDU是来自哪种网络协议,即复用;
§ SNDCP可以将网络数据进行分段或者重组,还有压缩或者解压缩等作用,其中有是否进行分段标识符 segment,因为LLC对数据包有限制;
§ BSSGP使用TLLI来区别不同的LLC,即区别不同的用户;
§ LLC中的user-data的SAPI必须与SNDCP中的NSAPI一一对应,因此NSAPI受限于SAPI数目;
SNDCP 向上层提供服务访问点 NSAPI,上层协议通过 NSAPI发送 N-PDU给SNDCP 实体,SNDCP 将数据根据配置压缩、分段后SN-PDU,通过 SAPI 发给 LLC 实体。N-PDU 对应 SPRD 协议栈中的SN_DATA_REQ (reliability_class=1 or 2) 和 SN_UNITDATA_REQ (reliability_class=3or 4),对应关系如表一,图二 SNDCP 上下层关系,图三 LLC 承载 SNDCP 已经其他协议数据;
表一 NSAPI 与SAPI 对应关系
SAPI | MESSAGE | RELIABILITY CLASS |
3 | SN_DATA_REQ | 1 |
5 | SN_DATA_REQ | 2 |
9 | SN_UNITDATA_REQ | 3 |
11 | SN_UNITDATA_REQ | 4 |
1 | GMM移动性管理 |
|
7 | 短消息 |
|
图二 SNDCP 上下层关系
图三 LLC 承载上层数据
3. SNDCP 逻辑结构
SNDCP 逻辑结构如图三,网络侧有对等待逻辑实体,上层是 TCP/UDP等应用层协议,下层是 LLC 协议;
图四 SNDCP 逻辑结构
SNDCP SPRD 实现结构如图四,所有配置信息都来自 SM,信令面只与SM有关系,数据面上层是TCP/IP,下层是LLC。
图五 SPRD SNDCP 实现结构
4. SPRD SNDCP 消息
4.1 SNSM_ACTIVATE_IND
pdp_accept 后 SM 通知 SNDCP相关参数,激活(配置)SNDCP实体;
4.2 SNSM_DEACTIVATE_IND
PDP DEACTIVATE IND 后或者PS 域 DETACH 后,SM 通知 SNDCP;
4.3 SNSM_MODIFY_IND
SM实体使用该原语来触发某个NSAPI的Qos配置的改变和要使用的SAPI。SGSN的SM实体用它来通知SNDCP实体必须以一个重新协商的Qos配置和分配的SAPI创建一个NSAPI,移动台的SM实体还可以用它来指示RLC/MAC使用的射频优先级。在收到SNSM_MODIFY_IND原语时,SNDCP如果必要,必须为指定SAPI建立确认方式点对点LLC操作,并释放原来分配SAPI
4.2 SN_XID_REQ
SNDCP用户使用该原语来传递请求的XID(exchangeidentity)参数给对等实体。
4.4 LL_SNDC_XID_IND
SNDCP实体用该原语传递请求的XID参数列表给SNDCP用户。
TlliAssigned_HandleSndcLlXidReq
4.5 LL_SNDC_XID_CNF
SNDCP实体使用该原语来确认SN_XID_REQ,这个确认应该是在SNDCP收到LLC-XID.cnf之后(也就是已经收到对端的确认)。
4.6 SNSM_SEQUENCE_IND
在SGSN路由区切换的时候使用,并且只用于确认方式点对点LLC操作。当MS收到该原语时,接收到的N-PDU数值参数指示了在SGSN接收到了N-PDU数值,如果缓冲中的N-PDU被对端SNDCP已经收到的N-PDU数值确认,该N-PDU必须从buffer中删除。另外,SNDCP层在收到该原语后,将继续那个NSAPI的SN-PDU传输,且所有的缓冲N-PDU(比如那些未经确认或者未发的)必须从最老的N-PDU开始传输。如果这个NSAPI使用的SAPI并未建立,缓冲N-PDU只能在收到LL_ESTABLISH_IND或者LL_ESTABLISH_CNF原语之后才能使用。SNSM_SEQUENCE_RSP是对SNSM_SEQUENCE_IND的响应。移动台在接收到SNSM_SEQUENCE_IND后可以发送该原语来返回接收到的N-PDU数值给SGSN。
4.7 SN_UNITDATA_REQ
该原语被SNDCP用来进行非确认模式(unacknowledged)的N-PDU的传输.该原语包含了用来标识PDP的NSAPI
4.8 SN_DATA_REQ
该原语主要给SNDCP user使用,用于确认模式(acknowledged)的N-PDU的传输,SN-PDU的成功传输将由LLC层进行确认。该原语的参数包括N-PDU,NSAPI和N-PDU号码.
4.9 LL_SNDC_ESTABLISH_IND
LLC层使用该原语来通知SNDCP层某个SAPI的确认模式点对点操作的建立或者重建.所请求的XID用来传递请求的SNDCP XID参数给SNDCP层.在重建的情况下,映射到受影响的SAPI的所有NSAPI必须进入recovery状态,所有缓冲的N-PDUs(比如那些完全接收没有得到确认的,以及那些尚未被传输的)当连接重建后必须以最老的N-PDU开始被传输.并且所有的在这个SAPI上使用确认模式的点对点LLC操作的压缩实体被重置.
4.10 LL_SNDC_ESTABLISH_CNF
LLC层使用该原语来告知SNDCP层某个SAPI的确认模式点对点操作的成功发起,XID参数用来传递协商过的SNDCP XID参数.在重建的情况下,映射到受影响的SAPI的所有NSAPI将进入recovery状态,所有的缓冲的N-PDU(比如那些完全接收还未得到确认,或者那些还未传输的)在连接重建的时候将以最老的N-PDU开始被传输.并且所有在这个SAPI上使用确认模式点对点LLC操作的压缩实体将重置.
4.11 LL_SNDC_RELEASE_IND
SNDCP层使用LL_RELEASE_REQ来释放确认方式的点对点操作,LL_RELEASE_CNF被LLC层用来进行对LL_RELEASE_REQ的确认。LL_RELEASE_IND则被LLC层用来通知SNDCP层某个SAPI的确认方式点对点操作的终止,该indication的cause参数用来表示终止的原因。SNDCP层在收到LL_RELEASE_IND或者LL_RELEASE_CNF以后,受影响的SAPI的压缩N-PDU队列将从SNDCP层中被删除,在这个SAPI上使用确认的点对点操作的压缩实体将被重置.
4.12 LL_SNDC_RELEASE_CNF
参加 4.9
4.13 LL_SNDC_RESET_IND
SGSN的LLC层使用该原语来指示SNDCP层重置的XID参数已经被传输,移动台的LLC层使用该原语来指示SNDCP层收到重置的XID参数.
在收到LL_RESET_IND时, SNDCP层必须
§ 将所有未完成的SNDCP<---->LLC请求类型原语视为没有发送
§ 重置所有的SNDCPXID参数为默认值
§ 在移动台,对每个使用非确认模式的点对点操作的NSAPI,设置发送的N-PDU号码(非确认的)为0,并且
§ 对每个使用确认模式的点对点操作的NSAPI,进入recovery状态,挂起所有的N-PDU的传输,直到收到针
对于该NSAPI的SNSM-SEQUENCE_IND原语.在SGSN,SNDCP层必须为LLC层中受影响的SAPIs重建确认模式点对点操作
4.14 LL_SNDC_SUSPENDSENDDATA
用于流量控制?该消息有 LLC 上报给 SNDCP,具体功能未知,可能是用于流控。
4.15 LL_SNDC_RESUMESENDDATA
用于流量控制?该消息有 LLC 上报给 SNDCP,具体功能未知,可能是用于流控。
4.16 LL_SNDC_UNITDATA_IND
非确认模式数据传输涉及的两个原语。在LL_UNIDATA_REQ中,SGSN的QoS参数优先级级别,延迟级别,可靠性级别和最高吞吐量。移动台的Qos参数包括最高吞吐量和可靠性级别。可靠性级别指示了指示了携带SN-PDU的LLC祯是否以保护模式传输,以及RLC/MAC是使用确认模式还是非确认模式。射频优先级仅在移动台中包括,指示了RLC/MAC使用的无线优先级级别。
4.17 LL_SNDC_DATA_IND
确认模式下进行SN-PDU的传输涉及到的3个LLC层的原语。sndcp层使用LL_DATA_REQ来请求数据传输,并为每个请求关联一个参考参数,在SGSN的Qos参数中包括优先级级别,延迟级别和最大吞吐量。在移动台的Qos参数中包括最大吞吐量,Qos参数是3GPP TS04.08中定义的服务信息元素的质量。射频优先级只包括在移动台中,指定了RLC/MAC使用的射频优先级别。在LL_DATA_REQ使用前,必须先用LL_ESTABLISH建立SAPI的确认方式点对点操作。LL_DATA_CNF被LLC层用来告知sndcp SN-PDU的成功传输,该原语包含了一个参考参数,通过该参数可以标识与之相应的LL_DATA_REQ,那些收到完全接收的confirm的缓冲N-PDU将被删除.
4.18 LL_SNDC_DATA_CNF
见 4.14
4.19 SNSM_TLLI_IND
SM 通知 SNDCP TLLI。
4.20 LL_SNDC_DEACTIVED_IND
LLC Entity 发给 SNDCP的消息,去激活指示?不确定。
4.21 LL_SNDC_ACTIVED_IND
4.22 LL_SNDC_ESTABLISH_IND
4.23 LL_SNDC_XID_IND
4.24 LL_SNDC_DATA_IND
4.25 SN_DATA_REQ
4.26 LL_SNDC_ESTABLISH_CNF
4.27 LL_SNDC_XID_CNF
4.28 gprs_disable_LL_SNDC_UNITDATA_IND
5. SNDCP数据传输实例
5.1 具体功能
§ 将SN-DATA原语映射到LL_DATA原语
§ 将SN-UNIDATA原语映射到LL_UNIDATA原语
§ 复用一个到多个的网络层实体的N-PDU到恰当的LLC连接建立,重建和释放确认方式的点对点LLC操作
§ 确认方式点对点LLC操作中,通过缓冲和重传机制来使LLC层实现了数据的完整性
§ 独立为每个NSAPI管理投递系列号
§ 在传输端对冗长的协议控制信息进行压缩,在接收端进行解压缩。压缩方法特定用于在使用的网络层和传输层。
§ 在传输端对冗长的数据信息进行压缩,在接收端进行解压缩。对每个SAPI,数据压缩独立执行,也可能对每个PDP上下文独立执行。压缩参数可以在MS和SGGN间进行协商
§ 分片和重组。压缩功能的输出是分片为LL_PDU的最大长度。这个程序同在使用的特定网络层协议无关。
§ 在对等SNDCP实体间协商XID参数。
图六 SNDCP在发送端的数据流程
5.2 N-PDU的多路复用
网络层使用的协议由动态分配的NSAPI来标识(该NSAPI应该是在PDP激活时在SM层生成的,然后通过SNSM-ACTIVE_IND传递给SNDCP层的,其实相当于在此建立了网络层协议和NSAPI之间的对应关系)。SNDCP在收到N-PDU后,在发向下层之前会插入该NSAPI,对等实体收到底层数据后,会根据NSAPI来确定所使用的网络协议。
5.3 确认方式点对点LLC操作的建立和释放
1)建立准则
§ 收到SNSM-ACTIVE.ind,该NSAPI的Qos配置要求使用acknowledgedpeer-to-peer LLC operation,但是对应的SAPI还未建立acknowledged peer-to-peer LLC operation(Qos中的Reliabilityclass参数)
§ 收到SNSM-MODIFY.ind(dlmu2001:此时Qos profile发生了变化,此时可能从unacknowledged模式改变成acknowledged模式,或者从一个老的SAPI更新到一个新的SAPI上)
2)重建准则
§ V.42数据压缩算法检测到错误
§ 分片重组时候,处于Receivefirst segment 状态,收到F位置0的SN-DATA PDU(此时该PDU将被丢弃,LLC operation进行重建)
§ 分片重组时,处于Receivesubsequent segment状态,收到F位置1的SN-DATA PDU,且DCOMP,PCOMP或 者N-PDU number同第一个分片不同(此时属于同一个N-PDU的之前的分片将被丢弃,对应的SAPI的 LLC operation将重建)
3)SNDCP发起的建立/重建流程
说明:
§ LL_ESTAB.req中可以包含XID参数,如果包含该参数
§ 可能的结果:成功;失败;发生冲突后成功解决
§ 收到LL_ESTAB.cnf表示建立成功;收到LL_RELEASE.ind表示建立失败,根据失败的原因,SNDCP层需要作出恰 当的动作(比如通知SM子层)
§ 如果SNDCP实体在发出LL_ESTAB.req或者LL_XID.req之后收到LL_ESTAB.ind或者LL_XID.req,此时即发生冲突,这种情况下,SNDCP实体就当做没有发过LL_ESTAB.req,正常处理接收到的LL_ESTAB.ind或者LL_ XID.req,如果之前发出的LL_ESTAB.req或者LL_XID.req包含一个或者多个XID参数,或者在XID参数中包含了一个或者多个压缩字段,或者在一个压缩字段中包含了一个或者多个参数,而这些参数没有在LL_ESTAB.ind或者LL_XID.ind中协商,则sndcp实体此时再LL_XID.req进行协商。
4)acknowledged peer-to-peer LLC operation的释放
§ 释放准则:收到SNSM-DEACTIVE.ind或者SNSM-MODIFY.ind且对应的SAPI不再有使用acknowledgedpeer-to-peer的NSAPI。
§ 过程:调用LL_RELEASE.req,收到LL_RELEASE.cnf表示释放成功
5.4 N-PDU缓冲
§ N-PDU在压缩成分片并传输到LLC层之前,必须缓冲.这个缓冲使用哪一层的buffer比较好?网络层?
§ 收到SNSM-DEACTIVE.ind会删除相关的NSAPI的对应缓冲
§ 对于acknowledged方式的数据传输,缓冲必须被确认后才能删除(LL_DATA.cnf和SNSM.SEQUENCE可以完成该确认)
§ 对于unacknowledged方式的数据传输,传输完成就删除
5.5.投递顺序管理
SNDCP层负责维护对等实体间每个NSAPI的N-PDU的投递顺序.