Where the bandwidth goes
A “gigabit” Ethernet link signals at 1,000 Mbit/s, but a file transfer never reaches 1,000 Mbit/s. Each packet of data is wrapped in protocol headers, and each Ethernet frame comes with a preamble, a checksum and a mandatory silence. The goodput is the rate of useful data once all of that is counted.
Bytes on the wire for one frame
| Element | Bytes |
|---|---|
| Preamble and start-of-frame delimiter | 8 |
| Ethernet header (MAC addresses, type) | 14 |
| 802.1Q VLAN tag (optional) | 4 |
| IP packet (the MTU) | 1,500 |
| Frame check sequence (CRC) | 4 |
| Inter-frame gap | 12 |
A standard 1,500-byte MTU therefore occupies 1,538 bytes of link time. Inside the IP packet, the headers take 20 bytes for IPv4 or 40 for IPv6, plus 20 for TCP or 8 for UDP. Linux enables the 12-byte TCP timestamps option by default.
Example
TCP over IPv4 with timestamps uses 52 bytes of headers, leaving 1,448 bytes of payload in each 1,538-byte frame: an efficiency of 94.1%, or about 941 Mbit/s (117.7 MB/s) on gigabit Ethernet. That is the figure a perfect iperf test reaches.
| Configuration | Efficiency |
|---|---|
| TCP/IPv4, MTU 1,500, timestamps | 94.1% |
| TCP/IPv6, MTU 1,500, timestamps | 92.9% |
| UDP/IPv4, MTU 1,500 | 95.7% |
| TCP/IPv4, jumbo MTU 9,000 | 99.0% |
Jumbo frames
A 9,000-byte MTU spreads the fixed overhead over six times more data and cuts the number of frames per second, which also lowers CPU load. Every device on the path, including switches, must support the same MTU, so jumbo frames are best kept to storage networks and server links.
Why real transfers are slower
Disk speed, TCP window limits on long-distance links, encryption, Wi-Fi segments and small packets all lower the result further. A file copy at 110 to 115 MB/s on gigabit Ethernet is essentially perfect.