LTE 切换过程中的数据切换
http://blog.sina.com.cn/s/blog_673b30dd0100j4p4.html
LTE中的切换,根据无线承载(Radio Bearer)的QoS要求的不同,可以分为无缝切换(Seamless handover)和无损切换(lossless handover)。
无缝切换,应用于对于时间延迟有严格要求,而对误包率(丢包率)具有相对容忍度的一些应用(比如,语音 VoIP)。无缝切换在LTE中可以降低切换的复杂度和时间延迟,但同时可能引起某些数据包的丢失。无缝切换主要应用于控制面的无线承载 (SRB)以及用户数据面RLC UM 模式的无线承载。
在无缝切换的模式下,对于下行的数据传输,源eNodeB将尚未进行传输的PDCP SDU转发给目标eNodeB,对于经S1接口转发下来,尚未进行PDCP处理的下行数据,源eNodeB也同样转发给目标eNodeB。已经完成PDCP SDU传输的下行数据, 则无需转发给目标eNodeB。对于已经进行了部分PDCP SDU的传输,但尚存部分RLC PDU的数据,源eNodeB会将剩余的RLC PDU丢弃,也就是说,在无缝切换模式下,源eNodeB不会将下行数据的RLC 上下文 (RLC Context)转发给目标eNodeB,这样,这部分PDCP SDU的数据将会丢失。目标eNodeB侧,会将PDCP的SN和HFN重新置为零。同时,目标eNodeB在传输经由S1接口的下行数据之前,会优先传输源eNodeB通过X2接口转发过来的下行数据。我们知道,SGW在将下行通道切换到目标eNodeB之前会向源eNodeB发送“End Marker ”数据包。源eNodeB会将此数据包转发给目标eNodeB。目标eNodeB据此可以获知源eNodeB转发数据的结束。(基于X2的切换过程中,SGW发生变化时,是否会发送“End Marker”数据包?)
在无缝切换的模式下,对于上行的PDCP SDU数据, 同样,对于已经在源eNodeB中完成传输的数据,UE不会在目标eNodeB中重新发送。相反, 在目标eNodeB中,UE 将传输那些尚未在源eNodeB中传输的PDCP SDU数据 (对于已经完成了部分RLC PDU传输的 PDCP SDU数据,UE会在目标eNodeB中传输剩余部分的RLC PDU吗?RLC层在LTE中切换过程中的角色是什么?个人认为不会)。源eNodeB将所有接收到的PDCP SDU上行数据转发给SGW,其中可能包括有失序的PDCP SDU。对于无法组装成PDCP SDU的部分RLC PDU ,源eNodeB将把他们丢弃。也就是说, 源eNodeB并不将上行数据的RLC 上下文转发给目标eNodeB,这部分对应的PDCP SDU上行数据将会丢失。
无损切换主要用于RLC- AM模式的无线承载,典型的例子如FTP上下载,PDCP SDU传输的丢失可能对上层协议(TCP)的吞吐量有较大的影响,相反,对于时间延迟不象实时应用那样敏感。
在正常的工作模式下(即未发生切换时),UE和eNodeB上的RLC层保证了数据的有序传输,对于由于RLC的重传或者由于MAC层的HARQ引起的RLC层的失序,RLC层可以根据其头部的序列号来重新加以排序。LTE中, PDCP的头部也标有序列号, 可以以此来保证切换过程中数据的有序传输和重复检测,也可以用来保证切换过程中数据的无损传输。(为什么由PDCP层而不是RLC层来保证切换后数据的无损呢?)
在无损切换中,对于上行数据,切换到目标eNodeB后,UE会从第一个尚未在源eNodeB中得到确认的PDCP SDU开始,重传以后的PDCP SDU包(其中可能包括源eNodeB收到,但UE没有收到确认的PDCP SDU或UE虽收到确认,但失序的PDCP SDU),除非目标eNodeB通过PDCP 状态报告包确认收到其中的某些SDU(源eNodeB转发给目标eNodeB)。
如下图所示:
对于上行的数据,UE已经传输了SN号为1到5 的PDCP PDU,切换发生时(源eNodeB发送SN Status Transfer消息给目标eNodeB),源eNodeB只收到了SN号为1,2和4 的PDCP PDU 并向UE做了确认,对于序号为3和5的PDCP PDU,源eNodeB只收到了部分RLC PDU。UE会将SN标号为3,4和5的PDCP PDU放到PDCP的重传序列中,因为3是UE没有收到确认的第一个包,尽管源eNodeB已经收到了包4并且UE也得到了确认。
源eNodeB发送SN Status Transfer消息给目标eNodeB后,会将收到的连续PDCP SDU转发给SGW,图中,对应的是SN号为1和2的PDCP PDU。而对于收到的部分RLC PDU数据(对应SN号为3和5 的PDCP PDU),源eNodeB会将其丢弃,也就是说,源eNodeB并不向目标eNodeB转发上行数据的RLC 上下文 (Context)。如果源eNodeB和目标eNodeB双方协商同意要进行上行的失序PDCP SDU的转发,则源eNodeB将SN号为4 的PDCP PDU转发给目标eNodeB。否则,源eNodeB也会将相应的PDCP包丢弃。图中,包4 被源eNodeB转发给目标eNodeB。
切换发生,UE接入到目标eNodeB,与目标eNodeB之间建立了数据连接,由于包1,2已经在源eNodeB中得到确认,因而UE不会在目标eNodeB中重复发送,而将PDCP SN号为3,4,5,6的包依次向目标eNodeB发送。目标eNodeB依据SN号来对PDCP的PDU进行排序和重复检测。在此例中,包4属于重复的数据包。目标eNodeB将排序好的无重复的PDCP SDU发送给SGW。
目标eNodeB也会向UE发送基于PDCP 的控制包,报告当前eNodeB侧PDCP SN号的状态。如果在UE在重传3,4,5上行数据包之前接收到目标eNodeB下发的PDCP状态报告,获知目标eNodeB已经收到包4,则UE无需重传包4, 只需重传包3和5以及新包6等即可。但规范中并未强制目标eNodeB发送PDCP状态报告的时间,UE也无需等到收到目标eNodeB的PDCP状态报告后,才重新开始上行数据的传输。图中,包4被UE在目标eNodeB中重复传输,目标eNodeB中的PDCP层会根据PDCP的SN号进行PDCP包的重复检测。
在无损切换的过程中,对于下行的PDCP SDU,如果UE已经在源eNodeB中完成PDCP SDU的确认, 源eNodeB无需将它们转发给目标eNodeB (包括连续的和失序的PDCP SDU)。源eNodeB需要将尚未传输完毕(包括已有部分传输和尚未进行传输的。注意,与无缝切换中不同,无缝切换中转发的是尚未进行传输的SDU)的PDCP SDU转发给目标eNodeB,包括经S1接口转发下来,尚未进行PDCP处理的下行数据。对于已经进行了部分PDCP SDU的传输,但尚存部分RLC PDU的数据,源eNodeB会将RLC PDU丢弃,也就是说,在无缝切换模式下,源eNodeB不会将RLC 上下文 (RLC Context)转发给目标eNodeB(源eNodeB丢弃的只是RLC的上下文,并非是PDCP SDU的数据,PDCP SDU的数据仍会转发给目标eNodeB,因为他们属于尚未传输完毕的PDCP SDU)。如下图所示:
在切换过程发生时,源eNodeB已经传输了SN号为1至4的PDCP PDU,编号为5的PDCP PDU还未开始传输。而在UE侧,SN号为3的PDCP PDU 没有收到,UE已经向源eNodeB发送了1,2和4的确认,但是源eNodeB只收到了1和2的确认。因此,源eNodeB会将除了1,2 之外的PDCP SDU(这里是解压后的数据,因此是SDU,其对应的PDU的SN号会在GTP-U扩展头部的“PDCP PDU Number”域中给出)转发给目标eNodeB,包括SN号为3,4和5的PDCP SDU。源eNodeB会从SGW收到“End Marker”包,表明下行数据承载将由源eNodeB切换到目标eNodeB,不会再有数据通过源eNodeB的通道下发下来。源eNodeB会将此“End Marker”数据包转发给目标eNodeB,表明到目标eNodeB数据转发的结束。
和图中表示的不同,如果UE已经向源eNodeB发送了包1,2和4的确认,并且源eNodeB都已经收到,包括对包4的确认。那么源eNodeB将只转发3,5等数据包给目标eNodeB而不会转发包4,因为确认UE已经收到包4。这点和上行的数据转发有些不同。在上行数据传送中,UE虽然可以确定某失序的数据包在源eNodeB中已经收到,但不知道源和目标eNodeB之间是否会转发此失序数据(依赖于两eNodeB之间的协商),因此,UE需要准备在目标eNodeB中的重传。
目标eNodeB在接收源eNodeB转发的数据的同时,也可能收到SGW发送过来的下行数据。在这种情况下,目标eNodeB会优先发送源eNodeB通过X2接口发送过来的数据,直到“End Marker”标志。目标eNodeB也会依次分配下一个PDCP SN号给新的数据包(这个数据包,可能来自SGW,也可能来自源eNodeB)。图中,目标eNodeB会将包3,4,5依次下发给UE,而后,生成序号为6的PDCP PDU包,发送给UE。此时,UE上的PDCP层就会检测到重复的包4,在去除重复的包和排序后,将PDCP SDU提交给上层应用。
3GPP规范(36.300)中建议UE在接入到目标eNodeB,获得上行授权以后,应首先发送PDCP层的状态报告给目标eNodeB。在这种情况下,目标eNodeB就会获知UE已经收到了包4,就不会向UE重复发送包4了