第一次握手:client将标志位SYN置为1,表示要发起一个连接,随即产生一个值,seq =x,并将这个数据包发给server,client 随即进入SYN-SENT状态,等待server确认。
第二次握手:server接到数据包后,由标志位SYN=1知道client 请求建立连接,server将SYN和ACK都置为1,随即产生一个seq=y的值,同时ack=x+1表示已收到client 的连接请求,并将该数据包发给client已确认连接请求,server随即进入SYN-RCVD状态。
第三次握手:client 收到确认后,检查ACK是否为1,ack是否为x+1,如果正确则将标志位ACK置位1,seq=x+1,ack=y+1并将数据包发给server,server检查ACK,seq,ack的值是否正确,如果正确则成功建立连接,client和server进入ESTAB-LISHED 状态完成三次握手,随后就可以开始传输数据了。
三次握手的目的就是要确认client和server的发送和接收能力是否有问题,server要考察client的发送和接收能力,client 也要考察server的发送和接收能力。
如下图: