rfc-visual
GitHub

RFC 9293 · August 2022 · W. Eddy

Transmission Control Protocol (TCP)

INTERNET STANDARDIETF stream
4 verified errata2 held for document update

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

100%

RFC 9293 §3.5 The "three-way handshake" is the procedure used to establish a connection.

  1. 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.5 2. SYN-SENT --> <SEQ=100><CTL=SYN> --> SYN-RECEIVED
  2. 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.5 3. ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED
  3. 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.5 4. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK> --> ESTABLISHED
  4. 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.5 5. 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

Text

Loading the RFC text…