Interview AiBox logo

Interview AiBox 实时 AI 助手,让你自信应答每一场面试

download免费下载
进阶local_fire_department7 次面试更新于 2025-09-05account_tree思维导图

请解释TCP协议中的三次握手和四次挥手过程。

lightbulb

题型摘要

TCP协议中的三次握手和四次挥手是TCP连接建立和断开的关键过程。三次握手通过SYN、SYN+ACK和ACK三个报文交换建立连接,确保双方都准备好进行数据传输并同步序列号。四次挥手通过FIN、ACK、FIN和ACK四个报文交换断开连接,确保双方都完成了数据传输并优雅地关闭连接。三次握手防止了已失效连接请求的建立,而四次挥手则允许半关闭状态,确保数据完整传输。TIME_WAIT状态确保最后一个ACK能够到达对方,并允许旧报文段在网络中消失。

TCP协议中的三次握手和四次挥手过程

TCP协议简介

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP通信中,数据的传输前需要先建立连接,传输结束后需要断开连接。这就是所谓的三次握手和四次挥手过程。

三次握手(建立连接)

三次握手是指在建立TCP连接时,客户端和服务器总共发送三个数据包以确认连接的建立。这个过程确保了双方都准备好进行数据传输。

三次握手的步骤

  1. 第一次握手(SYN):客户端向服务器发送一个SYN(Synchronize Sequence Numbers)报文,并指定初始序列号(ISN,Initial Sequence Number)。此时客户端进入SYN_SENT状态。

    • SYN报文段中不包含应用层数据,只包含TCP头部信息。
    • 报文段中的SYN标志位被设置为1,表示这是一个连接请求。
  2. 第二次握手(SYN+ACK):服务器收到客户端的SYN报文后,会发送一个SYN+ACK报文作为响应。

    • 服务器选择自己的初始序列号(ISN)。
    • 报文段中的SYN和ACK标志位都被设置为1。
    • 确认号(Acknowledgment Number)被设置为客户端的ISN+1,表示服务器已经收到了客户端的SYN报文。
    • 此时服务器进入SYN_RCVD状态。
  3. 第三次握手(ACK):客户端收到服务器的SYN+ACK报文后,会发送一个ACK报文作为确认。

    • 报文段中的ACK标志位被设置为1。
    • 确认号被设置为服务器的ISN+1,表示客户端已经收到了服务器的SYN报文。
    • 此时客户端进入ESTABLISHED状态,表示连接已经建立。
    • 服务器收到这个ACK报文后,也进入ESTABLISHED状态。

完成这三次握手后,TCP连接就成功建立,双方可以开始传输数据。

三次握手的目的

  • 确认双方的接收和发送能力正常:通过三次交换,双方都能确认对方的发送和接收能力是正常的。
  • 同步序列号:双方交换并确认初始序列号,为后续的数据传输做准备。
  • 协商资源:双方在握手过程中可以为连接分配必要的资源。

三次握手的状态转换

  • 客户端状态变化:CLOSED → SYN_SENT → ESTABLISHED
  • 服务器状态变化:CLOSED → LISTEN → SYN_RCVD → ESTABLISHED

四次挥手(断开连接)

四次挥手是指在断开TCP连接时,客户端和服务器总共发送四个数据包以确认连接的断开。这个过程确保了双方都完成了数据传输,并优雅地关闭连接。

四次挥手的步骤

  1. 第一次挥手(FIN):主动关闭方(假设为客户端)向被动关闭方(服务器)发送一个FIN(Finish)报文,表示客户端已经没有数据要发送了。

    • 报文段中的FIN标志位被设置为1。
    • 序列号为当前已发送数据的最后一个字节的序列号加1。
    • 此时客户端进入FIN_WAIT_1状态。
  2. 第二次挥手(ACK):服务器收到客户端的FIN报文后,发送一个ACK报文作为确认。

    • 报文段中的ACK标志位被设置为1。
    • 确认号为客户端的序列号加1。
    • 此时服务器进入CLOSE_WAIT状态,表示服务器已经收到了客户端的关闭请求,但可能还有数据要发送。
    • 客户端收到这个ACK报文后,进入FIN_WAIT_2状态,等待服务器发送关闭请求。
  3. 第三次挥手(FIN):服务器处理完所有待发送的数据后,向客户端发送一个FIN报文,表示服务器也已经没有数据要发送了。

    • 报文段中的FIN标志位被设置为1。
    • 序列号为当前已发送数据的最后一个字节的序列号加1。
    • 此时服务器进入LAST_ACK状态,等待客户端的确认。
  4. 第四次挥手(ACK):客户端收到服务器的FIN报文后,发送一个ACK报文作为确认。

    • 报文段中的ACK标志位被设置为1。
    • 确认号为服务器的序列号加1。
    • 此时客户端进入TIME_WAIT状态,等待一段时间(通常是2MSL,Maximum Segment Lifetime,最大报文段生存时间)后,才真正关闭连接,进入CLOSED状态。
    • 服务器收到这个ACK报文后,立即关闭连接,进入CLOSED状态。

