为什么TCP协议要设计成三次握手四次挥手?
什么是TCP协议?
TCP( Transmission control protocol )即传输控制协议,是一种面向连接、可靠的数据传输协议,它是为了在不可靠的互联网上提供可靠的端到端字节流而专门设计的一个传输协议。
面向连接:数据传输之前客户端和服务器端必须建立连接
可靠的:数据传输是有序的 要对数据进行校验
三次握手
目的:三次握手的设计是为了保证客户端和服务器端的可靠连接,TCP建立连接时必须要进行三次会话,也叫TCP三次握手,进行三次握手的目的是为了确认双方的接收能力和发送能力是否正常。
流程:
- 第一次握手:客户端向服务器发送一个SYN报文段,携带一个随机的初始序列号seq=x,并进入SYN_SENT状态,等待服务器的回复。
- 第二次握手:服务器收到SYN报文段后,回复一个SYN+ACK报文段,携带一个随机的初始序列号seq=y,以及对客户端序列号的确认号ack=x+1,并进入SYN_RCVD状态,等待客户端的回复。
- 第三次握手:客户端收到SYN+ACK报文段后,回复一个ACK报文段,携带对服务器序列号的确认号ack=y+1,并进入ESTABLISHED状态,表示连接建立成功。服务器收到ACK报文段后,也进入ESTABLISHED状态。
四次挥手
目的:四次挥手的目的是双方分别终止自己到对方的数据传送,并释放连接。
流程:
- 第一次挥手:当客户端没有数据要发送给服务器时,发送一个FIN报文段,携带一个序列号seq=u,并进入FIN_WAIT_1状态,表示客户端到服务器的数据传送结束。
- 第二次挥手:服务器收到FIN报文段后,回复一个ACK报文段,携带一个确认号ack=u+1,并进入CLOSE_WAIT状态,表示服务器已经收到客户端的结束信号。
- 第三次挥手:当服务器没有数据要发送给客户端时,发送一个FIN报文段,携带一个序列号seq=v,并进入LAST_ACK状态,表示服务器到客户端的数据传送结束。
- 第四次挥手:客户端收到FIN报文段后,回复一个ACK报文段,携带一个确认号ack=v+1,并进入TIME_WAIT状态,等待一段时间后确保服务器收到自己的确认信号。服务器收到ACK报文段后,进入CLOSED状态,表示连接释放成功。