三次握手
首先服务器一直处于监听状态,等待客户端的链接。
第一次握手
客户端的TCP客户进程首先创建传输控制模块TCB,在TCP连接时,向服务端发送连接请求报文段SYN,此时TCP客户进程进入SYN-SEND(同步已发送)状态。
第二次握手
服务端收到连接请求报文段后,向客户端发送确认。发送SYN和ACK,此时TCP服务器进程进入SYN-RCVD(同步收到)状态。
第三次握手
TCP客户进程收到服务端的确认后,还要向服务端发出确认,此时客户端进入ESTABLISHED(已建立连接)状态。服务端收到确认后也进入ESTABLISHED状态。
为什么要三次握手?
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。
四次挥手
第一次挥手
客户进程向服务端发出FIN(连接释放报文段),此时客户端进入FIN-WAIT-1(终止等待1)
第二次挥手
服务端收到连接释放报文段后发出确认,此时服务器进入CLOSED-WAIT(关闭等待)状态。此时TCP连接进入半关闭状态,即客户端已经没有数据发送了,但是服务端发送数据,客户端还是接收的。
第三次挥手
服务端发出连接释放报文段,此时服务端进入最后确认状态,等待客户端的确认。
第四次挥手
客户端收到服务端的连接释放报文段后,发出确认,然后进入TIME-WAIT(时间等待)状态,此时TCP连接还未释放,必须等待2MSL(最长报文段寿命),客户端才能关闭。
为什么要等待2MSL?
原因有两个
-
为了保证客服端发送的最后一个ACK报文段能够到达服务端
-
防止已失效的连接请求报文段出现在本连接中