完成这四次挥手后,TCP连接就完全断开。

四次挥手的目的

  • 确保数据完整传输:允许双方在关闭连接前完成所有未发送的数据。
  • 优雅关闭连接:通过四次交换,确保双方都同意关闭连接,避免数据丢失。
  • 处理半关闭状态:TCP允许半关闭状态,即一方关闭了发送通道,但仍可以接收数据。

四次挥手的状态转换

  • 主动关闭方(客户端)状态变化:ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED
  • 被动关闭方(服务器)状态变化:ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED

为什么是三次握手而不是两次?

如果只有两次握手,可能会出现以下问题:

  1. 已失效的连接请求报文:如果客户端发送了一个连接请求,但因为网络延迟导致该请求在网络中滞留,客户端超时后重新发送了一个新的连接请求并建立了连接。这时,如果滞留的旧连接请求到达服务器,服务器会误认为这是一个新的连接请求,并发送确认,从而建立一个不必要的连接,浪费资源。

  2. 无法确认双方的接收能力:两次握手只能确认客户端的发送能力和服务器的接收能力,但无法确认服务器的发送能力和客户端的接收能力。

三次握手可以解决这些问题,确保双方都准备好进行数据传输。

为什么是四次挥手而不是三次?

在TCP连接的断开过程中,被动关闭方(服务器)在收到主动关闭方(客户端)的FIN报文后,可能还有数据要发送。因此,服务器需要先发送ACK报文确认收到FIN报文,然后发送剩余的数据,最后再发送FIN报文表示自己也没有数据要发送了。这就导致了四次挥手。

如果将第二次和第三次挥手合并为一次,那么服务器在收到客户端的FIN报文后,必须立即发送FIN报文,无法发送剩余的数据,可能导致数据丢失。

TIME_WAIT状态的作用

在四次挥手的最后,主动关闭方会进入TIME_WAIT状态,等待一段时间(通常是2MSL)后才关闭连接。TIME_WAIT状态的作用有:

  1. 确保最后一个ACK能够到达被动关闭方:如果最后一个ACK丢失,被动关闭方会重新发送FIN报文,主动关闭方在TIME_WAIT状态下可以重新发送ACK。

  2. 允许旧的报文段在网络中消失:确保在网络中滞留的旧报文段已经消失,避免这些报文段被误认为是新连接的报文段。

三次握手和四次挥手的图示

--- title: TCP三次握手过程 --- sequenceDiagram participant Client participant Server Note over Client,Server: 三次握手建立连接 Client->>Server: SYN=1, seq=x Note left of Client: CLOSED -> SYN_SENT Server->>Client: SYN=1, ACK=1, seq=y, ack=x+1 Note right of Server: LISTEN -> SYN_RCVD Client->>Server: ACK=1, seq=x+1, ack=y+1 Note left of Client: SYN_SENT -> ESTABLISHED Note right of Server: SYN_RCVD -> ESTABLISHED Note over Client,Server: 连接建立完成
--- title: TCP四次挥手过程 --- sequenceDiagram participant Client participant Server Note over Client,Server: 四次挥手断开连接 Client->>Server: FIN=1, seq=u Note left of Client: ESTABLISHED -> FIN_WAIT_1 Server->>Client: ACK=1, seq=v, ack=u+1 Note right of Server: ESTABLISHED -> CLOSE_WAIT Note left of Client: FIN_WAIT_1 -> FIN_WAIT_2 Server->>Client: FIN=1, ACK=1, seq=w, ack=u+1 Note right of Server: CLOSE_WAIT -> LAST_ACK Client->>Server: ACK=1, seq=u+1, ack=w+1 Note left of Client: FIN_WAIT_2 -> TIME_WAIT -> CLOSED Note right of Server: LAST_ACK -> CLOSED Note over Client,Server: 连接断开完成

总结

TCP协议中的三次握手和四次挥手是TCP连接建立和断开的重要过程:

  • 三次握手:用于建立TCP连接,确保双方都准备好进行数据传输,并同步初始序列号。
  • 四次挥手:用于断开TCP连接,确保双方都完成了数据传输,并优雅地关闭连接。

