小牛丨软件测试学习小牛丨软件测试学习
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
  • 网络协议精华文章

    • 网络协议精华文章
    • 1. HTTP 协议面试怎么讲
    • 2. HTTPS 和 HTTP 有什么区别
    • 3. GET 和 POST 区别怎么回答
    • 4. 状态码 200 302 400 401 403 404 500 怎么理解
    • 5. Cookie Session Token 怎么区分
    • 6. TCP 三次握手四次挥手怎么讲
    • 7. 抓包分析接口问题怎么做
    • 8. 网络超时和连接失败怎么排查
    • 9. 接口测试中的请求头和响应头怎么看
    • 10. 网络协议题怎么结合项目回答
⌕
🛒项目实战📦资料包🛠测试神器AIAI路线CV简历测评🧭入行测评🧪测开测评🎯训练营🏆案例❤赞赏我

6. TCP 三次握手四次挥手怎么讲

TCP 三次握手和四次挥手是网络协议面试中的经典题。很多测试同学觉得这个问题偏开发或网络工程师,和测试关系不大,于是只背“客户端发 SYN,服务端回 SYN+ACK,客户端回 ACK”。但面试官问测试岗位这个问题,通常不是要求你画非常底层的网络状态机,而是看你是否理解连接建立、连接关闭、超时、连接失败、服务端不可达这些问题的基础原因。

测试工程师不需要把 TCP 讲得像网络专家,但要能用测试语言解释:TCP 是可靠连接,HTTP 通常基于 TCP;三次握手用于建立连接;四次挥手用于关闭连接;连接失败、连接超时、Connection refused、Read timeout 等问题,和网络、端口、服务状态、连接建立或响应等待有关。这样回答既不过度深入,也能体现你理解网络排查。

一、TCP 在测试中的作用

HTTP 是应用层协议,TCP 是传输层协议。大多数 HTTP/HTTPS 请求底层都依赖 TCP 连接。

测试中常见这些现象,都和 TCP 或网络连接有关:

  • 接口连接失败;
  • Connection refused;
  • Connection timeout;
  • Read timeout;
  • 服务端端口未监听;
  • 网络不通;
  • 长连接断开;
  • 压测时连接数过多;
  • 服务重启导致请求失败。

所以测试理解 TCP,不是为了背协议,而是为了更好解释网络故障。

二、什么是三次握手

三次握手是 TCP 建立连接的过程。

可以简单理解为客户端和服务端互相确认:

  1. 客户端确认自己能发送;
  2. 服务端确认自己能接收和发送;
  3. 客户端确认自己能接收。

经典过程:

客户端 -> 服务端:SYN
服务端 -> 客户端:SYN + ACK
客户端 -> 服务端:ACK

三次之后,连接建立,双方可以传输数据。

三、为什么不是两次握手

如果只有两次握手,服务端无法确认客户端是否能收到自己的响应,也可能因为历史无效连接导致资源浪费。

三次握手的核心是双方都确认对方的发送和接收能力,保证连接可靠建立。

面试不需要讲得过深,可以说:

三次握手是为了让客户端和服务端都确认双方收发能力正常,避免无效连接。

四、什么是四次挥手

四次挥手是 TCP 关闭连接的过程。

因为 TCP 是双向通信,客户端和服务端都可以发送数据。关闭时,一方说“我不发了”,另一方可能还有数据要发,所以关闭通常需要四步。

经典过程:

客户端 -> 服务端:FIN
服务端 -> 客户端:ACK
服务端 -> 客户端:FIN
客户端 -> 服务端:ACK

简单理解:

  1. 客户端说我发完了;
  2. 服务端确认收到;
  3. 服务端也发完了;
  4. 客户端确认收到。

五、为什么挥手通常是四次

因为 TCP 是全双工通信。客户端关闭发送通道,不代表服务端也马上没有数据要发。服务端可能需要先处理完剩余数据,再发送 FIN。所以 ACK 和 FIN 往往分开发,就形成四次挥手。

测试面试中这样讲就够了:

四次挥手是因为 TCP 双方都要分别关闭自己的发送方向,一方关闭后,另一方可能还有数据没发完,所以通常需要四步。

六、连接失败怎么和 TCP 关联

1. Connection refused

通常表示目标主机可达,但目标端口没有服务监听,或者服务主动拒绝连接。

测试排查:

  • IP 是否正确;
  • 端口是否正确;
  • 服务是否启动;
  • 端口是否监听;
  • 防火墙或安全组是否拒绝。

Linux 可用:

ss -lntp | grep 8080

2. Connection timeout

通常表示连接建立超时,可能网络不通、路由不可达、防火墙丢弃、服务不可达。

排查:

  • 网络是否通;
  • 域名是否解析;
  • 端口是否开放;
  • 网关是否可达;
  • 防火墙是否拦截。

