- 第一次握手:客户端发送syn包(seq=x)到服务器,等待服务器确认。
- 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
- 以下是TCP连接的一些常见状态及其含义:
状态 | 描述 |
---|---|
LISTEN | 服务器在等待进入呼叫 |
SYN_RECV | 一个连接请求已经到达,等待确认 |
SYN_SENT | 应用已经开始,打开一个连接 |
ESTABLISHED | 正常数据传输状态 |
FIN_WAIT1 | 应用说它已经完成 |
FIN_WAIT2 | 另一边已同意释放 |
ITMED_WAIT | 等待所有分组死掉 |
CLOSE | 两边同时尝试关闭 |
LAST_ACK | 等待所有分组死掉 |
- 第一次挥手:客户端发送一个FIN报文,表示客户端已经没有数据要发送了,但是还可以接收数据。然后客户端进入FIN_WAIT_1状态。
- 第二次挥手:服务器收到FIN报文后,发送一个ACK报文作为响应,表示收到了客户端的FIN报文。此时服务器进入CLOSE_WAIT状态。
- 第三次挥手:服务器处理完数据后,也发送一个FIN报文给客户端,表示服务器也没有数据要发送了。此时服务器进入LAST_ACK状态。
- 第四次挥手:客户端收到服务器的FIN报文后,发送一个ACK报文作为确认,然后客户端进入TIME_WAIT状态。等待2MSL时间后,客户端进入CLOSED状态,连接完全关闭。服务器收到ACK报文后立即进入CLOSED状态。