菜单

网络协议

相关源文件

本页详细介绍了后端架构师构建健壮、可扩展和安全的分布式系统所需了解的基本网络协议。我们将涵盖基础协议模型、核心互联网协议以及它们在后端系统中的实现方式。有关Epoll和Java NIO等网络编程模型的信息,请参阅网络编程模型

协议层和模型

网络协议被组织成概念层,以管理复杂性并促进互操作性。有两个主要模型对这些层进行了标准化。

OSI 七层模型

功能协议
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 模型是一个更实用的四层实现,与实际协议相符。

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/IP 协议套件

TCP (传输控制协议)

TCP 在应用程序之间提供可靠、有序且经过错误检查的数据传输。

TCP 主要特性

  • 可靠性: 通过确认和重传保证数据传输
  • 面向连接: 通过三次握手建立连接
  • 流量控制: 滑动窗口机制防止接收方过载
  • 拥塞控制: 慢启动等算法防止网络拥塞
  • 有序交付: 序列号确保数据包按顺序处理

来源: README.md173-290

IP (互联网协议)

IP 根据逻辑寻址在网络之间管理数据包路由。

IP 寻址

  • IPv4: 32 位地址(例如,192.168.1.1),地址数量限制在大约 43 亿个
  • IPv6: 128 位地址(例如,2001:0db8:85a3:0000:8a2e:0370:7334),地址数量几乎无限

来源: README.md173

HTTP 协议

HTTP (超文本传输协议) 是万维网上数据通信的基础。

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>

HTTP 方法

方法目的幂等安全
GET获取数据
POST创建/更新资源
PUT更新资源
DELETE删除资源
HEAD不带正文的 GET 请求
OPTIONS获取支持的方法
PATCH部分更新

HTTP 状态码

类别范围示例
信息100-199100 Continue (继续)
成功200-299200 OK (成功), 201 Created (已创建), 204 No Content (无内容)
重定向300-399301 Moved Permanently (永久移动), 302 Found (已找到), 304 Not Modified (未修改)
客户端错误400-499400 Bad Request (错误请求), 401 Unauthorized (未授权), 404 Not Found (未找到)
服务器错误500-599500 Internal Server Error (服务器内部错误), 503 Service Unavailable (服务不可用)

来源: README.md174

HTTP/2 协议

HTTP/2 是 HTTP 的一个重要修订版,旨在提高性能同时保持语义兼容性。

HTTP/2 主要改进

  • 二进制协议: 比基于文本的 HTTP/1.1 更高效的解析和错误检测
  • 多路复用: 可以在单个连接上同时发送多个请求/响应
  • 服务器推送: 服务器可以在客户端请求资源之前主动推送给它们
  • 头部压缩: HPACK 压缩减少了冗余头部的开销
  • 流优先级: 允许客户端指示哪些资源最重要

来源: README.md175-1299

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

HTTPS 在 HTTP 的基础上增加了 TLS/SSL 加密,以实现安全通信。

主要安全特性

  • 认证: 证书验证服务器身份以防止中间人攻击
  • 加密: 所有流量都经过加密,以防止窃听
  • 数据完整性: 消息认证码确保数据在传输过程中不被篡改
  • 前向保密: 现代实现可在密钥泄露时保护过去的通信

来源: README.md176-1306

长连接 vs. 短连接

HTTP 同时支持持久连接(keep-alive)和非持久连接。

方面长连接/持久连接短连接/非持久连接
连接生命周期多个请求单个请求/响应
性能更适合多个请求每个请求开销更高
资源使用服务器端内存占用更高内存占用更低,CPU 占用更高
HTTP 头部Connection: keep-aliveConnection: close
默认在HTTP/1.1HTTP/1.0

来源: README.md181

二进制协议序列化

对于高性能后端系统,二进制协议通常取代标准 HTTP 等基于文本的协议。

协议组织架构特性用例
Protocol BuffersGoogle强类型, 代码生成, 版本控制gRPC, 微服务
ThriftApacheRPC 框架, 跨语言服务间通信
HessianCaucho紧凑的二进制 Java 序列化Java RPC 系统
MessagePack开源类 JSON API, 紧凑编码实时系统
AvroApache动态类型, 模式演进Hadoop 生态系统

来源: README.md185-1368

零拷贝技术

零拷贝是一种优化技术,它消除了 I/O 操作中不必要的数据复制,显著提高了网络协议的性能。

优点

  • 通过消除内核空间和用户空间之间的数据复制来减少 CPU 使用率
  • 降低内存带宽消耗
  • 最小化上下文切换
  • 特别适用于大文件或高吞吐量应用

来源: README.md183-1354

连接管理

有效的连接管理对于高性能网络应用至关重要。

关键连接管理技术

  • 连接池: 重用已建立的连接以减少开销
  • Keep-alive 设置: 根据流量模式配置超时
  • 负载均衡: 将连接分配到多个服务器
  • 熔断器: 在服务不可用时防止级联故障
  • 背压: 当消费者无法跟上生产者时控制流量

来源: README.md181-182

结论

理解网络协议对后端架构师来说至关重要。协议的选择会影响系统性能、安全性、资源使用和兼容性。现代后端系统通常结合使用以下协议:

  • HTTP/HTTPS 用于面向外部的 API 和 Web 服务
  • HTTP/2 用于提升 Web 性能
  • WebSockets 用于实时双向通信
  • 二进制协议,例如带有 Protocol Buffers 的 gRPC,用于内部微服务通信

有关网络编程模型和实现细节的更多信息,请参阅网络编程模型