Packet Switching vs Circuit Switching

Imagine ten thousand video calls, a million web requests, and a Mars rover's telemetry. All are trying to cross the same ocean cable at once. A phone network built in the 1960s would have refused most of them outright. That's because it reserves an entire dedicated path for every conversation. This happens whether or not anyone is speaking. The internet instead chops everything into small chunks called packets. It lets them share the wire on demand. Then it reassembles them at the far end. This single design decision — how the network core moves data — is one of the most consequential choices in the history of computing. The problem every communication network must solve is the same. Many senders want to use scarce shared links. The network must decide how to divide that capacity among them. Circuit switching solves it by carving out fixed slices of bandwidth or time. Each connection gets its own slice, guaranteeing performance but wasting capacity during silence. Packet switching solves it differently: it breaks messages into packets and multiplexes them statistically. Capacity is shared only when it is actually needed. That difference propagates into everything: cost, scalability, resilience to failure, and how difficult it is to guarantee call quality. This article builds directly on the idea of the Internet: Edge and Core. There, the network core was introduced as the mesh of routers and switches connecting edge devices. Here we open up that core and ask precisely how it moves data. We compare the two switching paradigms mechanically. We look at what happens at connection setup, during data transfer, and at teardown. Then we quantify when one wins. By the end you will be able to trace a packet's path hop by hop. You will compute link utilization under statistical multiplexing. You will explain why the telephone network needed circuits but the internet does not. And you will see the seeds of the next topic: how store-and-forward delay, queuing, and loss actually arise inside a packet-switched core.

Key takeaways
  • Circuit switching reserves a fixed slice of bandwidth (FDM) or time (TDM) for the entire duration of a session.
  • Packet switching splits data into packets that are stored, queued, and forwarded independently, hop by hop.
  • Packet networks use statistical multiplexing: no capacity is reserved, so idle senders don't waste bandwidth.
  • The tradeoff: circuits guarantee performance but waste capacity; packets share efficiently but risk queuing delay and loss.
  • A simple probabilistic argument (bursty-user model) shows why packet switching supports far more users per link.
  • Real telephone networks (PSTN) use circuits; the internet, Ethernet, and virtually all modern data networks use packets.
The core insight

Circuit switching trades efficiency for guaranteed, dedicated capacity; packet switching trades guarantees for efficient, on-demand statistical sharing of the same links.

The idea

A network core is the set of interconnected switches or routers that carries traffic between edge hosts. Any core must decide, link by link, how to allocate the capacity of that link among competing users. There are exactly two dominant strategies for doing this, and understanding both precisely is the goal here.

Circuit switching reserves resources for a connection along its entire path before any data is sent, during a call setup phase. The classic realizations are Frequency-Division Multiplexing (FDM), where each circuit gets a fixed slice of the link's frequency spectrum for its entire duration, and Time-Division Multiplexing (TDM), where time is divided into repeating frames of fixed-length slots, and each circuit gets the same slot number in every frame. Once established, the circuit behaves like a dedicated wire with a guaranteed, constant transmission rate, regardless of whether the users are actively sending data. This reservation is what the classical telephone network (PSTN) uses: dialing a number and hearing "connecting" is literally the network setting up a circuit end to end.

Packet switching instead breaks a message into smaller units called packets, each carrying a header with addressing and control information. Packets are sent into the network with no advance reservation. Each router along the path uses store-and-forward transmission: it must receive the entire packet, check it, and only then begin transmitting it in full on the next outgoing link. Because no bandwidth is pre-reserved, packets from many different flows can be interleaved on a shared link in whatever order they arrive — this on-demand sharing is called statistical multiplexing, deliberately named in contrast to the fixed multiplexing (FDM/TDM) used by circuits. If two packets destined for the same outgoing link arrive close together, one waits in a router's output queue — the router's buffer memory — while the other is transmitted. The essential distinction is when the sharing decision is made. Circuit switching commits resources at connection-setup time, based on anticipated demand. Packet switching commits nothing in advance and instead multiplexes actual, instantaneous demand link-by-link, packet-by-packet, at transmission time.

How it works

Circuit switching, step by step

