TCP是一种面向连接的协议。连接建立和连接关闭都需要保证可靠,所以要连接和关闭分别要经过三次握手和四次挥手过程。
连接建立
连接建立要经过三次握手
- 首先,客户端发送连接请求报文
- 然后,服务器端接收这次请求,发送给客户端ACK表示确认,并为这次连接分配资源。
- 客户端收到ACK报文后,也向服务器发送ACK,并开始分配资源,准备发送消息。
连接关闭
关闭连接要经过四次挥手过程
- 首先,客户端发送完消息后,发送FIN报文,表示客户端已经发送完毕
- 然后,服务器收到FIN后,向客户端发送一个ACK,表示收到了之前的FIN。但是服务器此时有可能还有消息没法送给客户端,所以此时不一定发送FIN。
- 服务器发送完所有消息后,向客户端发送FIN,表示也已经发送完毕。
- 客户端收到FIN,发送给服务器ACK,表示已经收到FIN。
服务器收到ACK之后,就可以关闭连接了。客户端等待2MSL之后,也关闭连接了。