面试题精讲:网络
大家好,我是「面试冲刺站」的站长。作为后端开发(尤其是 Python 后端)的敲门砖,网络知识在中大厂笔面试中占比常超 25%——它不只是考点的堆砌,更是理解 Web 架构、排查线上问题(如超时、跨域、并发连接数打满)的核心钥匙。
今天这篇文章,我会拆解最常考的 10 个网络模块,补全逻辑链路,加一点点实战代码/配置片段,帮你把「背熟」转化为「说通」。
1. TCP 三次握手 (Establishment)
核心必问: 为什么不是两次/四次?
先看标准流程:
- SYN(同步):客户端向服务端发送同步序列号
seq=x,自己进入SYN_SENT状态。
→ 服务端收到后知道:客户端发送能力正常 - SYN/ACK(同步+确认):服务端返回自己的
seq=y+ 对客户端的确认ack=x+1,自己进入SYN_RCVD状态。
→ 客户端收到后知道:服务端收发能力都正常 - ACK(最终确认):客户端返回
ack=y+1,双方进入ESTABLISHED状态。
→ 服务端收到后才确定:客户端接收能力也没问题
为什么两次不行?
防历史失效连接突然复活坑服务器: 假设网络卡,客户端第一次发的 SYN 很久才到服务端,此时客户端早放弃了第一次连接。如果只用两次握手,服务端收到后会直接开连接占资源,客户端根本不会理——三次握手的最后一步 ACK 能让服务端发现异常,及时释放资源。
2. TCP 四次挥手 (Termination)
核心必问: 最后为什么要等 2MSL?
挥手的前提是「数据可能还没传完」,所以是半双工转全关闭的过程:
- FIN(无数据发送):客户端发起,进入
FIN_WAIT_1,告诉服务端「我这边发完了」。 - ACK(确认接收 FIN):服务端返回
ack=fin+1,自己进入CLOSE_WAIT,告诉客户端「知道了,但我可能还有数据」。 - FIN(服务端也发完):服务端传完剩余数据,发起 FIN,进入
LAST_ACK。 - ACK(确认服务端 FIN):客户端返回
ack=fin+1,进入 TIME_WAIT(2MSL);服务端收到后立刻关闭。
2MSL 的作用
MSL 是「报文最大生存时间」(RFC 建议 2 分钟,实际系统常用 30-60s):
- 确保最后一步 ACK 能送达:如果 ACK 丢了,服务端会重发 FIN,客户端在 2MSL 内能收到并再补 ACK。
- 让本次连接的所有残留报文彻底从网络消失:避免新连接复用端口时,收到旧连接的脏数据。
3. HTTP 核心:GET vs POST
核心误区纠正: 不要再说「POST 比 GET 安全」!
先看官方定义+真实差异(HTTPS 场景下更明显):
💡 避坑提醒:HTTPS 会加密整个 HTTP 报文,包括 POST 的 Body,但两者的域名、端口、路径还是在 TLS 握手阶段明文传输的。
4. 状态管理:Cookie, Session 与 JWT
本质问题: HTTP 是无状态协议,怎么知道「这个请求和上一个是同一个人发的」?
方案对比
5. 负载均衡:Nginx vs Apache
核心考点: 为什么大厂几乎都用 Nginx 做入口层?
一句话总结差异:Nginx 靠「异步非阻塞(epoll)」拼并发,Apache 靠「多进程/线程」堆稳定。
Nginx 实战配置片段(反向代理+简单轮询负载均衡)
这里加个代码高亮,更有博客味儿:
6. HTTP 状态码速查表(面试高频10选7)
不用记太多,掌握这 7 个+场景就够应付 90% 的面试:
7. Web 安全双子星:XSS 与 CSRF
这俩是开发岗+安全岗都爱考的基础,要分清原理和防御。
XSS(跨站脚本攻击)
原理:攻击者在页面注入恶意 JS 脚本,其他用户访问时会执行(偷 Cookie、篡改页面、跳转钓鱼链接)。 分三类:存储型(最危险,恶意脚本存数据库)、反射型(通过 URL 触发)、DOM型(在浏览器端 DOM 操作时触发)。 防御措施:
- 对所有用户输入进行转义(如 Flask 用
{{ }}自动转义 HTML、Django 默认也是); - 给敏感 Cookie 加
HttpOnly属性(JS 读不到); - 设置
Content-Security-Policy(CSP)头(限制页面可加载的资源)。
CSRF(跨站请求伪造)
原理:攻击者利用用户的登录态(Cookie 会自动跨域发送同源请求),在第三方网站伪造请求(如偷偷转账、修改密码)。 防御措施:
- 验证 CSRF Token:每次提交表单/非幂等请求时,服务端生成一个随机 Token,客户端带回验证(Django/Flask 都有原生插件);
- 检查
Referer头(但可能被伪造); - 给 Cookie 加
SameSite属性(Strict/Lax,限制跨域发送)。
8. Python Web 开发必知:WSGI 与 ASGI
一句话区分: WSGI 是「同步单路」,ASGI 是「异步多路」。
WSGI(Web Server Gateway Interface)
旧时代的标准(Django ≤3.1 默认、Flask 原生):
- 一次请求,一个线程;
- 不支持 WebSocket、Server-Sent Events(SSE)等长连接;
- 性能一般,但生态极其成熟。
ASGI(Asynchronous Server Gateway Interface)
新时代的领航者(FastAPI/Starlette、Django ≥3.2 支持):
- 原生支持
async/await,一个线程能处理成千上万的并发请求; - 支持 HTTP、WebSocket、SSE 等多种协议;
- 性能高,适合做实时应用(如聊天、直播弹幕)。
9. *NIX 进程间通信 (IPC)(后端进阶偶尔考)
Python 写多进程程序时会用到,重点掌握「最快的」和「跨机器的」:
好啦,今天的网络面试题精讲就到这里!如果觉得有用,欢迎点赞、收藏、转发给正在找工作的朋友~
下次我们讲「Python 语言特性高频面试题」,不见不散!

