interview
computer-networks
为什么要有 TIME_WAIT

计算机网络面试题, 为什么要有 TIME_WAIT?

计算机网络面试题, 为什么要有 TIME_WAIT?

QA

Step 1

Q:: 为什么要有 TIME_WAIT?

A:: TIME_WAIT 是 TCP 协议在四次挥手过程中的一个状态,它的主要目的是为了确保双方都能正确地关闭连接。具体来说,它有两个主要功能:1) 防止旧数据包的干扰。在关闭连接后,可能还会有一些延迟的旧数据包在网络中传输。如果不等待足够长的时间直接关闭连接,这些旧包可能会被新连接误认为是有效数据包。2) 确保最终的 ACK 被正确接收。在连接关闭的最后一步中,主动关闭连接的一方发送一个 ACK 确认包给被动关闭的一方。如果被动关闭的一方没有收到这个 ACK,它会重新发送 FIN 包,主动关闭的一方在 TIME_WAIT 状态下还能重新发送 ACK,保证连接的可靠关闭。

Step 2

Q:: TIME_WAIT 状态一般持续多长时间?

A:: TIME_WAIT 状态通常持续的时间是 2 倍的最大段生存时间(2 * MSL,Maximum Segment Lifetime)。在实际应用中,这个时间通常被设置为 30 秒到 2 分钟之间。

Step 3

Q:: 如何优化 TIME_WAIT 状态带来的问题?

A:: 为了优化 TIME_WAIT 带来的资源占用问题,可以采用以下几种方法:1) 调整系统参数,如缩短 TIME_WAIT 的持续时间或增大可用端口的范围;2) 使用负载均衡器分发流量,以减少单台服务器的连接数;3) 如果是在高并发的系统中,可以使用 SO_REUSEADDR 选项来允许快速复用处于 TIME_WAIT 状态的端口。不过需要注意的是,这样做有可能带来安全风险。

Step 4

Q:: 什么是 TCP 四次挥手?

A:: TCP 四次挥手是指在 TCP 连接关闭时,双方需要通过四个步骤来完成连接的关闭过程:1) 客户端发送 FIN,表示不再发送数据,但仍可接收数据;2) 服务端收到 FIN 后,发送 ACK 表示确认,并继续发送数据;3) 当服务端的数据发送完毕后,发送 FIN 表示不再发送数据;4) 客户端收到 FIN 后,发送 ACK 确认,进入 TIME_WAIT 状态。

Step 5

Q:: TIME_WAIT 和 CLOSE_WAIT 有什么区别?

A:: TIME_WAIT 状态是指主动关闭连接的一方在发送了最后一个 ACK 之后,为了确保对方接收到 ACK,而进入的一种等待状态。而 CLOSE_WAIT 状态是指被动关闭连接的一方在接收到 FIN 后,等待应用程序处理关闭请求的状态。

用途

面试中会涉及 TIME_WAIT 状态的问题是因为它直接影响到服务器的性能和资源的使用。在高并发的生产环境中,服务器可能会同时处理大量的连接,如果 TIME_WAIT 状态的连接过多,会占用系统资源,导致可用端口耗尽,影响服务的稳定性。了解和优化 TIME_WAIT 的机制是保障服务器在高负载下正常运行的关键。\n

相关问题

🦆
TCP 握手过程是怎样的?

TCP 握手过程是建立 TCP 连接的步骤,通常称为三次握手。首先,客户端发送一个 SYN 包给服务器,请求建立连接。其次,服务器收到 SYN 后,回复一个 SYN-ACK 包,表示同意连接。最后,客户端收到 SYN-ACK 后,发送 ACK 包确认连接,至此连接建立成功。

🦆
为什么 TCP 需要三次握手而不是两次?

三次握手的目的是为了确保双方的收发能力都正常。第一次握手确认了客户端的发送和服务器的接收能力,第二次握手确认了服务器的发送和客户端的接收能力,第三次握手确认了客户端的接收和服务器的发送能力,从而保证连接的可靠性。如果只有两次握手,可能会造成“已失效的连接请求”被误认为是有效连接,从而出现数据传输错误。

🦆
什么是 SYN 洪泛攻击?

SYN 洪泛攻击是一种拒绝服务(DoS)攻击,它通过向服务器发送大量的 SYN 请求而不响应服务器的 SYN-ACK,使得服务器的半连接队列被填满,从而无法接受正常的连接请求。这种攻击利用了 TCP 三次握手过程中的设计缺陷,导致服务器资源耗尽。

🦆
如何防止 SYN 洪泛攻击?

防止 SYN 洪泛攻击的方法包括:1) 使用 SYN cookies 技术,在 TCP 握手过程中不为每个 SYN 请求分配资源;2) 增加半连接队列的大小;3) 启用 SYN proxy,将 SYN 请求转发给代理服务器处理;4) 配置防火墙限制单个 IP 地址的连接请求速率。