首页 > 代码库 > TCP三次握手

TCP三次握手

TCP客户端要连接到TCP服务器,需要经过三个过程:

第一次握手:建立连接时,客户端发送syn包和一个随机序列号seq=x到服务器,并进入SYN_SEND状态,等待服务器进行确认。(syn,同 步序列编号)。

第二次握手:服务器收到syn包,必须确认客户的SYN,然后服务器发送一个ACK=1, SYN=1, seq=y的随机数和ack=x+1的确认数的包发送回去。

第三次握手:客户端收到服务器端的SYN+ACK包,然后向服务器端发送确认包 ack=y+1, seq=x+1, ACK=1,客户端和服务器端进入ESTABLISHED状态,完成三次握手。

具体图示如下:

技术分享

 

需要三次握手的原因:客户端发送第一次握手报文给服务器,此报文在网络的某个节点滞留时间比较长,长到客户端通过再次握手已经和服务器建立连接并且通信结束断开连接了,如果服务器只接收到第一次握手报文就和客户端建立连接,前面描述的情况服务器就会以为有客户端和它建立连接,实则不然。

TCP三次握手