网络基础知识面试手册
文档类型: 计算机网络核心知识
更新时间: 2025-10-28
目录
1. TCP/IP协议
1.1 TCP协议特点
TCP (Transmission Control Protocol) - 传输控制协议
核心特性:
✅ 面向连接 - 需要建立连接
✅ 可靠传输 - 保证数据完整性
✅ 有序传输 - 按顺序交付数据
✅ 流量控制 - 滑动窗口
✅ 拥塞控制 - 慢启动、拥塞避免
✅ 全双工通信 - 双向同时传输
1.2 TCP报文结构
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 源端口(16bit) | 目标端口(16bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 序列号(32bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 确认号(32bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据偏移 |保留|U|A|P|R|S|F| 窗口大小(16bit) |
| (4bit) |(6)|R|C|S|S|Y|I| |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 校验和(16bit) | 紧急指针(16bit) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 选项 (可变长度) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据部分 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
重要字段:
- 序列号(Seq): 数据字节流的编号
- 确认号(Ack): 期望收到的下一个字节
- 标志位:
SYN: 同步,建立连接ACK: 确认FIN: 结束,关闭连接RST: 重置连接PSH: 推送数据URG: 紧急数据
- 窗口大小: 接收缓冲区大小,用于流量控制
2. TCP三次握手与四次挥手
2.1 三次握手(建立连接)
客户端 服务器
│ │
│ 状态: CLOSED │ 状态: LISTEN
│ │
├────── 1. SYN (seq=x) ────────────────► │
│ 状态: SYN_SENT │ 状态: SYN_RCVD
│ │
│◄─── 2. SYN+ACK (seq=y, ack=x+1) ──────┤
│ 状态: ESTABLISHED │
│ │
├────── 3. ACK (ack=y+1) ──────────────► │
│ │ 状态: ESTABLISHED
│ │
│════════ 连接建立,可以传输数据 ═════════│
为什么需要三次握手?
-
两次不够:无法确认客户端的接收能力
场景:旧的SYN请求延迟到达 客户端发送SYN1 → 超时 客户端发送SYN2 → 成功建立连接 延迟的SYN1到达 → 服务器建立连接 → 资源浪费 三次握手可以避免:客户端不会响应旧SYN的SYN+ACK -
防止已失效的连接请求到达服务器
-
同步双方初始序列号
2.2 四次挥手(关闭连接)
客户端 服务器
│ │
│ 状态: ESTABLISHED │ 状态: ESTABLISHED
│ │
├────── 1. FIN (seq=u) ────────────────► │
│ 状态: FIN_WAIT_1 │ 状态: CLOSE_WAIT
│ │
│◄────── 2. ACK (ack=u+1) ──────────────┤
│ 状态: FIN_WAIT_2 │
│ │
│ (服务器继续发送剩余数据) │
│ │
│◄────── 3. FIN (seq=v) ────────────────┤
│ 状态: TIME_WAIT │ 状态: LAST_ACK
│ │
├────── 4. ACK (ack=v+1) ──────────────► │
│ │ 状态: CLOSED
│ │
│ 等待2MSL (Maximum Segment Lifetime) │
│ 状态: CLOSED │
为什么需要四次挥手?
TCP是全双工通信:
- 第1次:客户端告诉服务器"我不再发送数据了"
- 第2次:服务器确认"收到,但我可能还有数据要发"
- 第3次:服务器告诉客户端"我也发送完了"
- 第4次:客户端确认"收到"
TIME_WAIT状态(2MSL):
- MSL: 报文最大生存时间(通常2分钟)
- 作用:
- 确保最后的ACK被接收(否则服务器会重发FIN)
- 确保旧连接的所有报文都消失
2.3 TCP状态转换图
主动打开
CLOSED ──────────────────► SYN_SENT
│ │
│ 被动打开 │ 收到SYN+ACK
│ │ 发送ACK
▼ ▼
LISTEN ───收到SYN───► SYN_RCVD
│ 发送SYN+ACK │
│ │ 收到ACK
│ │
└──────────────────────────┴──► ESTABLISHED
│ │
│ │
主动关闭 │ │ 被动关闭
发送FIN │ │ 收到FIN
▼ │ ▼
FIN_WAIT_1 │ CLOSE_WAIT
│ │ │
│ 收到ACK │ │ 发送FIN
▼ │ ▼
FIN_WAIT_2 │ LAST_ACK
│ │ │
│ 收到FIN │ │ 收到ACK
│ 发送ACK │ ▼
▼ │ CLOSED
TIME_WAIT │
│ │
│ 等待2MSL │
▼ │
CLOSED ◄───────────────────┘
3. UDP协议
3.1 UDP vs TCP
| 特性 | TCP | UDP |
|---|---|---|
| 连接 | 面向连接 | 无连接 |
| 可靠性 | 可靠(重传、确认) | 不可靠(无重传) |
| 有序性 | 保证顺序 | 不保证顺序 |
| 速度 | 慢(开销大) | 快(开销小) |
| 头部大小 | 20字节 | 8字节 |
| 流量控制 | 有 | 无 |
| 拥塞控制 | 有 | 无 |
| 应用场景 | HTTP、FTP、邮件 | DNS、视频、游戏 |
3.2 UDP报文结构
0 7 8 15 16 23 24 31
+--------+--------+--------+--------+
| 源端口 | 目标端口 |
+--------+--------+--------+--------+
| UDP长度 | 校验和 |
+--------+--------+--------+--------+
| |
| 数据部分 |
| |
+-----------------------------------+
总大小: 8字节头部 + 数据
3.3 UDP应用场景
✅ 适合UDP的场景:
1. 实时性要求高
- 视频直播(丢几帧无所谓)
- 语音通话(偶尔断音可接受)
- 在线游戏(实时位置同步)
2. 数据量小、简单查询
- DNS查询(一问一答)
- DHCP(分配IP地址)
- NTP(时间同步)
3. 广播/组播
- 局域网设备发现
- IPTV
- 股票行情推送
❌ 不适合UDP的场景:
1. 需要可靠传输
- 文件下载
- 网页浏览
- 邮件发送
2. 大数据传输
- 数据库同步
- 大文件传输
4. IP地址与子网
4.1 IP地址分类
IPv4地址(32位)
A类: 0.0.0.0 - 127.255.255.255
网络号(8位) + 主机号(24位)
可用: 1.0.0.0 - 126.255.255.255
用途: 大型网络
B类: 128.0.0.0 - 191.255.255.255
网络号(16位) + 主机号(16位)
用途: 中型网络
C类: 192.0.0.0 - 223.255.255.255
网络号(24位) + 主机号(8位)
用途: 小型网络
D类: 224.0.0.0 - 239.255.255.255
组播地址
E类: 240.0.0.0 - 255.255.255.255
保留地址
私有IP地址
A类: 10.0.0.0 - 10.255.255.255 (1个A类网络)
B类: 172.16.0.0 - 172.31.255.255 (16个B类网络)
C类: 192.168.0.0 - 192.168.255.255 (256个C类网络)
特殊地址:
127.0.0.1 - 本地回环地址
0.0.0.0 - 本机所有IP
255.255.255.255 - 广播地址
4.2 子网掩码与CIDR
IP地址: 192.168.1.100
子网掩码: 255.255.255.0
二进制表示:
IP: 11000000.10101000.00000001.01100100
掩码: 11111111.11111111.11111111.00000000
↑────────网络部分────────↑ ↑主机部分↑
网络地址 = IP & 掩码 = 192.168.1.0
广播地址 = 网络地址 | ~掩码 = 192.168.1.255
可用主机: 192.168.1.1 - 192.168.1.254 (254个)
CIDR表示法
192.168.1.0/24 = 192.168.1.0 + 255.255.255.0
24位网络号,8位主机号
常见CIDR:
/32 = 255.255.255.255 (1个地址,单主机)
/30 = 255.255.255.252 (4个地址,点对点链路)
/24 = 255.255.255.0 (256个地址,C类网络)
/16 = 255.255.0.0 (65536个地址,B类网络)
/8 = 255.0.0.0 (16777216个地址,A类网络)
子网划分示例
原网络: 192.168.1.0/24 (256个地址)
需求: 划分为4个子网
计算:
256 ÷ 4 = 64 (每个子网64个地址)
新掩码: /26 (11111111.11111111.11111111.11000000)
子网1: 192.168.1.0/26 (192.168.1.0 - 192.168.1.63)
子网2: 192.168.1.64/26 (192.168.1.64 - 192.168.1.127)
子网3: 192.168.1.128/26 (192.168.1.128 - 192.168.1.191)
子网4: 192.168.1.192/26 (192.168.1.192 - 192.168.1.255)
每个子网:
- 网络地址: 第1个 (不可用)
- 可用地址: 62个
- 广播地址: 最后1个 (不可用)
4.3 IPv6
IPv6地址: 128位,16进制表示
格式: 2001:0db8:85a3:0000:0000:8a2e:0370:7334
简写规则:
1. 省略前导0
2001:db8:85a3:0:0:8a2e:370:7334
2. 连续的0可用::替代(只能用一次)
2001:db8:85a3::8a2e:370:7334
特殊地址:
::1 - 本地回环 (等同IPv4的127.0.0.1)
:: - 未指定地址 (等同IPv4的0.0.0.0)
fe80::/10 - 链路本地地址
fc00::/7 - 唯一本地地址(私有)
2000::/3 - 全局单播地址(公网)
5. DNS域名解析
5.1 DNS解析流程
用户输入: www.example.com
1. 浏览器缓存
├─ 命中 → 返回IP
└─ 未命中 ↓
2. 操作系统缓存
├─ Windows: ipconfig /displaydns
├─ Linux: /etc/hosts
└─ 未命中 ↓
3. 本地DNS服务器(ISP提供)
├─ 缓存命中 → 返回IP
└─ 未命中 → 递归查询 ↓
4. 根DNS服务器 (.)
└─ 返回: .com的DNS服务器地址
5. 顶级域DNS服务器 (.com)
└─ 返回: example.com的DNS服务器地址
6. 权威DNS服务器 (example.com)
└─ 返回: www.example.com的IP地址
7. 返回给客户端并缓存
客户端 本地DNS 根DNS .com DNS example.com DNS
│ │ │ │ │
├─ 查询www.example.com─►│ │ │ │
│ │ │ │ │
│ ├─查询.com的NS─►│ │ │
│ │◄───返回.com NS─┤ │ │
│ │ │ │ │
│ ├─查询example.com─►│ │ │
│ │◄───返回example NS─┤ │ │
│ │ │ │ │
│ ├─查询www记录────────────────────►│
│ │◄────返回IP地址───────────────────┤
│ │ │ │ │
│◄────返回IP地址──────┤ │ │ │
5.2 DNS记录类型
A记录 (Address)
example.com IN A 192.168.1.1
- 域名 → IPv4地址
AAAA记录
example.com IN AAAA 2001:db8::1
- 域名 → IPv6地址
CNAME记录 (Canonical Name)
www.example.com IN CNAME example.com
- 别名 → 真实域名
MX记录 (Mail Exchange)
example.com IN MX 10 mail.example.com
- 邮件服务器(数字是优先级)
TXT记录
example.com IN TXT "v=spf1 include:_spf.example.com ~all"
- 文本信息(SPF、域名验证等)
NS记录 (Name Server)
example.com IN NS ns1.example.com
- 域名服务器
PTR记录 (Pointer)
1.1.168.192.in-addr.arpa IN PTR example.com
- IP → 域名(反向解析)
SOA记录 (Start of Authority)
- 域名授权信息
5.3 DNS优化
// 1. 减少DNS查询
// 使用CDN(同一域名)
<script src="https://cdn.example.com/jquery.js"></script>
<img src="https://cdn.example.com/logo.png">
// 2. DNS预解析
<link rel="dns-prefetch" href="//api.example.com">
<link rel="dns-prefetch" href="//cdn.example.com">
// 3. DNS缓存
// 设置TTL(Time To Live)
example.com IN A 3600 192.168.1.1
↑ TTL=1小时
// 4. 使用多个DNS服务器
nameserver 8.8.8.8 # Google DNS
nameserver 1.1.1.1 # Cloudflare DNS
nameserver 114.114.114.114 # 国内DNS
6. 网络性能优化
6.1 TCP优化
慢启动与拥塞控制
慢启动 (Slow Start):
拥塞窗口 cwnd 指数增长
RTT 1: cwnd = 1 MSS → 发送1个数据包
RTT 2: cwnd = 2 MSS → 发送2个数据包
RTT 3: cwnd = 4 MSS → 发送4个数据包
RTT 4: cwnd = 8 MSS → 发送8个数据包
...
直到达到慢启动阈值 ssthresh
拥塞避免 (Congestion Avoidance):
cwnd 线性增长
RTT 5: cwnd = 9 MSS
RTT 6: cwnd = 10 MSS
RTT 7: cwnd = 11 MSS
...
发生丢包:
1. 超时重传 → ssthresh = cwnd/2, cwnd = 1
2. 快速重传 → ssthresh = cwnd/2, cwnd = ssthresh
TCP优化参数
# Linux系统优化
# 1. 增大TCP缓冲区
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216
sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
# 2. 启用TCP窗口缩放
sysctl -w net.ipv4.tcp_window_scaling=1
# 3. 增大连接队列
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=8192
# 4. 减少TIME_WAIT
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_tw_reuse=1
# 5. 启用TCP Fast Open
sysctl -w net.ipv4.tcp_fastopen=3
# 6. 调整keepalive
sysctl -w net.ipv4.tcp_keepalive_time=600
sysctl -w net.ipv4.tcp_keepalive_intvl=30
sysctl -w net.ipv4.tcp_keepalive_probes=3
6.2 应用层优化
HTTP优化
1. 启用HTTP/2
- 多路复用
- 头部压缩
- 服务器推送
2. 启用GZIP压缩
Content-Encoding: gzip
压缩比: 70-90%
3. 使用CDN
- 就近访问
- 减轻源站压力
4. 启用浏览器缓存
Cache-Control: max-age=31536000
ETag: "abc123"
5. 减少请求数
- 合并JS/CSS文件
- 使用CSS Sprites
- 内联小图片(Base64)
6. 使用HTTP缓存
- 强缓存: Cache-Control, Expires
- 协商缓存: Last-Modified, ETag
数据库查询优化
-- 1. 使用索引
CREATE INDEX idx_user_email ON users(email);
-- 2. 避免SELECT *
SELECT id, name, email FROM users; -- ✅
SELECT * FROM users; -- ❌
-- 3. 使用LIMIT
SELECT * FROM orders LIMIT 100;
-- 4. 避免子查询(使用JOIN)
SELECT u.* FROM users u
JOIN orders o ON u.id = o.user_id; -- ✅
SELECT * FROM users
WHERE id IN (SELECT user_id FROM orders); -- ❌
-- 5. 使用批量操作
INSERT INTO users (name, email) VALUES
('User1', 'email1@test.com'),
('User2', 'email2@test.com'); -- ✅
-- 多次单条插入 -- ❌
7. 常见网络问题排查
7.1 网络诊断命令
ping - 测试连通性
# 基本用法
ping www.google.com
# 指定次数
ping -c 4 www.google.com
# 结果分析
PING www.google.com (172.217.160.100): 56 data bytes
64 bytes from 172.217.160.100: icmp_seq=0 ttl=118 time=2.345 ms
↑ ↑
生存时间 往返时延
--- www.google.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.123/2.345/2.567/0.123 ms
问题诊断:
- 100% 丢包 → 网络不通或防火墙阻止
- 部分丢包 → 网络不稳定
- TTL很小 → 路由跳数太多
- 时延很大 → 网络拥塞或距离远
traceroute - 追踪路由
# Linux
traceroute www.google.com
# Windows
tracert www.google.com
# 结果
1 192.168.1.1 (192.168.1.1) 1.234 ms 0.987 ms 1.123 ms
2 10.0.0.1 (10.0.0.1) 5.678 ms 5.432 ms 5.890 ms
3 * * * (超时)
4 172.217.160.100 12.345 ms 12.123 ms 12.567 ms
分析:
- 显示数据包经过的每个路由器
- * * * 表示该跳不响应或被防火墙阻止
- 可以定位网络瓶颈
netstat - 网络连接状态
# 查看所有连接
netstat -an
# 查看TCP连接
netstat -ant
# 查看监听端口
netstat -tln
# 查看进程
netstat -tnlp
# 结果
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx
tcp 0 0 192.168.1.100:80 203.0.113.5:54321 ESTABLISHED 5678/nginx
tcp 0 0 192.168.1.100:80 203.0.113.6:54322 TIME_WAIT -
状态说明:
LISTEN - 监听状态
ESTABLISHED - 已建立连接
TIME_WAIT - 等待关闭
CLOSE_WAIT - 等待关闭(对方关闭)
FIN_WAIT_1/2 - 主动关闭
tcpdump - 抓包分析
# 抓取指定端口
tcpdump -i eth0 port 80
# 抓取指定主机
tcpdump -i eth0 host 192.168.1.100
# 保存到文件
tcpdump -i eth0 -w capture.pcap
# 读取文件
tcpdump -r capture.pcap
# 过滤HTTP GET请求
tcpdump -i eth0 -A 'tcp port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420)'
ss - Socket统计
# 比netstat更快
# 查看所有TCP连接
ss -ant
# 查看监听端口
ss -tln
# 查看连接统计
ss -s
# 结果
Total: 183 (kernel 0)
TCP: 10 (estab 3, closed 2, orphaned 0, synrecv 0, timewait 2/0), ports 0
Transport Total IP IPv6
* 183 - -
RAW 0 0 0
UDP 7 5 2
TCP 8 6 2
INET 15 11 4
nslookup/dig - DNS查询
# nslookup
nslookup www.google.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Name: www.google.com
Address: 172.217.160.100
# dig (更详细)
dig www.google.com
; <<>> DiG 9.10.6 <<>> www.google.com
;; ANSWER SECTION:
www.google.com. 300 IN A 172.217.160.100
;; Query time: 23 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
7.2 常见问题排查
无法连接服务器
# 1. 检查网络连通性
ping server_ip
# 2. 检查端口是否开放
telnet server_ip 80
# 或
nc -zv server_ip 80
# 3. 检查防火墙
# Linux
iptables -L -n
firewall-cmd --list-all
# 4. 检查服务是否运行
ps aux | grep nginx
systemctl status nginx
# 5. 检查监听端口
netstat -tln | grep 80
网络缓慢
# 1. 检查带宽
iftop # 实时流量监控
iperf3 # 带宽测试
# 2. 检查延迟
ping -c 100 server_ip | tail -1
# 3. 检查丢包
ping -c 100 server_ip | grep loss
# 4. 检查连接数
ss -s
netstat -an | wc -l
# 5. 检查系统资源
top # CPU、内存
iostat # 磁盘IO
连接超时
# 1. 增加超时时间
curl --connect-timeout 10 --max-time 30 http://example.com
# 2. 检查DNS解析
time nslookup example.com
# 3. 检查路由
traceroute example.com
# 4. 检查MTU
ping -M do -s 1472 example.com # Linux
ping -D -s 1472 example.com # macOS
8. 面试高频题
Q1: TCP和UDP的区别?使用场景?
A: 见3.1节
场景选择:
使用TCP:
✅ 需要可靠传输(文件下载、网页浏览)
✅ 数据完整性要求高(支付交易、数据库同步)
✅ 有序传输(HTTP请求)
使用UDP:
✅ 实时性要求高(视频直播、语音通话)
✅ 允许少量丢包(游戏位置同步)
✅ 广播/组播(局域网发现)
✅ 简单查询(DNS)
Q2: 为什么TCP握手是三次,挥手是四次?
A:
三次握手:
- 客户端 → 服务器: SYN(我要连接)
- 服务器 → 客户端: SYN+ACK(可以,我也准备好了)
- 客户端 → 服务器: ACK(收到,开始传输)
为什么不是两次?防止已失效的连接请求到达服务器造成资源浪费。
四次挥手:
- 客户端 → 服务器: FIN(我不发了)
- 服务器 → 客户端: ACK(知道了)
- 服务器 → 客户端: FIN(我也不发了)← 可能延迟
- 客户端 → 服务器: ACK(知道了)
为什么不是三次?TCP是全双工,关闭需要双方都同意,但服务器可能还有数据要发。
Q3: TIME_WAIT状态有什么作用?过多如何解决?
A:
作用:
- 确保最后的ACK被对方收到
- 确保旧连接的所有报文都消失
TIME_WAIT过多的问题:
- 占用端口(客户端有65535个端口限制)
- 占用内存
解决方案:
# 1. 启用端口复用
sysctl -w net.ipv4.tcp_tw_reuse=1
# 2. 减少TIME_WAIT时间
sysctl -w net.ipv4.tcp_fin_timeout=30
# 3. 使用长连接
Connection: keep-alive
# 4. 使用连接池
Q4: 从输入URL到页面展示,经历了什么?
A:
1. URL解析
https://www.example.com/index.html
2. DNS解析
www.example.com → 192.168.1.1
3. TCP三次握手
建立连接
4. TLS握手(如果是HTTPS)
- 协商加密套件
- 证书验证
- 生成会话密钥
5. 发送HTTP请求
GET /index.html HTTP/1.1
Host: www.example.com
6. 服务器处理请求
- 路由匹配
- 业务处理
- 返回响应
7. 浏览器解析渲染
- 解析HTML → DOM树
- 解析CSS → CSSOM树
- 合并 → 渲染树
- 布局 → 绘制
8. 加载资源
- JS、CSS、图片等
9. 页面交互就绪
10. TCP四次挥手
关闭连接(或保持连接)
Q5: 如何理解TCP的流量控制和拥塞控制?
A:
流量控制 (Flow Control):
- 目的: 防止发送方发送太快,接收方来不及处理
- 机制: 滑动窗口
- 窗口大小: 接收方通告的接收缓冲区大小
接收方窗口: 4096字节
发送方最多发送: 4096字节
接收方处理后: 通告新窗口大小
拥塞控制 (Congestion Control):
- 目的: 防止网络拥塞
- 机制:
- 慢启动 (Slow Start): cwnd指数增长
- 拥塞避免 (Congestion Avoidance): cwnd线性增长
- 快速重传 (Fast Retransmit): 收到3个重复ACK立即重传
- 快速恢复 (Fast Recovery): 不回到慢启动
Q6: 常见HTTP状态码?
A:
2xx 成功:
200 OK - 请求成功
201 Created - 创建成功
204 No Content - 成功但无内容返回
3xx 重定向:
301 Moved Permanently - 永久重定向
302 Found - 临时重定向
304 Not Modified - 资源未修改(缓存)
4xx 客户端错误:
400 Bad Request - 请求错误
401 Unauthorized - 未授权
403 Forbidden - 禁止访问
404 Not Found - 资源不存在
429 Too Many Requests - 请求过多
5xx 服务器错误:
500 Internal Server Error - 服务器错误
502 Bad Gateway - 网关错误
503 Service Unavailable - 服务不可用
504 Gateway Timeout - 网关超时
Q7: HTTPS加密过程?
A:
1. 客户端 → 服务器: Client Hello
- 支持的TLS版本
- 支持的加密套件
- 客户端随机数
2. 服务器 → 客户端: Server Hello
- 选择的TLS版本
- 选择的加密套件
- 服务器随机数
- 服务器证书(含公钥)
3. 客户端验证证书
- 检查CA签名
- 检查有效期
- 检查域名匹配
4. 客户端 → 服务器:
- 生成Pre-Master Secret
- 用服务器公钥加密发送
5. 双方生成会话密钥
Session Key = f(客户端随机数, 服务器随机数, Pre-Master Secret)
6. 开始加密通信
使用对称加密(AES)传输数据
加密算法:
- 非对称加密: RSA/ECDHE (握手)
- 对称加密: AES-256-GCM (数据传输)
- 哈希算法: SHA-256 (完整性)
总结
核心要点
- TCP/IP: 三次握手、四次挥手、状态转换
- 协议对比: TCP vs UDP,选择依据
- IP地址: 分类、子网划分、CIDR
- DNS: 解析流程、记录类型、优化
- 性能优化: TCP参数、HTTP优化、缓存
- 问题排查: 诊断命令、常见问题
面试建议
- 理解协议原理,不只是记概念
- 能画出握手/挥手流程图
- 掌握常用网络命令
- 结合实际项目经验
推荐书籍:
- 《TCP/IP详解 卷1》
- 《图解TCP/IP》
- 《计算机网络 自顶向下方法》