interview
backend-classic
简述 TCP 三次握手四次挥手的流程为什么需要三次握手为什么需要四次挥手

后端经典面试题合集, 简述 TCP 三次握手,四次挥手的流程?为什么需要三次握手?为什么需要四次挥手?

后端经典面试题合集, 简述 TCP 三次握手,四次挥手的流程?为什么需要三次握手?为什么需要四次挥手?

QA

Step 1

Q:: 简述 TCP 三次握手的流程?

A:: TCP 三次握手是建立连接的过程,分为三个步骤:1) 客户端向服务器发送一个 SYN 报文段,请求建立连接,进入 SYN_SENT 状态;2) 服务器收到 SYN 后,回应一个 SYN + ACK 报文段,并进入 SYN_RCVD 状态;3) 客户端收到 SYN + ACK 后,发送一个 ACK 报文段给服务器,服务器收到 ACK 后进入 ESTABLISHED 状态,连接建立完成。

Step 2

Q:: 简述 TCP 四次挥手的流程?

A:: TCP 四次挥手是关闭连接的过程,分为四个步骤:1) 客户端向服务器发送 FIN 报文段,请求关闭连接,进入 FIN_WAIT_1 状态;2) 服务器收到 FIN 后,发送 ACK 报文段,并进入 CLOSE_WAIT 状态;3) 客户端收到 ACK 后,进入 FIN_WAIT_2 状态,等待服务器发送 FIN 报文段;4) 服务器发送 FIN 报文段并进入 LAST_ACK 状态,客户端收到 FIN 后,发送 ACK 报文段并进入 TIME_WAIT 状态,等待 2MSL 时间后进入 CLOSED 状态,连接关闭。

Step 3

Q:: 为什么 TCP 连接需要三次握手?

A:: TCP 连接需要三次握手是为了确保双方都具备发送和接收数据的能力。第一次握手是客户端发送 SYN,表示自己有能力发送数据;第二次握手是服务器回复 SYN+ACK,表示自己也有能力接收和发送数据;第三次握手是客户端发送 ACK,确认服务器接收到数据,并确保通信通道的双向性,避免出现“已失效的连接请求报文”导致错误。

Step 4

Q:: 为什么 TCP 连接关闭需要四次挥手?

A:: TCP 连接关闭需要四次挥手是因为 TCP 是全双工通信的协议,双方都需要单独关闭发送和接收通道。第一次挥手(FIN)是由主动关闭方发起的,表示不再发送数据但仍可接收数据。第二次挥手(ACK)是被动关闭方的确认。第三次挥手(FIN)是被动关闭方发起的,表示不再接收数据。第四次挥手(ACK)是主动关闭方确认关闭。

用途

面试中考察 TCP 三次握手和四次挥手是为了了解候选人对网络通信的基本原理是否掌握,尤其是在实际开发中,网络协议的正确实现和理解对于排查网络故障、优化性能和安全性至关重要。在生产环境中,特别是在涉及到高并发、大规模网络服务时,了解 TCP 握手和挥手的过程可以帮助开发人员理解连接建立和断开的成本,以及如何优化连接管理。\n

相关问题

🦆
TCP 和 UDP 的区别是什么?

TCP 是面向连接的、可靠的传输协议,提供流控制和拥塞控制,保证数据有序且无差错的传输。UDP 是无连接的、不可靠的传输协议,不保证数据的有序性和完整性,但具有较低的延迟和开销,适用于对实时性要求较高的场景,如视频流和在线游戏。

🦆
TCP 如何实现可靠传输?

TCP 通过序列号、确认应答(ACK)、重传机制、滑动窗口和拥塞控制等机制来实现可靠传输。序列号用于标识数据包的顺序,ACK 确认接收到的数据,超时未收到 ACK 的数据包会重传。滑动窗口控制流量,防止接收方缓存溢出,而拥塞控制通过调节发送速率来防止网络拥塞。

🦆
TCP 的 TIME_WAIT 状态有什么作用?

TCP 的 TIME_WAIT 状态确保连接的正确关闭,防止已失效的报文段被误认为是新连接的数据。它还允许被动关闭方在可能的情况下,确保所有数据都已经被正确接收。TIME_WAIT 的持续时间通常是 2 倍的最大报文生存时间(2MSL)。

🦆
TCP 中的流量控制和拥塞控制有什么区别?

流量控制是针对发送方和接收方之间的控制机制,主要防止接收方缓存溢出,采用滑动窗口机制。拥塞控制是针对整个网络的控制机制,防止网络出现拥塞,主要通过慢启动、拥塞避免、快重传和快恢复等算法来调节发送速率。

🦆
什么是 TCP 粘包与拆包问题,如何解决?

TCP 粘包与拆包问题是由于 TCP 是流式协议,多个小数据包可能被合并成一个大包(粘包),或者一个大数据包可能被拆分为多个小包(拆包)。解决方法有:在应用层协议中添加消息边界(如使用固定长度消息或添加特殊分隔符),或者使用消息头部记录数据长度。