前言

网络协议是计算机网络通信的基础,定义了数据传输的规则和格式。本文将详细介绍常用的网络协议,包括TCP、UDP、HTTP、HTTPS、WebSocket等,帮助您深入理解网络通信的原理和实践应用。

1. OSI七层模型与TCP/IP四层模型

1.1 OSI七层模型

1
2
3
4
5
6
7
应用层 (Application Layer)      - HTTP, FTP, SMTP, DNS
表示层 (Presentation Layer) - 数据格式转换、加密
会话层 (Session Layer) - 会话管理
传输层 (Transport Layer) - TCP, UDP
网络层 (Network Layer) - IP, ICMP, ARP
数据链路层 (Data Link Layer) - MAC, 以太网
物理层 (Physical Layer) - 物理介质、比特流

1.2 TCP/IP四层模型

1
2
3
4
应用层 (Application Layer)      - HTTP, FTP, SMTP, DNS, SSH
传输层 (Transport Layer) - TCP, UDP
网络层 (Internet Layer) - IP, ICMP, ARP
网络接口层 (Network Interface) - 以太网, Wi-Fi

1.3 数据封装过程

1
2
3
4
5
6
7
8
9
应用层:数据 (Data)

传输层:数据段 (Segment) = 数据 + TCP/UDP头

网络层:数据包 (Packet) = 数据段 + IP头

链路层:数据帧 (Frame) = 数据包 + MAC头

物理层:比特流 (Bits)

2. TCP协议(传输控制协议)

2.1 TCP特点

可靠性保证:

  • ✅ 面向连接
  • ✅ 可靠传输
  • ✅ 顺序传输
  • ✅ 流量控制
  • ✅ 拥塞控制
  • ❌ 传输效率相对较低

