计算机网络面试核心知识点大全
计算机网络面试核心知识点大全
一、 网络模型基础
1.1 OSI 七层模型 vs. TCP/IP 四层模型
通俗理解:把网络通信想象成发送一封跨国信件。
- OSI 模型:理论上的完美流程,分了7个步骤,每个步骤专人负责,但太复杂,现实中不直接用。
- TCP/IP 模型:实际使用的简化流程,分了4个步骤,高效实用。
| OSI 七层模型 | TCP/IP 四层模型 | 核心功能 | 通俗比喻 | 常见协议 |
|---|---|---|---|---|
| 应用层 | 应用层 | 为用户提供应用服务 | 写信的内容:“亲爱的妈妈,我很好…” | HTTP, HTTPS, FTP, DNS, SMTP |
| 表示层 | ^ | 数据格式转换(加密、压缩) | 翻译官:把中文翻译成英文,或者把内容加密 | - |
| 会话层 | ^ | 建立、管理和终止会话 | 对话管理:决定是打电话还是写信,什么时候开始/结束 | - |
| 传输层 | 传输层 | 为应用层提供端到端的可靠/不可靠传输 | 邮政的打包和运输服务:确认包裹是否收到,没收到就再发一个 | TCP, UDP |
| 网络层 | 网络层 | 寻址和路由(选择最佳路径) | 地址和邮路:根据收件地址(IP),选择飞机、轮船等运输路线 | IP, ICMP, Router |
| 数据链路层 | 网络接口层 | 在相邻节点间无差错地传输数据帧 | 本地邮局和邮差:负责你家到本地邮局这段路的准确投递 | Ethernet, MAC, Switch |
| 物理层 | ^ | 在物理媒介上传输原始比特流 | 公路和卡车:负责把包裹实际运走,关心的是电压、光信号等 | Fiber, Cable, Radio |
面试关键:记住 TCP/IP 四层模型和每一层的核心协议(特别是 TCP/IP 在哪层)。
二、 应用层 (Application Layer)
2.1 HTTP
2.1.1 HTTP 报文结构
- 请求报文
GET /index.html HTTP/1.1 // 请求行:方法 + URL + 协议版本 Host: www.baidu.com // 请求头:包含请求的元信息 User-Agent: Mozilla/5.0... Accept: text/html (空行) // 分隔头部和体 (请求体) // 例如 POST 方法提交的表单数据 - 响应报文
HTTP/1.1 200 OK // 状态行:协议版本 + 状态码 + 状态信息 Content-Type: text/html // 响应头:包含响应的元信息 Content-Length: 1024 (空行) // 分隔头部和体 <html>... // 响应体:服务器返回的实际内容
2.1.2 HTTP 状态码
| 类别 | 描述 | 常见状态码 | 通俗理解 |
|---|---|---|---|
| 1xx | 信息性 | 100 Continue | “我收到了请求头,你继续发身体吧。” |
| 2xx | 成功 | 200 OK | “请求成功,这是你要的东西。” |
| 3xx | 重定向 | 301 Moved Permanently | “你要的东西已永久搬新家了,以后请直接去新家。” |
| ^ | ^ | 302 Found | “你要的东西临时在另一个地方,这次去那里拿。” |
| 4xx | 客户端错误 | 400 Bad Request | “你的请求语法有问题,我看不懂。” |
| ^ | ^ | 401 Unauthorized | “你需要登录(认证)才能访问。” |
| ^ | ^ | 403 Forbidden | “你登录了,但权限不够(禁止访问)。” |
| ^ | ^ | 404 Not Found | “你要的东西不存在。” |
| 5xx | 服务器错误 | 500 Internal Server Error | “服务器内部出错了,我也不知道为啥。” |
| ^ | ^ | 502 Bad Gateway | “我(网关/代理)后面的服务器给我了个无效响应。” |
| ^ | ^ | 503 Service Unavailable | “服务器当前太忙,无法处理你的请求。” |
| ^ | ^ | 504 Gateway Timeout | “我(网关/代理)后面的服务器响应太慢了,我超时了。” |
2.1.3 HTTP 请求方法
- GET: 获取资源。像在浏览器地址栏输入网址。
- POST: 提交/创建资源。像填写表单并提交。
- PUT: 更新整个资源。
- DELETE: 删除资源。
- HEAD: 只获取资源的头部信息,不要内容。用于检查资源是否存在、是否被修改过。
2.1.4 GET vs POST (核心区别)
| 方面 | GET | POST |
|---|---|---|
| 语义 | 获取数据(安全、幂等) | 提交数据(不安全、不幂等) |
| 数据位置 | URL 的 ? 后面(Query String) | 请求体(Body)中 |
| 数据长度 | 受 URL 长度限制(浏览器不同) | 理论上无限制 |
| 安全性 | 参数暴露在URL,可被缓存、历史记录 | 相对安全,但仍是明文 |
| 缓存 | 可被缓存 | 默认不可缓存 |
| 书签 | 可收藏为书签 | 不可收藏 |
幂等性:同样的请求执行一次或多次,产生的效果是一样的。GET(查)、PUT(改)、DELETE(删)是幂等的,POST(增)不是。
2.1.5 HTTP 长连接 (Keep-Alive)
- 短连接:每次请求-响应都要经历一次 TCP 的“三次握手”和“四次挥手”。好比打电话,说一件事就挂断,再说再打。
- 长连接:完成一次请求-响应后,TCP 连接不立即关闭,可以被多个 HTTP 请求复用。
好比打电话,接通后可以连续聊好几件事,最后再挂。
优点:减少了 TCP 连接建立和关闭的开销,提升了性能。
2.2 HTTPS
2.2.1 HTTP 为什么不安全?
HTTP 是明文传输,就像寄明信片,路上谁都能看到内容。存在三大风险:
- 窃听:内容被偷看。
- 篡改:内容被修改。
- 冒充:冒充成目标网站。
2.2.2 HTTPS 如何解决?
HTTPS = HTTP + SSL/TLS,相当于给 HTTP 套了一层加密外壳。
- 混合加密:保证内容不被窃听。
- 非对称加密:在握手初期,用于安全地交换对称加密的密钥。好比用一把公开的锁(公钥)把一个小保险箱(对称密钥)锁上寄给对方,只有对方的私钥能打开。
- 对称加密:在握手完成后,用于加密实际传输的数据。效率高,好比双方都有了同一把钥匙,用来加密和解密信件。
- 数字证书:保证对方身份真实,防止冒充。
- 由权威的 CA(证书颁发机构) 颁发,证明“这个公钥就是百度官网的”。
- 浏览器会验证证书的真伪和有效性。
- 摘要算法:保证数据完整性,防止篡改。
- 对数据计算一个唯一的“指纹”(摘要),如果数据被篡改,指纹就对不上。
2.2.3 HTTPS TLS 握手过程 (RSA 版本)
比喻:A 和 B 想建立一个安全的通信渠道。
- Client Hello:A 对 B 说:“你好,我想建立安全连接。我支持的密码套件有…,这是我的随机数1。”
- Server Hello:B 回应:“好的,我们用这套密码吧。这是我的证书(里面有我的公钥),这是我的随机数2。”
- 客户端验证:A 检查 B 的证书是否可信(就像检查身份证是不是公安局发的)。
- Pre-master Key:A 生成一个预主密钥,用 B 的公钥加密后,发给 B。(只有 B 的私钥能解密)
- 生成会话密钥:A 和 B 都使用随机数1、随机数2、预主密钥,通过相同的算法,生成相同的会话密钥(用于对称加密)。
- 客户端就绪
