**创建时间:** 2026-03-28
**目标:** 帮助开发者准备网络协议相关的技术面试
**网站:** tongxinxieyi.com
---
本面试题库涵盖网络协议核心知识点,按难度分级,适合不同阶段的开发者准备技术面试。
---
flowchart LR
Q1["TCP三次握手"]
Q2["UDP vs TCP"]
Q3["HTTP状态码"]
Q4["DNS解析过程"]
Q5["HTTPS工作原理"]
**Q1: 请简述 TCP 和 UDP 的区别?**
**参考答案:**
**考察点:** 对传输层两种核心协议的理解
---
**Q2: 什么是 TCP 三次握手?为什么需要三次?**
**参考答案:**
**为什么需要三次:**
**考察点:** 对 TCP 连接建立机制的深入理解
---
**Q3: 什么是 TCP 四次挥手?为什么关闭连接需要四次?**
**参考答案:**
**为什么需要四次:** TCP 是全双工的,关闭连接需要分别关闭两个方向。服务端收到 FIN 后可能还有数据要发送,所以 ACK 和 FIN 分开发送。
**考察点:** 对 TCP 连接关闭机制的理解
---
**Q4: TIME_WAIT 状态的作用是什么?为什么需要等待 2MSL?**
**参考答案:**
**2MSL 原因:** MSL 是报文最大生存时间,2MSL 确保两个方向的所有报文都消失
**考察点:** 对 TCP 连接终止细节的理解
---
**Q5: HTTP 常见状态码有哪些?分别代表什么?**
**参考答案:**
**考察点:** 对 HTTP 协议的熟悉程度
---
**Q6: GET 和 POST 的区别是什么?**
**参考答案:**
**考察点:** 对 HTTP 方法的理解
---
**Q7: 什么是 HTTP 长连接?有什么好处?**
**参考答案:**
1. 减少 TCP 握手开销
2. 降低服务器资源消耗
3. 减少网络延迟
**考察点:** 对 HTTP 连接优化的理解
---
**Q8: 简述 DNS 解析过程?**
**参考答案:**
**考察点:** 对域名解析流程的理解
---
**Q9: DNS 记录类型有哪些?**
**参考答案:**
**考察点:** 对 DNS 系统的了解
---
sequenceDiagram
participant C as 客户端
participant L as 负载均衡
participant S as 服务器
C->>L: 请求
L->>S: 转发到Server1
S->>L: 响应
L->>C: 返回结果
**Q10: 简述 HTTPS 的握手过程?**
**参考答案:**
**考察点:** 对 HTTPS 安全机制的理解
---
**Q11: 对称加密和非对称加密的区别?HTTPS 中如何使用?**
**参考答案:**
- 握手阶段:用非对称加密交换对称密钥
- 通信阶段:用对称加密传输数据(兼顾安全和性能)
**考察点:** 对加密原理和 HTTPS 设计的理解
---
**Q12: HTTP/1.1、HTTP/2、HTTP/3 的主要区别?**
**参考答案:**
- 文本协议,头部无压缩
- 队头阻塞(一个请求阻塞后续请求)
- 多路复用靠 TCP 连接池
- 二进制协议,头部压缩(HPACK)
- 多路复用(一个连接多个请求)
- 服务器推送
- 但仍有 TCP 队头阻塞
- 基于 QUIC 协议(UDP)
- 彻底解决队头阻塞
- 0-RTT 连接建立
- 更好的弱网性能
**考察点:** 对 HTTP 协议演进的理解
---
**Q13: 什么是 CORS?如何解决跨域问题?**
**参考答案:**
1. 服务端设置 Access-Control-Allow-Origin 头部
2. 简单请求:直接添加 CORS 头部
3. 预检请求(OPTIONS):服务端需响应预检
4. 代理:开发环境用 webpack devServer 代理
5. Nginx 反向代理
**考察点:** 对浏览器同源策略和跨域方案的理解
---
**Q14: WebSocket 和 HTTP 的区别?适用场景?**
**参考答案:**
- HTTP 是请求 - 响应模式,WebSocket 是全双工通信
- HTTP 短连接(或 Keep-Alive),WebSocket 长连接
- HTTP 头部开销大,WebSocket 握手后头部开销小
- WebSocket 支持服务器主动推送
- 实时聊天、在线游戏
- 实时数据推送(股票、体育比分)
- 协同编辑
- 实时通知
**考察点:** 对实时通信协议的理解
---
**Q15: WebSocket 握手过程是怎样的?**
**参考答案:**
**考察点:** 对 WebSocket 协议细节的理解
---
**Q16: 什么是 TCP 粘包?如何解决?**
**参考答案:**
1. **固定长度:** 每条消息固定长度
2. **长度前缀:** 消息头包含消息长度
3. **特殊分隔符:** 如 HTTP 用\r\n\r\n
4. **应用层协议:** 如 TLV(Type-Length-Value)
**考察点:** 对 TCP 特性和应用层协议设计的理解
---
**Q17: 什么是 SYN 洪水攻击?如何防御?**
**参考答案:**
1. SYN Cookie:不立即分配资源,用 Cookie 验证
2. 增加 backlog 队列大小
3. 减少 SYN-RECEIVED 超时时间
4. 防火墙/负载均衡器过滤
5. 速率限制
**考察点:** 对网络安全和 TCP 攻击的理解
---
stateDiagram-v2
[*] --> Design : 系统设计
Design --> Scale : 容量规划
Scale --> Optimize : 性能优化
Optimize --> Monitor : 监控告警
Monitor --> Design
**Q18: 如何优化 TCP 连接性能?**
**参考答案:**
- tcp_tw_reuse:复用 TIME_WAIT 连接
- tcp_fin_timeout:减少 FIN_WAIT 时间
- tcp_max_syn_backlog:增加 SYN 队列
- HTTP/2 多路复用
- 减少请求数量(合并、压缩)
- CDN 加速
**考察点:** 对网络性能优化的综合能力
---
**Q19: 什么是 TCP 拥塞控制?有哪些算法?**
**参考答案:**
- 慢启动(Slow Start)
- 拥塞避免(Congestion Avoidance)
- 快速重传(Fast Retransmit)
- 快速恢复(Fast Recovery)
- Reno:经典算法
- CUBIC:Linux 默认,基于立方体函数
- BBR:Google 提出,基于带宽和 RTT
**考察点:** 对 TCP 核心机制的深入理解
---
**Q20: 设计一个高并发的即时通讯系统,需要考虑什么?**
**参考答案:**
- 单服务器:epoll/kqueue 处理 C10K 问题
- 多服务器:一致性哈希分配用户
- 在线用户:直接推送
- 离线用户:消息队列存储
- 负载均衡(LVS/Nginx)
- 消息队列(Kafka/RocketMQ)
- 缓存(Redis 存储在线状态)
- 消息确认机制
- 消息去重
- 断线重连
**考察点:** 系统设计能力和综合知识运用
---
---
**最后更新:** 2026-03-28 14:00
**题目数量:** 20 道(初级 9 道 + 中级 6 道 + 高级 5 道)