TCP三次握手与四次挥手详解

需积分: 0 0 下载量 187 浏览量 更新于2024-08-04 收藏 571KB DOCX 举报
"前端大厂最新面试题-handshakes_waves.docx" 在前端面试中,TCP的三次握手和四次挥手是网络协议部分的重要知识点,对于理解数据传输的可靠性和连接管理至关重要。 一、三次握手 三次握手是TCP(传输控制协议)建立连接时的必要步骤,目的是确保两端(客户端和服务器)都能正确地发送和接收数据,同时防止旧的数据包在网络中延迟后对新连接造成干扰。具体过程如下: 1. 第一次握手:客户端向服务器发送一个SYN(同步)报文,携带自身的初始化序列号ISN(c),客户端进入SYN_SENT状态,表示它准备好接收服务器的确认。 2. 第二次握手:服务器接收到SYN报文后,回应一个SYN+ACK报文,其ACK(确认)字段确认客户端的序列号ISN(c)+1,并携带服务器自己的初始化序列号ISN(s)。服务器进入SYN_RCVD状态,表示它可以发送数据了。 3. 第三次握手:客户端收到SYN+ACK报文后,发送一个ACK报文,确认服务器的序列号ISN(s)+1,客户端进入ESTABLISHED状态,表示连接已建立。当服务器接收到这个ACK,它也进入ESTABLISHED状态,连接完全建立。 三次握手确保了双方都有发送和接收的能力,并且避免了半开连接的问题。如果只有两次握手,服务器可能无法确认客户端是否收到了它的确认,可能导致资源的无效占用。 二、四次挥手 相比之下,关闭TCP连接需要四次挥手,因为连接的双向性使得每个方向上的关闭都需要独立进行。过程如下: 1. 第一次挥手:客户端发送FIN(结束)报文,请求关闭连接,进入FIN_WAIT1状态,不再发送数据,但可以接收数据。 2. 第二次挥手:服务器接收到FIN,回复一个ACK报文,确认客户端的序列号,进入CLOSE_WAIT状态,表示已收到关闭请求,但还有数据需要发送。 3. 第三次挥手:服务器完成数据发送后,发送FIN报文给客户端,请求关闭其到客户端的方向,进入LAST_ACK状态。 4. 第四次挥手:客户端收到服务器的FIN,发送ACK报文确认,进入TIME_WAIT状态,等待一段时间确保服务器收到确认后,连接彻底关闭。服务器收到ACK后,连接关闭。 四次挥手的原因在于,由于TCP连接是全双工的,所以每个方向上的关闭都需要单独的确认。此外,TIME_WAIT状态是为了防止旧的FIN报文在网络中延迟,导致误解为新的连接请求。 这些TCP连接管理机制对于保证网络通信的可靠性至关重要,是理解和解答前端面试题时必须掌握的基础知识。