TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由互联网工程任务组(简称IETF)的RFC 793 [1]定义。TCP的连接建立和断开过程分别称为“三次握手”和“四次挥手”
1.三次握手(Connection Establishment)
TCP连接的建立采用“三次握手”流程,确保客户端和服务器之间的通信可靠。
第一次握手(SYN):
(1)客户端发送一个SYN(同步序列编号)报文段请求建立连接,并进入SYN_SEND状态。
第二次握手(SYN-ACK):
(2)服务器收到SYN报文段,回复一个SYN-ACK报文段,表示同意连接并携带自己的初始序列号。此时,服务器进入SYN_RCVD状态。
第三次握手(ACK):
(3)客户端收到SYN-ACK报文段后,发送一个ACK(确认)报文段,表示确认连接建立。此时,客户端进入ESTABLISHED状态。服务器在收到ACK报文段后也进入ESTABLISHED状态。
经过三次握手后,TCP连接建立成功,双方可以开始数据传输。
2.四次挥手(Connection Termination)
TCP连接的断开通过“四次挥手”流程来完成,确保双方都能正常关闭连接。
第一次挥手(FIN):
(1)主动关闭连接的一方(假设为客户端)发送一个FIN(结束)报文段,表示希望关闭连接,并进入FIN_WAIT_1状态。
第二次挥手(ACK):
(2)服务器收到FIN报文段后,发送一个ACK报文段作为确认,并进入CLOSE_WAIT状态。此时,客户端进入FIN_WAIT_2状态。
第三次挥手(FIN):
(3)服务器准备关闭连接时,发送一个FIN报文段,表示同意关闭连接,进入LAST_ACK状态。
第四次挥手(ACK):
(4)客户端收到服务器的FIN报文段后,发送一个ACK报文段确认,进入TIME_WAIT状态。服务器在收到ACK后进入CLOSED状态。客户端在等待一段时间后,也进入CLOSED状态。
在 TIME_WAIT 状态中,客户端会等待一段时间,这是为了确保服务器能够收到最后一个确认包,如果服务器没有收到,会重发 结束包,客户端在这段时间内还能够进行处理。
总结
三次握手确保连接的可靠性。
四次挥手确保连接的正常关闭,避免数据丢失。
这两种机制都是TCP协议设计中的重要特性,用以实现高可靠的数据传输。