第一次握手: 客户端将标志位SYN置为1,随机产生一个值序列号seq=x,并将该数据包发送给服务端,客户端 进入SYN_SEND状态,等待服务端确认。
第二次握手: 服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN和 ACK都置为1,然后ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手: 客户端收到确认后检查,如果正确则将标志位ACK为1,ack=y+1,并将该数据包发送给服务端,此包发送完毕,服务端进行检查如果正确则连接建立成功,客户端和服务器进入ESTABLISHED状态,完成三次握手,随后客户端和服务端之间可以开始传输 数据了。
下图助于理解:
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据,理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
TCP四次挥手过程点这里