LLC PDU填充RLC/MAC實例介紹
本文檔的總結是在對GPRS系統的學習做彙報時,楷哥提出的問題當時沒有回答上來的總結。LLC PDU填充RLC/MAC包括填充RLC/MAC數據塊以及上層控制消息填充RLC/MAC控制塊時需要分塊的情況。
1. LLC PDU填充RLC/MAC數據塊
假設現在有如下五包LLC數據,按照下面四種情況,分別組出RLC/MAC數據包。
注:採用CS-1編碼方式,主要是分段字段的填寫,其它字段默認爲0。
LLC數據包1:0x01 0x02 0x03 0x04 0x05
LLC數據包2:0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d
LLC數據包3:0x0e 0x0f 0x10 0x11
LLC數據包4:0x12 0x13 0x14 0x15 0x16 0x17 0x18
LLC數據包5:0x19 0x1a 0x1b 0x1c 0x1d
LLC 數據包6:0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 0x15
情況1:只有LLC數據包1需要下發;
情況2:LLC數據包1、2、3需要同時下發;
情況3:LLC數據包1、2、4需要同時下發;
情況4:LLC數據包1、2、5需要同時下發。
情況5:只有LLC數據包6下發。
GPRS RLC數據塊包括:RLC header、RLC data unit以及spare bit,如下所示:
RLC data block可採用的編碼方式如下所示:
由上圖可知,當採用CS-1的信道編碼方式時,RLC data block塊大小爲22個字節,此時不包含spare bit。
在進行分析組包前,先給出RLC/MAC下行數據塊的幀結構,並對組包時需要用到的幀結構的字段進行分析,然後再給出實際的組包結果,RLC/MAC下行數據塊幀結構如下:
其中,RLC header包含2個固定字節(PR、TFI、FBI和BSN、E)及若干可選字節(Length indicator、M和E)。其中FBI、LI、M和E字段的含義如下:
a. FBI(Final Block Indicator):最終塊標識,聲明瞭下行RLC數據塊是否是下行TBF中的最後一個RLC數據塊,即代表了TBF的終止。當FBI = 0時表示當前塊不是TBF的最後一個RLC數據塊;FBI = 1時表示當前塊是TBF的最後一個RLC數據塊。
b. LI(Length Indicator):長度標識,LI用於給RLC數據塊中的LLC PDUs定界。第一個LI值標識的是在RLC數據字段中屬於第一個LLC PDU的字節數,第二個LI值標識的是在RLC數據字段中屬於第二個LLC PDU的字節數,依次類推。
關於LI還有一類特殊情況是,如果上層PDU的結尾此時正好可以填充上RLC數據塊,但是由於添加的LI字節導致上層PDU要擴展到下一個RLC數據塊,在這種情況下,LI字段應該設置爲0。
同時,在這種情況下,在發送端M bit應當設置爲0,E bit應當設置爲1;在接收端,M bit應當被忽略,E bit應當被解釋爲1。
c. M(More):更多,在GPRS的TBF模式中,M bit和E bit以及LI一起用於定界LLC PDUs。當M bit出現後它表示在RLC數據塊中是否還有另外一個LLC PDU在當前這個LLC PDU的後面。當M和E同時出現時,其含義如下:
00:如果MS收到(在A/Gb模式下),它應當忽略除MAC頭部之外的所有RLC/MAC塊的字段。
01:表示在當前LLC PDU之後沒有LLC數據了,不含有擴展字節;
10:表示在當前LLC PDU之後又有一個新的LLC PDU,還存在一個擴展字節用於爲新的LLC PDU定界;
11:表示當前LLC PDU之後又有一個新的LLC PDU,該LLC PDU一直持續到RLC信息字段的結尾,不含有擴展字節。
d. E(Extends):擴展比特,它用於聲明在RLC數據塊頭是否存在一個可選的字節。當E ==0表示擴展字節緊隨;當E == 1表示沒有擴展字節。
下面開始實際的填充:
1) 情況1:一個LLC PDU填充到RLC/MAC塊中,且未填充滿。
2) 情況2:多個LLC PDU正好填充完一個RLC/MAC數據塊。這種情況下,在RLC data block中共有8個有效字節,其餘的14個字節均填充爲“0x2B”。 3) 情況3:多個LLC PDU填充一個RLC/MAC數據塊,且最後一個LLC PDU跨越兩個RLC/MAC數據塊。注意:上圖中橙色標識的地方,M E要填充爲“01”,而不能爲“11”,因爲這個LLC PDU就只有4字節的數據,正好填充完,後面沒有該LLC PDU的數據了。我第一次填充的時候使用的是“11”,這是錯誤的,使用“11”的情況標識一個LLC PDU跨越了兩個RLC/MAC數據塊的情況。見3)。
注意:上圖橙色填充的地方表示一個LLC PDU跨越了連個RLC/MAC數據塊。當接收端接收到該RLC/MAC數據塊後,接收端就知道後面還有數據才能組成一個完整的LLC PDU。
4) 情況4:最後一個LLC PDU正好填充RLC/MAC塊中剩餘的數據部分,但是由於添加可選字節LI導致該LLC PDU跨越兩個RLC/MAC的情況。
注意:這種情況就是LLC PDU的數據恰好能填充滿剩餘的RLC/MAC的剩餘部分,但是由於擴展字節的添加導致該LLC PDU擴展到下一個RLC/MAC數據塊的情況。此時,上圖中的LI字段爲0,M字段爲0,E字段爲1,詳細解釋可以參考前面LI字段的釋義部分。
5) 情況5:LLC PDU從一個新的RLC/MAC數據塊開始下發,且數據字段大於20個字節。注意:如果某LLC PDU重新開始於一個RLC/MAC塊,且其長度大於20個字節,則在進行填充時,第一個RLC/MAC塊中是沒有可選字節的,即E = 1,代表“No extension octet follows”。
2. 控制消息填充RLC/MAC控制塊時分塊的情況
RLC/MAC控制塊使用採用CS-1編碼方式。
下行RLC/MAC控制塊的幀結構如下所示:
關於RTI,協議中的描述有兩種功能:
1) 聚合下行RLC/MAC控制塊以使其組成一個RLC/MAC控制消息;
2) 標識下行RLC/MAC控制塊相關的被分片的控制消息的序號;
RTI對某個控制消息標記,然後RBSN、RBSNe、FS和FSe共同對分片進行控制。
RBSN和RBSNe標識一個RLC/MAC控制消息被分片後的下行RLC/MAC控制塊的序號。
只有網絡端可以對RLC/MAC控制消息進行分片,MS不可以。且最多分片數爲:1~9。當RLC/MAC控制消息不能恰好分成一個整數的控制塊時,最後一個控制塊將會被填充字節填充。RLC/MAC控制塊頭部的FS bit會根據RLC/MAC控制塊是否是最後一個分片的情況來設置,如果使用了RBSNe,則FS始終設置爲0。
對於兩個獨立的RLC/MAC控制消息,網絡不能在相同的PDCH上在同一時刻使用相同的RTI。對於不同的PDCHs在同一時刻網絡可以使用相同的RTI。網絡應當在相同的PDCH上傳輸一個控制消息的所有分片。