Summary
- A cumulative ACK can prove that TCP’s acknowledged byte frontier advanced without identifying which transmission of those bytes caused the advance.
- Karn’s algorithm excludes RTT samples after retransmission, preventing an unknowable causal interval from corrupting the timer; exponential backoff preserves caution while that evidence is unavailable.
- TCP timestamps can distinguish transmission instances for timing, but their echo rules and estimator use remain scoped; they do not turn every ACK into a safe sample or certify application performance.
One acknowledgment, two possible clocks
At time zero, a sender transmits bytes 10,000 through 10,999 and starts a retransmission timer. No acknowledgment arrives before the timer expires. The sender transmits those byte positions again. A short time later, an ACK advances beyond byte 10,999.
The ACK proves useful progress. It says the receiver’s cumulative frontier has moved beyond those bytes. It does not contain the identity of a physical packet. If the first copy survived but was delayed, measuring from the second send produces an RTT that is too short. If the first copy vanished and the retransmission arrived, measuring from the first send includes the timeout and produces an RTT that is too long.
Both calculations use real timestamps. Neither has an authorized causal pairing. The defect is not imprecision in the clock; it is uncertainty about which start event belongs to the observed reply.
That distinction made retransmission timing a question of evidence selection. A transport can know that data was acknowledged and still decline to use the same ACK as a latency observation. Progress and measurement are related, but they are not interchangeable permissions.
The original timer could adapt without knowing when to distrust itself
RFC 793 already required a dynamically determined retransmission timeout. TCP had to cope with internetwork paths whose delay varied, rather than rely on one fixed wait. The specification described smoothing measured round-trip times and bounding a derived timeout.
That early design established the feedback loop: send, observe an ACK, update an estimate, and use the estimate to decide when silence justifies another send. Yet a feedback loop also needs a rule for rejecting contaminated observations. Reusing every apparent round trip after a retransmission allows the timer to learn from an interval whose beginning is unknown.
The failure can reinforce itself. A timeout that becomes too short creates premature retransmissions. Those retransmissions create more ambiguous acknowledgments. If their intervals are fed back into the estimator, the sender can manufacture evidence for an increasingly aggressive clock. A value produced by the algorithm then changes the conditions under which the next value is observed.
RFC 1122 stated that the RFC 793 calculation was inadequate and required host TCP implementations to use both Jacobson’s algorithm and Karn’s algorithm. Jacobson’s contribution incorporated variation into the timer estimate. Karn’s contribution governed which observations were eligible to enter that estimate.
Karn’s rule made ignorance operational
The rule is severe because the ambiguity is structural: do not take an RTT sample from a retransmitted segment. After sequence space has been sent more than once, a conventional cumulative ACK does not reveal the transmission instance that triggered it. Software cannot restore a missing identifier by choosing the more convenient timestamp.
Refusing the sample is not the same as ignoring the ACK. The sender still advances its acknowledgment state, frees acknowledged data and continues the connection. It withholds only one downstream use: the ACK cannot revise the smoothed RTT and retransmission timeout as though its causal history were known.
This is a durable design pattern. An observation may be valid for one decision and invalid for another. A registry record may establish a current entry without proving the history that created it. A route announcement may show reachability without proving authorization. Here, an ACK establishes cumulative reception without proving a round-trip pairing.
The cost is deliberate. During a run of retransmissions, the sender can lose fresh RTT information just when the path may be changing. Karn’s answer was not to invent precision. It paired sample refusal with conservative timer behavior until clean evidence returned.
Backoff carried the uncertainty forward
RFC 1122 also required exponential backoff for successive retransmission timeouts. RFC 2988 and its successor, RFC 6298, codified the timer mechanics: maintain a smoothed RTT and RTT variation, derive RTO, and double RTO when the timer expires.
Backoff is sometimes described only as congestion restraint. In this history it performs another precise job. When retransmission has made the latest apparent round trip inadmissible, the sender cannot use that reply to claim the path is fast. The backed-off timer remains the operative caution rather than collapsing on ambiguous evidence.
RFC 6298 says the backed-off value can collapse again after a new RTT measurement becomes available. That measurement ordinarily requires new data to be sent and acknowledged without retransmission. The recovery point is therefore evidentiary, not merely chronological. Time passing does not cleanse the old sample; a later unambiguous send-and-ACK pair supplies a new one.
The standard permits conservative choices beyond its floor but forbids a sender from being more aggressive than the specified algorithm. This asymmetry assigns the downside carefully. Waiting too long costs one connection latency. Retransmitting too quickly can add load to a path already withholding feedback.
An ACK never promised packet identity
The ambiguity follows from TCP’s abstraction, not from a deficient ACK format accidentally missing a debug field. TCP numbers positions in a byte stream. A cumulative acknowledgment names the next byte expected, not an immutable datagram object that traversed the network.
Retransmissions may cover the same sequence numbers with different segment boundaries. Receivers may delay acknowledgments, acknowledge several segments together, and discard duplicate bytes. The sender learns that the stream frontier advanced. It is not entitled to a receiver-side account of which wire instance earned credit.
Adding such attribution to every acknowledgment would also shift state and policy to the receiver. The transport instead kept the common ACK meaning small and put sample admissibility at the measuring sender. The sender knows whether it retransmitted; therefore it can identify the interval in which ordinary ACK causality is ambiguous.
This allocation matters operationally. Packet-capture tooling may display a particular ACK adjacent to a particular retransmission and tempt an analyst to pair them. Temporal proximity is a hypothesis, not protocol proof. Endpoint state, timestamp negotiation and the exact acknowledgment advance determine which inferences are supportable.
Timestamps added a scoped causal tag
TCP’s Timestamp option supplied the important exception. RFC 6298 permits RTT sampling of retransmitted data when timestamps remove the instance ambiguity. RFC 7323 explains the mechanism: transmitted segments carry a Timestamp Value, and returning traffic can echo a received value in Timestamp Echo Reply.
When an ACK echoes the value associated with the instance that reached the receiver, the sender can relate the reply to a particular transmission clock value. The missing causal label is no longer missing in the same way. Karn’s blanket exclusion can be disabled for that case.
But timestamp presence is not permission to accept every subtraction. RFC 7323 separates conveying timestamps from using them to update RTO. A returned echo should update the averaged RTT only when the segment advances the left edge of the send window. Delayed ACKs, sequence holes, reordered traffic and the rule for choosing which received timestamp to echo all affect the observation.
More measurements also change estimator memory. The RFC notes that the weighting constants in the RFC 6298 estimator assumed roughly one sample per RTT; taking a sample for every packet can discard path history too quickly unless the implementation preserves the intended time scale. Explicit data can resolve one ambiguity while creating a new sampling-policy decision.
The modern TCP standard kept the refusal
RFC 9293, the current base TCP specification, still requires the RFC 6298 computation, including Karn’s algorithm. It also retains exponential RTO backoff among the basic mechanisms used to avoid congestion-collapse behavior.
The persistence is notable because the rule does not make the protocol faster in the moment. It throws information away. Its value appears one decision later, when the sender avoids teaching its timer a confident falsehood.
That is different from saying every omitted sample improves performance. Long stretches without valid samples can leave an estimate stale. Timestamp support, newer loss-detection mechanisms and implementation choices can provide additional signals. The invariant is narrower: an algorithm must not treat causal ambiguity as measured delay merely because it needs a number.
The RFC chain also records institutional restraint. The base TCP specification delegates the detailed timer calculation to a focused standards-track document. The timer document identifies its relationship to congestion control without pretending RTO and congestion window are the same control. Each contract keeps authority over its own state.
What the reply establishes—and what it leaves open
An advancing ACK establishes that the peer’s cumulative receive state passed a sequence boundary. It can release send-buffer space and permit more data under flow and congestion controls. It may also end the retransmission episode for those bytes.
It does not by itself say that the original transmission arrived, that the retransmission arrived, that both arrived, or that the measured path delay equals either candidate interval. Nor does a valid RTT sample establish application completion, absence of queueing elsewhere, or a permanent path property.
Timestamps improve attribution but do not authenticate the remote application or promise synchronized wall clocks. Their RTT use relies on echoed connection-local values and elapsed differences, not on a globally trusted time of day. They also do not abolish retransmission, reordering or delayed acknowledgments.
The cited RFCs specify required algorithms and known reasoning. They do not measure the share of today’s connections using timestamps, the behavior of every stack, or the frequency of ambiguous episodes on production paths. Those questions need implementation and traffic evidence beyond the standards record.
A protocol can be strongest where it refuses to infer
Internet protocols are often celebrated for extracting knowledge from sparse signals. Karn’s algorithm is a history of refusing extraction. It recognizes that a reply can be genuine, useful and still unsuitable for the proposed calculation.
The policy joins three moves. First, preserve the ACK’s valid meaning: cumulative progress. Second, deny it an unsupported meaning: transmission-specific RTT after retransmission. Third, carry uncertainty into behavior through backoff until a clean observation becomes available.
This is not indecision. It is an executable boundary between evidence and desire. A system that must always emit a fresh estimate will eventually convert missing provenance into fabricated precision. TCP instead allowed its clock to remain conservative.
Karn’s legacy is therefore larger than one formula. The sender owns its measurement inputs, the receiver owns the acknowledgment frontier, and neither side is forced to make a claim that the wire event cannot support. The reply moved the stream forward. By declining to say which packet arrived, TCP kept that progress from corrupting its sense of time.
Sources and evidence limits
RFC 793 supplies the original adaptive retransmission setting. RFC 1122 records the inadequacy of the earlier calculation and requires Karn’s and Jacobson’s algorithms plus exponential backoff. RFC 2988 and RFC 6298 codify the RTO algorithm and the retransmission-sample exclusion. RFC 7323 describes timestamp-based disambiguation and its echo rules. RFC 9293 carries the requirement into modern TCP.
These are protocol specifications, not deployment surveys. The analysis concerns the authority of an RTT sample after retransmission. It does not attribute every timeout to congestion, declare timestamps universally enabled, rank present implementations, or claim that transport timing proves an application outcome.
Member Briefing
Deeper Profile Context
Sign in with the right membership level to unlock the full briefing and source notes.
Only for Strategic Circle
Strategic Circle
Open to all readers. Unlock profile briefings after joining and signing in.
Join Strategic CircleOnly for Leadership Alliance
Leadership Alliance
For qualified IP-asset owners and management; sign in to unlock alliance briefings.
Join Leadership Alliance
