BitByteIntegration Cloud-Native Networking Architecture Series Part 1 of 6 — Tracking a Packet Through the Linux Bridge
Home / Learning / Networking / Linux Bridge
📘 Cloud-Native Networking Architecture Series · Part 1 of 6

Tracking a Packet Through the KubeVirt Linux Bridge

Understanding how packets traverse Linux Bridge networking in OpenShift Virtualization — from the virtual machine to the physical switch.

Reading Time18 min
Architecture LevelIntermediate
AuthorKashif Ali
UpdatedJuly 2026
OpenShiftKubeVirtLinux BridgeBridge CNIMultus
Prerequisites
Kubernetes basics OpenShift basics Basic Ethernet knowledge
⚡ Quick Facts
Network TypeLinux Bridge
LayerLayer 2
EncapsulationNone
PerformanceHigh
Live MigrationSupported
Typical UseEnterprise VLAN Integration

Why This Matters

Most Diagrams Stop at the VM

Almost every architecture diagram of a virtualized workload ends the same way: a box labeled "VM," a line to a box labeled "Network," and nothing in between. That gap is where most production networking incidents live. The packet doesn't teleport from the guest OS to the physical switch — it crosses a TAP device, a kernel bridge, a namespace boundary, another kernel bridge, and finally a physical NIC, and every one of those hops is a place where MTU mismatches, VLAN misconfigurations, and namespace confusion actually happen.

Architects frequently misunderstand Linux Bridge specifically because it looks deceptively simple compared to OVN. There's no SDN controller, no logical switch object, no northbound database to inspect — which leads many to assume there's "nothing to understand." In practice, the opposite is true: because there's no controller abstracting the mechanics away, you have to understand the raw kernel primitives directly to troubleshoot it at all.

Understanding the exact packet path isn't academic. It's the difference between guessing at a connectivity issue and knowing precisely which hop to inspect first.

In this article, we'll follow a single packet from inside a virtual machine all the way to the physical network.


Section 02 · Architecture Overview

The Building Blocks

Before we trace the packet in detail, here's the full path at a glance. No explanations yet — just orientation.

VMvirtio-nettap0TAP devicebr1Linux Bridgevethns boundarybr0Host BridgeNICens5f0SwitchToR
Diagram 1 — Full architecture: VM → tap0 → bridge → veth → host bridge → NIC → switch
Architecture Note: Seven hops, every one of them a standard Linux networking primitive. There is no logical switch object and no controller to query — the topology above is the entire mental model you need.

Section 03 · The Components

What Each Piece Actually Does

ComponentPurpose
VMGenerates packets via its guest OS networking stack
virt-launcherThe pod that hosts the running VM process (QEMU)
tap0Connects QEMU's virtual NIC to the Linux Bridge
Linux Bridge (br1)Layer-2 switching inside the pod network namespace
veth pairCrosses the pod ↔ host namespace boundary
Host Bridge (br0)Connects the pod's veth to the physical NIC
Physical NICSends the native Ethernet frame to the wire
Architecture Note: Every component above already exists in any standard Linux host — none of it is KubeVirt-specific machinery. KubeVirt simply automates the wiring between them.

Section 04 · Our Signature

The Packet Walk

This is the walkthrough every BitByteIntegration article is built around. Ten steps, one packet, no abstraction skipped.

Apppacket created1Guest StackTCP/IP2virtio-netparavirt NIC3tap0host handoff4br1 → vethns cross5br0 → NICphysical6SwitchToR delivery7
Diagram 2 — High-Level Packet Journey (VM MAC 52:54:00:aa:bb:10)
1

Application creates packet

A process inside the guest OS opens a socket and writes data — an ordinary application-layer send.

2

Guest Linux networking stack

The guest kernel wraps the payload through TCP/IP and hands it to the network device driver.

3

virtio-net

The paravirtualized NIC driver passes the frame to QEMU with minimal virtualization overhead.

4

tap0

QEMU writes the frame into the TAP device — the virtual cable connecting the VM process to the host's network stack.

5

Linux Bridge (br1)

Inside the virt-launcher pod's namespace, the local bridge performs L2 switching and forwards toward eth1.

6

veth pair

The frame reaches eth1 in the pod and instantly appears on the paired veth interface in the host namespace.

7

Host Namespace

The frame is now visible to the node's own network stack, outside any pod isolation.

8

Host Linux Bridge (br0)

The host bridge performs a standard L2 lookup and forwards the frame — just like a physical switch would.

9

Physical NIC

The frame is pushed onto the physical interface (e.g. ens5f0), attached to br0 as an access or trunk port.

10

Switch

The top-of-rack switch receives a plain Ethernet frame and forwards it exactly as it would for a bare-metal server.

Architecture Note: Every hop above is a real, inspectable Linux kernel primitive. You can run bridge fdb show or ip link directly on the node and see this exact topology — nothing here is abstracted behind a controller.

Section 05

Namespace Crossing

This deserves its own section because the namespace boundary is where most engineers new to containers lose the thread. A network namespace is a completely isolated instance of the Linux network stack — its own interfaces, routes, and firewall rules. The pod's namespace and the host's namespace are two separate worlds, and a veth pair is the only bridge between them.

