TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,其在建立连接和断开连接时分别采用了“三次握手”和“四次挥手”的过程,确保了通信的可靠性和避免资源浪费。
**三次握手**
三次握手的目的是为了防止已经失效的连接请求报文突然又到达服务端,导致服务端误认为这是一个新的连接请求。具体过程如下:
1. 第一次握手:客户端(A)向服务器(B)发送一个SYN(同步序列编号)报文段,其中包含客户端的初始序列号。此时,客户端进入SYN_SENT状态。
2. 第二次握手:服务器收到客户端的SYN报文段后,需要对这个请求进行确认,于是返回一个SYN+ACK报文段,也包含自己的序列号和确认号,确认号是客户端序列号加1,服务器进入SYN_RECEIVED状态。
3. 第三次握手:客户端收到服务器的SYN+ACK报文后,再发送一个ACK(确认)报文段,确认号是服务器的序列号加1,至此,客户端进入ESTABLISHED状态。当服务器收到这个确认后,也进入ESTABLISHED状态,此时,双方已建立起了连接。
三次握手的目的是确保双方都具备接收和发送能力,并且都已知对方的序列号,从而保证了连接的可靠性。
**四次挥手**
四次挥手是为了释放已经建立的连接,避免资源长时间占用。挥手过程如下:
1. 第一次挥手:主动关闭方(A)发送一个FIN(结束)报文,告知对方自己将停止数据传输。A进入FIN_WAIT_1状态。
2. 第二次挥手:被动关闭方(B)收到FIN后,发送一个ACK报文作为响应,确认号为A的序列号加1,表示已收到A的关闭请求。B进入CLOSE_WAIT状态。
3. 第三次挥手:B若无数据需要发送,直接发送FIN报文给A;若有未发送的数据,发送完毕后再发送FIN报文。A收到后,发送ACK报文作为响应,确认号为B的序列号加1,A进入LAST_ACK状态。
4. 第四次挥手:B收到A的ACK报文后,进入TIME_WAIT状态,等待足够的时间以确保B发送的最后一个ACK报文段被A接收到。如果A没有收到,会重新发送ACK,B再次接收到后才彻底关闭连接。A在收到B的FIN报文后,直接进入CLOSED状态,完成关闭。
四次挥手的原因在于TCP是全双工的,因此每个方向上的关闭都需要独立进行。而且,由于网络延迟等原因,A可能在收到B的FIN之前就已经发送了自己的FIN,因此需要四次交互来确保双方都完成了关闭。
通过三次握手和四次挥手,TCP确保了连接的建立和断开是可靠的,防止了因网络延迟或旧数据报文的误传而导致的问题,保证了通信的稳定性和效率。理解这些基本概念对于理解和解决网络通信中的问题至关重要。
- 1
- 2
前往页