这篇文档主要想和大家讨论下我对协议栈的理解,我觉得学习协议栈最重要的是了解我们需要什么功能,为什么我们需要这些功能。这是学习协议栈的关键。其次才是我们如何实现这些功能,也就是协议上规定的实现方式。对于协议上的实现方式首先也是需要对协议栈有整体的认识,了解基本功能的实现方式以及各层各模块的分工配合,然后才是细节的处理。在这篇文档我希望能够列出协议栈需要的功能,并对应到协议栈的实现方式,从而能够从整体上对协议栈进行一个大概的介绍。后续还将对一些细节进行详细的介绍。但是毕竟经验不多,很多也是理解的不够正确,全面或者深刻,有不对的还请大家指出,希望大家能够一起讨论提高。
非接入层NAS的功能主要有4个:标识,鉴权加密,位置,业务处理。标识其实是属性,每个手机会有一个IMEI号,标识这个设备。每个SIM卡会有一个ISDN的号,比如13812345678的号码,还有一个IMSI,IMSI会包含运营商的标识。这些号码都是唯一的,如果在空口传递可能有被检测到的风险,所以对于一个已经和网络连接的手机,网络还会分配一个临时的编号GUTI,用来代替刚才提到的号码。鉴权就好像是登录MSN时输入密码一样,必须是经过运营商认证的用户在可以运营商的网络里得到正常服务。同样因为在空口传递,所以的业务必须加密,加密就会用到加密算法和加密密钥,加密算法通过信令指定,加密密钥由NAS计算。关于位置更新,UE必须经常向网络汇报自己的位置,或者在位置改变时通知网络,这样网络如果需要找到UE,比如别人打你的电话时,就可以准确找你UE。业务就是当用户要发起一个业务时,和网络协商业务信道的各个参数,比如Qos等等,并且触发建立业务信道的处理,最终为业务提供承载。
接入层的功能主要分为两部分:一部分是对业务数据的处理(主要是L2—PDCP,RLC,MAC),一部分是对协议栈状态的维护(包括NAS和RRC)。对业务数据的处理是一个相对固定的过程,主要要求处理的性能较高。而对协议栈状态的维护因为需要处理各种各样的情况,因此处理较为复杂。
首先来介绍对业务数据的处理。下面以IP业务为例。
首先我们要考虑的对用户数据的加密,用户的数据通过电磁波传送,每个人都可以接收到这些信号,所以加密就成了必须的功能。加密所用到的加密参数和加密算法都是在鉴权的时候产生的。上面提到NAS负责计算加密密钥,实际的加密操作则在这里进行。另外我们考虑到IP包的包头太长32个字节,而很可能业务数据才几个字节,无线通信的带宽本来就小,这样的业务包格式太过浪费,因此想到要把IP的包头压缩一下。在LTE中把这两部分功能放在一起给PDCP层来处理。
经过PDCP层处理的数据包可以直接发给PHY层发送了吗?暂时还不行,因为每次PHY能够发送的数据大小是固定的,和业务需要的发送的大小不匹配。比如PHY这次可以发送30字节,但是业务需要发送的包有40个字节,那么我们就需要把这个40字节的数据包分成两次发送。因此,为了把业务数据组成合适的大小给PHY发送,必须要把业务的数据包进行分段或者级联。除了考虑数据包的大小,还需要考虑数据包的确认模式和非确认传输模式。比如我们靠网络视频,这时候如果中间有几帧没有正确接收,基本不会影响观看。但是是传文件,中间少了几个字节那也必须重传。对于这两种不同的业务模式,协议栈也必须有不同的处理。对于必须正确接收的业务,引入ARQ自动重传请求(Automatic Repeat-reQuest,ARQ)的机制,协议栈在发送每一个数据包的时候必须得到对端的反馈,如果反馈接收错误就再次发送直到正确为止。而对于非确认的业务,发端只要不停的发送就可以了。这里提到的两部分功能就放在的RLC层。
经过RLC层处理的数据包可以放到PHY上发送了吗?还是不行。业务可能同时有多个,PDCP和RLC都有多个实体处理每一个业务。但是如何把同时并发的多个业务放在一起发送呢。我们还需要一个复用的模块,把PHY能够发送的大小分配给每一个业务,然后把各种业务的数据包整合在一起放到PHY上发送。MAC的功能不仅仅是分配资源,整合各个业务,同时还需要和网络交互,通知网络UE当前需要发送的业务大小,然后网络会根据MAC上报的信息再次调度上行的资源。刚才说到了RLC层的确认机制,但是这个机制还是不能够保证没有错误产生,所以我们还需要再加入一层确认机制来减小出错的概率,来尽量满足TCP协议对差错率的要求。因此LTE里引入的是HARQ机制。除了以上三部分还有如DRX(控制PHY休眠以省电),RA(控制PHY做接入),TA(保持和网络的同步)等功能也都是在MAC完成。
每个业务承载在一个RB上,或者说对应一系列处理流程(从PDCP到MAC)。这个RB的配置里里包括了从PDCP,RLC,MAC各个层的所有属性,也就是描述了这个业务的数据包在协议栈如何一步步处理,最后在PHY资源上发送。
业务或者说RB在PDCP和RLC层各对应一个实体,在MAC层对应一个逻辑信道。MAC的功能包括把各个逻辑信道的业务汇聚到一起,汇聚到一起的信道就叫做传输信道。
当业务到来是,我们说要建立连接,建立连接的目的,对于下层来说主要为了和网络上行同步(下行同步搜小区就完成了),并得到UE dedicated资源的配置,对于上层来说主要为了得到每一层的处理参数。这样UE就可以正确的处理数据,然后发送给网络了。
下行:PHY层收到下行业务发给MAC,MAC从DL-SCH解析出各个逻辑信道的内容,交给各个逻辑信道去处理。逻辑信道再传给RLC和PDCP处理,处理完最后交给RRC和CAS或者IP层处理。注意PCCH和BCCH纯粹是为了和业务处理的形式上的统一,这两个都没有使用MAC的包结构,和MAC几乎没有任何关系,物理层报给MAC以后,MAC直接送给RRC。和CCCH不一样,CCCH虽然没有PDCP和RLC处理,但是还是放在MAC的数据包里发送的。
上行:MAC得到PHY的发送许可grant以后,计算出汇聚以后UL-SCH可以发送的大小,然后分配到各个逻辑信道,各个逻辑信道调用PDCP和RLC处理,最后MAC再把各个逻辑信道处理好的数据汇聚到传输信道UL-SCH发送。
为什么和TCP/IP不一样,不是各层维护自己的状态,而需要维护整个协议栈的状态呢?这个可能还是得从无线和有线的不同说起。你抱着笔记本可以到处跑,插上网线,网卡一检测到有了物理连接就可以获得IP然后上网了。可是在无线的条件下,如何完成这个物理连接的工作呢?具体实现必然由PHY层完成,但是必须有一个模块去控制PHY,这就是RRC。RRC控制PHY找到小区,和小区建立物理连接(当然是无线的),然后测量周围的小区,信号不好是换到更好的小区。其次,3GPP里业务是享有专有的链路,这个从上到下的链路需要一个模块来统一配置维护,也必须也有一个模块来维护。
状态维护主要是没有业务的IDLE状态,进行业务的CONN状态。
首先是一个小区搜索驻留IDLE的过程, CAS选一个PLMN,RRC根据已有信息开始搜小区。如果没有以前的信息,就开始全频搜,发现可用的频率以后,去同步小区,同步上以后,得到小区的phy的cellid,然后开始读MIB,根据MIB再读SIB1,根据SIB1再读其他的SIB,读完系统消息判断驻留的条件,如果满足就驻留小区,就会通知CAS消息的信息配置服务小区的测量,配置paging的参数,进入IDLE状态。整个小区搜索状态完成。
UE在IDLE主要是监测当前小区的服务质量,选择驻留信号最好的suitable小区。同时也要监听paging消息,看网络是否触发UE的操作,比如在系统消息改变时通知UE重读系统消息,或者本UE被呼叫时触发连接建立。
UE在IDLE时处理任务很少,在不处理的时候可以让PHY层睡眠,以达到省电的目的,这就是DRX,网络只在某些固定的时刻给UE发送paging,这样UE就可以在其他时间选择睡眠。
当然还要完成一些特殊情况的处理,比如搜不到小区,或者突然失去覆盖等等情况的处理。
这个过程的目的就是为了获得UE独有的PHY资源以及SRB和DRB的配置,这样UE就可以进行触发这个连接的业务了。
连接下同样需要检测信号质量,转换到质量更好的小区,但是不同于IDLE下的重选,在连接下切换由网络控制。当UE发现某些小区满足某些条件,比如有个邻小区比服务小区好很多,就会通知网络,网络就会通知UE切换到更好的邻小区。
在连接状态下,PHY层也会有一些信道质量的测量,完全由MAC控制发送,不再在RRC处理。
当然还要完成一些特殊情况的处理,比如连接建立失败,或者连接丢失等等情况的处理。
PHY的理解有限,只能介绍一些基本功能。
PHY资源可以分成频域,时域和码域。所以的信息bit都会经过一系列处理映射到实际的物理资源。物理资源的分为3个级别,一个是系统级别,也就是LTE系统设计的所有资源,这个就是协议里规定的所有资源。第二个是小区级别,就是某个小区的内使用的资源,一般在系统消息里广播。第三个UE级别,是针对每个UE使用的资源,一般在进入连接状态时,网络分配的dedicated的资源,这样不同的UE使用不同的资源,网络可以区分出不同的UE。
介绍完上层的协议,再介绍下层物理信道:
Physical Uplink Shared Channel, PUSCH
Physical Uplink Control Channel, PUCCH
Physical Random Access Channel, PRACH
Physical Downlink Shared Channel, PDSCH
Physical Downlink Control Channel, PDCCH
Physical Control Format Indicator Channel, PCFICH
Physical Hybrid ARQ Indicator Channel, PHICH
Physical Broadcast Channel, PBCH
Physical Multicast Channel, PMCH
PUSCH 是UE用来发送各种上行业务的信道。
PUCCH是UE用来发送控制信息的信道,包括ACK/NACK,信道质量等等。
PRACH是UE用来发起接入的信道。
PDSCH是网络用来发送各种下行数据的信道,包括了系统消息(除了MIB以外的所有系统消息消息), Paging, 业务数据等等内容。
PDCCH 是最重要的调度信道,指示UE PDSCH的下行业务和调度PUSCH的上行业务,以及各种控制信息。
PCFICH用来指示PDCCH的资源的个数的信道。
PHICH 是网络用来对上行业务做反馈的信道。
PBCH是用来发送MIB的信道,位置固定,UE在获得下行同步以后就可以得到MIB的内容。
PMCH是现在还没有用的信道。
物理信道的基本过程
首先是下行同步,然后解出MIB,MIB里有PHICH的配置,根据PHICH就可以得到PCFICH的配置,然后根据PCFICH就可以得到PDCCH,通过PDCCH就可以得到PDSCH中的SIB,就可以驻留小区。
然后通过PRACH做RA,获得上行同步。之后就可以进行上下行业务。
如果收到PDCCH的上行调度,就可以根据调度中的调制方式,TBsize等在PUSCH上发送数据。网络收到上行业务以后,会在PHICH发送ACK/NACK。UE根据PHICH的反馈以及下次PDCCH上的上行调度决定是新发数据还是重传数据。
如果收到PDCCH下行调度,就可以在PDSCH接收下行业务。然后在PUCCH或者PUSCH上给网络反馈接收的情况。具体使用哪种资源可以由PDCCH调度的参数决定。网络也会根据收到的反馈决定新发还是重传。
在LTE下行资源的调度是动态的,网络可以根据当前信道质量进行调度,网络需要UE及时的反馈信道的情况,UE会在PUCCH信道反馈信道的相关情况。
<转载自:http://blog.sina.com.cn/s/blog_5895eb440100w2fa.html>