本页详细介绍了后端架构师构建健壮、可扩展和安全的分布式系统所需了解的基本网络协议。我们将涵盖基础协议模型、核心互联网协议以及它们在后端系统中的实现方式。有关Epoll和Java NIO等网络编程模型的信息,请参阅网络编程模型。
网络协议被组织成概念层,以管理复杂性并促进互操作性。有两个主要模型对这些层进行了标准化。
| 层 | 功能 | 协议 |
|---|---|---|
| 7. 应用层 | 终端用户服务 | HTTP, FTP, SMTP, DNS |
| 6. 表示层 | 数据转换 | SSL/TLS, JPEG, ASCII |
| 5. 会话层 | 会话管理 | NetBIOS, RPC |
| 4. 传输层 | 端到端传输 | TCP, UDP |
| 3. 网络层 | 路由和寻址 | IP, ICMP, ARP |
| 2. 数据链路层 | 节点到节点传输 | 以太网, PPP, MAC |
| 1. 物理层 | 比特传输 | 以太网物理层, USB, 光纤 |
来源: README.md171-172
TCP/IP 模型是一个更实用的四层实现,与实际协议相符。
| TCP/IP 层 | 对应的 OSI 层 | 协议 |
|---|---|---|
| 4. 应用层 | 5-7 (会话层, 表示层, 应用层) | HTTP, FTP, DNS, SMTP |
| 3. 传输层 | 4 (传输层) | TCP, UDP |
| 2. 互联网层 | 3 (网络层) | IP, ICMP, ARP |
| 1. 网络接口层 | 1-2 (物理层, 数据链路层) | 以太网, Wi-Fi, PPP |
来源: README.md173
TCP 在应用程序之间提供可靠、有序且经过错误检查的数据传输。
TCP 主要特性
来源: README.md173-290
IP 根据逻辑寻址在网络之间管理数据包路由。
IP 寻址
来源: README.md173
HTTP (超文本传输协议) 是万维网上数据通信的基础。
GET /path/to/resource HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Cookie: session=abcdef123456
[Optional request body]
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
Set-Cookie: session=abcdef123456
<!DOCTYPE html>
<html>
...
</html>
| 方法 | 目的 | 幂等 | 安全 |
|---|---|---|---|
| GET | 获取数据 | 是 | 是 |
| POST | 创建/更新资源 | 否 | 否 |
| PUT | 更新资源 | 是 | 否 |
| DELETE | 删除资源 | 是 | 否 |
| HEAD | 不带正文的 GET 请求 | 是 | 是 |
| OPTIONS | 获取支持的方法 | 是 | 是 |
| PATCH | 部分更新 | 否 | 否 |
| 类别 | 范围 | 示例 |
|---|---|---|
| 信息 | 100-199 | 100 Continue (继续) |
| 成功 | 200-299 | 200 OK (成功), 201 Created (已创建), 204 No Content (无内容) |
| 重定向 | 300-399 | 301 Moved Permanently (永久移动), 302 Found (已找到), 304 Not Modified (未修改) |
| 客户端错误 | 400-499 | 400 Bad Request (错误请求), 401 Unauthorized (未授权), 404 Not Found (未找到) |
| 服务器错误 | 500-599 | 500 Internal Server Error (服务器内部错误), 503 Service Unavailable (服务不可用) |
来源: README.md174
HTTP/2 是 HTTP 的一个重要修订版,旨在提高性能同时保持语义兼容性。
HTTP/2 主要改进
HTTPS 在 HTTP 的基础上增加了 TLS/SSL 加密,以实现安全通信。
主要安全特性
HTTP 同时支持持久连接(keep-alive)和非持久连接。
| 方面 | 长连接/持久连接 | 短连接/非持久连接 |
|---|---|---|
| 连接生命周期 | 多个请求 | 单个请求/响应 |
| 性能 | 更适合多个请求 | 每个请求开销更高 |
| 资源使用 | 服务器端内存占用更高 | 内存占用更低,CPU 占用更高 |
| HTTP 头部 | Connection: keep-alive | Connection: close |
| 默认在 | HTTP/1.1 | HTTP/1.0 |
来源: README.md181
对于高性能后端系统,二进制协议通常取代标准 HTTP 等基于文本的协议。
| 协议 | 组织架构 | 特性 | 用例 |
|---|---|---|---|
| Protocol Buffers | 强类型, 代码生成, 版本控制 | gRPC, 微服务 | |
| Thrift | Apache | RPC 框架, 跨语言 | 服务间通信 |
| Hessian | Caucho | 紧凑的二进制 Java 序列化 | Java RPC 系统 |
| MessagePack | 开源 | 类 JSON API, 紧凑编码 | 实时系统 |
| Avro | Apache | 动态类型, 模式演进 | Hadoop 生态系统 |
零拷贝是一种优化技术,它消除了 I/O 操作中不必要的数据复制,显著提高了网络协议的性能。
优点
有效的连接管理对于高性能网络应用至关重要。
关键连接管理技术
来源: README.md181-182
理解网络协议对后端架构师来说至关重要。协议的选择会影响系统性能、安全性、资源使用和兼容性。现代后端系统通常结合使用以下协议:
有关网络编程模型和实现细节的更多信息,请参阅网络编程模型。