计算机网络核心知识点详解

前言

计算机网络是现代软件系统的基石,理解网络协议和优化技术对于开发高性能、高可用的应用系统至关重要。本文将系统梳理HTTP/HTTPS、TCP/IP、DNS、负载均衡、网络优化等核心知识点,结合典型面试题型进行深入解析。

第一章:HTTP/HTTPS协议详解

1.1 HTTP协议基础

1.1.1 HTTP协议概述

HTTP(HyperText Transfer Protocol)是一种应用层协议,基于TCP/IP协议栈,用于在Web浏览器和服务器之间传输超文本。

HTTP协议特点:

  • 无连接:每次请求都需要建立新的连接(HTTP/1.1之前)
  • 无状态:协议对事务处理没有记忆能力
  • 灵活:可以传输任意类型的数据
  • 简单快速:客户端向服务器请求服务时,只需传送请求方法和路径

1.1.2 HTTP请求报文结构

1
2
3
4
5
6
7
8
9
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml
Accept-Language: zh-CN,zh;q=0.9
Accept-Encoding: gzip, deflate
Connection: keep-alive

请求体(可选)

请求报文组成:

  1. 请求行(Request Line):方法 + URL + 协议版本
  2. 请求头(Headers):键值对形式
  3. 空行:分隔请求头和请求体
  4. 请求体(可选):POST请求的数据

1.1.3 HTTP响应报文结构

1
2
3
4
5
6
7
8
9
10
HTTP/1.1 200 OK
Date: Mon, 19 Dec 2024 10:00:00 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Server: Apache/2.4.41
Cache-Control: max-age=3600

<html>
<body>Hello World</body>
</html>

响应报文组成:

  1. 状态行:协议版本 + 状态码 + 状态描述
  2. 响应头:服务器信息、内容类型等
  3. 空行:分隔响应头和响应体
  4. 响应体:实际返回的数据

1.2 HTTP状态码详解

1.2.1 状态码分类

分类 范围 描述
1xx 100-199 信息性状态码
2xx 200-299 成功状态码
3xx 300-399 重定向状态码
4xx 400-499 客户端错误状态码
5xx 500-599 服务器错误状态码

1.2.2 常见状态码

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:资源不存在

5xx 服务器错误

  • 500 Internal Server Error:服务器内部错误
  • 502 Bad Gateway:网关错误
  • 503 Service Unavailable:服务不可用

1.3 HTTP方法详解

1.3.1 常用HTTP方法

方法 描述 幂等性 安全性
GET 获取资源
POST 创建资源
PUT 更新资源
DELETE 删除资源
HEAD 获取响应头
OPTIONS 获取支持的方法
PATCH 部分更新资源

1.3.2 GET vs POST区别

特性 GET POST
参数位置 URL中 请求体中
数据长度 受URL长度限制 无限制
安全性 参数可见 参数不可见
幂等性
缓存 可被缓存 不可缓存
历史记录 保留在浏览器历史 不保留

1.4 HTTP版本演进

1.4.1 HTTP/1.0 vs HTTP/1.1

HTTP/1.0特点:

  • 每次请求都需要建立新的TCP连接
  • 不支持持久连接
  • 不支持管道化

HTTP/1.1改进:

  • 默认支持持久连接(Connection: keep-alive)
  • 支持管道化(Pipelining)
  • 支持分块传输编码
  • 支持虚拟主机
  • 增加了缓存控制机制

1.4.2 HTTP/2特性

HTTP/2核心特性:

  • 二进制分帧:将数据分割为更小的帧进行传输
  • 多路复用:在一个连接上并发多个请求
  • 头部压缩:使用HPACK算法压缩头部
  • 服务器推送:服务器可以主动向客户端推送资源
  • 优先级和依赖:可以为请求设置优先级

1.4.3 HTTP/3特性

HTTP/3核心特性:

  • 基于QUIC协议(基于UDP)
  • 内置加密(TLS 1.3)
  • 连接迁移:网络切换时连接不中断
  • 0-RTT恢复:更快的连接建立
  • 无队头阻塞:解决HTTP/2的队头阻塞问题

1.5 HTTPS协议详解

1.5.1 HTTPS工作原理

HTTPS(HTTP Secure)是HTTP的安全版本,在HTTP和TCP之间加入了SSL/TLS协议层,提供加密、身份认证和数据完整性保护。

