MAC PDU, Subheaders & MAC CEs in LTE 4G
How SDUs, MAC Control Elements and padding are packed into a transport block.
A MAC PDU in LTE is exactly one transport block โ the parcel the MAC layer hands to the physical layer for a single transmission. The clever part is how it is packed: all the little headers are grouped together at the very front, and everything they describe (control commands, then data, then padding) follows behind them. Read the headers in order and you know precisely how to carve up the rest.
Introduction
A MAC PDU in LTE (TS 36.321) is the unit the MAC layer hands down to the physical layer for a single transmission: one transport block, sent once per Transmission Time Interval (the 1 ms subframe) on a shared transport channel such as DL-SCH or UL-SCH. Everything the MAC does — multiplexing several logical channels, inserting in-band control, filling a scheduling grant — ends up as bytes inside this one structure.
It appears on every scheduled transmission in the network. Each time the eNB grants downlink resources or the UE is given an uplink grant, exactly one MAC PDU is assembled to fit the granted transport-block size, packing whatever data and control are waiting. Because the box size is fixed by the scheduler before MAC fills it, the layout has to be self-describing: the receiver must be able to unpack it with no side information.
That is why the MAC PDU format is worth knowing field by field. Its grouped-header layout, its LCID type tags, and its handful of MAC control elements are the vocabulary behind buffer status reporting, timing advance, DRX, contention resolution and carrier-aggregation control — and they are a staple LTE layer-2 interview topic.
On this page
Why the MAC PDU is built this way
In plain words: a MAC PDU is like a shipping crate with the packing list stapled to the front. Read the list first — item by item, with the size of each — and you know exactly what is inside and where each piece ends, so you can unpack the whole crate without opening anything blind. In LTE that packing list is the block of subheaders; the items are the control elements, then the data, then any padding.
The reason for the format is multiplexing without extra signalling. A single grant is a scarce, expensive thing, so the MAC packs as much into it as it can: data from several logical channels plus in-band control — a buffer status report, a power headroom report, a timing-advance command — all in one transport block, with no separate signalling round trip. To make that safe, every payload piece is labelled by its own subheader carrying an LCID (what it is) and, when needed, an L field (how long it is). Grouping all those subheaders at the front means an LTE receiver reads the entire packing list first and only then walks the payloads — a byte-aligned layout that is cheap for hardware to parse.
What a MAC PDU is
In LTE (TS 36.321) a MAC PDU is a transport block. It is built by multiplexing several pieces into one byte-aligned bit string: zero or more MAC control elements, zero or more MAC SDUs (each an RLC PDU coming down from a logical channel), and optional padding to fill the transport block exactly. Every one of those payload pieces is described by its own MAC subheader, and โ this is the LTE way โ all the subheaders are collected together at the start of the PDU.
The transport block size is not chosen by MAC; it is fixed by the scheduler's grant and the modulation and coding scheme signalled in the DCI. MAC's job is to fill that fixed box efficiently: pull the highest-priority control elements first, then as much data as the logical-channel prioritisation rules allow, then pad whatever is left. Because the box size is decided before MAC assembles it, padding is a normal, expected outcome rather than an error โ it simply means the grant was larger than the data waiting to be sent.
One transport block = a block of MAC subheaders, followed by the MAC control elements, followed by the MAC SDUs, followed by optional padding. The whole thing fits the transport block size chosen by the scheduler.
Multiplexing. A single grant can carry data from several logical channels plus in-band control (a BSR, a PHR, a timing-advance command) in one shot โ no extra signalling round trip. It is byte-aligned and cheap for hardware to parse.
Each subheader carries an LCID that names what its payload is โ a specific logical channel, a specific control element, or padding. Variable-size payloads also carry an L field so the receiver knows exactly where each piece ends.
The LTE layout: subheaders are not interleaved with their payloads. They are grouped as a contiguous header at the front of the PDU, in the same order as the payloads that follow. This is the main structural difference from NR, where each subheader immediately precedes its own payload.
The layout: headers first, then payloads
Walk a MAC PDU from left to right and you see four zones. First, the block of MAC subheaders. Then the MAC control elements โ control comes before data in LTE. Then the MAC SDUs. Finally, if the payloads do not exactly fill the transport block, a single stretch of padding. The n-th subheader describes the n-th payload element, so the ordering of the header block mirrors the ordering of the payload block.
Contrast this with NR (TS 38.321). In NR each MAC subheader sits immediately in front of its own payload โ subheader, payload, subheader, payload โ so the PDU is a stream of self-contained (subheader + payload) units. NR also puts most control elements at the end of the PDU (before padding) rather than the front, precisely because the interleaved layout lets a device generate the PDU in a single pass without knowing the total size up front. LTE's grouped-header design instead front-loads all the parsing metadata, which is why an LTE receiver reads the whole header block first and only then walks the payloads.
LTE ↔ NR: the layout is the headline difference. LTE groups all MAC subheaders in one contiguous block at the front and places control elements before the data. NR (TS 38.321) interleaves each subheader directly ahead of its own payload — subheader, payload, subheader, payload — and puts most CEs at the end of the PDU (just before padding). That interleaved design lets an NR device generate the PDU in a single pass without knowing the total size up front. The building-block fields (LCID, E, F, L) carry over, but the NR LCID tables and CE set differ, and NR adds a wider eLCID to address more control elements.
The MAC subheader โ R, R, E, LCID, F, L
Each payload element gets exactly one MAC subheader. Its job is to identify the element and, when the element is variable-size, to give its length. LTE defines the subheader fields in a fixed bit order โ R, R, E, LCID, then (when present) F and L:
| Field | Bits | Meaning |
|---|---|---|
R | 1 (×2) | Reserved bits, set to 0. Two of them lead every subheader, keeping the fields octet-aligned. |
E | 1 | Extension โ chains the header. E=1 means another R/R/E/LCID subheader follows; E=0 means the payload region begins at the next byte. |
LCID | 5 | Logical Channel ID. For data it names the logical channel; for control it takes a reserved codepoint that selects a specific MAC control element; a special value marks padding. DL-SCH and UL-SCH use separate LCID tables. |
F | 1 | Format โ chooses the width of the L field: F=0 ⇒ 7-bit length, F=1 ⇒ 15-bit length. Present only when an L field is present. |
L | 7 or 15 | Length, in bytes, of the corresponding MAC SDU or variable-size MAC control element. Absent for fixed-size CEs and for padding. |
So a subheader takes one of two shapes. A fixed-size element (most CEs, and padding) uses a short subheader โ just R/R/E/LCID, one octet. A variable-size element (a data SDU, a long BSR) uses a longer subheader โ R/R/E/LCID plus the F/L fields, which add one octet when F=0 (7-bit L) or two octets when F=1 (15-bit L). The E bit is what glues the header block together: each subheader points to the next until one sets E=0, and the byte after that is the first payload.
There is one economy worth knowing: the last element in the PDU never needs an explicit length, because its size is simply "everything remaining in the transport block". So the final subheader before the payloads is a short R/R/E/LCID form even when it describes a variable-size SDU. Likewise, when only a small amount of padding is needed (1โ2 bytes), it can be represented by one or two padding subheaders sitting inside the header block itself, rather than a separate padding region at the end โ this is why you sometimes see a padding LCID appear among the subheaders.
Why F exists: most SDUs are small, so a 7-bit L (up to 127 bytes) covers them with a single length octet. When a payload is larger, F=1 switches to a 15-bit length. One bit keeps the header compact in the common case.
LCID โ one field, three jobs
The LCID is only 5 bits, giving 32 codepoints, and LTE makes a single field do triple duty. A low range identifies real logical channels: 00000 is CCCH, and the values 00001โ01010 are the dedicated DCCH/DTCH identities. A block of reserved high values acts as opcodes that each select a particular MAC control element. And one codepoint, 11111, always means padding. Because uplink and downlink carry different control, there are two tables โ the DL-SCH LCID table and the UL-SCH LCID table โ so the same numeric value can mean different things in each direction.
This is why a receiver never needs external signalling to parse the PDU: the LCID in each subheader tells it unambiguously whether the matching payload is user data for channel N, a specific control command whose format and size it already knows, or padding. Here are the two tables, with the reserved control codepoints spelled out.
DL-SCH LCID | Value (binary) | Meaning |
|---|---|---|
CCCH | 00000 | Common Control Channel (e.g. Msg4 RRC message during random access). |
| Logical channel | 00001โ01010 | Identity of a dedicated DCCH or DTCH logical channel (data SDU). |
| Reserved | 01011โ11010 | Reserved / used by later releases for additional CEs. |
Activation/Deactivation | 11011 | SCell activation/deactivation bitmap (carrier aggregation, Rel-10). |
UE Contention Resolution Identity | 11100 | Echoes the UE's Msg3 CCCH SDU to resolve contention. |
Timing Advance Command | 11101 | Adjusts the UE's ongoing uplink timing. |
DRX Command | 11110 | Sends the UE into DRX sleep immediately. |
Padding | 11111 | Everything after (or at) this point is padding. |
UL-SCH LCID | Value (binary) | Meaning |
|---|---|---|
CCCH | 00000 | Common Control Channel (e.g. the RRC message in Msg3). |
| Logical channel | 00001โ01010 | Identity of a dedicated DCCH or DTCH logical channel (data SDU). |
| Reserved | 01011โ11000 | Reserved / used by later releases for additional CEs. |
Extended Power Headroom Report | 11001 | Multi-cell PHR for carrier aggregation. |
Power Headroom Report | 11010 | Single-cell transmit-power margin report. |
C-RNTI | 11011 | Carries the UE's existing C-RNTI (e.g. in Msg3). |
Truncated BSR | 11100 | Buffer status report that fits the remaining grant. |
Short BSR | 11101 | Buffer status for one logical channel group. |
Long BSR | 11110 | Buffer status for all four logical channel groups. |
Padding | 11111 | Everything after (or at) this point is padding. |
Mental model: treat LCID like a type tag. Small numbers → "user data for logical channel N, look at L for its size". Reserved big numbers → "a specific control element with a fixed known layout". 11111 → "everything left is padding". The exact meaning of the big numbers depends on direction โ the same 11011 is C-RNTI uplink but SCell Activation/Deactivation downlink.
MAC control elements โ the in-band commands
A MAC control element is a small control message carried inside the MAC PDU rather than as separate RRC signalling โ fast, L2-speed, no reconfiguration overhead. Each CE occupies a reserved LCID codepoint and has a fixed, pre-agreed layout, so the receiver knows exactly how to decode it the moment it reads the LCID. Here are the ones you must know, with their reserved LCIDs (binary) and what each achieves:
| MAC CE | Dir | LCID | Size | Purpose |
|---|---|---|---|---|
Buffer Status Report (Short / Long / Truncated) | UL | 11101 / 11110 / 11100 | 1B / var / 1B | UE tells the eNB how much UL data is buffered, per logical channel group (LCG). Short/Truncated report one LCG (LCG ID + 6-bit buffer-size index); Long reports all four LCGs. Drives UL scheduling. |
Power Headroom Report | UL | 11010 | 1B | UE reports how much transmit-power margin it has left, so the eNB does not grant more than the UE can transmit. |
Extended Power Headroom Report | UL | 11001 | var | PHR for multiple serving cells at once (carrier aggregation); a bitmap of reporting cells plus one power-headroom octet each. Dual-Connectivity PHR extends the same idea across the MeNB and SeNB cell groups. |
C-RNTI | UL | 11011 | 2B | Carries the UE's existing 16-bit C-RNTI in Msg3 during random access, so the eNB recognises a UE that already has one (contention resolution, handover). |
UE Contention Resolution Identity | DL | 11100 | 6B | Echoes the first 48 bits of the UE's Msg3 CCCH SDU in Msg4 so each UE can tell whether it won contention. |
Timing Advance Command | DL | 11101 | 1B | A 6-bit TA index (plus 2-bit TAG id) that adjusts the UE's ongoing uplink timing so its transmissions arrive time-aligned. Distinct from the initial TA delivered in the RAR. |
DRX Command | DL | 11110 | 0B | Forces the UE into DRX sleep immediately, stopping the on-duration / inactivity timers to save battery. Carries no payload โ the subheader alone is the command. |
Activation/Deactivation (Rel-10) | DL | 11011 | 1B | A bitmap that activates or deactivates configured secondary cells (SCells) in carrier aggregation (LTE-A), so the UE powers up only the carriers it currently needs. A 4-octet variant covers more SCells in later releases. |
A few deserve a closer look. The Buffer Status Report family is the heartbeat of uplink scheduling: the UE uses a BSR to tell the eNB how much data is queued. The Short BSR reports a single LCG; the Long BSR reports all four LCGs; and the Truncated BSR is sent when a grant is too small for a Long BSR but more than one LCG has data โ it reports the highest-priority LCG and flags that others are non-empty. The Power Headroom Report answers the complementary question โ how much power the UE has left to send with โ so the eNB avoids grants the UE cannot physically fulfil.
On the downlink, the Activation/Deactivation CE is the fast lever for carrier aggregation: turning an SCell on via a MAC CE takes a few milliseconds versus the tens of milliseconds an RRC reconfiguration would cost, which is exactly why LTE-A moved SCell control down to the MAC layer.
Fixed vs variable: most CEs are fixed-size โ Short BSR = 1 byte, Timing Advance Command = 1 byte, DRX Command = 0 payload bytes โ so their subheader has no L/F. Long BSR and Extended PHR are variable-size, so their subheaders carry F and L. Padding LCID (11111) also uses the short subheader form.
The RAR โ a special MAC PDU
The Random Access Response (Msg2) is delivered as a MAC PDU too, but a special one with its own subheader types and its own control element. It follows the same shape โ a header block of subheaders at the front, then payloads โ but the payloads are MAC RARs instead of SDUs, and there are no MAC SDUs or normal MAC CEs at all. A single RAR PDU can answer several UEs at once, one MAC RAR per detected preamble.
The RAR MAC header uses two subheader types, distinguished by a T (type) bit that replaces the usual LCID:
| Subheader | Fields | Purpose |
|---|---|---|
| Backoff Indicator (BI) | E, T=0, R, R, BI (4 bits) | Optional, at most one, and first if present. The 4-bit BI tells UEs that did not get a response how long to back off before retrying, easing collision on the RACH. |
| RAPID | E, T=1, RAPID (6 bits) | One per responded preamble. The 6-bit RAPID is the Random Access Preamble ID the eNB detected; a UE matches it against the preamble it sent to know this RAR is for it. |
Each RAPID subheader corresponds to one MAC RAR payload, a fixed 6-octet (48-bit) structure: 1 reserved bit, an 11-bit Timing Advance Command (the initial uplink timing correction), a 20-bit UL Grant for the Msg3 transmission, and a 16-bit Temporary C-RNTI. The 20-bit grant is itself packed: a hopping flag (1 bit), a fixed-size resource-block assignment (10 bits), a truncated modulation-and-coding-scheme field (4 bits), a TPC command for PUSCH (3 bits), a UL delay bit (1 bit), and a CSI-request bit (1 bit) โ everything the UE needs to send Msg3 without any further downlink control.
How MAC builds and orders the PDU
Assembling a MAC PDU is a priority exercise bounded by the transport block size. On the uplink the UE runs logical channel prioritisation: control elements are placed first (a C-RNTI or a UE contention resolution takes precedence, then BSR/PHR), after which each logical channel is served in strict priority order up to its prioritised bit rate, then round-robin for whatever grant remains. Anything the grant cannot fill becomes padding. On the downlink the eNB does the equivalent, deciding which SDUs and control elements to multiplex into each UE's transport block.
The ordering rules are worth stating precisely, because they are fixed and a receiver relies on them:
| Rule | Detail |
|---|---|
| Subheaders grouped and ordered | All MAC subheaders appear as one contiguous block at the front, in the same order as their payloads. |
| Control before data | MAC control elements are placed before any MAC SDUs in the payload region (padding CEs excepted). |
| One padding region | At most one contiguous padding region, and it comes last โ except for 1โ2 byte padding, which can be signalled by padding subheaders inside the header block. |
| Last element has no L | The final payload's size is implicit ("rest of the TB"), so its subheader omits F/L. |
| Byte alignment | The whole PDU is octet-aligned; the header block, CEs and SDUs each end on a byte boundary. |
Put together, these rules make the PDU self-describing. A receiver reads R/R/E/LCID repeatedly, collecting length information from F/L where present, until it hits E=0. It now knows the count, type and size of every payload element, and can slice the remainder of the transport block into control elements, SDUs and padding without any side information โ which is the whole point of grouping the headers at the front.
Summary
An LTE MAC PDU is one transport block, sized by the scheduler's grant, that the MAC fills by multiplexing. Its defining trait is layout: all MAC subheaders are grouped as a contiguous block at the front, in payload order, followed by the MAC control elements, then the MAC SDUs, then a single optional padding region. Control comes before data, and the whole thing is octet-aligned so a receiver can parse it with no side information.
Each subheader is R/R/E/LCID, extended with F/L when its payload is variable-size. The E bit chains the header block; the LCID does triple duty — a low value names a logical channel, a reserved high value selects a specific control element, and 11111 means padding — with separate DL-SCH and UL-SCH tables so the same value (e.g. 11011 = C-RNTI uplink vs. SCell Activation/Deactivation downlink) can differ by direction. The last element needs no L because its size is "the rest of the TB".
The MAC control elements — Buffer Status Report, Power Headroom Report, C-RNTI, UE Contention Resolution Identity, Timing Advance Command, DRX Command, SCell Activation/Deactivation — are in-band commands that operate at L2 speed, avoiding an RRC round trip. The RAR (Msg2) is a special MAC PDU whose header uses BI and RAPID subheaders (a T bit instead of an LCID) and whose payloads are fixed 6-octet MAC RARs carrying the initial TA, a 20-bit UL grant and a Temporary C-RNTI. Parse the header block first and every LTE MAC PDU becomes self-describing.
Quick Q&A
Q. In an LTE MAC PDU, where do the subheaders sit relative to their payloads, and how does NR differ?
A. In LTE all MAC subheaders are grouped together at the front of the PDU, in the same order as the payloads; control elements, then SDUs, then padding follow the whole header block. In NR each subheader instead sits directly in front of its own payload, and most CEs go at the end of the PDU rather than the front.
Q. What do the E, F and L fields do?
A. E (extension) chains the header: E=1 means another subheader follows, E=0 means the payload region starts next. L gives the byte length of the following variable-size element, and F selects a 7-bit (F=0) or 15-bit (F=1) L. Fixed-size CEs and padding have no L/F.
Q. What is the difference between Short, Long and Truncated BSR?
A. Short BSR reports buffer status for one logical channel group when only one is active; Long BSR reports all four LCGs; Truncated BSR is used when the grant is too small for a Long BSR but more than one LCG has data โ it reports the highest-priority LCG and signals that others are non-empty.
Q. Why does the RAR count as a special MAC PDU, and what does the MAC RAR carry?
A. Its header uses BI and RAPID subheaders (selected by a T bit) instead of LCID, and its payloads are fixed 6-octet MAC RARs rather than SDUs. Each MAC RAR carries a reserved bit, an 11-bit initial Timing Advance Command, a 20-bit UL grant for Msg3, and a 16-bit Temporary C-RNTI.
Q. The same LCID value 11011 means two different things โ what are they?
A. Direction decides it. On UL-SCH, 11011 is the C-RNTI MAC CE; on DL-SCH it is the SCell Activation/Deactivation CE. That is why LTE keeps separate DL-SCH and UL-SCH LCID tables.
Q. Name three MAC control elements that avoid an RRC round trip, and why that matters.
A. Buffer Status Report (UE reports UL buffer occupancy to drive scheduling), Timing Advance Command (keeps UL arrivals time-aligned), and the Rel-10 Activation/Deactivation CE (turns SCells on/off in carrier aggregation). All operate at L2 speed โ milliseconds โ where an RRC reconfiguration would cost tens of milliseconds.
Where this fits
MAC PDUs are how everything the MAC layer does becomes bytes on the air. To see the buffers and margins that fill these control elements, where the C-RNTI and Contention Resolution CEs come into play, and how logical channels map down to the transport block, follow the related topics.