interview
interviewduck-java-backend
TCP的三次握手和四次挥手

面试鸭Java后端面试题, TCP 的三次握手和四次挥手

面试鸭Java后端面试题, TCP 的三次握手和四次挥手

QA

Step 1

Q:: TCP 三次握手的过程是怎样的?

A:: TCP 三次握手是为了建立可靠的连接。第一次握手:客户端发送 SYN 包(同步序列编号)到服务器,并进入 SYN_SENT 状态,等待服务器确认。第二次握手:服务器收到 SYN 包,必须确认客户的 SYN(发送 ACK 包),同时自己也发送一个 SYN 包,此时服务器进入 SYN_RECV 状态。第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK,此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。

Step 2

Q:: TCP 四次挥手的过程是怎样的?

A:: TCP 四次挥手是为了断开连接。第一次挥手:客户端发送一个 FIN 包,用来关闭客户端到服务器的数据传送,客户端进入 FIN_WAIT_1 状态。第二次挥手:服务器收到 FIN 包,发送一个 ACK 包给客户端,确认序号为收到序号+1(与 SYN 相同,一个 FIN 占用一个序号),服务器进入 CLOSE_WAIT 状态。第三次挥手:服务器发送一个 FIN 包,用来关闭服务器到客户端的数据传送,服务器进入 LAST_ACK 状态。第四次挥手:客户端收到服务器的 FIN 包,客户端进入 TIME_WAIT 状态,接着发送一个 ACK 包给服务器,服务器进入 CLOSED 状态,完成四次挥手。

Step 3

Q:: 为什么需要三次握手才能建立连接?

A:: 三次握手的目的是为了确认双方的接收和发送能力都是正常的,防止已失效的连接请求报文段突然又传送到了服务器,因而产生错误。第一次握手只能确认客户端发送数据到服务器的能力;第二次握手确认了服务器接收和发送数据到客户端的能力;第三次握手则确认了客户端接收数据的能力。

Step 4

Q:: 为什么需要四次挥手才能断开连接?

A:: 因为 TCP 是全双工的,意味着两方都需要分别关闭各自的数据传送通道。第一次挥手和第二次挥手关闭的是客户端到服务器的数据通道;第三次挥手和第四次挥手关闭的是服务器到客户端的数据通道。因此需要四次挥手来完全断开连接。

Step 5

Q:: TCP 为什么要设计 TIME_WAIT 状态?

A:: TIME_WAIT 状态的设计是为了确保 TCP 协议的全双工连接能够完全关闭。主要作用有两个:1. 防止旧数据包的重传影响新连接。2. 确保最后的 ACK 包能被正确接收,若服务器没有收到 ACK 包会重新发送 FIN 包。

用途

面试这个内容是为了考察候选人对网络基础知识的理解,尤其是 TCP 协议在数据传输过程中保证可靠性和顺序性的机制。在实际生产环境中,这些知识点在以下场景中会经常用到:`1. 网络编程,如编写客户端-服务器通信程序。2. 排查网络通信问题时需要了解 TCP 的工作原理。3. 优化网络性能,如减少延迟和提高吞吐量时需要深入理解 TCP 的机制。4.` 在分布式系统中确保节点间的可靠通信。\n

相关问题

🦆
TCP 与 UDP 的区别是什么?

TCP 是面向连接的,提供可靠的数据传输,有流量控制和拥塞控制,适用于对可靠性要求高的应用。UDP 是无连接的,不保证数据可靠性,没有流量控制和拥塞控制,适用于实时应用,如视频直播、在线游戏。

🦆
什么是 SYN 洪泛攻击,如何防御?

SYN 洪泛攻击是一种 DoS 攻击,通过发送大量的 SYN 包占用服务器资源,导致服务器无法处理正常请求。防御方法包括:1. 使用 SYN Cookie 技术,防止伪造的连接请求消耗资源。2. 调整服务器的半连接队列大小和超时时间。3. 使用防火墙或入侵检测系统限制异常流量。

🦆
TCP 如何进行流量控制?

TCP 通过滑动窗口机制进行流量控制。发送方根据接收方的窗口大小决定发送数据的数量,确保不会超过接收方的处理能力,防止网络拥塞。

🦆
TCP 如何进行拥塞控制?

TCP 拥塞控制主要通过慢启动、拥塞避免、快重传和快恢复四个机制来实现。慢启动通过逐步增加拥塞窗口,避免突然增加数据导致网络拥塞。拥塞避免通过线性增长拥塞窗口,平滑控制数据发送。快重传和快恢复在检测到丢包时快速减少数据发送速率,迅速恢复网络状态。

🦆
什么是 TCP 拥塞窗口 Congestion Window?

拥塞窗口是 TCP 拥塞控制中的一个关键参数,用于限制网络中传输的数据量。发送方根据拥塞窗口的大小决定发送的数据量,当网络拥塞时,拥塞窗口减小;当网络状况良好时,拥塞窗口增大。