1. Call setup: The source signals a request to the network. Switches along a path reserve a fixed amount of bandwidth (an FDM frequency band or a TDM slot) for this call, end to end. 2. Data transfer: The source transmits at a constant, guaranteed rate. No queuing, no contention with other calls — the resource is exclusively assigned. 3. Teardown: When the call ends, an explicit signal releases the reserved resource so it can be reused by a future call. If any switch along the path cannot find a free slot/band, the call is blocked — this is why an overloaded phone network gives busy signals instead of degraded quality.

Packet switching, step by step

Each router independently performs the same store-and-forward procedure for every arriving packet: ``` function ROUTER_FORWARD(incoming_link, packet):

# 1. STORE: receive the packet fully before acting buffer = receive_entire_packet(incoming_link, packet.length_bits)

# 2. Look up next hop using the packet's destination address output_link = FORWARDING_TABLE.lookup(packet.destination) if output_link is None: drop(packet) # unreachable destination return

# 3. Enqueue on the chosen output link's queue (finite buffer!) if OUTPUT_QUEUE[output_link].is_full(): drop(packet) # buffer overflow -> packet loss return OUTPUT_QUEUE[output_link].enqueue(packet)

# 4. FORWARD: transmit only after the whole packet is stored,

# and only when it reaches the head of the queue schedule_transmission(output_link) ``` ``` function TRANSMIT_LOOP(output_link): while True: if OUTPUT_QUEUE[output_link].not_empty(): packet = OUTPUT_QUEUE[output_link].dequeue() transmit_bit_by_bit(packet, output_link.rate_bps)

# this takes packet.length_bits / output_link.rate_bps seconds ``` No step above involves reserving capacity ahead of time. Every router makes an independent, local, per-packet decision based only on the packet's header and the current state of its queues. This locality is precisely why packet networks scale to millions of independent flows without any global setup handshake — there is no call-setup analog at all in ordinary packet forwarding (though virtual-circuit variants exist as a hybrid, briefly noted below). The following figure lays both mechanisms side by side across the same physical link, showing why circuits waste capacity that packets do not.

A hybrid worth naming: virtual circuits

Some packet networks (e.g., ATM, MPLS-based paths) use virtual-circuit switching: a setup phase establishes a fixed path through the network and installs forwarding-table entries at each router, but bandwidth itself is still shared statistically, not reserved. This gives packets a consistent path (useful for ordering and fast forwarding-table lookups) while retaining the efficiency of statistical multiplexing. It sits conceptually between the two poles described above, and is worth knowing exists, but the datagram-style forwarding shown in the pseudocode above is what ordinary IP routers do.

Complexity & correctness

Circuit switching resource accounting. If a link has capacity CC and each circuit needs a fixed rate rr, the link supports at most

Ncircuit=⌊Cr⌋N_{\text{circuit}} = \left\lfloor \frac{C}{r} \right\rfloor

simultaneous calls, guaranteed, with zero probability of degradation once admitted — but call Ncircuit+1N_{\text{circuit}}+1 is blocked outright even if every existing user is momentarily silent. Setup and teardown require a round trip of signaling over the whole path, an O(d)O(d) operation in the number of hops dd, executed once per call, independent of call duration.

Packet switching's statistical multiplexing gain. Suppose NN independent users share a link of capacity CC, and each user is "active" (transmitting at rate rr) only a fraction pp of the time, independently. Circuit switching must provision for the worst case and can host only ⌊C/r⌋\lfloor C/r \rfloor users regardless of pp. Packet switching can admit far more users, because the probability that more than M=⌊C/r⌋M = \lfloor C/r \rfloor of them are simultaneously active is small when pp is small. Formally, the number of simultaneously active users follows a Binomial(N,p)(N, p) distribution, and the probability the link is oversubscribed is:

P(overload)=P ⁣(Binomial(N,p)>M)=∑k=M+1N(Nk)pk(1−p)N−k.P(\text{overload}) = P\!\left(\text{Binomial}(N,p) > M\right) = \sum_{k=M+1}^{N} \binom{N}{k} p^{k} (1-p)^{N-k}.

