- TCP三次握手
- 三次握手示意
服务器状态 | SYN | ACK | seq | ack | 客户端状态 | 传输方向 |
---|---|---|---|---|---|---|
SYN_SENT | 1 | NO | x | NO | LISTENING | -> |
SYN_SENT | 1 | 1 | y | x+1 | SYN_RCVD | <- |
ESTABLISHED | NO | 1 | x+1 | y+1 | SYN_RCVD | -> |
- 三次握手是为了保证服务器和客户端同时具备收发的能力和确认对方具备收发能力
- 如果只有两次握手,很可能出现脏连接:在断开连接后,假如有一个超时的连接请求,接收方就会创建连接
- TCP四次挥手
- 示意
服务器状态 | FIN | ACK | seq | ack | 客户端状态 | 传输方向 |
---|---|---|---|---|---|---|
ESTABLISHED | 1 | NO | x | NO | ESTABLISHED | -> |
FIN_WAIT_1 | NO | 1 | y | x+1 | CLOSE_WAIT | <- |
FIN_WAIT_2 | NO | 1 | y+i | x+1 | CLOSE_WAIT 单向传输数据 | <- |
FIN_WAIT_2 | 1 | 1 | z | x+1 | LAST_ACK | <- |
TIME_WAIT | NO | 1 | x+1 | z+1 | LAST_ACK | -> |
CLOSED | NO | NO | NO | NO | CLOSED |
- TIME_WAIT 等待时间为2MSL,这段时间确保客户端顺利关闭连接。如果客户端没有收到服务器第四次挥手的报文,会重发第三次FIN+ACK报文,如果服务器关闭,将收不到这个报文