网络通讯知识——通讯分层介绍,gRPC,RabbitMQ分层

发布于:2025-06-07 ⋅ 阅读:(15) ⋅ 点赞:(0)

网络通讯分层

网络通讯分层是为了将复杂的网络通信问题分解为多个独立、可管理的层次,每个层次专注于特定功能。目前主流的分层模型包括OSI七层模型TCP/IP四层(或五层)模型,以下是详细解析:

一、OSI七层模型:理论框架

OSI(Open Systems Interconnection)模型由国际标准化组织(ISO)提出,是网络通信的理论分层框架,从下到上依次为:

1. 物理层(Physical Layer)
  • 功能:定义物理设备(如网线、光纤、网卡)的电气特性、机械接口和信号传输方式(如电压、频率)。
  • 关键技术:线缆标准(如RJ45)、信号调制(如ASK/FSK)、物理接口(如USB、HDMI)。
  • 示例:网线传输0/1电信号、光纤传输光信号。
2. 数据链路层(Data Link Layer)
  • 功能:在相邻节点间传输数据帧,处理物理层的错误(如CRC校验),并通过MAC地址实现链路管理。
  • 子层
    • MAC层(介质访问控制):定义设备如何接入物理介质(如以太网的CSMA/CD协议)。
    • LLC层(逻辑链路控制):建立逻辑连接,封装上层数据。
  • 关键技术:以太网协议(Ethernet)、PPP(点对点协议)、VLAN划分。
  • 示例:交换机通过MAC地址转发数据帧。
3. 网络层(Network Layer)
  • 功能:通过IP地址实现跨网络的数据路由和寻址,处理数据包的分片与重组。
  • 关键协议
    • IP协议(IPv4/IPv6):定义数据包格式和路由规则。
    • ICMP协议:用于网络故障检测(如Ping命令)。
    • 路由协议(如RIP、OSPF、BGP):计算最佳路径。
  • 示例:路由器根据IP地址将数据包转发到不同网络。
4. 传输层(Transport Layer)
  • 功能:为端到端通信提供可靠或不可靠的数据传输,定义端口号(如HTTP的80端口)。
  • 关键协议
    • TCP协议(传输控制协议):面向连接,保证数据有序、无丢失(如文件下载)。
    • UDP协议(用户数据报协议):无连接,传输效率高但不保证可靠性(如视频直播、DNS)。
  • 示例:TCP三次握手建立连接,UDP直接发送数据包。
5. 会话层(Session Layer)
  • 功能:建立、管理和终止应用程序间的会话(如登录认证、断点续传)。
  • 关键技术:会话超时管理、会话恢复(如FTP的断点续传)。
  • 示例:Web浏览器与服务器的会话保持(Cookie/Session)。
6. 表示层(Presentation Layer)
  • 功能:处理数据格式转换(如加密、压缩、编码),确保不同系统间的数据兼容性。
  • 关键技术
    • 加密算法(如SSL/TLS)、压缩算法(如ZIP)。
    • 数据格式(如JSON、XML、JPEG)。
  • 示例:HTTPS通过TLS加密传输数据,图片以JPEG格式编码。
7. 应用层(Application Layer)
  • 功能:为用户提供直接可见的应用服务(如网页浏览、文件传输),定义应用接口和协议。
  • 关键协议
    • HTTP/HTTPS(网页访问)、FTP(文件传输)、SMTP(邮件发送)。
    • DNS(域名解析)、SSH(远程登录)、gRPC(RPC框架)。
  • 示例:浏览器通过HTTP请求访问网页,邮件客户端用SMTP发送邮件。

二、TCP/IP四层(或五层)模型:实际应用模型

TCP/IP模型是互联网实际采用的分层模型,更简洁,将OSI七层模型合并为四层(或五层):

四层模型(从下到上)
  1. 网络接口层(Network Interface Layer)

    • 合并OSI的物理层和数据链路层,处理硬件接口和链路通信(如以太网、WiFi)。
  2. 网络层(Internet Layer)

    • 同OSI网络层,核心协议为IP,负责路由和寻址。
  3. 传输层(Transport Layer)

    • 同OSI传输层,核心协议为TCP和UDP。
  4. 应用层(Application Layer)

    • 合并OSI的会话层、表示层和应用层,包含HTTP、FTP等具体应用协议。
五层模型(更细化的版本)
  • 在四层模型基础上,将网络接口层拆分为物理层数据链路层,形成五层:
    1. 物理层
    2. 数据链路层
    3. 网络层
    4. 传输层
    5. 应用层

三、两种模型的对比与映射

OSI七层模型 TCP/IP四层模型 TCP/IP五层模型 核心功能举例
物理层 网络接口层 物理层 线缆传输电信号、光信号
数据链路层 数据链路层 以太网帧传输、MAC地址寻址
网络层 网络层 网络层 IP路由、数据包分片
传输层 传输层 传输层 TCP/UDP数据传输、端口号管理
会话层 应用层 应用层 会话管理(如登录认证)
表示层 数据加密、格式转换(如JSON/SSL)
应用层 HTTP访问网页、FTP传输文件