Worked instance of the argument: let C=1 MbpsC = 1\ \text{Mbps}, per-user active rate r=100 kbpsr = 100\ \text{kbps}, so M=10M = 10. A circuit-switched link can only ever host 1010 users. Suppose each user is active only p=0.1p = 0.1 of the time (bursty, e.g., web browsing). With N=35N = 35 packet-switched users sharing the link, the expected number active at once is Np=3.5Np = 3.5, comfortably under M=10M=10, and the binomial tail probability of exceeding 1010 simultaneously active users out of 3535 is under 0.4%0.4\%. Packet switching therefore supports 3.5× more users on the same link at a small, quantifiable, and tunable risk of momentary queuing — a risk circuit switching cannot even express, because it simply refuses users past NcircuitN_{\text{circuit}}. This is the core correctness argument for statistical multiplexing: it is not "unreliable"; it is a probabilistic tradeoff that the network operator can dial by choosing NN relative to pp and MM, accepting rare, small queuing delays in exchange for large gains in the number of supportable users. Circuit switching has zero variance in performance but a hard, low ceiling on utilization; packet switching has bounded, small variance in performance and a much higher ceiling.

Store-and-forward correctness invariant. A router must never begin transmitting any bit of a packet on an outgoing link before it has received all bits of that packet on the incoming link, and before it has completed its (fast, table-lookup based) forwarding decision. This is the defining invariant of store-and-forward switching, and it guarantees that a corrupted or truncated packet is never partially propagated — the router can validate a checksum over the complete packet before relaying anything. The cost of this invariant is exactly one packet-transmission-time delay per hop (derived precisely in the discussion of delay components that follows this topic).

Space complexity. A circuit-switched core needs no per-packet buffering — memory usage is O(1)O(1) per active call (just the reservation state). A packet-switched router needs O(B)O(B) buffer memory per output link, where BB is the provisioned queue capacity in bits; if the arrival rate of packets destined for a link exceeds its transmission rate for long enough, the queue fills and subsequent arrivals are dropped — this is the loss mechanism packet networks must tolerate and circuit networks structurally cannot experience (they block instead of losing in-progress data).

Worked example

Consider a single 1.536 Mbps trunk link (a T1-class link) shared by candidate users who each need 128 kbps for a call.

Step 1 — circuit-switched capacity.

Ncircuit=⌊1,536 kbps128 kbps⌋=12N_{\text{circuit}} = \left\lfloor \frac{1{,}536\ \text{kbps}}{128\ \text{kbps}} \right\rfloor = 12

Exactly 12 calls can ever use this trunk simultaneously; a 13th caller is blocked with a busy signal, even if 11 of the 12 active calls are silent (e.g., during pauses in speech).

Step 2 — packet-switched capacity under the same load statistics. Suppose each user is active only p=0.2p = 0.2 of the time (a fairly chatty user model). We ask: how many users NN can share the link such that the probability more than 1212 are simultaneously active stays below 1%1\%?

NN (users)Expected active (NpNp)P(active>12)P(\text{active} > 12)
122.4≈ 0.00%
204.0≈ 0.03%
306.0≈ 1.4%
357.0≈ 6.9%

Reading the table: at N=20N = 20 packet-switched users, the risk of oversubscribing the trunk is negligible (0.03%), yet the link now serves 20 users instead of 12 — a 67% gain in served population for the same physical link, at a vanishingly small queuing risk. Push to N=30N=30 and the risk climbs to 1.4%, a deliberate operating point a network engineer might choose to trade a small, rare queuing delay for 2.5× the circuit-switched population.

Step 3 — trace one packet's journey to make the mechanism concrete. Suppose user A's packet (1,000 bits) arrives at Router 1 destined for Router 3, and at the same instant user C's packet (also queued) is already transmitting on the shared outgoing link at 1.536 Mbps.

Time (µs)Event
0A's packet fully received and validated at Router 1 (store step complete)
0Forwarding-table lookup: destination → outgoing link 2
0Output queue for link 2 already has C's packet transmitting; A's packet enqueued behind it
~651C's 1,000-bit packet finishes transmitting (1000 bits / 1.536 Mbps ≈ 651 µs)
651A's packet begins transmission on link 2
~1302A's packet fully transmitted; forwarded toward Router 3

