Loading content...
Imagine a highway on-ramp with a traffic light that controls how quickly cars can enter the highway during rush hour. When traffic becomes congested, the light turns red more frequently, forcing entering cars to wait and slow their rate of arrival. This ramp metering prevents highway gridlock by reducing inflow when capacity is strained.
In early IP networks, ICMP Source Quench (Type 4) served a similar purpose. When a router or host became overwhelmed with traffic—buffers filling, packets dropping—it could send Source Quench messages back to sources, signaling: "You're sending too fast. Slow down."
This message type represents a fascinating chapter in networking history. It was one of the first attempts at network congestion control but proved ineffective in practice. Today, Source Quench is officially deprecated (RFC 6633, 2012), and modern systems neither generate nor process it. Understanding why it failed illuminates the challenges of congestion control and why TCP's end-to-end mechanisms ultimately prevailed.
Source Quench (Type 4) is deprecated and should not be used in modern networks. This page covers it for historical understanding, protocol completeness, and to explain why network-layer congestion signaling was replaced by transport-layer mechanisms. You may encounter it in legacy systems, certification exams, or packet captures from older equipment.
By the end of this page, you will understand what Source Quench was designed to do, why it failed in practice, how it was officially deprecated, and what modern congestion control mechanisms replaced it. You'll gain insight into the evolution of congestion control thinking.
Source Quench was defined in RFC 792 (1981) as a primitive flow control mechanism. The concept was straightforward: provide explicit feedback from congested network elements to sources contributing to that congestion.
123456789101112131415161718
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Type (4) | Code (0) | Checksum |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| Unused (zeros) |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| |+ Original IP Header (20-60 bytes) +| |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| First 8 Bytes of Original Datagram |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Type: 4 (Source Quench)Code: 0 (only value defined)Unused: 32 bits, must be zeroData: Original IP header + 8 bytes (identifies the offending packet)The Congestion Scenario:
Congestion Point
↓
[Source A] ─────┐ ┌───→ [Destination]
├──→ [Router R] ──────┤
[Source B] ─────┘ (buffers full) └───→ [Destination]
[Source C] ─────┘
1. Router R receives more traffic than it can forward
2. Buffers fill; packets start dropping
3. Router generates Source Quench to Sources A, B, C
4. (Theoretically) Sources reduce their sending rates
5. Congestion eases
The idea was logical: routers are closest to the congestion and know when they're overloaded. Why not have them directly tell sources to slow down?
Despite its intuitive appeal, Source Quench proved ineffective in practice. Multiple fundamental flaws prevented it from serving as a viable congestion control mechanism.
Research in the 1980s showed that Source Quench could actually worsen congestion. During overload, generating Source Quench messages consumed router resources and added to link congestion. This paradoxically made the congestion worse, leading to more Source Quench generation, in a destructive feedback loop.
The Response Ambiguity Problem:
RFC 792 provided no guidance on what sources should do when receiving Source Quench:
| Possible Response | Problem |
|---|---|
| Reduce rate by fixed percentage (e.g., 50%) | Arbitrary; may over- or under-correct |
| Stop sending entirely | Disrupts applications; users experience hangs |
| Reduce rate for specific destination only | Doesn't help if congestion is multi-destination |
| Ignore the message | Defeats the purpose entirely |
Different operating systems implemented wildly different responses (or none at all), making Source Quench behaviorally unpredictable across the Internet.
While Source Quench attempted network-layer congestion signaling, the networking community realized that transport-layer congestion control was more effective. Van Jacobson's 1988 paper "Congestion Avoidance and Control" introduced the TCP congestion control mechanisms that became the Internet's foundation.
TCP congestion control embodies the end-to-end design principle: complex functionality belongs in end systems, not the network. Routers focus on packet forwarding; endpoints detect congestion through packet loss and RTT changes. This division made the Internet scalable—routers don't need to understand or signal about application requirements.
Why TCP Congestion Control Works:
Implicit signaling via packet loss: Sources detect congestion by observing dropped packets (via timeout or duplicate ACKs). No explicit ICMP required.
Precise rate control: The congestion window (cwnd) in bytes provides exact control over outstanding data. AIMD (Additive Increase, Multiplicative Decrease) provides mathematically proven fairness.
Self-clocking: ACKs arriving at the sender pace new packet transmissions. Faster ACKs allow faster sending; slower ACKs automatically slow the sender.
No router involvement: Routers just forward or drop. They don't generate congestion signals, preserving their CPU for forwarding.
Reliable feedback: TCP's acknowledgment mechanism ensures congestion signals (losses) are reliably detected.
In 2012, RFC 6633 officially deprecated ICMP Source Quench. The RFC provides formal recognition of what the networking community had known for decades: Source Quench doesn't work and shouldn't be used.
RFC 6633 'Deprecation of ICMP Source Quench Messages' moved Source Quench to Historic status. It formally recommends that routers SHOULD NOT generate Source Quench, hosts MUST NOT react to Source Quench by throttling traffic, and firewalls SHOULD silently drop Source Quench (log if desired).
| Network Element | Recommendation | Rationale |
|---|---|---|
| Routers | SHOULD NOT generate Source Quench | Adds overhead during congestion; provides no benefit |
| Hosts/Sources | MUST NOT react to Source Quench | Reactions are undefined and potentially harmful |
| TCP implementations | SHOULD NOT throttle based on Source Quench | TCP has its own superior congestion control |
| UDP applications | SHOULD ignore Source Quench | Application-layer rate control preferred |
| Firewalls | SHOULD drop Source Quench messages | No legitimate purpose; potential attack vector |
| Network monitors | MAY log Source Quench | Historical interest; anomaly detection |
The RFC 6633 Timeline:
| Year | Event |
|---|---|
| 1981 | RFC 792 defines Source Quench |
| 1987 | TCP congestion control developed (Jacobson) |
| 1989 | RFC 1122 allows hosts to ignore Source Quench |
| 1995 | Many implementations stop generating Source Quench |
| 2004 | Research confirms Source Quench ineffective |
| 2012 | RFC 6633 officially deprecates Source Quench |
| Today | Virtually no network equipment generates or processes it |
The 31-Year Journey:
Source Quench's official deprecation 31 years after its definition illustrates how slowly protocol standards evolve—even when practical problems are well understood. The IETF's formal process required extensive documentation of failures before standardizing the deprecation.
Beyond its ineffectiveness, Source Quench poses security risks if systems still honor it. These concerns reinforced the deprecation decision.
Like all ICMP messages, Source Quench has no authentication mechanism. An attacker can trivially spoof the source IP address. Since Source Quench includes original header data, an attacker observing traffic (or guessing connection parameters) can craft convincing forgeries. There's no way to verify the message came from a legitimate, congested router.
While Source Quench was deprecated, the need for congestion signaling remains. Modern networks use sophisticated mechanisms that avoid Source Quench's flaws.
| Mechanism | Layer | How It Works | Advantage over Source Quench |
|---|---|---|---|
| TCP Congestion Control | Transport | Detect loss via timeout/dup ACKs; adjust cwnd using AIMD | Reliable feedback, fair share convergence |
| ECN (Explicit Congestion Notification) | IP + Transport | Router marks packets (CE bit) before dropping; receiver echoes to sender | Proactive signaling without loss |
| Active Queue Management (RED/AQM) | Network | Router probabilistically drops packets before buffer is full | Early congestion signal; prevents buffer bloat |
| BBR Congestion Control | Transport | Models bottleneck bandwidth and RTT; probes path capacity | Loss-independent; high throughput on modern networks |
| QUIC Congestion Control | Transport (UDP) | Similar to TCP but runs over UDP; integrated with QUIC protocol | Lower latency; multiplexed streams without head-of-line blocking |
Explicit Congestion Notification (ECN):
ECN deserves special mention as the modern, sanctioned replacement for explicit congestion signaling.
How ECN Works:
ECN Advantages:
ECN represents what Source Quench tried to achieve—explicit congestion notification—but implemented correctly.
12345678910111213141516171819
# Check current ECN settingsysctl net.ipv4.tcp_ecn# 0 = disabled, 1 = enabled (may request/accept), 2 = accept only # Enable ECNsudo sysctl -w net.ipv4.tcp_ecn=1 # Make persistentecho "net.ipv4.tcp_ecn = 1" >> /etc/sysctl.conf # Verify ECN is being used (in packet captures)# Look for ECT(0), ECT(1), or CE flags in IP header# TOS field bits 6-7:# 00 = Not-ECT (not capable)# 10 = ECT(0) (ECN-capable)# 01 = ECT(1) (ECN-capable)# 11 = CE (Congestion Experienced) tcpdump -i eth0 -vv 'tcp' | grep -i ecnUnderstanding how current systems handle Source Quench helps in troubleshooting legacy environments and security auditing.
| Platform | Generates SQ | Processes/Reacts to SQ |
|---|---|---|
| Linux (modern) | No (decades) | No (ignored since kernel 2.x) |
| Windows 10/11 | No | No (ignored) |
| macOS | No | No |
| FreeBSD/OpenBSD | No | No |
| Cisco IOS (modern) | No (since IOS 12.x) | No |
| Juniper JUNOS | No | No |
| Legacy equipment (pre-2000) | Possibly yes | Possibly yes |
If you capture ICMP Type 4 messages in a modern network, investigate immediately. Legitimate equipment hasn't generated Source Quench for 20+ years. Possible causes: (1) Very old legacy equipment still in service, (2) Misconfigured network appliance, (3) An attacker attempting Source Quench attacks, (4) Penetration testing or security scanning tools.
123456789101112131415161718192021
# Capture Source Quench messagessudo tcpdump -i any 'icmp[0]=4' -nn -v # If you see any output, something is wrong# Modern networks should show zero Source Quench traffic # Block Source Quench at firewall (iptables)sudo iptables -A INPUT -p icmp --icmp-type source-quench -j DROPsudo iptables -A OUTPUT -p icmp --icmp-type source-quench -j DROP # Log before dropping (for auditing)sudo iptables -A INPUT -p icmp --icmp-type source-quench -j LOG \ --log-prefix "ICMP Source Quench: " --log-level warningsudo iptables -A INPUT -p icmp --icmp-type source-quench -j DROP # Verify Linux kernel ignores Source Quench# (There's no sysctl to control this; it's hardcoded to ignore)# You can verify by sending Source Quench and observing no rate change # Firewall rule in nftables (modern Linux)nft add rule inet filter input icmp type source-quench dropBest Practices for Source Quench:
Source Quench's history offers valuable lessons about protocol design, congestion control, and the Internet's architectural principles.
Source Quench exemplifies a recurring theme in networking: simple, intuitive ideas often fail at scale. The Internet's success comes from robust mechanisms forged through rigorous analysis—not from first-guess solutions. TCP congestion control, AIMD, and the end-to-end principle emerged from understanding why simpler approaches like Source Quench couldn't work.
ICMP Source Quench represents an important chapter in Internet history—a well-intentioned mechanism that proved unworkable, leading to its official deprecation and replacement by superior approaches.
You now understand ICMP Source Quench comprehensively—its design, failure modes, deprecation, and the lessons it teaches about protocol design. This historical perspective enriches your understanding of modern congestion control. Next, we'll explore Parameter Problem—ICMP's way of reporting malformed packet headers.