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

网络通讯分层

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

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

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

1. 物理层(Physical Layer)
  • 功能:定义物理设备(如网线、光纤、网卡)的电气特性、机械接口和信号传输方式(如电压、频率)。
  • 关键技术:线缆标准(如RJ45)、信号调制(如ASK/FSK)、物理接口(如USB、HDMI)。
  • 示例:网线传输0/1电信号、光纤传输光信号。
  • 功能:在相邻节点间传输数据帧,处理物理层的错误(如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,或博主其他文章也在持续更新

相关推荐
库库的数据库笔记24 分钟前
金融核心交易系统的数据库国产信创改造该如何做?
大数据·数据库·分布式·mysql·oracle·金融·数据库架构
yunlaodacom35 分钟前
华为云国际站服务代理商:BMS数据库延迟突然升高?磁盘I/O、网络与CPU排查方法
网络·数据库·华为云
张宇Joaquin40 分钟前
自研SP600系列网卡驱动跟麒麟V10 SP3 2403配套关系
linux·运维·网络
睡一觉就好了。1 小时前
Cookie与Session
网络
步行cgn1 小时前
HTTP 常用请求方法详解
网络·网络协议·http
mengge.cloud1 小时前
1019Namespace ,Contexts ,Kubernetes Pod
运维·服务器·网络·云原生·容器·kubernetes·云计算
艾iYYY1 小时前
【无标题】
linux·开发语言·网络·操作系统
QZ166560951592 小时前
可视化易用·低误报率·跨区域部署:知源-AI数据分类分级系统在金融行业的落地实践
大数据·网络·安全·网络安全
aixingkong9212 小时前
UALink 技术白皮书解读
服务器·网络·硬件架构
Amumu121383 小时前
Node学习: 网络基础概念 + HTTP模块
网络·node.js