No bandwidth was reserved for A in advance; A simply queued behind whoever was ahead of it and got served in order — the essence of statistical multiplexing made concrete at the level of individual bits.

Common pitfalls & traps

PitfallWhy it's wrongFix
Thinking packet switching is "always better"Circuits give zero-variance guaranteed rate; useful for strict real-time constraints (legacy telephony, some industrial control)Judge by requirements: guaranteed rate vs. efficient sharing
Confusing TDM with statistical multiplexingTDM slots are reserved and fixed per frame regardless of activity; statistical multiplexing allocates on demandAsk: is capacity assigned before or at the moment of transmission?
Believing routers can start forwarding before the packet fully arrivesViolates the store-and-forward invariant; would propagate corrupted/incomplete dataRemember: full packet must be received and checked before any bit is relayed onward
Assuming packet loss means the network is brokenFinite buffers plus statistical multiplexing make occasional loss an expected, engineered tradeoffLoss is a designed consequence of using finite memory to gain efficiency, not a bug
Ignoring call blocking as a real cost of circuitsCircuit networks reject excess calls outright instead of degrading gracefullyCompute Ncircuit=⌊C/r⌋N_{\text{circuit}} = \lfloor C/r \rfloor and compare against the binomial overload analysis

Pioneers & history

Origins · 1 minPaul Baran and how this was discovered
PB
Paul Baran
1926–2011 · RAND Corporation, USA, early 1960s

Baran proposed distributed, message-block switching for survivable military communication networks, envisioning data broken into blocks routed independently through a redundant mesh — a direct conceptual ancestor of packet switching, developed to survive the loss of any single node.

DD
Donald Davies
1924–2000 · National Physical Laboratory, UK, 1965–1966

Davies independently designed a packet-switched data network and coined the term "packet," influencing the design that would become the ARPANET's switching approach.

LK
Leonard Kleinrock
1934– · MIT and UCLA, 1960s

Kleinrock developed the mathematical queuing theory that quantifies exactly the efficiency argument used above — showing rigorously why statistically multiplexed, bursty traffic outperforms fixed circuit allocation on shared links.

History
1961
— Kleinrock's early queuing-theory analysis of message switching on shared lines.
1964
— Baran publishes distributed-network, block-switching designs for survivable communication.
1966
— Davies independently proposes and names "packet switching" at NPL, UK.
1969
— ARPANET, the first large-scale packet-switched network, goes live between four US universities.
1970
s–1980s — TCP/IP standardizes datagram packet switching as the internet's core mechanism.

Where this matters

The public switched telephone network (PSTN) historically used circuit switching end to end (FDM originally, then TDM in digital trunks), which is exactly why old landline calls had rock-solid, unwavering audio quality but a hard call-capacity limit per trunk. The internet, Ethernet, Wi-Fi, and essentially all modern data networks use packet switching, which is why the internet can carry an unpredictable, wildly bursty mixture of web browsing, video streaming, gaming, and file transfer on shared infrastructure without pre-negotiating bandwidth for each. Cellular networks (4G/5G core networks) have migrated almost entirely to packet-switched, IP-based cores, even carrying voice as packetized data (VoIP), because packet efficiency outweighs the diminishing need for circuit-style guarantees given modern buffering and prioritization techniques. Data-center networks, content-delivery networks, and virtually every router, switch, and network interface card manufactured today implement store-and-forward packet switching as their fundamental operating principle. Understanding this contrast is the direct prerequisite for reasoning about Delay, Loss, and Throughput in Packet Networks, where the queuing behavior sketched here is analyzed hop by hop in full quantitative detail, and it also underlies why the Internet Protocol Stack was designed around independently routed datagrams rather than pre-established circuits.

Ask the tutor: How does queuing delay actually accumulate hop by hop across a real packet-switched path, and how do we compute end-to-end delay and throughput from it?

Why doesn't the internet just use circuit switching if it gives guaranteed quality?