HTTPS通信过程:

  1. TCP三次握手:建立TCP连接
  2. SSL/TLS握手:协商加密参数
  3. 证书验证:验证服务器身份
  4. 密钥交换:生成会话密钥
  5. 加密通信:使用对称加密传输数据

1.5.2 SSL/TLS握手过程

TLS 1.2握手过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Client                                               Server
------ ------
1. Client Hello ---------------------------->
(支持的TLS版本、随机数、加密套件)

2. <---------------------------- Server Hello
(选择的TLS版本、随机数、加密套件)

3. <---------------------------- Certificate
(服务器证书链)

4. <---------------------------- Server Key Exchange
(可选,用于ECDHE等密钥交换)

5. <---------------------------- Server Hello Done

6. Client Key Exchange ---------------------------->
(预主密钥,用服务器公钥加密)

7. Change Cipher Spec ---------------------------->
(通知启用加密)

8. Finished ---------------------------->
(握手消息完整性校验)

9. <---------------------------- Change Cipher Spec

10. <---------------------------- Finished
(握手消息完整性校验)

TLS 1.3改进:

  • 减少握手次数(从2-RTT到1-RTT)
  • 更强的加密算法
  • 前向保密性增强
  • 移除不安全的算法

1.5.3 证书体系

证书类型:

  • DV证书:域名验证,验证域名所有权
  • OV证书:组织验证,验证组织身份
  • EV证书:扩展验证,最严格的验证

证书链验证:

1
2
3
4
5
根证书CA

中间证书CA

服务器证书

1.5.4 HTTPS性能优化

连接优化:

  • 会话复用:复用之前的TLS会话
  • OCSP Stapling:服务器预先获取证书状态
  • HSTS:强制使用HTTPS

证书优化:

  • 证书压缩:减少证书传输大小
  • 证书选择:选择合适的证书类型
  • CDN证书:使用CDN提供的证书

第二章:TCP/IP协议详解

2.1 TCP/IP协议栈

2.1.1 协议栈分层

层级 协议 数据单元 功能
应用层 HTTP, FTP, SMTP 报文 应用程序间通信
传输层 TCP, UDP 段/数据报 端到端通信
网络层 IP, ICMP, ARP 数据包 路由和寻址
数据链路层 Ethernet, Wi-Fi 物理网络传输
物理层 电缆, 光纤 比特 原始比特流传输

2.1.2 数据封装过程

1
2
3
4
5
6
7
8
9
应用层数据

传输层首部 + 应用层数据 = TCP段

网络层首部 + TCP段 = IP数据包

数据链路层首部 + IP数据包 + 数据链路层尾部 = 帧

物理层比特流

2.2 TCP协议详解

2.2.1 TCP首部结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

2.2.2 TCP三次握手

三次握手过程:

1
2
3
4
5
6
7
8
9
10
Client                              Server
------ ------
1. SYN=1, seq=x ---------------->
(同步序列号)

2. <---------------- SYN=1, ACK=1, seq=y, ack=x+1
(同步序列号,确认客户端序列号)

3. ACK=1, seq=x+1, ack=y+1 ---------------->
(确认服务器序列号)

为什么是三次握手?

  • 防止已失效的连接请求报文突然传送到服务器
  • 确保双方收发能力正常
  • 同步初始序列号

TCP连接状态:

  • CLOSED:初始状态
  • LISTEN:服务器等待连接
  • SYN-SENT:客户端发送SYN后
  • SYN-RECEIVED:服务器收到SYN并发送SYN+ACK
  • ESTABLISHED:连接建立成功

2.2.3 TCP四次挥手

四次挥手过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
Client                              Server
------ ------
1. FIN=1, seq=u ---------------->
(客户端请求释放连接)

2. <---------------- ACK=1, ack=u+1
(服务器确认收到释放请求)

3. <---------------- FIN=1, seq=v
(服务器请求释放连接)

4. ACK=1, ack=v+1 ---------------->
(客户端确认收到释放请求)

为什么是四次挥手?

  • TCP是全双工通信,需要分别关闭两个方向的连接
  • 服务器可能还有数据需要发送
  • 确保数据完整传输

TCP连接状态:

  • FIN-WAIT-1:客户端发送FIN后
  • FIN-WAIT-2:客户端收到ACK后
  • CLOSE-WAIT:服务器收到FIN后
  • LAST-ACK:服务器发送FIN后
  • TIME-WAIT:客户端收到FIN后等待2MSL
  • CLOSED:连接完全关闭

