... LIVE
🏷️ MPLS Stack Parameters
bytes
Enter packet size 40–9000 bytes.
Standard Ethernet: 1500 • Jumbo frame: 9000
Each MPLS label = exactly 4 bytes (32 bits)
L2 header added to total wire size only
PHP pops outer label at penultimate hop (default)
Mbps
Used to calculate bandwidth overhead impact
MPLS Header Overhead

Sources & Methodology

MPLS label structure from RFC 3032. VPN label stack from RFC 4364. PHP defined in RFC 3032 Section 2.1. SR-MPLS from RFC 8402.
📘
RFC 3032 — MPLS Label Stack Encoding
Defines the MPLS shim header: 20-bit label value, 3-bit TC/EXP for QoS, 1-bit Bottom of Stack flag, 8-bit TTL. Each label = 32 bits = 4 bytes. Source for reserved labels 0–15 and PHP mechanism.
📄
RFC 4364 — BGP/MPLS IP Virtual Private Networks (VPNs)
Defines the 2-label MPLS VPN architecture. Outer transport label for LSP forwarding, inner VPN label for VRF identification at egress PE. Source for standard 2-label stack depth in L3VPN deployments.
🌐
RFC 8402 — Segment Routing Architecture
Defines segment routing using MPLS label stacks. Source for label stack depth considerations in SR deployments with prefix-SIDs, adjacency-SIDs, and service labels.
Methodology: MPLS overhead = Label count x 4 bytes Total wire size = L2 header + MPLS overhead + IP packet size Overhead % = MPLS bytes / (MPLS bytes + IP packet) x 100 Effective MTU = Interface MTU - MPLS overhead PHP: with PHP enabled, egress PE receives packet with (labels - 1) x 4 bytes of MPLS overhead. Recommended core MTU = access MTU + MPLS overhead bytes to avoid fragmentation.

Last reviewed: April 2026

How Is MPLS Label Stack Overhead Calculated?

MPLS inserts a 4-byte shim header per label between the Layer 2 and Layer 3 headers. The number of labels stacked determines total overhead. For MTU planning, each label directly reduces the maximum IP payload that traverses a link without fragmentation. Understanding this impact is critical for MPLS core provisioning.

Each MPLS Label (32 bits / 4 bytes): Label(20) | TC(3) | S(1) | TTL(8)
Example — 2-label MPLS VPN, 1500-byte IP packet, Ethernet:
MPLS overhead = 2 x 4 = 8 bytes.
Total wire frame = 14 (Eth) + 8 (MPLS) + 1500 (IP) = 1,522 bytes.
Overhead % = 8 / 1508 x 100 = 0.53%.
Effective MTU = 1500 - 8 = 1492 bytes max IP packet.
Recommended core interface MTU: 1508 bytes or higher.

MPLS Label Stack Depth by Deployment

DeploymentLabelsOverheadDescription
Basic LSP (no service)14 bytesTE tunnel without VPN
MPLS L3VPN28 bytesTransport + VPN label (RFC 4364)
L3VPN over TE tunnel312 bytesTE + transport + VPN labels
Hierarchical MPLS / SR416 bytesInter-AS, SR with service label
Deep SR (explicit path)5–620–24 bytesMulti-segment SR-MPLS path

MPLS Overhead Impact by Packet Size

IP Packet Size1 Label (4B)2 Labels (8B)3 Labels (12B)4 Labels (16B)
64 bytes (min)5.88%11.11%15.79%20.00%
512 bytes0.78%1.54%2.29%3.03%
1,500 bytes (std)0.27%0.53%0.79%1.06%
9,000 bytes (jumbo)0.04%0.09%0.13%0.18%

MTU Planning for MPLS Networks

