RFC 9293 · August 2022 · W. Eddy
Transmission Control Protocol (TCP)
Index fetched 2026-10-19 from rfc-editor.org
How it works
Built by hand from RFC 9293. Every arrow, step and field cites the RFC sentence it comes from, and an automated test checks each quote against the RFC text. Provisional: not yet reviewed by a second engineer. Help verify this visual
RFC 9293 §3.5 The "three-way handshake" is the procedure used to establish a connection.
1. A → B: SYN seq=100
A asks to open a connection and picks 100 as its starting sequence number.
A: SYN-SENT · B: SYN-RECEIVED
RFC 9293 §3.52. SYN-SENT --> <SEQ=100><CTL=SYN> --> SYN-RECEIVED
2. B → A: SYN,ACK seq=300 ack=101
B sends its own SYN (starting at 300) and acknowledges A's SYN: ACK=101 means "next I expect 101". The SYN used up sequence number 100.
A: ESTABLISHED · B: SYN-RECEIVED
RFC 9293 §3.53. ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED
3. A → B: ACK seq=101 ack=301
A acknowledges B's SYN. Both sides are now ESTABLISHED.
A: ESTABLISHED · B: ESTABLISHED
RFC 9293 §3.54. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK> --> ESTABLISHED
4. A → B: ACK + data seq=101 ack=301
A sends data. SEQ is still 101: a bare ACK does not use sequence space.
A: ESTABLISHED · B: ESTABLISHED
RFC 9293 §3.55. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK><DATA> --> ESTABLISHED
Not shown: Retransmission, windows and congestion control; Urgent data and the PUSH flag; Sequence-number acceptability checks (§3.10.7.4, first step); User timeout, which closes a connection from any state (§3.10.8).
Lineage
Obsoletes (7)
- RFC 6691 — TCP Options and Maximum Segment Size (MSS)
- RFC 6528 — Defending against Sequence Number Attacks
- RFC 6429 — TCP Sender Clarification for Persist Condition
- RFC 6093 — On the Implementation of the TCP Urgent Mechanism
- RFC 2873 — TCP Processing of the IPv4 Precedence Field
- RFC 879 — The TCP Maximum Segment Size and Related Topics
- RFC 793 — Transmission Control Protocol
Text
Loading the RFC text…