2.2.4 TCP可靠传输机制

1. 序列号和确认应答机制

1
2
发送方:为每个字节数据编号
接收方:发送确认号表示期望收到的下一个字节序号

2. 超时重传机制

  • 设置超时时间RTO(Retransmission Timeout)
  • 自适应重传:根据网络状况动态调整RTO
  • 快速重传:收到3个重复ACK立即重传

3. 流量控制机制

  • 滑动窗口机制:接收方通过窗口大小告知发送方可接收的数据量
  • 窗口探测:当接收方窗口为0时,发送方定期探测窗口大小

4. 拥塞控制机制

  • 慢开始:指数增长拥塞窗口
  • 拥塞避免:线性增长拥塞窗口
  • 快重传:收到3个重复ACK时重传
  • 快恢复:重传后进入快恢复阶段

2.2.5 TCP滑动窗口机制

发送窗口:

1
2
3
已发送并确认 | 已发送未确认 | 允许发送 | 不允许发送
↑ ↑ ↑ ↑
SND.UNA SND.NXT SND.UNA+SND.WND

接收窗口:

1
2
3
已接收并确认 | 允许接收 | 不允许接收
↑ ↑ ↑
RCV.NXT RCV.NXT+RCV.WND

2.3 TCP拥塞控制算法

2.3.1 传统拥塞控制算法

1. 慢开始(Slow Start)

  • 初始拥塞窗口cwnd = 1 MSS
  • 每收到一个ACK,cwnd增加1 MSS
  • 当cwnd ≥ ssthresh时,进入拥塞避免

2. 拥塞避免(Congestion Avoidance)

  • 每经过一个RTT,cwnd增加1 MSS
  • 线性增长,避免拥塞

3. 快重传(Fast Retransmit)

  • 收到3个重复ACK立即重传
  • 不等待超时

4. 快恢复(Fast Recovery)

  • ssthresh = cwnd/2
  • cwnd = ssthresh + 3 MSS
  • 收到新ACK时,cwnd = ssthresh

2.3.2 现代拥塞控制算法

1. BBR(Bottleneck Bandwidth and RTT)

  • Google开发的拥塞控制算法
  • 基于带宽和RTT测量
  • 更高的吞吐量和更低的延迟

2. Cubic

  • Linux默认拥塞控制算法
  • 基于时间的窗口增长
  • 适合高带宽延迟积网络

2.4 UDP协议详解

2.4.1 UDP特点

  • 无连接:不需要建立连接
  • 不可靠:不保证数据到达
  • 面向报文:保留应用层报文边界
  • 无拥塞控制:发送速率恒定
  • 首部开销小:仅8字节

2.4.2 UDP首部结构

1
2
3
4
5
6
7
8
9
10
11
 0      7 8     15 16    23 24    31
+--------+--------+--------+--------+
| Source | Destination |
| Port | Port |
+--------+--------+--------+--------+
| | |
| Length | Checksum |
+--------+--------+--------+--------+
| |
| Data Octets ... |
+-----------------------------------+

2.4.3 UDP vs TCP对比

特性 TCP UDP
连接性 面向连接 无连接
可靠性 可靠传输 不可靠传输
流量控制
拥塞控制
传输效率 较低 较高
首部开销 20-60字节 8字节
适用场景 文件传输、网页浏览 视频流、DNS查询

第三章:DNS系统详解

3.1 DNS基础概念

3.1.1 DNS系统架构

DNS层级结构:

1
2
3
4
5
6
7
根域名服务器

顶级域名服务器(.com, .org, .net等)

权威域名服务器(example.com)

本地DNS服务器(ISP提供)

3.1.2 DNS记录类型

记录类型 描述 示例
A IPv4地址记录 example.com → 93.184.216.34
AAAA IPv6地址记录 example.com → 2606:2800:220:1:248:1893:25c8:1946
CNAME 别名记录 www.example.com → example.com
MX 邮件交换记录 example.com → mail.example.com
TXT 文本记录 SPF、DKIM验证
NS 域名服务器记录 example.com → ns1.example.com
PTR 反向解析记录 34.216.184.93.in-addr.arpa → example.com

3.2 DNS解析过程

3.2.1 完整解析流程

递归查询过程:

