RLC layer is located between PDCP (or RRC layer) and MAC Layer.
It communicates with the PDCP layer (or RRC layer) through the RLC channel, and communicates with the MAC layer through logical channels.
Data received by RLC layer from PDCP layer is called as RLC SDU.
Data sent by RLC layer to MAC layer is called as RLC PDU.
RLC PDU can be either RLC data PDU or RLC control PDU
Services Provided to upper layers from RLC layer:
– TM data transfer;
– UM data transfer;
– AM data transfer, including indication of successful delivery of upper layers PDUs.
Services Expected from lower layers to RLC layer:
– data transfer;
– notification of a transmission opportunity, together with the total size of the RLC PDU(s) to be transmitted in the transmission opportunity.
Functions of RLC layer
– transfer of upper layer PDUs;
– error correction through ARQ (only for AM data transfer);
– segmentation and reassembly of RLC SDUs (only for UM and AM data transfer);
– re-segmentation of RLC SDU segments (only for AM data transfer);
– duplicate detection (only for AM data transfer);
– RLC SDU discard (only for UM and AM data transfer);
– RLC re-establishment;
– Protocol error detection (only for AM data transfer).
RLC Entities
5G NR operates in 3 different modes:
1. TM: Transparent Mode: There will be No RLC Header, No Segmentation/Reassembly, No feedback
2. UM: Unacknowledge Mode: RLC Header, Buffering at both Tx and Rx, Segmentation/Reassembly, No feedback
3. AM: Acknowledge Mode: RLC Header, Buffering at both Tx and Rx, Segmentation/Reassembly, Feedback
From the above image we can see below points:
1. BCCH, PCCH, CCCH use RLC TM
2. DCCH use RLC AM
3. DTCH use RLC UM or AM
1. SRB0 bearer, paging and system information broadcast use TM transmission mode
2. Other SRB bearers use AM transmission mode
3. DRB bearer can use AM or UM mode
Entities:
The TM transmission mode includes two entities: a sending entity and a receiving entity;
The UM transmission mode includes two entities: a sending entity and a receiving entity;
AM transmission mode contains only one entity for both sending and receiving to facilitate ARQ processing.
RLC Procedures
TM data transfer Procedure
UM data transfer Procedure
AM data transfer Procedure
ARQ procedure
How 5G NR RLC is different than 4G LTE RLC?
5G NR RLC cannot do Concatenation.
Concatenation is when a multiple RLC SDU can be combined into a single RLC PDU.
Segmentation is when a single RLC SDU is segmented into multiple RLC PDU.
LTE RLC can do both Concatenation and Segmentation.
Where as 5G NR RLC cannot do Concatenation and but can do Segmentation.
SI and SN
Segmentation Information and Segment Offset.
We know that both AM and UM RLC modes support segmentation, where as AM supports both segmentation and re-segmentation and this re-segmentation is not applicable for UM RLC because re-transmission are not supported.
5G NR uses SO (Segmentation Offset) both segmentation and re-segmentation.
Example:
Example 1:
In below image, there is no segmentation so RLC header includes a SN (Sequence Number) and and Segmentation Information (SI)
Example 2:
Segmentation is used to generate 3 segments and every segment is allocated with the same sequence number but different Segmentation information.
Each segment will have SO, segmentation offset to indicate the position of the segment within the original RLC SDU.
Example 3:
In below image, A RLC SDU is segmented and then re-segmented into 4 segments.
RRC Parameters defining RLC
RLC-BearerConfig ::= SEQUENCE { logicalChannelIdentity LogicalChannelIdentity, servedRadioBearer CHOICE { srb-Identity SRB-Identity, drb-Identity DRB-Identity } OPTIONAL, -- Cond LCH-SetupOnly reestablishRLC ENUMERATED {true} OPTIONAL, -- Need R rlc-Config RLC-Config OPTIONAL, -- Cond LCH-Setup mac-LogicalChannelConfig LogicalChannelConfig OPTIONAL, -- Cond LCH-Setup ... } RLC-Config ::= CHOICE { am SEQUENCE { ul-AM-RLC UL-AM-RLC, dl-AM-RLC DL-AM-RLC }, um-Bi-Directional SEQUENCE { ul-UM-RLC UL-UM-RLC, dl-UM-RLC DL-UM-RLC }, um-Uni-Directional-UL SEQUENCE { ul-UM-RLC UL-UM-RLC }, um-Uni-Directional-DL SEQUENCE { dl-UM-RLC DL-UM-RLC }, ... } UL-AM-RLC ::= SEQUENCE { sn-FieldLength SN-FieldLengthAM OPTIONAL, -- Cond Reestab t-PollRetransmit T-PollRetransmit, pollPDU PollPDU, pollByte PollByte, maxRetxThreshold ENUMERATED { t1, t2, t3, t4, t6, t8, t16, t32 } } DL-AM-RLC ::= SEQUENCE { sn-FieldLength SN-FieldLengthAM OPTIONAL, -- Cond Reestab t-Reassembly T-Reassembly, t-StatusProhibit T-StatusProhibit } UL-UM-RLC ::= SEQUENCE { sn-FieldLength SN-FieldLengthUM OPTIONAL -- Cond Reestab } DL-UM-RLC ::= SEQUENCE { sn-FieldLength SN-FieldLengthUM OPTIONAL, -- Cond Reestab t-Reassembly T-Reassembly } SN-FieldLengthUM ::= ENUMERATED {size6, size12} SN-FieldLengthAM ::= ENUMERATED {size12, size18} T-PollRetransmit ::= ENUMERATED { ms5, ms10, ms15, ms20, ms25, ms30, ms35, ms40, ms45, ms50, ms55, ms60, ms65, ms70, ms75, ms80, ms85, ms90, ms95, ms100, ms105, ms110, ms115, ms120, ms125, ms130, ms135, ms140, ms145, ms150, ms155, ms160, ms165, ms170, ms175, ms180, ms185, ms190, ms195, ms200, ms205, ms210, ms215, ms220, ms225, ms230, ms235, ms240, ms245, ms250, ms300, ms350, ms400, ms450, ms500, ms800, ms1000, ms2000, ms4000, spare5, spare4, spare3, spare2, spare1} PollPDU ::= ENUMERATED { p4, p8, p16, p32, p64, p128, p256, p512, p1024, p2048, p4096, p6144, p8192, p12288, p16384, p20480, p24576, p28672, p32768, p40960, p49152, p57344, p65536, infinity, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1} PollByte ::= ENUMERATED { kB1, kB2, kB5, kB8, kB10, kB15, kB25, kB50, kB75, kB100, kB125, kB250, kB375, kB500, kB750, kB1000, kB1250, kB1500, kB2000, kB3000, kB4000, kB4500, kB5000, kB5500, kB6000, kB6500, kB7000, kB7500, mB8, mB9, mB10, mB11, mB12, mB13, mB14, mB15, mB16, mB17, mB18, mB20, mB25, mB30, mB40, infinity, spare20, spare19, spare18, spare17, spare16, spare15, spare14, spare13, spare12, spare11, spare10, spare9, spare8, spare7, spare6, spare5, spare4, spare3, spare2, spare1} T-Reassembly ::= ENUMERATED { ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, ms40, ms45, ms50, ms55, ms60, ms65, ms70, ms75, ms80, ms85, ms90, ms95, ms100, ms110, ms120, ms130, ms140, ms150, ms160, ms170, ms180, ms190, ms200, spare1} T-StatusProhibit ::= ENUMERATED { ms0, ms5, ms10, ms15, ms20, ms25, ms30, ms35, ms40, ms45, ms50, ms55, ms60, ms65, ms70, ms75, ms80, ms85, ms90, ms95, ms100, ms105, ms110, ms115, ms120, ms125, ms130, ms135, ms140, ms145, ms150, ms155, ms160, ms165, ms170, ms175, ms180, ms185, ms190, ms195, ms200, ms205, ms210, ms215, ms220, ms225, ms230, ms235, ms240, ms245, ms250, ms300, ms350, ms400, ms450, ms500, ms800, ms1000, ms1200, ms1600, ms2000, ms2400, spare2, spare1}