四、分层模型的核心优势

  1. 解耦复杂性:各层独立设计,修改某层不影响其他层(如物理层升级为5G,不改变应用层协议)。
  2. 标准化接口:层间通过固定接口交互(如传输层为应用层提供Socket接口),便于跨平台兼容。
  3. 简化开发:开发者只需关注特定层的功能(如Web开发专注应用层的HTTP协议)。

五、实际应用中的分层示例:网页访问流程

以浏览器访问网页为例,数据在各层的流转过程:

  1. 应用层:浏览器发送HTTP请求,封装为HTTP报文。
  2. 传输层:HTTP报文被封装为TCP数据包(目标端口80),添加源/目标端口号。
  3. 网络层:TCP数据包封装为IP数据包,添加源/目标IP地址(如192.168.1.1 → 百度服务器IP)。
  4. 数据链路层:IP数据包封装为以太网帧,添加源/目标MAC地址,通过网线传输。
  5. 物理层:电信号通过网线传输到路由器,经多层路由转发后到达服务器,反向解封装后处理请求。

gRPC

gRPC 是一种高性能、开源的远程过程调用(Remote Procedure Call,RPC)框架,它基于 HTTP/2 通讯层构建,能够在不同服务与语言之间实现高效的通信。以下是关于 gRPC 的详细介绍:

一、gRPC 的本质:远程过程调用(RPC)框架

  • 核心功能:允许开发人员像调用本地函数一样调用远程服务器上的函数,无需手动处理网络通信细节(如序列化、传输、反序列化等)。
  • 应用场景
    • 微服务架构:用于服务间的通信,支持多语言服务协同工作(如 Java 服务与 Go 服务交互)。
    • 跨平台通信:可在移动端(Android/iOS)、浏览器、服务器等不同平台间建立高效连接。
    • 高性能需求场景:相比传统 RESTful API,gRPC 在传输效率、连接复用等方面更具优势。

二、gRPC 基于的通讯层:HTTP/2

gRPC 选择 HTTP/2 作为底层通讯协议,主要基于以下特性:

  1. 二进制分帧
    • HTTP/2 将数据分割为二进制帧(Frame),而非 HTTP/1.x 的文本格式,解析效率更高。
    • 示例:请求和响应可拆分为头部帧(Headers Frame)和数据帧(Data Frame),实现更灵活的传输。
  2. 多路复用
    • 单个 TCP 连接可同时处理多个请求和响应,避免 HTTP/1.x 中的“队头阻塞”问题。
    • 例如:客户端可在一个连接中同时发送多个 RPC 调用,服务器按顺序或并行处理后返回结果。
  3. 头部压缩
    • 使用 HPACK 算法压缩 HTTP 头部,减少数据传输量,尤其适合频繁发送小数据包的场景(如 RPC 调用)。
  4. 服务器推送
    • 服务器可主动向客户端推送资源(如图片、静态文件),减少客户端二次请求,提升性能。
  5. 流模式支持
    • HTTP/2 支持双向流(Stream),gRPC 基于此实现四种通信模式:
      • Unary(一元调用):客户端发送一个请求,服务器返回一个响应(类似传统 RPC)。
      • Server Streaming(服务器流):客户端发送一个请求,服务器返回多个响应(如实时数据推送)。
      • Client Streaming(客户端流):客户端发送多个请求,服务器返回一个响应(如日志上传)。
      • Bidirectional Streaming(双向流):客户端和服务器可同时双向发送消息(如实时聊天)。

三、gRPC 的其他关键组件与特性

  1. Protocol Buffers(Protobuf)
    • 作为默认的数据序列化格式,比 JSON/XML 更高效(体积小、解析快)。
    • 通过 .proto 文件定义服务接口和消息结构,支持自动生成多语言代码(如 Java、Python、Go 等)。
  2. 跨平台与多语言支持
    • 官方支持 C++、Java、Python、Go、Node.js 等语言,社区也提供对 Ruby、PHP 等语言的扩展。
  3. 连接管理与负载均衡
    • 支持长连接(Persistent Connection),减少连接建立开销。
    • 可与服务发现组件(如 Consul、etcd)集成,实现客户端侧的负载均衡。
  4. 拦截器(Interceptor)
    • 支持在 RPC 调用前后添加自定义逻辑(如认证、日志、重试机制),提升框架扩展性。

四、gRPC 与传统通讯方式的对比