1
2
3
4
5
6
7
8
9
10
1. 浏览器检查本地缓存
2. 操作系统检查hosts文件
3. 本地DNS服务器检查缓存
4. 本地DNS服务器向根服务器查询
5. 根服务器返回顶级域名服务器地址
6. 本地DNS服务器向顶级域名服务器查询
7. 顶级域名服务器返回权威域名服务器地址
8. 本地DNS服务器向权威域名服务器查询
9. 权威域名服务器返回IP地址
10. 本地DNS服务器缓存结果并返回

3.2.2 DNS缓存机制

缓存层级:

  • 浏览器缓存:Chrome默认缓存1分钟
  • 操作系统缓存:Windows缓存15分钟
  • 本地DNS服务器缓存:TTL决定缓存时间
  • 递归DNS服务器缓存:ISP提供的缓存

TTL(Time To Live):

  • 指定DNS记录在缓存中的存活时间
  • 平衡性能和一致性
  • 短TTL:快速故障转移
  • 长TTL:减少DNS查询开销

3.3 DNS安全机制

3.3.1 DNS劫持攻击

常见攻击类型:

  • DNS缓存投毒:向DNS缓存注入伪造记录
  • DNS劫持:重定向DNS查询到恶意服务器
  • 中间人攻击:拦截和修改DNS响应

3.3.2 DNSSEC安全扩展

DNSSEC功能:

  • 数字签名:验证DNS响应的真实性
  • 链式验证:从根到子域名的完整验证
  • 防止缓存投毒:确保DNS记录未被篡改

DNSSEC记录类型:

  • DNSKEY:存储公钥
  • RRSIG:资源记录签名
  • DS:父域对子域的信任锚点
  • NSEC/NSEC3:证明记录不存在

3.3.3 DoH和DoT

DoH(DNS over HTTPS):

  • 通过HTTPS协议传输DNS查询
  • 加密DNS流量,防止窃听和篡改
  • 端口:443

DoT(DNS over TLS):

  • 通过TLS协议传输DNS查询
  • 专用端口853
  • 更好的性能优化

3.4 DNS负载均衡

3.4.1 基于DNS的负载均衡

轮询DNS:

1
2
3
example.com → 192.168.1.1
example.com → 192.168.1.2
example.com → 192.168.1.3

地理位置负载均衡:

  • 根据用户地理位置返回最近的服务器IP
  • 使用EDNS0扩展获取客户端子网信息
  • CDN常用的负载均衡策略

3.4.2 健康检查机制

DNS健康检查:

  • 定期检测服务器可用性
  • 自动从DNS响应中移除故障服务器
  • 支持多种检查方式:HTTP、TCP、ICMP

第四章:负载均衡详解

4.1 负载均衡基础概念

4.1.1 负载均衡类型

按OSI分层:

  • L2负载均衡:基于MAC地址
  • L3负载均衡:基于IP地址
  • L4负载均衡:基于TCP/UDP端口
  • L7负载均衡:基于应用层内容

按实现方式:

  • 硬件负载均衡:F5、A10等专业设备
  • 软件负载均衡:Nginx、HAProxy、LVS
  • 云负载均衡:AWS ELB、阿里云SLB

4.2 负载均衡算法

4.2.1 静态负载均衡算法

1. 轮询(Round Robin)

1
2
3
4
5
upstream backend {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}

2. 加权轮询(Weighted Round Robin)

1
2
3
4
5
upstream backend {
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080 weight=2;
server 192.168.1.103:8080 weight=1;
}

3. IP哈希(IP Hash)

1
2
3
4
5
6
upstream backend {
ip_hash;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}

4.2.2 动态负载均衡算法

1. 最少连接(Least Connections)

1
2
3
4
5
6
upstream backend {
least_conn;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}

2. 加权最少连接(Weighted Least Connections)

1
2
3
4
5
6
upstream backend {
least_conn;
server 192.168.1.101:8080 weight=3;
server 192.168.1.102:8080 weight=2;
server 192.168.1.103:8080 weight=1;
}

3. 响应时间(Response Time)

  • 选择响应时间最短的服务器
  • 需要实时监控服务器响应时间
  • 适用于对延迟敏感的应用

4.3 Nginx负载均衡详解

4.3.1 Nginx负载均衡配置

