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状态,连接建立完成。三次握手而非两次或四次的设计是为了在保证可靠性的同时避免不必要的延迟和潜在问题。
智能总结
深度解读
考点定位
思路启发
相关题目
TCP和UDP有什么区别?
TCP和UDP是两种核心的传输层协议,主要区别在于:TCP是面向连接的可靠传输协议,通过三次握手建立连接,提供确认重传、流量控制和拥塞控制机制,保证数据不丢失、不重复、按序到达,适用于文件传输、电子邮件等高可靠性场景;UDP是无连接的不可靠传输协议,无需建立连接,直接发送数据报,不保证数据可靠性,但传输速度快、开销小,适用于实时音视频、在线游戏、DNS查询等实时性要求高的场景。选择哪种协议取决于应用对可靠性和实时性的需求权衡。
什么是跨域问题?如何解决前端跨域请求?
跨域问题是浏览器的同源策略导致的,限制了一个域的文档或脚本获取另一个域的资源。常见解决方案包括:JSONP(利用script标签无跨域限制)、CORS(通过HTTP头部控制访问权限)、代理服务器(同源转发)、WebSocket(双向通信协议)、postMessage(跨文档通信)、document.domain(设置相同主域)和window.name(利用窗口名称特性)。选择方案时需考虑兼容性、安全性和场景需求,现代应用首选CORS,实时通信可选WebSocket,无法控制服务器时可考虑代理。
什么是跨域?有哪些解决跨域的方法?
跨域是Web开发中因浏览器同源策略导致的限制,当协议、域名或端口不同时发生。解决跨域的主要方法有:1) CORS(跨域资源共享),通过服务器设置HTTP响应头实现,是最推荐的标准化方案;2) JSONP,利用script标签跨域特性,但仅支持GET请求;3) 代理服务器,通过同源服务器转发请求;4) WebSocket,双向通信协议,不受同源限制;5) postMessage,HTML5 API,用于窗口间安全通信;6) document.domain,适用于子域间通信;7) window.name和location.hash,利用浏览器特性实现但安全性较低。选择方案需考虑安全性、兼容性、通信类型和实现复杂度等因素。
请详细解释HTTPS的工作原理和加密过程。
HTTPS是HTTP的安全版本,通过SSL/TLS协议实现数据加密、身份验证和完整性保护。其工作原理主要分为两个阶段:SSL/TLS握手阶段和数据传输阶段。在握手阶段,客户端和服务器协商加密算法、验证服务器身份并生成会话密钥;在数据传输阶段,使用会话密钥进行对称加密通信。HTTPS结合了对称加密(效率高)和非对称加密(安全密钥交换)的优点,通过数字证书验证服务器身份,防止中间人攻击,并使用哈希函数保证数据完整性。随着网络安全意识的提高,HTTPS已成为网站的标准配置。
请解释TCP的三次握手和四次挥手过程
TCP三次握手是建立连接的过程:1.客户端发送SYN包;2.服务器回复SYN+ACK包;3.客户端发送ACK包,连接建立。四次挥手是断开连接的过程:1.客户端发送FIN包;2.服务器回复ACK包;3.服务器发送FIN包;4.客户端发送ACK包,连接关闭。三次握手防止失效连接请求,四次挥手因TCP全双工特性需单独关闭每个方向。TIME_WAIT状态确保可靠关闭并处理延迟报文。