这两个过程是TCP协议可靠性的重要保障,理解它们对于网络编程和故障排查都非常重要。

参考文档

  1. RFC 793 - Transmission Control Protocol: https://tools.ietf.org/html/rfc793
  2. TCP/IP详解 卷1:协议 (W. Richard Stevens): https://book.douban.com/subject/1088054/
  3. 计算机网络(自顶向下方法): https://book.douban.com/subject/30284196/
  4. MDN Web Docs - HTTP: https://developer.mozilla.org/zh-CN/docs/Web/HTTP
  5. 图解TCP/IP: https://book.douban.com/subject/24737976/
account_tree

思维导图

Interview AiBox logo

Interview AiBox — 面试搭档

不只是准备,更是实时陪练

Interview AiBox 在面试过程中提供实时屏幕提示、AI 模拟面试和智能复盘,让你每一次回答都更有信心。

AI 助读

一键发送到常用 AI

TCP协议中的三次握手和四次挥手是TCP连接建立和断开的关键过程。三次握手通过SYN、SYN+ACK和ACK三个报文交换建立连接,确保双方都准备好进行数据传输并同步序列号。四次挥手通过FIN、ACK、FIN和ACK四个报文交换断开连接,确保双方都完成了数据传输并优雅地关闭连接。三次握手防止了已失效连接请求的建立,而四次挥手则允许半关闭状态,确保数据完整传输。TIME_WAIT状态确保最后一个ACK能够到达对方,并允许旧报文段在网络中消失。

智能总结

深度解读

考点定位

思路启发

auto_awesome

相关题目

请解释TCP三次握手的过程。

TCP三次握手是建立TCP连接的关键过程,通过三个步骤确保双方通信正常:1)客户端发送SYN包;2)服务器回复SYN-ACK包;3)客户端发送ACK包。这个过程同步了双方的序列号,验证了双方的收发能力,并避免了历史连接请求的干扰。三次握手完成后,双方进入ESTABLISHED状态,可以开始数据传输。

arrow_forward

当在浏览器中输入URL并回车后,从网络层面到页面渲染的完整流程是怎样的?

从输入URL到页面渲染的完整流程分为网络请求和页面渲染两大阶段。网络请求包括URL解析、DNS解析、TCP连接建立(三次握手)、HTTP请求发送、服务器处理、HTTP响应返回和TCP连接断开(四次挥手)。页面渲染包括HTML解析构建DOM树、CSS解析构建CSSOM树、JavaScript执行、渲染树构建、布局(回流)、绘制(重绘)和图层合成。整个流程涉及多个网络协议和浏览器内部机制,了解这些流程有助于前端性能优化。

arrow_forward

HTTP和HTTPS协议有什么区别?

HTTP和HTTPS的主要区别在于安全性。HTTP是超文本传输协议,以明文形式传输数据,不提供加密和身份验证,使用80端口。HTTPS是HTTP的安全版本,通过SSL/TLS协议提供数据加密、身份认证和数据完整性保护,使用443端口,需要SSL证书。HTTPS在安全性、信任度和SEO方面优于HTTP,但有一定的性能开销和证书成本。随着网络安全意识的提高,HTTPS已成为Web通信的标准。

arrow_forward

请比较TCP和UDP协议的区别,以及它们各自的适用场景

TCP和UDP是传输层的两种核心协议。TCP是面向连接的可靠协议,提供数据完整性、顺序保证和流量控制,但速度较慢、资源消耗多,适用于Web浏览、文件传输、电子邮件等要求数据可靠性的场景。UDP是无连接的不可靠协议,传输速度快、资源消耗少,但不保证数据顺序和可靠性,适用于实时音视频、在线游戏、DNS查询等对实时性要求高的场景。选择哪种协议取决于应用对可靠性和实时性的需求权衡。

arrow_forward

OSI七层网络模型分别包含哪七层?每层的主要功能是什么?

OSI七层网络模型从下到上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。物理层负责比特流传输;数据链路层处理帧和MAC地址;网络层负责IP寻址和路由;传输层提供端到端的数据传输(TCP/UDP);会话层管理应用程序间的会话;表示层处理数据格式和加密;应用层直接为用户应用程序提供网络服务。每一层都有特定的功能和协议,共同协作实现网络通信。

arrow_forward

阅读状态

阅读时长

8 分钟

阅读进度

7%

章节:15 · 已读:1

当前章节: TCP协议简介

最近更新:2025-09-05

本页目录

Interview AiBox logo

Interview AiBox

AI 面试实时助手

面试中屏幕实时显示参考回答,帮你打磨表达。

免费下载download

分享题目

复制链接,或一键分享到常用平台

外部分享