计算机网络面试题, 为什么要有 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 后,等待应用程序处理关闭请求的状态。