计算机网络面试题, 说说 TCP 的四次挥手?
计算机网络面试题, 说说 TCP 的四次挥手?
QA
Step 1
Q:: 什么是TCP的四次挥手?
A:: TCP的四次挥手是指在TCP连接关闭时,客户端和服务器之间需要进行的四个步骤来确保连接的完全关闭。具体过程如下:
1.
第一次挥手(FIN): 客户端发送一个FIN(Finish)标志,表示它已经完成数据发送,准备关闭连接。
2.
第二次挥手(ACK): 服务器收到FIN后,发送一个ACK(Acknowledgment)确认消息,表示收到了客户端的FIN请求。
3.
第三次挥手(FIN): 服务器发送自己的FIN,表示它也完成了数据发送,准备关闭连接。
4.
第四次挥手(ACK): 客户端收到服务器的FIN后,再次发送ACK确认,表示已经收到服务器的FIN请求。此时,客户端进入TIME_WAIT状态,确保服务器能够收到ACK,之后才完全关闭连接。
Step 2
Q:: 为什么TCP关闭连接需要四次挥手而不是三次?
A:: 四次挥手比三次挥手多了一次,因为TCP是全双工的协议,连接的两端都需要独立地关闭各自的发送方向。客户端和服务器双方都需要通过发送FIN来表示自己已经完成数据发送,并且通过ACK来确认对方已经完成数据接收,因此需要四次挥手才能完全关闭连接。
Step 3
Q:: TCP四次挥手中,为什么客户端需要进入TIME_WAIT状态?
A:: 客户端在发送最后一个ACK后,会进入TIME_WAIT状态,并保持一段时间(通常是2
倍的MSL,即最大报文生存时间)。这是为了确保服务器接收到ACK。如果服务器未收到ACK,它会重新发送FIN,客户端可以在TIME_WAIT状态期间再次发送ACK,确保连接的彻底关闭。TIME_WAIT还防止了旧的重复数据包干扰后续的新连接。
Step 4
Q:: TCP四次挥手的过程中可能会出现什么问题?
A:: 可能出现的问题包括:
1.
TIME_WAIT状态的资源占用: 如果服务器大量并发连接关闭,可能会导致客户端大量连接处于TIME_WAIT状态,占用系统资源。
2.
RST(重置)攻击: 恶意用户可能会伪造RST包,强制关闭连接,导致连接异常中断。
3.
丢包重传: 在不稳定的网络环境中,挥手过程中可能出现丢包,导致连接关闭不完全。