基础配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
http {
upstream backend {
server 192.168.1.101:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.102:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.103:8080 max_fails=3 fail_timeout=30s;
}

server {
listen 80;
server_name example.com;

location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}

4.3.2 健康检查配置

被动健康检查:

1
2
3
4
5
upstream backend {
server 192.168.1.101:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.102:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.103:8080 backup; # 备用服务器
}

主动健康检查(Nginx Plus):

1
2
3
4
5
6
7
8
upstream backend {
zone backend 64k;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;

health_check interval=5s fails=3 passes=2 uri=/health;
}

4.3.3 会话保持

IP哈希会话保持:

1
2
3
4
5
upstream backend {
ip_hash;
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}

Cookie会话保持:

1
2
3
4
5
6
upstream backend {
server 192.168.1.101:8080;
server 192.168.1.102:8080;

sticky cookie srv_id expires=1h domain=.example.com path=/;
}

4.4 负载均衡高可用方案

4.4.1 Keepalived + Nginx

主备模式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 主节点配置
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1

virtual_ipaddress {
192.168.1.100
}
}

# 备节点配置
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1

virtual_ipaddress {
192.168.1.100
}
}

4.4.2 集群模式

LVS集群:

  • LVS-NAT:网络地址转换
  • LVS-DR:直接路由
  • LVS-TUN:IP隧道

第五章:网络性能优化

5.1 网络性能指标

5.1.1 关键性能指标

指标 定义 测量工具 优化方向
带宽 数据传输速率 iperf, speedtest 升级链路、压缩数据
延迟 数据往返时间 ping, traceroute CDN、就近部署
丢包率 数据包丢失比例 ping, mtr 网络质量、重传机制
抖动 延迟变化程度 ping -c 100 QoS、缓冲机制
吞吐量 实际传输速率 wget, curl 优化协议、并行传输

5.2 网络优化策略

5.2.1 CDN优化

CDN工作原理:

1
2
3
4
5
1. 用户访问www.example.com
2. DNS解析到最近的CDN节点
3. CDN节点检查缓存
4. 缓存命中:直接返回内容
5. 缓存未命中:回源获取内容并缓存

CDN优化技巧:

  • 缓存策略:设置合理的Cache-Control
  • 缓存预热:提前加载热门内容
  • 版本控制:使用版本号避免缓存污染
  • 域名分片:突破浏览器并发限制

5.2.2 网络协议优化

HTTP优化:

1
2
3
4
5
6
7
8
9
10
11
# 启用gzip压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript;
gzip_min_length 1000;

# 启用HTTP/2
listen 443 ssl http2;

# 优化keepalive
keepalive_timeout 65;
keepalive_requests 100;

TCP优化:

1
2
3
4
5
6
7
8
9
10
# Linux内核参数优化
# 增大TCP缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216

# 启用TCP窗口缩放
net.ipv4.tcp_window_scaling = 1

# 优化TCP拥塞控制
net.ipv4.tcp_congestion_control = bbr

5.2.3 前端网络优化

资源优化:

  • 压缩:Gzip、Brotli压缩
  • 合并:减少HTTP请求数
  • 雪碧图:合并小图标
  • 懒加载:延迟加载非关键资源

缓存优化:

1
2
3
4
5
6
7
8
9
10
11
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}

# HTML不缓存
location ~* \.html$ {
expires -1;
add_header Cache-Control "no-cache, no-store, must-revalidate";
}

5.3 网络监控与诊断

5.3.1 网络监控工具

基础监控:

1
2
3
4
5
6
7
8
9
10
11
12
# 连通性测试
ping www.example.com

# 路由跟踪
traceroute www.example.com
mtr www.example.com

# 端口扫描
nmap -p 80,443 www.example.com

# 带宽测试
iperf3 -c server_ip

高级监控:

1
2
3
4
5
6
7
8
9
10
# TCP连接分析
ss -tuln
netstat -tuln

# 网络抓包
tcpdump -i eth0 port 80
wireshark

# 应用层监控
curl -w "@curl-format.txt" -o /dev/null -s www.example.com

5.3.2 性能分析工具

Web性能分析:

  • WebPageTest:在线性能测试
  • Lighthouse:Google性能审计工具
  • GTmetrix:网站性能分析
  • Pingdom:网站监控服务

网络性能分析:

1
2
3
4
5
6
7
8
9
# 分析HTTP请求
curl -H "Accept-Encoding: gzip" -I www.example.com

# 测试SSL/TLS性能
openssl s_client -connect www.example.com:443

