- 建立连接——三次握手
- 客户端发送syn标志包给服务端,表示希望建立连接。 - 服务端收到消息,发送syn和ack标志包给客户端,ack标志包表示确认建立连接请求,syn包表示希望与客户端建立连接。 - 客户端收到消息后,发送ack标志包给服务端,表示确认建立连接请求。
- 断开连接——四次挥手
- 客户端发送fin包给服务端,表示希望断开连接。 - 服务端收到fin包,由于需要确保数据全部发送完毕,所以不能立刻发送fin包给客户端,而是先发送ack包回应客户端的fin请求。 - 客户端收到服务端的ack包,开始等待服务端的fin包。 - 服务端确认数据发送完毕后,发送fin包给客户端,表示希望断开连接。 - 客户端发送ack包回应服务端的fin包。 - 客户端还需等待一段时间,如果服务端没有再次发送fin包过来,则认为服务端收到了ack包(否则服务端会继续发fin包重试的),那么可以断开连接。