2.2 TCP报文格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
0                   16                  31
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 源端口号 (16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目标端口号 (16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 序列号 (32位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 确认号 (32位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|头长度|保留|标志位| 窗口大小 (16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 校验和 (16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 紧急指针 (16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 选项 (可变长度) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

重要字段说明:

  • 序列号(Sequence Number):标识发送的数据字节
  • 确认号(Acknowledgment Number):期望接收的下一个字节
  • 标志位
    • SYN:同步,建立连接
    • ACK:确认
    • FIN:结束,关闭连接
    • RST:重置连接
    • PSH:推送数据
    • URG:紧急数据

2.3 TCP三次握手(建立连接)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
客户端                           服务器
| |
| SYN (seq=x) |
|------------------------------->| 第一次握手
| | 服务器收到SYN
| |
| SYN+ACK (seq=y, ack=x+1) |
|<-------------------------------| 第二次握手
| 客户端收到SYN+ACK |
| |
| ACK (ack=y+1) |
|------------------------------->| 第三次握手
| | 连接建立
| 数据传输 |
|<------------------------------>|

为什么需要三次握手?

  1. 第一次握手:客户端发送SYN

    • 服务器知道:客户端发送能力正常
  2. 第二次握手:服务器发送SYN+ACK

    • 客户端知道:服务器接收和发送能力正常
  3. 第三次握手:客户端发送ACK

    • 服务器知道:客户端接收能力正常
    • 防止已失效的连接请求到达服务器

示例场景:

1
2
3
客户端:你好,我是客户端,能听到吗?(SYN)
服务器:收到!我是服务器,你能听到我吗?(SYN+ACK)
客户端:收到!我们可以开始通信了。(ACK)

2.4 TCP四次挥手(关闭连接)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
客户端                           服务器
| |
| FIN (seq=u) |
|------------------------------->| 第一次挥手
| | 客户端请求关闭
| |
| ACK (ack=u+1) |
|<-------------------------------| 第二次挥手
| | 服务器确认
| |
| FIN (seq=w) |
|<-------------------------------| 第三次挥手
| | 服务器请求关闭
| ACK (ack=w+1) |
|------------------------------->| 第四次挥手
| | 客户端确认
| |
| 等待2MSL |
| | 连接关闭

为什么需要四次挥手?

  1. 第一次挥手:客户端发送FIN

    • 客户端:我没有数据要发送了
  2. 第二次挥手:服务器发送ACK

    • 服务器:我知道了,但我可能还有数据要发送
  3. 第三次挥手:服务器发送FIN

    • 服务器:我也没有数据要发送了
  4. 第四次挥手:客户端发送ACK

    • 客户端:好的,连接关闭

为什么要等待2MSL?

  • MSL(Maximum Segment Lifetime):报文最大生存时间
  • 确保最后的ACK能够到达服务器
  • 确保旧连接的所有报文都消失

2.5 TCP可靠性保证机制

1. 序列号和确认号

1
2
发送方:发送序列号为100的数据
接收方:返回确认号为101(期望接收下一个字节)

2. 超时重传

1
2
发送方发送数据后启动定时器
如果超时未收到ACK,重新发送数据

3. 滑动窗口

1
2
3
发送窗口:允许发送但未确认的数据量
接收窗口:允许接收的数据量
动态调整窗口大小,实现流量控制

4. 拥塞控制

1
2
3
4
慢启动:指数增长
拥塞避免:线性增长
快速重传:收到3个重复ACK立即重传
快速恢复:减半窗口大小

2.6 TCP状态转换

1
2
3
4
5
客户端状态:
CLOSED → SYN_SENT → ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 → TIME_WAIT → CLOSED

服务器状态:
CLOSED → LISTEN → SYN_RCVD → ESTABLISHED → CLOSE_WAIT → LAST_ACK → CLOSED

3. UDP协议(用户数据报协议)

3.1 UDP特点

简单高效:

  • ✅ 无连接
  • ✅ 不可靠传输
  • ✅ 无序传输
  • ✅ 传输效率高
  • ✅ 支持广播和多播
  • ❌ 不保证可靠性

3.2 UDP报文格式

1
2
3
4
5
6
7
8
9
10
11
12
0                   16                  31
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 源端口号 (16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目标端口号 (16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 长度 (16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 校验和 (16位) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

3.3 TCP vs UDP

特性 TCP UDP
连接 面向连接 无连接
可靠性 可靠传输 不可靠传输
顺序 保证顺序 不保证顺序
速度 较慢 较快
开销 较大(20字节头) 较小(8字节头)
流量控制
拥塞控制
适用场景 文件传输、邮件、网页 视频、音频、游戏、DNS

3.4 UDP使用场景

适合UDP的场景:

  1. 实时性要求高

    • 视频直播
    • 语音通话
    • 在线游戏
  2. 允许数据丢失

    • 视频流(丢失几帧可接受)
    • 音频流
  3. 简单查询

    • DNS查询
    • DHCP
    • NTP时间同步
  4. 广播/多播

    • 局域网设备发现
    • 流媒体分发

4. IP协议(网际协议)

4.1 IPv4

IPv4地址格式:

1
2
3
4
5
32位二进制,通常用点分十进制表示
例如:192.168.1.1

二进制:11000000.10101000.00000001.00000001
十进制:192.168.1.1

IPv4地址分类:

1
2
3
4
5
6
7
8
9
10
11
A类:0.0.0.0 - 127.255.255.255
网络号8位,主机号24位

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地址:

1
2
3
A类:10.0.0.0 - 10.255.255.255
B类:172.16.0.0 - 172.31.255.255
C类:192.168.0.0 - 192.168.255.255

特殊IP地址:

1
2
3
127.0.0.1:本地回环地址
0.0.0.0:表示所有地址
255.255.255.255:广播地址

4.2 IPv6

IPv6地址格式:

1
2
3
4
128位,用冒号分隔的8组十六进制数
例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334

简写:2001:db8:85a3::8a2e:370:7334

IPv6优势:

  • 地址空间巨大(2^128个地址)
  • 简化的报文头
  • 内置安全性(IPSec)
  • 更好的移动性支持
  • 无需NAT

5. HTTP协议(超文本传输协议)

5.1 HTTP特点

基本特性:

  • 基于TCP协议
  • 无状态协议
  • 请求-响应模式
  • 支持多种方法
  • 灵活可扩展

5.2 HTTP请求方法

方法 说明 幂等性 安全性
GET 获取资源
POST 创建资源
PUT 更新资源(完整)
PATCH 更新资源(部分)
DELETE 删除资源
HEAD 获取响应头
OPTIONS 获取支持的方法
TRACE 追踪请求路径
CONNECT 建立隧道

幂等性:多次执行相同操作,结果相同
安全性:不会修改服务器资源

5.3 HTTP请求格式

1
2
3
4
5
6
7
8
9
10
GET /api/users/123 HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer token123
Content-Type: application/json

{
"name": "张三"
}

请求组成:

  1. 请求行:方法 + URL + 协议版本
  2. 请求头:键值对形式的元数据
  3. 空行:分隔请求头和请求体
  4. 请求体:POST/PUT等方法的数据

5.4 HTTP响应格式

1
2
3
4
5
6
7
8
9
10
11
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 58
Date: Wed, 10 Dec 2025 10:00:00 GMT
Server: nginx/1.18.0

{
"id": 123,
"name": "张三",
"age": 25
}

响应组成:

  1. 状态行:协议版本 + 状态码 + 状态描述
  2. 响应头:键值对形式的元数据
  3. 空行:分隔响应头和响应体
  4. 响应体:返回的数据

5.5 HTTP状态码

1xx:信息性状态码

1
2
100 Continue:继续发送请求体
101 Switching Protocols:切换协议(如WebSocket)

2xx:成功状态码

1
2
3
4
200 OK:请求成功
201 Created:资源创建成功
204 No Content:成功但无返回内容
206 Partial Content:部分内容(断点续传)

3xx:重定向状态码

1
2
3
4
5
301 Moved Permanently:永久重定向
302 Found:临时重定向
304 Not Modified:资源未修改(缓存)
307 Temporary Redirect:临时重定向(保持方法)
308 Permanent Redirect:永久重定向(保持方法)

4xx:客户端错误

1
2
3
4
5
6
7
8
400 Bad Request:请求错误
401 Unauthorized:未授权
403 Forbidden:禁止访问
404 Not Found:资源不存在
405 Method Not Allowed:方法不允许
408 Request Timeout:请求超时
409 Conflict:冲突
429 Too Many Requests:请求过多

5xx:服务器错误

1
2
3
4
5
500 Internal Server Error:服务器内部错误
501 Not Implemented:功能未实现
502 Bad Gateway:网关错误
503 Service Unavailable:服务不可用
504 Gateway Timeout:网关超时

5.6 HTTP常用请求头

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
# 内容协商
Accept: application/json
Accept-Language: zh-CN,en
Accept-Encoding: gzip, deflate

# 缓存控制
Cache-Control: no-cache
If-Modified-Since: Wed, 10 Dec 2025 10:00:00 GMT
If-None-Match: "etag-value"

# 认证授权
Authorization: Bearer token123
Cookie: sessionid=abc123

# 客户端信息
User-Agent: Mozilla/5.0
Referer: https://example.com/page
Host: api.example.com

# 连接控制
Connection: keep-alive
Keep-Alive: timeout=5, max=100

# 内容信息
Content-Type: application/json
Content-Length: 123
Content-Encoding: gzip

5.7 HTTP常用响应头

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
# 内容信息
Content-Type: application/json; charset=utf-8
Content-Length: 1234
Content-Encoding: gzip
Content-Language: zh-CN

# 缓存控制
Cache-Control: max-age=3600, public
ETag: "etag-value"
Last-Modified: Wed, 10 Dec 2025 10:00:00 GMT
Expires: Wed, 10 Dec 2025 11:00:00 GMT

# 安全相关
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

# 跨域
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: Content-Type

# 服务器信息
Server: nginx/1.18.0
Date: Wed, 10 Dec 2025 10:00:00 GMT

# Cookie设置
Set-Cookie: sessionid=abc123; HttpOnly; Secure

5.8 HTTP/1.0 vs HTTP/1.1 vs HTTP/2

特性 HTTP/1.0 HTTP/1.1 HTTP/2
连接 短连接 长连接 多路复用
管道化 不支持 支持 支持
头部压缩 不支持 不支持 HPACK压缩
服务器推送 不支持 不支持 支持
二进制协议 文本 文本 二进制
优先级 不支持 不支持 支持

HTTP/1.1改进:

1
2
3
4
5
1. 持久连接(Connection: keep-alive)
2. 管道化(Pipelining)
3. 支持分块传输编码
4. 增加Host头(支持虚拟主机)
5. 增加更多状态码和方法

HTTP/2改进:

1
2
3
4
5
1. 二进制分帧
2. 多路复用(一个连接多个请求)
3. 头部压缩(HPACK)
4. 服务器推送
5. 请求优先级

6. HTTPS协议(安全超文本传输协议)

6.1 HTTPS = HTTP + SSL/TLS

1
2
3
4
HTTP:明文传输,不安全
HTTPS:加密传输,安全

HTTPS = HTTP + SSL/TLS

6.2 HTTPS工作原理

1. SSL/TLS握手过程:

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
客户端                                服务器
| |
| 1. Client Hello |
| (支持的加密算法、随机数) |
|------------------------------------>|
| |
| 2. Server Hello |
| (选择的加密算法、随机数、证书) |
|<------------------------------------|
| |
| 3. 验证证书 |
| (检查证书有效性) |
| |
| 4. Client Key Exchange |
| (用服务器公钥加密的预主密钥) |
|------------------------------------>|
| |
| 5. 生成会话密钥 |
| (使用三个随机数生成) |
| |
| 6. Change Cipher Spec |
| (通知开始加密通信) |
|<----------------------------------->|
| |
| 7. 加密通信 |
|<===================================>|

2. 加密方式:

1
2
3
4
5
6
7
非对称加密(RSA/ECC):用于握手阶段
- 公钥加密,私钥解密
- 安全但慢

对称加密(AES):用于数据传输
- 同一密钥加密解密
- 快速高效

6.3 HTTPS优势

安全性:

  • ✅ 数据加密:防止窃听
  • ✅ 数据完整性:防止篡改
  • ✅ 身份认证:防止冒充

SEO优势:

  • 搜索引擎优先排名HTTPS网站

用户信任:

  • 浏览器显示安全锁图标
  • 避免”不安全”警告

6.4 HTTP vs HTTPS

特性 HTTP HTTPS
端口 80 443
安全性 明文传输 加密传输
证书 不需要 需要SSL证书
速度 稍慢(加密开销)
SEO 一般 更好
成本 证书费用

7. WebSocket协议

7.1 WebSocket特点

实时双向通信:

  • ✅ 全双工通信
  • ✅ 持久连接
  • ✅ 低延迟
  • ✅ 减少开销
  • ✅ 支持二进制数据

7.2 WebSocket vs HTTP

特性 HTTP WebSocket
通信方式 请求-响应 全双工
连接 短连接 持久连接
开销 每次都有头部 握手后开销小
实时性 需要轮询 实时推送
适用场景 一般Web应用 实时应用

7.3 WebSocket握手

客户端请求:

1
2
3
4
5
6
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

服务器响应:

1
2
3
4
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

7.4 WebSocket使用场景

适合WebSocket的场景:

  1. 实时聊天

    • 即时通讯应用
    • 客服系统
  2. 实时推送

    • 股票行情
    • 体育比分
    • 新闻推送
  3. 协同编辑

    • 在线文档编辑
    • 白板应用
  4. 在线游戏

    • 多人实时对战
    • 游戏状态同步
  5. 实时监控

    • 服务器监控
    • 日志查看

7.5 WebSocket示例

JavaScript客户端:

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
30
31
32
33
34
35
// 创建WebSocket连接
const ws = new WebSocket('ws://example.com/chat');

// 连接打开
ws.onopen = function(event) {
console.log('连接已建立');
ws.send('Hello Server!');
};

// 接收消息
ws.onmessage = function(event) {
console.log('收到消息:', event.data);
};

// 连接关闭
ws.onclose = function(event) {
console.log('连接已关闭');
};

// 错误处理
ws.onerror = function(error) {
console.error('WebSocket错误:', error);
};

// 发送消息
function sendMessage(message) {
if (ws.readyState === WebSocket.OPEN) {
ws.send(message);
}
}

// 关闭连接
function closeConnection() {
ws.close();
}

Java服务器端(Spring Boot):

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import org.springframework.stereotype.Component;
import org.springframework.web.socket.*;
import org.springframework.web.socket.handler.TextWebSocketHandler;

@Component
public class ChatWebSocketHandler extends TextWebSocketHandler {

private final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();

@Override
public void afterConnectionEstablished(WebSocketSession session) {
sessions.add(session);
System.out.println("新连接:" + session.getId());
}

@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) {
String payload = message.getPayload();
System.out.println("收到消息:" + payload);

// 广播消息给所有客户端
for (WebSocketSession s : sessions) {
if (s.isOpen()) {
try {
s.sendMessage(new TextMessage("广播:" + payload));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
sessions.remove(session);
System.out.println("连接关闭:" + session.getId());
}
}

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

@Autowired
private ChatWebSocketHandler chatHandler;

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(chatHandler, "/chat")
.setAllowedOrigins("*");
}
}

8. DNS协议(域名系统)

8.1 DNS作用

域名解析:

1
2
3
www.example.com → 192.168.1.1

将人类可读的域名转换为IP地址

8.2 DNS查询过程

1
2
3
4
5
6
7
8
9
10
11
12
13
1. 浏览器缓存
↓ 未找到
2. 操作系统缓存
↓ 未找到
3. 本地DNS服务器(ISP)
↓ 未找到
4. 根DNS服务器

5. 顶级域DNS服务器(.com)

6. 权威DNS服务器(example.com)

7. 返回IP地址

递归查询 vs 迭代查询:

1
2
递归查询:客户端 → 本地DNS → 根DNS → ... → 返回最终结果
迭代查询:客户端 → 本地DNS → 返回下一个DNS地址 → 客户端继续查询

8.3 DNS记录类型

类型 说明 示例
A IPv4地址 example.com → 192.168.1.1
AAAA IPv6地址 example.com → 2001:db8::1
CNAME 别名 www.example.com → example.com
MX 邮件服务器 example.com → mail.example.com
TXT 文本记录 用于验证、SPF等
NS 域名服务器 example.com → ns1.example.com
PTR 反向解析 192.168.1.1 → example.com

8.4 DNS优化

1. DNS缓存:

1
2
3
浏览器缓存:几分钟到几小时
操作系统缓存:根据TTL设置
DNS服务器缓存:根据TTL设置

2. DNS预解析:

1
2
3
<!-- HTML中预解析 -->
<link rel="dns-prefetch" href="//api.example.com">
<link rel="dns-prefetch" href="//cdn.example.com">

3. 使用CDN:

1
就近访问,减少DNS查询时间

9. 其他常用协议

9.1 FTP(文件传输协议)

特点:

  • 端口:21(控制)、20(数据)
  • 支持文件上传下载
  • 明文传输(不安全)
  • SFTP/FTPS:加密版本

使用场景:

  • 网站文件上传
  • 文件服务器

9.2 SMTP(简单邮件传输协议)

特点:

  • 端口:25(明文)、465/587(加密)
  • 用于发送邮件
  • 基于TCP

邮件发送流程:

1
客户端 → SMTP服务器 → 收件人SMTP服务器 → 收件人邮箱

9.3 POP3/IMAP(邮件接收协议)

POP3:

  • 端口:110(明文)、995(加密)
  • 下载邮件到本地
  • 服务器上的邮件通常被删除

IMAP:

  • 端口:143(明文)、993(加密)
  • 邮件保存在服务器
  • 支持多设备同步
  • 更灵活,推荐使用

9.4 SSH(安全外壳协议)

特点:

  • 端口:22
  • 加密的远程登录协议
  • 支持命令执行、文件传输

使用场景:

  • 远程服务器管理
  • 安全文件传输(SCP、SFTP)
  • 端口转发

9.5 DHCP(动态主机配置协议)

特点:

  • 基于UDP
  • 自动分配IP地址
  • 分配子网掩码、网关、DNS

工作过程:

1
2
3
4
1. DHCP Discover:客户端广播寻找DHCP服务器
2. DHCP Offer:服务器提供IP地址
3. DHCP Request:客户端请求使用该IP
4. DHCP ACK:服务器确认分配

9.6 ARP(地址解析协议)

作用:

1
2
3
IP地址 → MAC地址

例如:192.168.1.1 → AA:BB:CC:DD:EE:FF

工作过程:

1
2
3
1. 主机A广播ARP请求:谁是192.168.1.1?
2. 主机B响应:我是192.168.1.1,我的MAC是XX:XX:XX
3. 主机A缓存这个映射关系

9.7 ICMP(互联网控制消息协议)

用途:

  • 网络诊断
  • 错误报告

常用工具:

1
2
3
4
5
6
7
8
# ping:测试连通性
ping www.example.com

# traceroute:追踪路由
traceroute www.example.com

# Windows使用tracert
tracert www.example.com

10. 网络调试工具

10.1 命令行工具

1. ping - 测试连通性

1
2
3
4
5
6
7
8
# 测试网络连通性
ping www.example.com

# 指定次数
ping -c 4 www.example.com

# 指定包大小
ping -s 1024 www.example.com

2. traceroute - 追踪路由

1
2
3
4
5
# 追踪到目标的路由
traceroute www.example.com

# Windows
tracert www.example.com

3. netstat - 网络状态

1
2
3
4
5
6
7
8
# 查看所有连接
netstat -an

# 查看监听端口
netstat -tuln

# 查看进程
netstat -tulnp

4. telnet - 测试端口

1
2
3
4
5
# 测试端口是否开放
telnet example.com 80

# 测试SMTP
telnet smtp.example.com 25

5. curl - HTTP请求

1
2
3
4
5
6
7
8
9
10
11
12
13
# GET请求
curl http://example.com

# POST请求
curl -X POST http://example.com/api \
-H "Content-Type: application/json" \
-d '{"name":"test"}'

# 查看响应头
curl -I http://example.com

# 跟随重定向
curl -L http://example.com

6. nslookup/dig - DNS查询

1
2
3
4
5
6
7
8
9
# nslookup
nslookup www.example.com

# dig(更详细)
dig www.example.com

# 查询特定记录类型
dig www.example.com A
dig www.example.com MX

10.2 图形化工具

1. Wireshark - 抓包分析

1
2
3
4
5
功能:
- 捕获网络数据包
- 分析协议
- 过滤和搜索
- 统计分析

2. Postman - API测试

1
2
3
4
5
功能:
- HTTP请求测试
- 环境管理
- 自动化测试
- 团队协作

3. Charles/Fiddler - HTTP代理

1
2
3
4
5
功能:
- 抓取HTTP/HTTPS请求
- 修改请求和响应
- 模拟慢速网络
- 断点调试

11. 网络安全

11.1 常见攻击方式

1. DDoS攻击(分布式拒绝服务)

1
2
大量请求淹没服务器
防御:流量清洗、CDN、限流

2. 中间人攻击(MITM)

1
2
拦截通信内容
防御:使用HTTPS、证书验证

3. SQL注入

1
2
恶意SQL代码注入
防御:参数化查询、输入验证

4. XSS攻击(跨站脚本)

1
2
注入恶意脚本
防御:输入过滤、输出编码、CSP

5. CSRF攻击(跨站请求伪造)

1
2
伪造用户请求
防御:CSRF Token、SameSite Cookie

11.2 安全最佳实践

1. 使用HTTPS

1
2
3
- 加密传输数据
- 防止中间人攻击
- 提升用户信任

2. 输入验证

1
2
3
- 验证所有用户输入
- 白名单优于黑名单
- 服务器端验证

3. 认证授权

1
2
3
- 使用强密码策略
- 实现多因素认证
- JWT/OAuth2.0

4. 限流防护

1
2
3
- API限流
- IP黑白名单
- 验证码

5. 安全响应头

1
2
3
4
5
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
Content-Security-Policy: default-src 'self'

12. 总结

12.1 协议对比总结

协议 层级 特点 使用场景
TCP 传输层 可靠、有序、慢 文件传输、网页
UDP 传输层 不可靠、快 视频、游戏、DNS
IP 网络层 寻址和路由 所有网络通信
HTTP 应用层 无状态、请求响应 Web应用
HTTPS 应用层 加密的HTTP 安全Web应用
WebSocket 应用层 双向实时通信 聊天、推送
DNS 应用层 域名解析 所有域名访问
FTP 应用层 文件传输 文件服务器
SMTP 应用层 邮件发送 邮件系统

12.2 学习建议

1. 理论基础

  • 掌握OSI七层模型
  • 理解TCP/IP协议栈
  • 了解各层协议的作用

2. 实践操作

  • 使用Wireshark抓包分析
  • 用curl测试HTTP请求
  • 编写简单的网络程序

3. 深入学习

  • 阅读RFC文档
  • 研究协议源码
  • 分析实际案例

4. 持续关注

  • HTTP/3和QUIC
  • 新的安全协议
  • 网络优化技术

12.3 推荐资源

书籍:

  • 《计算机网络(第7版)》- 谢希仁
  • 《TCP/IP详解 卷1:协议》
  • 《HTTP权威指南》
  • 《图解HTTP》
  • 《图解TCP/IP》

在线资源:

工具:

  • Wireshark:抓包分析
  • Postman:API测试
  • curl:命令行HTTP工具
  • tcpdump:命令行抓包

参考资源