维度 gRPC(基于 HTTP/2 + Protobuf) 传统 RESTful(基于 HTTP/1.x + JSON)
传输效率 二进制格式,压缩率更高,适合小数据包 文本格式,体积较大,解析开销更高
连接方式 多路复用,单个连接处理多请求 每个请求单独建立连接,效率较低
流模式 原生支持双向流,适合实时通信 需通过 WebSockets 等额外协议实现流
接口定义 强类型(Protobuf),代码生成更规范 弱类型(JSON),接口文档需手动维护
浏览器支持 需通过 gRPC-Web 插件适配 原生支持,浏览器兼容性更好

gRPC 通过结合 HTTP/2 的高性能传输能力和 Protobuf 的高效序列化机制,成为微服务架构中服务间通信的优选方案。其核心优势在于高效性、跨平台性和流通信支持,尤其适合对性能要求高、需要多语言协同的场景。如果需要在项目中集成 gRPC,可先通过 .proto 文件定义服务接口,再利用代码生成工具快速实现各语言客户端与服务器的开发。

所属分层

gRPC 属于网络通讯中的 应用层协议,它构建在传输层(如 TCP)之上,为应用程序提供远程过程调用(RPC)的通信能力。以下是关于其层级定位及同类型通信方式的详细说明:

一、gRPC 的网络层级定位:应用层

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

    • OSI 七层模型中,gRPC 位于第 7 层(应用层),直接为应用程序提供服务接口。
    • TCP/IP 四层模型中,gRPC 同样属于应用层,其底层依赖传输层的 TCP 协议(通过 HTTP/2 实现传输)。
  2. 应用层协议的核心特征

    • 面向具体应用场景(如 RPC、文件传输、邮件服务等),定义应用程序间交互的语义和格式。
    • gRPC 基于 HTTP/2 传输层协议,并通过 Protobuf 定义数据格式,属于应用层的业务逻辑封装。

二、同类型的应用层通信方式(RPC 框架与协议)

(1)传统 RPC 框架
  • 特点:与 gRPC 类似,均提供“本地函数调用”式的远程通信抽象,但底层协议和实现方式不同。
  • 代表类型
    • Thrift
      • 由 Apache 开发,支持多语言,使用二进制格式序列化数据,底层可基于 TCP 或 HTTP 传输。
      • 应用场景:Hadoop、Cassandra 等大数据组件的服务通信。
    • gRPC 的前身:Google Stubby
      • Google 内部使用的 RPC 框架,gRPC 是其开源后的演进版本,继承了 Protobuf 和 HTTP/2 特性。
    • Dubbo
      • 阿里巴巴开源的 RPC 框架,基于 Java 生态,早期使用自定义二进制协议,后期支持 HTTP/2 和 gRPC。
      • 应用场景:国内互联网微服务架构(如电商、金融系统)。
(2)基于 HTTP 的 RPC 协议
  • 特点:以 HTTP 为底层传输协议,部分框架兼容 REST 风格,但更注重 RPC 的接口抽象。
  • 代表类型
    • RESTful API
      • 严格来说属于 API 设计风格,而非专门的 RPC 框架,但常用于轻量级服务通信(基于 HTTP/1.x + JSON)。
      • 应用场景:前端与后端的接口交互、开放 API 服务(如 GitHub API)。
    • gRPC-Web
      • gRPC 在浏览器端的适配方案,通过 HTTP/2 或 HTTP/1.1 模拟 gRPC 调用,解决浏览器兼容性问题。
      • 应用场景:前端 JavaScript 与 gRPC 服务的直接通信。
(3)消息队列与异步通信
  • 特点:虽非严格意义上的 RPC(同步调用),但常用于服务间通信,属于应用层的解耦方案。
  • 代表类型
    • Apache Kafka
      • 分布式消息队列,基于 TCP 传输,支持高吞吐量的异步消息传递,适用于日志处理、流计算场景。
    • RabbitMQ
      • 基于 AMQP 协议的消息中间件,支持多种消息模式(如发布-订阅、路由队列),用于微服务异步通信。

三、不同通信方式的对比与适用场景

类型 代表框架/协议 底层传输 序列化方式 性能 适用场景
gRPC gRPC HTTP/2 + TCP Protobuf 微服务、跨语言、高性能实时通信
传统 RPC Thrift/Dubbo 自定义协议/TCP 二进制 中高 单一语言生态、大数据组件通信
RESTful Spring MVC HTTP/1.x JSON/XML 中低 前端接口、开放 API、轻量级服务
消息队列 Kafka/RabbitMQ TCP 二进制/文本 异步任务、流量削峰、日志收集

四、总结:gRPC 在应用层的定位与优势

作为应用层的 RPC 框架,gRPC 通过 HTTP/2 + Protobuf 的组合,在性能、跨平台性和流通信能力上优于传统 RESTful 和部分 RPC 框架。同类型的通信方式中,Thrift 和 Dubbo 更适合单一语言或特定生态,而消息队列则适用于异步解耦场景。选择时需根据业务对实时性、跨语言支持、接口规范的需求综合考量。

后期的开发经验将会继续分享,可添加UavFree95,或博主其他文章也在持续更新