Interview AiBoxInterview AiBox 实时 AI 助手,让你自信应答每一场面试
请解释TCP三次握手的过程。
题型摘要
TCP三次握手是建立可靠网络连接的关键过程,通过SYN、SYN+ACK和ACK三个数据包的交换,确保客户端和服务端都具备收发能力并同步序列号。第一次握手客户端发送SYN包并进入SYN_SENT状态;第二次握手服务端回复SYN+ACK包并进入SYN_RCVD状态;第三次握手客户端发送ACK包,双方都进入ESTABLISHED状态,连接建立完成。三次握手而非两次或四次的设计是为了在保证可靠性的同时避免不必要的延迟和潜在问题。
TCP三次握手详解
TCP协议简介
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP协议中,数据传输之前,必须先建立连接,而三次握手就是建立连接的过程。
三次握手的目的
三次握手的主要目的是:
- 确保客户端和服务端都具备发送和接收能力
- 同步双方的序列号(Sequence Number)
- 初始化TCP连接的一些参数,如窗口大小等
三次握手详细过程
三次握手是指建立一个TCP连接时,客户端和服务端总共需要发送三个数据包。具体过程如下:
1. 第一次握手(SYN)
客户端向服务端发送一个SYN(Synchronize Sequence Numbers)包,其中包含客户端的初始序列号(ISN,Initial Sequence Number)。此时客户端进入SYN_SENT状态。
- 标志位:SYN=1
- 序列号:seq=x(x为客户端的初始序列号)
- 确认号:ack=0(不包含确认信息)
2. 第二次握手(SYN+ACK)
服务端收到客户端的SYN包后,会回复一个SYN+ACK包,其中包含服务端的初始序列号以及对客户端序列号的确认(ACK=客户端的ISN+1)。此时服务端进入SYN_RCVD状态。
- 标志位:SYN=1, ACK=1
- 序列号:seq=y(y为服务端的初始序列号)
- 确认号:ack=x+1(确认客户端的序列号)
3. 第三次握手(ACK)
客户端收到服务端的SYN+ACK包后,会发送一个ACK包,其中包含对服务端序列号的确认(ACK=服务端的ISN+1)。此时客户端进入ESTABLISHED状态。服务端收到这个ACK包后,也进入ESTABLISHED状态,连接建立完成。
- 标志位:ACK=1
- 序列号:seq=x+1(客户端的下一个序列号)
- 确认号:ack=y+1(确认服务端的序列号)
三次握手的状态变化
在三次握手过程中,客户端和服务端的状态变化如下:
客户端状态变化
CLOSED → SYN_SENT → ESTABLISHED
服务端状态变化
CLOSED → LISTEN → SYN_RCVD → ESTABLISHED
为什么不是两次或四次握手
为什么不是两次握手
- 无法确认客户端的接收能力:服务端无法确定客户端是否能正常接收数据
- 可能导致历史连接的建立:如果客户端发送的SYN包因网络延迟而晚到,服务端可能会误认为是一个新的连接请求
- 无法同步双方的序列号:只有两次握手无法确保双方的序列号都得到确认
为什么不是四次握手
- 三次握手已经足够建立可靠的连接:三次握手已经能够确保双方的收发能力和序列号同步
- 增加不必要的延迟:四次握手会增加连接建立的时间
- 服务端的SYN和ACK可以合并为一个数据包发送:没有必须分开的理由
实际应用中的例子
当我们在浏览器中输入一个网址并访问时,浏览器会与服务器建立TCP连接,这个过程就是三次握手:
- 浏览器(客户端)向服务器发送一个SYN包,请求建立连接。
- 服务器收到SYN包后,回复一个SYN+ACK包,同意建立连接。
- 浏览器收到服务器的SYN+ACK包后,发送一个ACK包,确认连接建立。
- 连接建立后,浏览器就可以发送HTTP请求,获取网页内容。
总结
TCP三次握手是建立可靠网络连接的关键过程,通过SYN、SYN+ACK和ACK三个数据包的交换,确保客户端和服务端都具备收发能力并同步序列号。这一过程不仅验证了双方的通信能力,还为后续数据传输奠定了基础,是TCP协议实现可靠传输的重要机制。
参考资料
思维导图
Interview AiBoxInterview AiBox — 面试搭档
不只是准备,更是实时陪练
Interview AiBox 在面试过程中提供实时屏幕提示、AI 模拟面试和智能复盘,让你每一次回答都更有信心。
AI 助读
一键发送到常用 AI
TCP三次握手是建立可靠网络连接的关键过程,通过SYN、SYN+ACK和ACK三个数据包的交换,确保客户端和服务端都具备收发能力并同步序列号。第一次握手客户端发送SYN包并进入SYN_SENT状态;第二次握手服务端回复SYN+ACK包并进入SYN_RCVD状态;第三次握手客户端发送ACK包,双方都进入ESTABLISHED状态,连接建立完成。三次握手而非两次或四次的设计是为了在保证可靠性的同时避免不必要的延迟和潜在问题。
智能总结
深度解读
考点定位
思路启发
相关题目
请做一个自我介绍
自我介绍是面试的开场环节,应遵循"三段式"结构:基本信息与教育背景、核心能力与项目经验、求职动机与个人特质。重点突出与岗位相关的技能和经验,用具体数据和成果支撑,保持真诚自然的表达,控制在2-3分钟内。针对不同公司和岗位进行个性化调整,展示自己的匹配度和价值。
你有什么问题想问我们公司或团队的吗?
面试结尾提问是展示面试者思考深度和职业素养的重要机会。应提前准备3-5个有深度的问题,围绕团队技术、个人成长、公司文化和业务发展四个方面。好的问题能体现你对公司的了解、对职位的重视以及你的职业规划,避免问基础信息类问题。
请做一个自我介绍
自我介绍应遵循“我是谁-我为什么能胜任-我为什么想来”的逻辑框架。在“能胜任”部分,要通过STAR法则和量化结果来突出技术亮点和项目经验。在“想来”部分,要表达对华为技术、文化或业务的认同,展现匹配度和诚意。整个过程应简洁有力,控制在1-3分钟内。
请做一个自我介绍
自我介绍是面试的开场环节,应简洁明了地展示个人基本信息、教育背景、项目经验、技术特长、个人特质和求职动机。优秀的自我介绍应结构清晰、重点突出,与应聘岗位高度匹配,并表达出对公司的了解和加入的强烈意愿。
请做一个自我介绍,包括你的技术背景、项目经验和学习方向。
自我介绍应包含四个核心部分:个人背景、技术能力、项目经验和学习规划。技术背景需突出前端技术栈掌握程度;项目经验应选择代表性案例,说明技术实现和个人贡献;学习方向要体现职业规划与公司发展的契合度。整体表达应简洁有力,重点突出,时间控制在3-5分钟内。