建立连接
TCP是通过三次握手建立连接的,其过程如下:
1. 客户端向服务器发送一个SYN报文段,该报文段不包含数据,SYN标志被置为1,同时指定源端口、目的端口、以及初始序列号(Client_ISN)
2. 服务器收到客户端的SYN报文段后,在服务端为该连接分配TCP缓存及相关变量,然后服务器向客户端回发一个SYN报文段(SYNACK),该报文段包含服务端指定的初始序列号(Server_ISN),同时该报文段的确认序列号(ACK)被置为 Client_ISN+1
3. 客户端收到服务端发送过来的SYNACK报文段之后,客户端为该连接分配缓存及相关变量,然后向服务器发送一个ACK报文段,该报文段的ACK为Server_ISN+1,且SYN标志被为0(前两个报文段的SYN标志为1)
终止连接
TCP是全双工的协议,因此每个方向必须单独关闭,终止一个连接一共需要4次握手。当一方完成它的数据发送便向对方发送一个FIN来终止该方向的连接,当另一方收到这个信号后,便通知应用层另一端已经终止该方向的数据传送,同时自动回送一个ACK(ACK_Number = FIN_Number + 1);但此时反方向的数据传送依然可以继续进行,当需要终止反方向的数据发送时,也需要重复上述过程,其过程如下图所示:
TCP的状态变迁图