TCP的三次握手和四次握手

TCP是面向连接的传输协议,在TCP通信过程中客户端和服务器之间会保留一个虚拟连接,为了建立这个虚拟连接,需要3次握手进行确认。连接结束的时候又需要4次握手进行确认。

三次握手

连接请求由客户端发起,3次握手的过程是这样的:

1,客户端向服务端申请建立连接,发送数据包SYN(syn=j)后,等待服务器的响应,此时客户机进入SYN_SEND状态。

2,服务器收到SYN数据包后,需向客户端响应数据包ACK(ack=j+1)和SYN(syn=k),此时服务器的状态为SYN_RECV。

3,客户端收到服务器响应的ACK+SYN数据包后,需要服务器回复 ACK(ack=k+1)数据包。服务器收到客户端的响应包ACK后,建立虚拟连接,此时服务器状态为 ESTABLISHED。

为什么需要3次握手呢?三次握手其实是客户端与服务器双方都在确认连接是否可用的过程,经过3次握手,客户端可服务器都认为链接是可用的。三次握手并不能保证网络连接不出问题,只是处于开始确认的阶段。

SYN:同步序列号(Synchronized sequence numbers)。

四次握手/四次挥手

关闭连接一般也有客户端发起,中间经过四次通信:

1,客户端向服务端发送数据包FIN(fin=m),请求关闭连接。

2,服务端收到FIN包后,发送响应包ACK(ack=m+1)。

3,服务端向客户端发送数据包 FIN(fin=n)。

4,客户端收到FIN后,向服务端发送响应包ACK(ack=n+1)。

为什么需要四次?为什么服务端不把ACK和FIN一块发送?因为客户端在发送完请求后,就可以向服务端发送FIN,而服务端收到FIN的时候,可能还在传送数据,所以必须等到数据发送完成后,才向客户端发送FIN。