The standard MTU configuration formula for MPLS core links: Core MTU = Access MTU + (Label count x 4). For 1500-byte access with 2 labels: configure core links at 1508. For 3 labels: 1512. Without proper MTU configuration, 1500-byte IP packets become 1508-byte labeled frames that get fragmented or dropped on core links still set to 1500-byte MTU, causing performance degradation and path MTU discovery failures.

💡 PHP and egress PE processing: With PHP enabled (the default), the penultimate P router pops the outer label and forwards an unlabeled packet (or packet with only the VPN label) to the egress PE. The egress PE skips one label lookup, reducing CPU load. PHP is signaled by advertising label value 3 (Implicit Null) to the penultimate hop via LDP or RSVP-TE.
Frequently Asked Questions
An MPLS label is a 32-bit (4-byte) shim header inserted between Layer 2 and Layer 3. Fields: 20-bit label value (0 to 1,048,575), 3-bit Traffic Class for QoS, 1-bit Bottom of Stack flag (S=1 on innermost label), 8-bit TTL. Every MPLS label in a stack adds exactly 4 bytes to the packet.
Stack depth is the number of stacked labels. Standard MPLS VPN uses 2 labels (transport + VPN). VPN over TE tunnel uses 3. Segment routing may use 3 to 6 labels. Each adds 4 bytes. The Bottom of Stack bit (S=1) identifies the innermost label so routers know where the IP header begins.
Each label reduces effective IP MTU by 4 bytes. A 2-label stack on a 1500-byte core: max IP packet = 1492 bytes. Configure MPLS core interface MTU to access MTU plus MPLS overhead (e.g. 1508 for 2 labels). Without this, 1500-byte IP packets become 1508-byte frames that are fragmented or dropped on standard-MTU core links.
Labels 0-15 are reserved: 0 = IPv4 Explicit Null, 2 = IPv6 Explicit Null, 3 = Implicit Null (signals PHP), 7 = Entropy Label Indicator, 13 = Generic Associated Channel Label for OAM, 14 = OAM Alert Label. Dynamic allocation begins at label 16.
PHP removes the outermost label at the second-to-last router before the egress PE. The PE receives a packet with one fewer label, skipping one label lookup. PHP is signaled by advertising label 3 (Implicit Null) to the penultimate hop. Enabled by default in most MPLS VPN deployments to reduce egress PE processing load.
LDP automatically distributes labels for all IGP routes with minimal configuration. RSVP-TE establishes explicitly routed LSPs with bandwidth reservation and fast-reroute (sub-50ms). RSVP-TE enables traffic engineering. Segment Routing (SR) is increasingly replacing both by encoding the path in the label stack itself and using only the IGP for control plane.
SR encodes the forwarding path as a label stack. A prefix-SID (node segment) routes to a specific node. An adjacency-SID routes out a specific interface. A service SID identifies a VPN. SR eliminates LDP and RSVP-TE, requiring only the IGP for label distribution. Stack depth equals the path segment count.
Overhead % = MPLS bytes divided by total IP+MPLS bytes times 100. For 2-label (8 bytes) on 1500-byte packet: 8 / 1508 x 100 = 0.53%. For 64-byte small packets: 8 / 72 x 100 = 11.1%. Small packets suffer much higher proportional MPLS overhead. Enter your values in the calculator above for precise results.
The 20-bit label field allows values 0 to 1,048,575. Labels 0-15 are reserved. Dynamic assignment begins at 16. SR uses a Segment Routing Global Block (SRGB) typically starting at 16000 or higher. The SRGB must be identical across all SR routers in the domain for correct forwarding.
Configure MPLS core interface MTU = access MTU + (label count x 4). For 1500-byte access with 2 labels: set core links to 1508. For 3 labels: 1512. On Cisco IOS use the ip mtu and mpls mtu interface commands. On Juniper use family mpls maximum-labels and interface mtu statements. Always verify with ping sweeps after configuration.
Related Calculators
Popular Calculators
🧮

Missing a Networking Calculator?

Can’t find the networking calculator you need? Tell us — we build new ones every week.