1.首先服务端会会打开监听状态,从CLOSED状态转换为LISTEN状态(被动打开)。
2.第一次握手:客户端开始主动连接,发送报文段,从CLOSED状态转换为SYN-SENT状态(主动打开)。
其中SYN(同步序列号)表示SYN标志位为1,表示这是一个同步报文。seq=ISN(c)(c表示客户端)表示32位序列号seq被设置为初始序列号(Initial Sequence Number,ISN)。
3.第二次握手:服务端确认客户端的连接请求,向客户端发送自己的同步报文,状态从LISTEN转换为SYN-RCVD状态。
其中SYN和ACK(确认号)标志位都为1,表示这是一个同步报文且也是一个确认报文。seq=ISN(s)(s表示服务端),ack=ISN(c)+1表示服务端已经收到客户端的SYN报文。
4.第三次握手:客户端确认服务端的SYN报文后,完成连接建立,为了确认向服务端发送ACK报文。客户端状态变成ESTABLISHED,同时服务端也进入到ESTABLISHED状态。
其中ACK标志位为1,seq=ISN(c)+1表示客户端已经收到了服务器的 SYN 报文,并且下一个要发送的字节的序列号是 ISN(c) + 1,ack=ISN(s)+1表示客户端已经收到了服务端的SYN报文,并且期望收到的下一个字节的序列号是ISN(s)+1。