Pod Namespace (virt-launcher) tap0 → br1Linux Bridgeeth1veth (pod side) Host Namespace vethXXXXveth (host side)br0 → NICHost Bridgeveth pair — namespace boundary crossing
Diagram 3 — virt-launcher pod namespace crossing into the host namespace via veth

A veth pair is always created as two ends of the same virtual cable: one end is placed inside the pod's namespace (eth1), the other stays in the host namespace (vethXXXX). Whatever enters one end instantly appears on the other — there's no queueing, no processing delay, no protocol translation. It's the closest thing Linux has to a network-layer teleporter, which is exactly why it's the standard mechanism every container network plugin uses to cross namespace boundaries.

Architecture Note: Namespaces exist to give every pod (and every VM) its own private view of the network — its own routing table, its own ARP cache — without any of that state colliding with another workload's on the same node.

Section 06

Linux Bridge Internals

Everything in this article so far has depended on one fact: the Linux kernel bridge is the network. There's no SDN controller reasoning about topology, no software-defined overlay, no encapsulation protocol — just a kernel subsystem doing exactly what a physical Layer-2 switch does.

MAC Learning & the FDB

Every bridge maintains a Forwarding Database (FDB) — a table mapping MAC addresses to the port they were last seen on. The first time a frame arrives from a new source MAC, the bridge records which port it came in on. From then on, frames destined for that MAC are forwarded directly to that port instead of being flooded to every port on the bridge.

Pure Layer-2 Forwarding

The bridge never inspects anything above Layer 2. It doesn't care about IP addresses, TCP ports, or application data — it reads a destination MAC, checks the FDB, and forwards. This is precisely why Linux Bridge networking has effectively zero CPU overhead compared to any SDN-based alternative.

Architecture Note: The Linux bridge is a kernel subsystem. Unlike OVN-Kubernetes, it does not encapsulate traffic or rely on a software-defined overlay, which is why packets leave the node as standard Ethernet frames.

Section 07 · Our Signature

What Actually Hits the Wire

This is the biggest conceptual difference between Linux Bridge and any overlay-based network type like OVN. There is no Geneve header, no VXLAN header, no GRE tunnel wrapping the packet. What leaves the physical NIC is a native, unmodified Ethernet frame — identical in structure to what any bare-metal server would send.

Destination MAC6 bytes
Source MAC6 bytes
VLAN (opt.)4 bytes
EtherType2 bytes
Payload46–1500 bytes
CRC4 bytes
Diagram — Native Ethernet frame as it appears on the physical wire

No decapsulation logic runs anywhere along this path. There's nothing to strip, nothing to unwrap — the destination MAC is looked up in a switch's own FDB exactly like any other frame on the network.

Architecture Note: Your datacenter switches treat KubeVirt VMs exactly like bare-metal servers — plain Ethernet frames, normal MAC learning, no special handling required anywhere in the physical fabric.

Section 08

Design Characteristics

FeatureLinux Bridge
OverlayNo
EncapsulationNo
VLAN SupportYes — via vlan_filtering=1
Live MigrationYes — full L2 semantics preserved
PerformanceHigh — near-native, kernel-only path
SDN / ControllerNo
Architecture Note: Every "No" in this table is a deliberate trade-off, not a limitation. Removing overlay, encapsulation, and SDN is precisely what gives Linux Bridge its performance and simplicity advantages.

Section 09

When Should You Use Linux Bridge?

✅ Good Fit
  • Traditional enterprise VLANs you need VMs to join directly
  • Lift-and-shift VM migration from VMware or RHV
  • Brownfield virtualization projects
  • Legacy workloads with fixed IP/MAC expectations
  • Flat Layer-2 networks with no multi-tenant requirement
🚫 When Not To Use
  • Multi-tenant SDN environments needing per-tenant isolation
  • Large east-west overlay topologies spanning many nodes
  • Workloads requiring advanced NetworkPolicy enforcement
Architecture Note: The deciding question is rarely "is Linux Bridge good?" — it's "does this workload need SDN-level policy, or just L2 connectivity?" Answer that first, and the network type usually answers itself.

Section 10

Comparison

Linux BridgeOVNSR-IOV
SwitchingKernelOVSHardware (VF)
EncapsulationNoGeneveNo
LatencyLowMediumLowest
Live MigrationYesYesComplex

This is a snapshot only — the full comparison matrix across all seven network types lives in the Cloud-Native Networking Architecture Portal.

Architecture Note: Notice Linux Bridge and SR-IOV agree on "no encapsulation" but arrive there for opposite reasons — one stays in the kernel, the other bypasses it entirely via PCI passthrough.

Section 11

Key Takeaways

VMtap0br1vethbr0NICSwitch
Diagram — Packet Path Summary: VM → tap0 → br1 → veth → br0 → NIC → Switch (7 hops, zero encapsulation)

Section 12

What's Next

Next in the Series
Tracking a Packet Through OVN-Kubernetes
Learn why OVN replaces kernel switching with Open vSwitch and Geneve overlays — while preserving the same Kubernetes networking semantics you've just seen implemented at the raw kernel level here. Same packet, same discipline, completely different mechanism.
Read the Next Article