Understanding Predictable Network Interface Naming on Linux

Modern Linux interface names like enp3s0 replaced the old, simple eth0 convention — confusing at first, but solving a genuine, previously-annoying problem.

enp3s0
en  = ethernet
p3  = PCI bus 3
s0  = slot 0

wlp2s0
wl  = wireless
p2s0 = same PCI bus/slot encoding

The Problem This Solves

Under the old eth0/eth1 convention, interface names were assigned in the order the kernel happened to detect network cards — an order that could genuinely change between reboots, especially with multiple NICs, silently swapping which physical port was “eth0” and breaking firewall rules or static configuration tied to that name.

Predictable Naming Fixes This

The new scheme derives the interface name directly from stable hardware information (PCI bus location, or MAC address for USB adapters) — the same physical port always gets the same name on every boot, regardless of detection order, which is exactly the property the old naming scheme lacked.

# If you genuinely need the old eth0-style naming (not usually recommended):
# add net.ifnames=0 biosdevname=0 to kernel boot parameters