面试:计算机网络
一、网络分层与URL流程
1. 模型掌握
-
TCP/IP四层模型:
层级 功能 & 协议 应用层 提供应用接口(HTTP、DNS、FTP) 传输层 端到端传输(TCP可靠、UDP快速) 网络层 路由与寻址(IP、ICMP) 网络接口层 链路传输(以太网、WiFi,含物理层+数据链路层) -
OSI七层(辅助理解,对比记忆):物理层→数据链路层→网络层→传输层→会话层→表示层→应用层(重点记前四层与TCP/IP的对应)。
2. DNS执行原理
- 流程:本地缓存(浏览器→系统)→ 本地DNS服务器(递归查询)→ 根服务器→顶级域名服务器→权威域名服务器(迭代查询)→ 返回IP。
- 协议选择:解析用 UDP(速度快,域名查询数据量小);区域传送(主从DNS同步数据)用 TCP(可靠,数据量大)。
3. 浏览器输入网址的过程(高频题,按步骤答):
- DNS解析:域名→IP(如上流程)。
- TCP连接:三次握手(SYN→SYN+ACK→ACK)建立连接。
- HTTP请求:发送请求报文(方法、URL、请求头、请求体)。
- 服务器响应:返回响应报文(状态码、响应头、响应体)。
- 资源加载:解析HTML,请求CSS/JS/图片等静态资源(长连接下复用TCP连接)。
二、TCP/UDP
1. TCP与UDP的区别:
维度 | TCP(如文件下载) | UDP(如视频通话) |
---|---|---|
连接性 | 面向连接(三次握手) | 无连接(直接发) |
可靠性 | 可靠(确认、重传、排序) | 不可靠(丢包不管) |
传输单位 | 字节流(无边界,有序) | 数据报(有边界,无序) |
拥塞控制 | 有(慢启动、拥塞避免) | 无 |
2. 三次握手 & 四次挥手:
-
三次握手(建立连接):
- 客户端→服务端:
SYN
(同步序列号,seq=x) - 服务端→客户端:
SYN+ACK
(seq=y,ack=x+1) - 客户端→服务端:
ACK
(ack=y+1)
为什么三次? 双向确认“双方能发能收”:若两次,服务端无法确认客户端是否能接收自己的SYN+ACK(比如客户端的ACK丢包,服务端会一直重发)。
- 客户端→服务端:
-
四次挥手(关闭连接):
- 主动方→被动方:
FIN
(seq=u,不再发数据) - 被动方→主动方:
ACK
(ack=u+1,先确认,可能还在发数据) - 被动方→主动方:
FIN
(seq=v,自己也不发了) - 主动方→被动方:
ACK
(ack=v+1)
为什么四次? 被动方收到FIN后,可能还有未发完的数据,需先ACK确认,再发自己的FIN,故分两步;而三次握手是“同步序列号”,可合并SYN和ACK。
- 主动方→被动方:
3. TCP可靠传输的机制:
- 序列号+确认应答:保证数据有序、不丢包。
- 超时重传:未收到ACK则重发。
- 滑动窗口:流量控制(接收方告知窗口大小,避免对方处理不过来)。
- 拥塞控制:慢启动、拥塞避免(避免网络拥塞)。
- 校验和:检测报文是否损坏。
4. 长连接与短连接:
- 短连接:一次HTTP请求-响应后,立即关闭TCP连接(HTTP/1.0默认)。
- 长连接:TCP连接复用,可发多次HTTP请求-响应(HTTP/1.1默认,通过
Connection: keep-alive
维持)。
三、HTTP及扩展
1. HTTP与HTTPS的区别:
维度 | HTTP | HTTPS |
---|---|---|
传输 | 明文(易窃听、篡改) | SSL/TLS加密(安全) |
端口 | 80 | 443 |
性能 | 无加密开销,速度快 | 握手耗时长,需解密 |
证书 | 无 | 需CA签发的数字证书(防冒充) |
2. HTTP版本(1.0→1.1→2.0):
- 1.0:默认短连接,每次请求新建TCP,效率低。
- 1.1:默认长连接(keep-alive),管线化(批量发请求,但仍有 队头阻塞:一个请求卡壳,后续请求也卡)。
- 2.0:二进制帧、多路复用(同一连接并行发请求,解决队头阻塞)、头部压缩(HPACK)、服务器推送。
迭代原因:解决性能瓶颈(如1.1的连接复用但队头阻塞,2.0优化传输效率)。
3. WebSocket:
- 是什么:基于HTTP握手的全双工协议(客户端和服务端可双向实时发消息,如聊天、股票行情)。
- 核心:握手阶段用HTTP(
Upgrade: websocket
),之后脱离HTTP,复用TCP连接。
4. HTTPS的机制(SSL/TLS握手)(分步骤答):
- 客户端Hello:发支持的加密套件(如ECDHE)、随机数(Client Random)。
- 服务端Hello:选加密套件,发随机数(Server Random)、数字证书(含公钥、域名、CA签名)。
- 客户端验证证书:检查有效期、域名匹配、CA信任链,生成预主密钥,用服务端公钥加密发送(ECDHE则交换公钥参数,实现前向安全)。
- 服务端解密:用私钥解预主密钥,结合双方随机数,生成会话密钥(对称加密,速度快)。
- 后续通信:用会话密钥加密数据,双向传输。
5. Cookie、Session、Token(对比记忆):
类型 | 存储位置 | 特点 & 问题 | 适用场景 |
---|---|---|---|
Cookie | 客户端(浏览器) | 易被劫持,存储量小(4KB) | 简单会话标识(如SessionID) |
Session | 服务端(内存/DB) | 依赖Cookie传ID,集群需共享(如Redis) | 服务端需存状态的场景 |
Token | 客户端(LocalStorage等) | 无状态,服务端验签名(如JWT) | 前后端分离、跨域场景 |