Circuit switching guarantees quality only by refusing to share capacity — every reserved slot is idle whenever its owner is silent, and idle time is common in bursty applications like web browsing or messaging. The internet carries an enormous diversity of traffic patterns simultaneously, most of it bursty rather than constant-rate, so reserving fixed capacity per flow would waste the overwhelming majority of link bandwidth. Packet switching's statistical multiplexing lets thousands of intermittent flows share the same physical link efficiently, which is precisely why the internet can scale to billions of devices on comparatively modest physical infrastructure. The cost is variable delay and occasional loss, which higher layers (like retransmission and congestion control) are specifically designed to handle. For applications needing strict guarantees, techniques like traffic prioritization or virtual circuits can approximate circuit-like behavior on top of a packet-switched core.

Does packet switching mean packets can arrive out of order?

Yes — because each router makes independent, per-packet forwarding decisions and different packets may traverse different queues or even different physical paths if the topology allows it, packets belonging to the same message can arrive at the destination out of order, or not at all. This is a direct structural consequence of not reserving a fixed path or fixed timing, unlike a circuit which delivers bits in the exact order and timing they were sent. Higher layers, particularly the transport layer's sequencing and reassembly logic, are responsible for detecting missing or reordered packets and restoring the original order before delivering data to an application. Circuit switching never faces this problem, since a dedicated, ordered channel exists for the call's whole duration. This is one of the direct tradeoffs traded for statistical multiplexing efficiency.

What exactly gets reserved in FDM versus TDM circuit switching?

In Frequency-Division Multiplexing, the link's total frequency spectrum is divided into narrow, non-overlapping bands, and each active circuit is permanently assigned one band for the call's duration, transmitting continuously within that slice. In Time-Division Multiplexing, time is divided into repeating frames, each frame split into fixed-length slots, and each circuit is assigned the same slot number in every frame, transmitting only during its slot but at full link bandwidth during that instant. Both achieve the same conceptual outcome — a guaranteed, fixed share of the link, unaffected by other users' activity — but by dividing a different resource (frequency versus time). Digital telephone trunks historically used TDM because digital signals map naturally onto discrete time slots. Neither technique reallocates unused capacity to other users, which is the central inefficiency packet switching is designed to eliminate.

Is store-and-forward delay the same thing as queuing delay?

No, though they are related and often confused. Store-and-forward delay is the time required to receive and buffer an entire packet's bits before any part of it can be transmitted onward — it depends only on packet size and link transmission rate, and it occurs at every hop even on an otherwise empty link. Queuing delay is the additional time a packet waits behind other packets in a router's output buffer before it even begins its own transmission, and it depends on current traffic load and is highly variable, sometimes zero. A packet experiences store-and-forward delay unconditionally at each hop; it experiences queuing delay only when contention exists at that hop. Both are components of total end-to-end delay, which is treated in full detail in the discussion of delay, loss, and throughput that builds on this comparison.

Can a network combine circuit switching and packet switching?

Yes — virtual-circuit packet switching is exactly this hybrid. A setup phase establishes a single, fixed logical path through the network (installing forwarding-table entries at each router along that path), giving packets consistent routing and ordering similar to a circuit. However, the actual bandwidth on each link along that path is still shared statistically among many virtual circuits rather than being exclusively reserved, so the efficiency benefit of packet switching is retained. Technologies like ATM and MPLS use this approach to get some of the predictability of circuits (consistent paths, fast table lookups, traffic engineering) without discarding statistical multiplexing's efficiency gains. The pure datagram model used by ordinary IP forwarding, in contrast, makes a fresh, independent routing decision for every single packet.

Why did the telephone network historically need circuit switching but voice calls now run fine over packet networks?

Analog telephony required a continuous, dedicated, low-jitter channel because analog signals cannot be buffered, reordered, or retransmitted without severely degrading audio quality, and the switching technology of the era had no cheap way to buffer, address, and route discrete data blocks. Modern VoIP instead digitizes voice into small packets, uses generous but carefully tuned playback buffers to absorb variable network delay, and relies on much faster, cheaper, more capable routers than existed in the mid-20th century. The key enabler is that digital packets can be buffered and slightly delayed without perceptible quality loss, as long as jitter and loss stay within tolerances the playout buffer can absorb. This lets voice traffic exploit statistical multiplexing's efficiency gains while still meeting real-time perceptual requirements, something 1960s analog circuit technology structurally could not do.

Before this

Where this leads