3. Read timeout

连接已经建立,但服务端迟迟没有返回响应。可能是后端处理慢、数据库慢、第三方接口慢、线程阻塞。

排查:

  • 服务日志;
  • 慢 SQL;
  • 第三方接口耗时;
  • 服务器资源;
  • 压测结果。

这三个错误在接口测试和自动化测试中非常常见。

七、三次握手和接口测试的关系

普通功能测试不需要每次分析握手过程,但当接口连接异常时,要知道底层连接可能没建立成功。

例如 Postman 请求接口提示 connection refused,通常不是业务逻辑问题,而是服务端口未监听或连接被拒绝。

如果提示 timeout,可能请求没有成功建立连接,或者建立后等待响应超时。

所以 TCP 知识能帮助测试区分:

  • 网络连接问题;
  • 服务端口问题;
  • 应用业务问题;
  • 响应处理慢问题。

八、压测中 TCP 相关问题

性能测试中,TCP 更容易被关注。

常见问题:

  • 连接数过多;
  • TIME_WAIT 过多;
  • 端口耗尽;
  • 服务端连接池不足;
  • 网关连接限制;
  • 客户端压测机成为瓶颈。

测试压测时,如果大量请求连接失败,不能只看应用接口,还要看网络连接和服务资源。

但如果是普通初中级测试面试,不需要讲太深,能说明连接数和超时可能影响压测结果即可。

九、抓包怎么看 TCP

在 Wireshark 中可以看到 SYN、ACK、FIN 等包,但大多数测试岗位不会要求深入抓 TCP 包。

如果面试官问,可以说:

普通接口测试我主要通过 HTTP 状态码、请求耗时、错误信息和服务日志定位;如果是网络层问题,抓包可以看到 TCP 是否完成握手、是否重传、是否被重置。但日常测试更多会先用 ping、telnet、curl、端口检查和日志排查。

这个回答比较稳,不装过度专业。

十、面试回答模板

如果面试官问“三次握手四次挥手怎么讲”,可以这样答:

TCP 是可靠的传输层协议,HTTP 请求底层通常依赖 TCP。三次握手是建立连接的过程:客户端发 SYN,服务端回 SYN+ACK,客户端再回 ACK,通过三次交互确认双方收发能力正常。四次挥手是关闭连接的过程,因为 TCP 是双向通信,双方都要分别关闭自己的发送方向,所以通常是 FIN、ACK、FIN、ACK。测试中我不会只背流程,更关注它和连接失败的关系,比如 Connection refused 可能是端口没监听,Connection timeout 可能是网络不可达或被拦截,Read timeout 可能是服务处理慢或依赖服务慢。

十一、常见追问

追问:为什么三次握手不是两次?

为了让客户端和服务端都确认双方的发送和接收能力正常,避免无效连接。

追问:为什么挥手是四次?

因为 TCP 是双向通信,一方关闭发送后,另一方可能还有数据要发送,所以双方分别关闭。

追问:Connection refused 怎么排查?

确认 IP、端口、服务进程、端口监听、防火墙和安全组。通常说明目标端口没有服务或被拒绝。

追问:Read timeout 和 Connection timeout 区别?

Connection timeout 是连接建立超时;Read timeout 是连接建立后等待响应超时。

十二、练习清单

  1. 画出三次握手流程;
  2. 画出四次挥手流程;
  3. 理解 SYN、ACK、FIN;
  4. 区分 connection refused;
  5. 区分 connection timeout;
  6. 区分 read timeout;
  7. 用 ss 查看端口;
  8. 用 curl 测接口连通性;
  9. 把 TCP 和接口异常联系起来;
  10. 准备 TCP 面试回答。

TCP 三次握手和四次挥手,不要只背流程。测试岗位要把它和连接失败、超时、端口监听、服务状态、压测连接数这些实际问题结合起来讲。

配套刷题:

  • 网络协议测试面试题
相关推荐

下一步可以看这些

面试通关软件测试面试通关系列精华文章

把面试题、项目、简历和训练营串成一套求职准备路径。

入行路线零基础入行软件测试专题路径

从测评、学习路线、项目、简历到面试,按顺序入行。

进阶路线初中级测试进阶高级专题路径

接口自动化、性能测试、CI/CD、复杂业务质量保障进阶路线。

AI 方向AI 测试学习路线专题页

大模型评测、RAG 测试、Agent 测试和 AI 自动化路线。

求职结果Offer 案例 / 学员案例展示

看看真实学员 Offer 案例,判断目标和学习投入是否匹配。

资料 / 交流群添加小牛微信

备注:资料、简历、AI 或找工作,领取对应资料或进交流群。

添加小牛微信
Prev
5. Cookie Session Token 怎么区分
Next
7. 抓包分析接口问题怎么做