从求职材料中拆出的客户端网络高频题;重复的 TCP 三次握手内容仅保留一版。
客户端开发岗位(尤其是大厂)对计算机网络的要求通常集中在 TCP/IP 基础 + 常见网络机制 + 实际工程理解。面试不会像网络方向那样深入,但一些基础问题几乎必问。下面整理一套 客户端岗位必须掌握的核心知识点,理解到能解释原理即可。
网络基础知识(客户端面试常问)
TCP 三次握手
TCP 建立连接时需要进行三次握手。
过程
客户端 服务端
SYN = 1 seq = x -------->
<-------- SYN = 1 ACK = 1 seq = y ack = x+1
ACK = 1 ack = y+1 -------->
步骤
第一次握手
客户端发送 SYN,请求建立连接,并发送初始序列号 seq = x。
第二次握手
服务器收到后回复:
SYNACKack = x + 1
表示: 我收到了你的请求,同时我也要建立连接。
第三次握手
客户端发送 ACK,确认服务器的 SYN。
连接建立完成。
为什么是三次握手
核心原因:双方都需要确认发送和接收能力正常。
三次握手保证:
| 能力 | 客户端 | 服务端 |
|---|---|---|
| 发送能力 | ✔ | ✔ |
| 接收能力 | ✔ | ✔ |
如果只有 两次握手:
可能发生 历史连接请求问题。
例子:
- 客户端发送 SYN(网络延迟)
- 客户端又发送新的 SYN
- 服务端收到旧 SYN 并建立连接
客户端其实已经放弃这个连接,但服务器却建立了连接。
三次握手通过第三次 ACK 可以避免这个问题。
TCP 四次挥手(断开连接)
TCP 是 全双工通信,双方需要分别关闭。
客户端 服务端
FIN -------->
<-------- ACK
<-------- FIN
ACK -------->
步骤:
1 客户端发送 FIN(不再发送数据)
2 服务端返回 ACK
3 服务端发送 FIN
4 客户端返回 ACK
客户端会进入 TIME_WAIT 状态。
TIME_WAIT 为什么存在
TIME_WAIT 持续 2MSL(报文最大生存时间)。
原因:
防止旧连接的数据干扰新连接
如果没有 TIME_WAIT:
旧连接的延迟包可能进入新连接。
确保最后 ACK 被收到
如果服务器没有收到 ACK,会重新发送 FIN。
客户端必须还能回应。
TCP 的核心特点
TCP 是:
面向连接 + 可靠传输 + 有序传输
可靠性来自几个机制:
- 序列号
- 确认应答
- 重传机制
- 滑动窗口
- 拥塞控制
TCP 滑动窗口
滑动窗口用于 提高传输效率。
如果没有滑动窗口:
发送一个包就必须等待 ACK。
效率非常低。
滑动窗口允许:
连续发送多个数据包。
示例:
发送窗口 = 3
发送:
packet1
packet2
packet3
收到 ACK1 后:
窗口滑动
发送 packet4
所以叫 滑动窗口。
TCP 流量控制
TCP 使用 **接收窗口(rwnd)**控制速度。
接收方告诉发送方:
我还能接收多少数据
例如:
rwnd = 4096 bytes
发送方不能超过这个值。
防止 接收端缓冲区被打满。
TCP 拥塞控制
用于防止 网络被打爆。
核心算法:
- 慢启动
- 拥塞避免
- 快重传
- 快恢复
慢启动
刚开始发送速率很小:
1 → 2 → 4 → 8 → 16
指数增长。
拥塞避免
到达阈值后:
线性增长
TCP 和 UDP 区别(高频题)
| 特点 | TCP | UDP |
|---|---|---|
| 连接 | 需要连接 | 无连接 |
| 可靠性 | 可靠 | 不可靠 |
| 顺序 | 保证顺序 | 不保证 |
| 速度 | 较慢 | 较快 |
| 应用 | HTTP、FTP | 视频、游戏 |
举例:
TCP:
- HTTP
- SSH
- 数据库
UDP:
- 视频直播
- 游戏
- DNS
HTTP 和 HTTPS 区别
HTTPS = HTTP + TLS 加密
区别:
| 特点 | HTTP | HTTPS |
|---|---|---|
| 安全 | 不安全 | 加密 |
| 端口 | 80 | 443 |
| 证书 | 无 | 需要 |
HTTPS 过程:
1 TCP 建立连接 2 TLS 握手 3 加密通信
Socket 是什么
Socket 是 网络通信接口。
客户端开发中常见流程:
1 创建 socket
2 connect 服务器
3 send 发送数据
4 recv 接收数据
5 close 关闭连接
例如:
客户端 <----TCP----> 服务器
Qt / Android / C++ 网络库都是基于 socket。
客户端开发常见网络问题
面试官经常会问:
网络断开怎么办
常见方案:
- 心跳机制
- 自动重连
- 超时检测
粘包问题
TCP 是 字节流,可能出现:
packet1 + packet2
解决方法:
- 固定长度
- 分隔符
- 消息长度字段
QUIC(了解即可)
QUIC 是 Google 提出的协议。
特点:
- 基于 UDP
- 内置 TLS
- 支持多路复用
- 减少握手延迟
HTTP/3 使用 QUIC。
客户端岗位网络必背问题
如果是腾讯客户端面试,大概率会问:
基础
- TCP 三次握手
- TCP 四次挥手
- TCP vs UDP
- HTTP vs HTTPS
稍微进阶
- 滑动窗口
- 粘包问题
- 心跳机制
加分题
- TIME_WAIT
- QUIC
建议重点背这 7 个
只要掌握这些就够大部分面试:
1 TCP三次握手
2 TCP四次挥手
3 TCP和UDP区别
4 滑动窗口
5 TIME_WAIT
6 HTTP和HTTPS
7 粘包问题