Here I provide an overview of the overhead of different protocols and how the protocol stack looks with different headers in some scenarios.
Ethernet
In this case, I use 1Gbit/s Ethernet with Full-duplex operation as the reference for the calculations and references to the specification. It should match, with a different bandwidth, also for 100Mbit/s.
The Ethernetoverhead usually consists of the following parts:
Name | Size in Byte / Bit | Remarks |
Preamble1 | 7 Byte / 56 Bit | Synchronization Sequence for the receiver (7x 1010 1010) |
Start Frame Delimiter (SFD)2 | 1 Byte / 8Bit | Same as the Preamble, but the last bit is set to 1 |
Destination Address3 | 6 Byte / 48 Bit | MAC-Address of the destination |
Source Address | 6 Byte / 48 Bit | MAC-Address of the source |
Type/Length4 | 2 Byte / 16 Bit | Ethertype or Length in Byte of the Payload (MAC Client Data) <= 1500: Data in Bytes >= 1536: Ethertype |
VLAN-Tag (if present) 5 | 4 Byte / 32 Bit | VLAN, could be C-VLAN or S-VLAN, in case of QinQ two tags are present (C+S-VLAN) |
Pad (if necessary)6 | variable | Only needed if the frame size is otherwise less than the minimum frame size (if destination address through FCS inclusive is less than 64Byte) |
Frame Check Sequence (FCS)7 | 4 Byte/ 32 Bit | CRC Checksum of the frame for error detection |
Interpacket gap8 | 12 Byte / 96 Bit | interpacket spacing between different frames |
Excluding the optional fields of the frame, the smallest frame without padding needs 38 Byte or 304 Bit of overhead for the payload. If C-VLAN-Tags are used we are reaching 42 Bytes of overhead.
PPPoE
Even if the use is declining due to the use of IPoE in service provider networks, it is still widely in use. The PPPoE Header for data packets is 8 Byte long and uses a 4 Bit Version and Type field, 8 Bit Code, 16 Bit Session ID, and 16 Bit Length field9.
Layer 3 and up (IP, IPv6, TCP, UDP, DS-Lite)
I won’t cover every field of the Headers and ignore any extension headers, as most people are familiar with the higher layer protocols.
Layer | Protocol | Overhead |
3 | IPv4 | 20 Byte / 160 Bit |
3 | IPv6 | 40 Byte / 320 Bit |
4 | TCP | 20 Byte / 160 Bit |
4 | UDP | 8 Byte / 64 Bit |
3/4 | DS-Lite | 40 Byte / 320 Bit (technically it is an IP in IPv6-tunnel, therefore the same size as IPv6) Naming is only used to provide a reference to the transition technology, not an own protocol itself on the wire |
Overhead examples for different protocol combinations
The calculation of the overhead and payload data rate assumes a standard Ethernet payload size of 256 and 1500 Byte, if the payload is smaller the overhead is obviously higher. The Payload rate is calculated for full packets per second, not up to the last bit, and includes everything except the protocol stack. If only ETH is listed the IP Header is still payload if it is e.g. ETH, IPv4, TCP everything behind the TCP Header is counted as payload. The upper value of the row is the 256 Byte value, and the lower is 1500 Bytes.
Protocol stack | Overhead of the total frame (bit time on wire/payload) | Payload rate at 1Gbit/s in Mbit/s |
ETH | 2352/2048 = 12,93% 12304/12000 = 2,47% | 870,75 Mbit/s 975,29 Mbit/s |
ETH, IPv4 | 2352/1888 = 19,73% 12304/11840 = 3,77% | 802,72 Mbit/s 962,28 Mbit/s |
ETH, IPv6 | 2352/1728 = 26,53% 12304/11680 = 5,07% | 734,69 Mbit/s 949,28 Mbit/s |
ETH, IPv4, TCP | 2352/1728 = 26,53% 12304/11680 = 5,07% | 734,69 Mbit/s 949,28 Mbit/s |
ETH, IPv4, UDP | 2352/1824 = 22,45% 12304/11776 = 4,29% | 775,51 Mbit/s 957,08 Mbit/s |
ETH, IPv6, TCP | 2352/1568 = 33,33% 12304/11520 = 6,37% | 666,67 Mbit/s 936,28 Mbit/s |
ETH, IPv6, UDP | 2352/1664 = 29,25% 12304/11616 = 5,59% | 707,48 Mbit/s 944,08 Mbit/s |
ETH, PPPoE | 2352/1984 = 15,65% 12304/11936 = 2,99% | 843,54 Mbit/s 970,09 Mbit/s |
ETH, PPPoE, IPv4 | 2352/1824 = 22,45% 12304/11776 = 4,29% | 775,51 Mbit/s 957,08 Mbit/s |
ETH, PPPoE, IPv6 | 2352/1664 = 29,25% 12304/11616 = 5,59% | 707,48 Mbit/s 944,08 Mbit/s |
ETH, PPPoE, IPv4, TCP | 2352/1664 = 29,25% 12304/11616 = 5,59% | 707,48 Mbit/s 944,08 Mbit/s |
ETH, PPPoE, IPv4, UDP | 2352/1760 = 25,17% 12304/11712 = 4,81% | 748,30 Mbit/s 951,88 Mbit/s |
ETH, PPPoE, IPv6, TCP | 2352/1504 = 36,05% 12304/11456 = 6,89% | 639,46 Mbit/s 931,07 Mbit/s |
ETH, PPPoE, IPv6, UDP | 2352/1600 = 31,97% 12304/11552 = 6,11% | 680,27 Mbit/s 938,88 Mbit/s |
ETH, PPPoE, DS-Lite, IPv4 | 2352/1504 = 36,05% 12304/11456 = 6,89% | 639,46 Mbit/s 931,07 Mbit/s |
ETH, PPPoE, DS-Lite, IPv4, TCP | 2352/1344 = 42,86% 12304/11296 = 8,19 | 571,43 Mbit/s 918,07 Mbit/s |
ETH, PPPoE, DS-Lite, IPv4, UDP | 2352/1440 = 38,78% 12304/11392 = 7,41% | 612,24 Mbit/s 925,87 Mbit/s |
ETH, VLAN, PPPoE | 2384/1984 = 16,78% 12336/11936 = 3,24% | 832,21 Mbit/s 967,57 Mbit/s |
ETH, VLAN, PPPoE, IPv4 | 2384/1824 = 23,49% 12336/11776 = 4,54% | 765,10 Mbit/s 954,60 Mbit/s |
ETH, VLAN, PPPoE, IPv6 | 2384/1664 = 30,20% 12336/11616 = 5,84% | 697,99 Mbit/s 941,63 Mbit/s |
ETH, VLAN, PPPoE, IPv4, TCP | 2384/1664 = 30,20% 12336/11616 = 5,84% | 697,99 Mbit/s 941,63 Mbit/s |
ETH, VLAN, PPPoE, IPv4, UDP | 2384/1760 = 26,17% 12336/11712 = 5,06% | 738,25 Mbit/s 949,41 Mbit/s |
ETH, VLAN, PPPoE, IPv6, TCP | 2384/1504 = 36,91% 12336/11456 = 7,13% | 630,87 Mbit/s 928,66 Mbit/s |
ETH, VLAN, PPPoE, IPv6, UDP | 2384/1600 = 32,89% 12336/11552 = 6,36% | 671,14 Mbit/s 936,44 Mbit/s |
ETH, VLAN, PPPoE, DS-Lite, IPv4 | 2384/1504 = 36,91% 12336/11456 = 7,13% | 630,87 Mbit/s 928,66 Mbit/s |
ETH, VLAN, PPPoE, DS-Lite, IPv4, TCP | 2384/1344 = 43,62% 12336/11296 = 8,43% | 563,76 Mbit/s 915,69 Mbit/s |
ETH, VLAN, PPPoE, DS-Lite, IPv4, UDP | 2384/1440 = 39,60% 12336/11392 = 7,65% | 604,03 Mbit/s 923,47 Mbit/s |
- IEEE Std 802.3-2018 3.2.1 Preamble field
- IEEE Std 802.3-2018 3.2.2 Start Frame Delimiter (SFD) field
- IEEE Std 802.3-2018 3.2.3 Address fields
- IEEE Std 802.3-2018 3.2.6 Length/Type field
- IEEE Std 802.1Q-2018
- IEEE Std 802.3-2018 3.2.8 Pad field
- IEEE Std 802.3-2018 3.2.9 Frame Check Sequence (FCS) field
- IEEE Std 802.3-2018 4.2.3.2.2 Interpacket gap
- IETF RFC 2516 Section 4