sequenceDiagram
    participant Client
    participant Server

    Note over Server: CLOSED
    Note over Client: CLOSED
    Note over Server: LISTEN

    Client->>Server: SYN (seq=x)
    Note over Client: SYN_SENT

    Server-->>Client: SYN-ACK (seq=y, ack=x+1)
    Note over Server: SYN_RCVD

    Client->>Server: ACK (seq=x+1, ack=y+1)
    Note over Client: ESTABLISHED
    Note over Server: ESTABLISHED

握手过程

  1. 客户端向服务器发送 SYN 包(包中指定自己的初始 seq),进入 SYN_SENT 状态;
  2. 服务端收到 SYN 包,回复自己的 SYN 包(包中包含自己的初始 seq 和对客户端 SYN 包的 ACK),进入 SYN_RCVD 状态;
  3. 客服端收到 SYN+ACK 回复 ACK,自己进入 ESTABLISHED 状态,同时这个包是可以带要发送的数据的;
  4. 服务器收到 ACK,进入 ESTABLISHED 状态,如果包有数据,则开始接收数据。