# DNS性能测试
dig www.example.com
nslookup www.example.com

5.4 高并发网络优化

5.4.1 连接池优化

数据库连接池:

1
2
3
4
5
6
HikariConfig config = new HikariConfig();
config.setMaximumPoolSize(20);
config.setMinimumIdle(5);
config.setConnectionTimeout(30000);
config.setIdleTimeout(600000);
config.setMaxLifetime(1800000);

HTTP连接池:

1
2
3
4
5
6
7
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200);
cm.setDefaultMaxPerRoute(50);

CloseableHttpClient httpClient = HttpClients.custom()
.setConnectionManager(cm)
.build();

5.4.2 异步处理优化

NIO优化:

1
2
3
4
5
6
7
8
9
10
Selector selector = Selector.open();
ServerSocketChannel serverChannel = ServerSocketChannel.open();
serverChannel.configureBlocking(false);
serverChannel.register(selector, SelectionKey.OP_ACCEPT);

while (true) {
selector.select();
Set<SelectionKey> selectedKeys = selector.selectedKeys();
// 处理IO事件
}

Netty优化:

1
2
3
4
5
6
7
8
9
10
11
12
13
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new HttpServerCodec());
ch.pipeline().addLast(new HttpObjectAggregator(65536));
ch.pipeline().addLast(new HttpRequestHandler());
}
})
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);

第六章:网络安全与优化

6.1 网络安全威胁

6.1.1 常见网络攻击

DDoS攻击类型:

  • SYN Flood:耗尽服务器连接队列
  • UDP Flood:耗尽网络带宽
  • HTTP Flood:耗尽应用资源
  • DNS放大攻击:利用DNS响应放大攻击流量

防护策略:

1
2
3
4
5
6
7
8
9
10
# 限制连接数
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
location /api/ {
limit_req zone=api burst=20 nodelay;
limit_conn addr 10;
}
}

6.2 安全优化措施

6.2.1 SSL/TLS优化

安全配置:

1
2
3
4
5
6
7
8
9
10
11
# 禁用不安全的协议和算法
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512;
ssl_prefer_server_ciphers off;

# 启用OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;

# 启用HSTS
add_header Strict-Transport-Security "max-age=63072000" always;

6.2.2 WAF配置

ModSecurity规则示例:

1
2
3
4
5
6
7
# 防止SQL注入
SecRule ARGS "@detectSQLi" \
"id:1001,phase:2,block,msg:'SQL Injection Attack Detected'"

# 防止XSS攻击
SecRule ARGS "@detectXSS" \
"id:1002,phase:2,block,msg:'XSS Attack Detected'"

第七章:实战案例分析

7.1 高并发网站架构

7.1.1 电商网站架构

架构层次:

1
用户 → CDN → 负载均衡器 → Web服务器 → 应用服务器 → 缓存层 → 数据库

技术选型:

  • CDN:阿里云CDN、腾讯云CDN
  • 负载均衡:Nginx、LVS、HAProxy
  • Web服务器:Nginx、Apache
  • 应用服务器:Tomcat、Spring Boot
  • 缓存:Redis、Memcached
  • 数据库:MySQL、MongoDB

7.1.2 性能优化案例

案例:某电商大促优化

问题分析:

  • 页面加载时间:8秒
  • 并发连接数:5000
  • 数据库QPS:20000

优化措施:

  1. CDN优化:静态资源CDN化,减少80%回源流量
  2. 连接池优化:数据库连接池从50调整到200
  3. 缓存优化:Redis缓存命中率提升到95%
  4. 负载均衡:从轮询改为最少连接算法

优化结果:

  • 页面加载时间:8秒 → 2秒
  • 并发连接数:5000 → 20000
  • 数据库QPS:20000 → 5000

7.2 微服务网络优化

7.2.1 Service Mesh架构

Istio网络优化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: productpage
spec:
host: productpage
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
http:
http1MaxPendingRequests: 50
maxRequestsPerConnection: 2
loadBalancer:
consistentHash:
httpCookie:
name: "session-affinity"
ttl: 3600s

7.2.2 服务网格性能监控

监控指标:

  • 请求延迟:P50、P95、P99
  • 错误率:4xx、5xx错误比例
  • 吞吐量:RPS(Requests Per Second)
  • 连接数:活跃连接数、连接池使用率

第八章:面试真题解析

