Interview AiBoxInterview AiBox 实时 AI 助手,让你自信应答每一场面试
请详细描述TCP三次握手和四次挥手的过程
题型摘要
TCP三次握手是建立连接的过程:1)客户端发送SYN;2)服务器回复SYN+ACK;3)客户端发送ACK。四次挥手是断开连接的过程:1)客户端发送FIN;2)服务器回复ACK;3)服务器发送FIN;4)客户端回复ACK并进入TIME_WAIT状态。三次握手确保双方序列号同步和收发能力正常,四次挥手确保数据完整传输和可靠关闭连接.
TCP三次握手和四次挥手详解
TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在TCP通信中,连接的建立和终止分别通过三次握手和四次挥手来完成。
一、TCP三次握手
TCP三次握手(Three-way Handshake)是指建立一个TCP连接时,客户端和服务器总共需要发送三个报文。其主要目的是同步双方的序列号和确认号,并交换TCP窗口大小信息。
1. 三次握手过程
第一次握手:SYN
- 客户端向服务器发送一个SYN(Synchronize Sequence Numbers)报文
- 报文内容:SYN=1,seq=x(x为客户端初始序列号)
- 客户端状态:从CLOSED变为SYN_SENT
- 目的:客户端告诉服务器,我要建立连接,这是我的初始序列号
第二次握手:SYN+ACK
- 服务器收到SYN报文后,向客户端发送SYN+ACK报文
- 报文内容:SYN=1,ACK=1,seq=y(y为服务器初始序列号),ack=x+1
- 服务器状态:从LISTEN变为SYN_RCVD
- 目的:服务器告诉客户端,我收到了你的连接请求,这是我的初始序列号,我期望你的下一个序列号是x+1
第三次握手:ACK
- 客户端收到SYN+ACK报文后,向服务器发送ACK报文
- 报文内容:ACK=1,seq=x+1,ack=y+1
- 客户端状态:从SYN_SENT变为ESTABLISHED(连接已建立)
- 服务器收到ACK后,状态从SYN_RCVD变为ESTABLISHED(连接已建立)
- 目的:客户端告诉服务器,我收到了你的确认,连接已建立
2. 三次握手状态转换
3. 为什么需要三次握手
-
防止已失效的连接请求报文突然又传送到了服务器:如果客户端发送的SYN因网络问题延迟,客户端超时重传,服务器收到后建立连接,传输数据后关闭连接。此时延迟的SYN到达服务器,如果不进行第三次握手,服务器会误认为客户端又发起新的连接请求,从而造成资源浪费。
-
同步双方的序列号:TCP是全双工通信,双方需要知道对方的初始序列号,才能保证数据传输的可靠性。三次握手确保了双方序列号的同步。
-
确认双方的接收和发送能力正常:通过三次报文交换,双方都能确认对方的发送和接收能力是正常的。
二、TCP四次挥手
TCP四次挥手(Four-way Wavehand)是指终止一个TCP连接时,客户端和服务器总共需要发送四个报文。由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。
1. 四次挥手过程
第一次挥手:FIN
- 客户端向服务器发送一个FIN(Finish)报文
- 报文内容:FIN=1,seq=u(u为客户端发送的最后一个字节的序列号)
- 客户端状态:从ESTABLISHED变为FIN_WAIT_1
- 目的:客户端告诉服务器,我已经没有数据要发送了,但仍然可以接收数据
第二次挥手:ACK
- 服务器收到FIN报文后,向客户端发送ACK报文
- 报文内容:ACK=1,seq=v(v为服务器发送的最后一个字节的序列号),ack=u+1
- 服务器状态:从ESTABLISHED变为CLOSE_WAIT
- 客户端收到ACK后,状态从FIN_WAIT_1变为FIN_WAIT_2
- 目的:服务器告诉客户端,我收到了你的关闭请求
第三次挥手:FIN
- 服务器处理完所有待发送数据后,向客户端发送FIN报文
- 报文内容:FIN=1,ACK=1,seq=w,ack=u+1
- 服务器状态:从CLOSE_WAIT变为LAST_ACK
- 目的:服务器告诉客户端,我也没有数据要发送了,可以关闭连接了
第四次挥手:ACK
- 客户端收到FIN报文后,向服务器发送ACK报文
- 报文内容:ACK=1,seq=u+1,ack=w+1
- 客户端状态:从FIN_WAIT_2变为TIME_WAIT,等待2MSL(Maximum Segment Lifetime,报文最大生存时间)后进入CLOSED状态
- 服务器收到ACK后,状态从LAST_ACK变为CLOSED
- 目的:客户端告诉服务器,我收到了你的关闭请求,连接可以完全关闭了
2. 四次挥手状态转换
3. 为什么需要四次挥手
-
TCP是全双工通信:每个方向必须单独关闭,当一方完成数据发送时,发送FIN通知对方,但仍然可以接收对方的数据。
-
确保数据完整传输:第二次挥手后,服务器可能还有数据需要发送,不能立即关闭连接,需要等待数据发送完毕后才能发送FIN报文。
-
TIME_WAIT状态的作用:
- 确保可靠的终止TCP连接:如果客户端发送的最后一个ACK丢失,服务器会重传FIN,客户端在TIME_WAIT状态下可以重新发送ACK。
- 允许老的报文在网络中消失:等待2MSL时间,确保本连接的所有报文在网络中消失,防止端口重用时出现混乱。
4. TIME_WAIT状态
TIME_WAIT状态是TCP连接关闭过程中的一个重要状态,它持续2MSL时间(通常为30秒到2分钟)。这个状态的存在有以下几个原因:
-
可靠性保证:确保最后一个ACK能够被服务器接收。如果ACK丢失,服务器会重传FIN,客户端在TIME_WAIT状态下可以重新发送ACK。
-
网络延迟处理:确保网络中所有本连接的报文都已经消失,防止这些报文被后续使用相同端口的连接误接收。
-
避免"已失效的连接请求":防止连接关闭后立即建立相同端口的新连接,可能会收到旧连接的延迟报文。
TIME_WAIT状态可能会导致端口资源占用问题,在高并发短连接场景下可能会耗尽可用端口。可以通过调整系统参数(如tcp_tw_reuse和tcp_tw_recycle)来优化。
三、总结
TCP三次握手和四次挥手是TCP协议中连接建立和终止的核心机制:
- 三次握手:建立连接,同步序列号,确保双方收发能力正常
- 四次挥手:终止连接,确保数据完整传输,可靠关闭连接
这两个过程体现了TCP协议的可靠性和严谨性,是理解TCP协议工作原理的基础。
参考资料:
思维导图
Interview AiBoxInterview AiBox — 面试搭档
不只是准备,更是实时陪练
Interview AiBox 在面试过程中提供实时屏幕提示、AI 模拟面试和智能复盘,让你每一次回答都更有信心。
AI 助读
一键发送到常用 AI
TCP三次握手是建立连接的过程:1)客户端发送SYN;2)服务器回复SYN+ACK;3)客户端发送ACK。四次挥手是断开连接的过程:1)客户端发送FIN;2)服务器回复ACK;3)服务器发送FIN;4)客户端回复ACK并进入TIME_WAIT状态。三次握手确保双方序列号同步和收发能力正常,四次挥手确保数据完整传输和可靠关闭连接.
智能总结
深度解读
考点定位
思路启发
相关题目
请做一个自我介绍
自我介绍是面试的开场环节,应控制在2-3分钟内,包含基本信息、教育背景、项目经验、个人特点、求职动机和结束语。关键在于突出与岗位相关的技能和经验,用具体事例支撑能力,展现对公司和岗位的了解。表达时应保持自信、简洁明了,避免背诵简历内容或过度夸张。准备过程包括分析岗位需求、梳理个人经历、找出匹配点、构建框架、撰写初稿、修改润色、模拟练习和最终定稿。
为什么选择从事测试开发工作
选择从事测试开发工作应从四个方面回答:理解测试开发的价值与本质、结合个人经历与兴趣、分析个人优势与岗位匹配度、表达职业规划与期望。测试开发是连接开发与质量的桥梁,需要编程能力与质量意识的结合,适合既喜欢编码又关注产品质量的人。
你为什么选择测试开发这个职业方向?
回答此问题的核心是展现你对测试开发角色的深刻认同和热情,并将其与个人能力、职业规划及公司需求相结合。第一步,用一个真实经历说明你对质量的追求,建立动机;第二步,阐述为何选择测试开发这一“开发+质量”的桥梁角色,而非纯开发或纯测试;第三步,结合美团的业务复杂性和技术领先性,表达你渴望在此平台成长的意愿,展示高度契合度。
请详细描述你的项目经历,以及你是如何进行测试的。
回答项目经历问题,推荐使用STAR法则: 1. **S (情境)**:简述项目背景和你的角色。 2. **T (任务)**:明确你要保障的质量目标和具体测试任务。 3. **A (行动)**:这是核心,详细描述你的测试流程,包括需求分析、策略制定、用例设计(功能/接口/UI/性能)、执行、缺陷管理。 4. **R (结果)**:用数据量化成果,如发现Bug数量、自动化覆盖率、效率提升、性能指标达成等。 整个回答应突出结构化思维、技术深度和业务价值。
在项目开发过程中,你遇到过哪些技术难题?你是如何解决这些问题的?
在项目开发中,我遇到过三个典型技术难题:1)自动化测试框架稳定性问题,通过POM模式、智能等待机制、测试数据工厂和资源池管理将失败率从30%降至5%;2)大规模数据测试性能优化,采用Spark分布式架构、数据采样策略和规则匹配优化,将测试时间从8小时缩短至30分钟;3)微服务测试环境管理,通过容器化、服务虚拟化和测试数据管理平台,将环境相关缺陷从40%降至5%。解决技术难题的关键在于深入分析根源、设计系统性方案、借鉴成熟技术和持续学习改进。