请详细解释下TCP连接的建立过程，用markdown表格形式展示。
user
```markdown
| 步骤 | 描述 | 客户端状态 | 服务器状态 |
|------|------|-------------|-------------|
| 1    | 客户端发送SYN包给服务器，请求建立连接 | SYN_SENT    | LISTEN      |
| 2    | 服务器收到SYN包后，发送SYN-ACK包给客户端，确认连接请求 | SYN_SENT    | SYN_RCVD    |
| 3    | 客户端收到SYN-ACK包后，发送ACK包给服务器，完成三次握手 | ESTABLISHED | SYN_RCVD    |
| 4    | 服务器收到ACK包后，连接建立完成 | ESTABLISHED | ESTABLISHED |
```
assistant