8.1 HTTP/HTTPS高频面试题

8.1.1 HTTPS握手过程

详细步骤:

  1. 客户端发送Client Hello
  2. 服务器返回Server Hello + 证书
  3. 客户端验证证书
  4. 密钥交换(ECDHE)
  5. 生成会话密钥
  6. 完成握手

性能优化:

  • 会话复用(Session Resumption)
  • OCSP Stapling
  • HSTS预加载
  • TLS 1.3(0-RTT)

8.1.2 HTTP/2 vs HTTP/1.1

HTTP/2优势:

  • 二进制分帧:减少解析开销
  • 多路复用:解决队头阻塞
  • 头部压缩:HPACK算法
  • 服务器推送:减少RTT

HTTP/2限制:

  • 队头阻塞依然存在(TCP层)
  • 需要HTTPS支持
  • 服务器推送可能浪费带宽

8.2 TCP/IP高频面试题

8.2.1 TCP三次握手详解

为什么需要三次握手?

  1. 防止历史连接:避免已失效的连接请求
  2. 同步序列号:确保双方初始序列号同步
  3. 验证全双工:确认双方收发能力正常

SYN Flood攻击防护:

  • SYN Cookie:不分配资源直到收到ACK
  • SYN Cache:使用哈希表存储半连接
  • 防火墙限速:限制SYN包频率

8.2.2 TCP滑动窗口机制

窗口大小计算:

1
2
3
发送窗口 = min(拥塞窗口, 接收窗口)
拥塞窗口:发送方根据网络拥塞控制
接收窗口:接收方根据缓冲区大小

窗口探测机制:

  • 零窗口探测:当接收窗口为0时
  • 窗口更新:接收方窗口变化时通知发送方

8.3 DNS与负载均衡面试题

8.3.1 DNS解析过程详解

完整解析流程:

1
浏览器缓存 → 系统缓存 → hosts文件 → 本地DNS → 根服务器 → TLD服务器 → 权威服务器

DNS优化策略:

  • DNS预解析:<link rel="dns-prefetch" href="//example.com">
  • 减少域名数量:避免过多DNS查询
  • 合理设置TTL:平衡性能和可用性

8.3.2 负载均衡算法对比

算法选择场景:

  • 轮询:服务器性能相近
  • 加权轮询:服务器性能差异大
  • 最少连接:长连接应用
  • IP哈希:需要会话保持
  • 一致性哈希:分布式缓存

8.4 网络优化面试题

8.4.1 CDN优化策略

CDN缓存策略:

  • 静态资源:长时间缓存(1年)
  • HTML文件:短时间缓存或协商缓存
  • API接口:根据业务需求设置

CDN回源优化:

  • 合并回源:减少回源请求数
  • 预热机制:提前加载热门内容
  • 智能压缩:Brotli、Gzip压缩

8.4.2 高并发网络优化

连接优化:

  • 连接池:复用TCP连接
  • HTTP/2:多路复用减少连接数
  • 域名分片:突破浏览器并发限制

传输优化:

  • 压缩:Gzip、Brotli压缩文本
  • 缓存:强缓存、协商缓存
  • 预加载:关键资源提前加载

总结

计算机网络是一个复杂的系统工程,涉及多个协议层级的协同工作。本文系统梳理了:

  1. HTTP/HTTPS:协议演进、握手过程、性能优化
  2. TCP/IP:三次握手、四次挥手、拥塞控制
  3. DNS:解析过程、缓存机制、安全扩展
  4. 负载均衡:算法选择、高可用方案、配置优化
  5. 网络优化:CDN、协议优化、性能监控
  6. 安全防护:DDoS防护、SSL优化、WAF配置

掌握这些知识点不仅有助于技术面试,更重要的是能够构建高性能、高可用的网络系统。建议结合实际项目进行实践,通过工具进行性能测试和优化。

参考文献

  1. 《计算机网络:自顶向下方法》- James F. Kurose & Keith W. Ross
  2. 《HTTP权威指南》- David Gourley & Brian Totty
  3. 《TCP/IP详解》- W. Richard Stevens
  4. 《高性能网站建设指南》- Steve Souders
  5. 《Web性能权威指南》- Ilya Grigorik
  6. Cloudflare网络优化最佳实践
  7. AWS网络架构设计指南
  8. Nginx官方文档

本文档持续更新,如有错误或建议,欢迎指正。