网络通讯知识——通讯分层介绍,gRPC,RabbitMQ分层
网络通讯分层
网络通讯分层是为了将复杂的网络通信问题分解为多个独立、可管理的层次,每个层次专注于特定功能。目前主流的分层模型包括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七层模型合并为四层(或五层):
四层模型(从下到上)
-
网络接口层(Network Interface Layer)
- 合并OSI的物理层和数据链路层,处理硬件接口和链路通信(如以太网、WiFi)。
-
网络层(Internet Layer)
- 同OSI网络层,核心协议为IP,负责路由和寻址。
-
传输层(Transport Layer)
- 同OSI传输层,核心协议为TCP和UDP。
-
应用层(Application Layer)
- 合并OSI的会话层、表示层和应用层,包含HTTP、FTP等具体应用协议。
五层模型(更细化的版本)
- 在四层模型基础上,将网络接口层拆分为物理层和数据链路层,形成五层:
- 物理层
- 数据链路层
- 网络层
- 传输层
- 应用层
三、两种模型的对比与映射
OSI七层模型 | TCP/IP四层模型 | TCP/IP五层模型 | 核心功能举例 |
---|---|---|---|
物理层 | 网络接口层 | 物理层 | 线缆传输电信号、光信号 |
数据链路层 | 数据链路层 | 以太网帧传输、MAC地址寻址 | |
网络层 | 网络层 | 网络层 | IP路由、数据包分片 |
传输层 | 传输层 | 传输层 | TCP/UDP数据传输、端口号管理 |
会话层 | 应用层 | 应用层 | 会话管理(如登录认证) |
表示层 | 数据加密、格式转换(如JSON/SSL) | ||
应用层 | HTTP访问网页、FTP传输文件 |
四、分层模型的核心优势
- 解耦复杂性:各层独立设计,修改某层不影响其他层(如物理层升级为5G,不改变应用层协议)。
- 标准化接口:层间通过固定接口交互(如传输层为应用层提供Socket接口),便于跨平台兼容。
- 简化开发:开发者只需关注特定层的功能(如Web开发专注应用层的HTTP协议)。
五、实际应用中的分层示例:网页访问流程
以浏览器访问网页为例,数据在各层的流转过程:
- 应用层:浏览器发送HTTP请求,封装为HTTP报文。
- 传输层:HTTP报文被封装为TCP数据包(目标端口80),添加源/目标端口号。
- 网络层:TCP数据包封装为IP数据包,添加源/目标IP地址(如192.168.1.1 → 百度服务器IP)。
- 数据链路层:IP数据包封装为以太网帧,添加源/目标MAC地址,通过网线传输。
- 物理层:电信号通过网线传输到路由器,经多层路由转发后到达服务器,反向解封装后处理请求。
gRPC
gRPC 是一种高性能、开源的远程过程调用(Remote Procedure Call,RPC)框架,它基于 HTTP/2 通讯层构建,能够在不同服务与语言之间实现高效的通信。以下是关于 gRPC 的详细介绍:
一、gRPC 的本质:远程过程调用(RPC)框架
- 核心功能:允许开发人员像调用本地函数一样调用远程服务器上的函数,无需手动处理网络通信细节(如序列化、传输、反序列化等)。
- 应用场景:
- 微服务架构:用于服务间的通信,支持多语言服务协同工作(如 Java 服务与 Go 服务交互)。
- 跨平台通信:可在移动端(Android/iOS)、浏览器、服务器等不同平台间建立高效连接。
- 高性能需求场景:相比传统 RESTful API,gRPC 在传输效率、连接复用等方面更具优势。
二、gRPC 基于的通讯层:HTTP/2
gRPC 选择 HTTP/2 作为底层通讯协议,主要基于以下特性:
- 二进制分帧:
- HTTP/2 将数据分割为二进制帧(Frame),而非 HTTP/1.x 的文本格式,解析效率更高。
- 示例:请求和响应可拆分为头部帧(Headers Frame)和数据帧(Data Frame),实现更灵活的传输。
- 多路复用:
- 单个 TCP 连接可同时处理多个请求和响应,避免 HTTP/1.x 中的“队头阻塞”问题。
- 例如:客户端可在一个连接中同时发送多个 RPC 调用,服务器按顺序或并行处理后返回结果。
- 头部压缩:
- 使用 HPACK 算法压缩 HTTP 头部,减少数据传输量,尤其适合频繁发送小数据包的场景(如 RPC 调用)。
- 服务器推送:
- 服务器可主动向客户端推送资源(如图片、静态文件),减少客户端二次请求,提升性能。
- 流模式支持:
- HTTP/2 支持双向流(Stream),gRPC 基于此实现四种通信模式:
- Unary(一元调用):客户端发送一个请求,服务器返回一个响应(类似传统 RPC)。
- Server Streaming(服务器流):客户端发送一个请求,服务器返回多个响应(如实时数据推送)。
- Client Streaming(客户端流):客户端发送多个请求,服务器返回一个响应(如日志上传)。
- Bidirectional Streaming(双向流):客户端和服务器可同时双向发送消息(如实时聊天)。
- HTTP/2 支持双向流(Stream),gRPC 基于此实现四种通信模式:
三、gRPC 的其他关键组件与特性
- Protocol Buffers(Protobuf):
- 作为默认的数据序列化格式,比 JSON/XML 更高效(体积小、解析快)。
- 通过
.proto
文件定义服务接口和消息结构,支持自动生成多语言代码(如 Java、Python、Go 等)。
- 跨平台与多语言支持:
- 官方支持 C++、Java、Python、Go、Node.js 等语言,社区也提供对 Ruby、PHP 等语言的扩展。
- 连接管理与负载均衡:
- 支持长连接(Persistent Connection),减少连接建立开销。
- 可与服务发现组件(如 Consul、etcd)集成,实现客户端侧的负载均衡。
- 拦截器(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 的网络层级定位:应用层
-
OSI 七层模型与 TCP/IP 四层模型对比
- 在 OSI 七层模型中,gRPC 位于第 7 层(应用层),直接为应用程序提供服务接口。
- 在 TCP/IP 四层模型中,gRPC 同样属于应用层,其底层依赖传输层的 TCP 协议(通过 HTTP/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。
- 应用场景:国内互联网微服务架构(如电商、金融系统)。
- Thrift
(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 服务的直接通信。
- RESTful API
(3)消息队列与异步通信
- 特点:虽非严格意义上的 RPC(同步调用),但常用于服务间通信,属于应用层的解耦方案。
- 代表类型:
- Apache Kafka
- 分布式消息队列,基于 TCP 传输,支持高吞吐量的异步消息传递,适用于日志处理、流计算场景。
- RabbitMQ
- 基于 AMQP 协议的消息中间件,支持多种消息模式(如发布-订阅、路由队列),用于微服务异步通信。
- Apache Kafka
三、不同通信方式的对比与适用场景
类型 | 代表框架/协议 | 底层传输 | 序列化方式 | 性能 | 适用场景 |
---|---|---|---|---|---|
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,或博主其他文章也在持续更新
相关文章:
网络通讯知识——通讯分层介绍,gRPC,RabbitMQ分层
网络通讯分层 网络通讯分层是为了将复杂的网络通信问题分解为多个独立、可管理的层次,每个层次专注于特定功能。目前主流的分层模型包括OSI七层模型和TCP/IP四层(或五层)模型,以下是详细解析: 一、OSI七层模型&#…...
Linux与Windows切换使用Obsidian,出现 unexplained changes 问题的解决
如果你的Obsidian文档在Linux与Windows间来回切换,可能会涉及到文件的保存换行符问题,但这样的话就容易导致一个问题,那就是内容无差异,Obsidian却提示unexplained changes,Windows系统下的解决方法如下,找…...

基于VMD-LSTM融合方法的F10.7指数预报
F10.7 Daily Forecast Using LSTM Combined With VMD Method F10.7 solar radiation flux is a well-known parameter that is closely linked to solar activity, serving as a key index for measuring the level of solar activity. In this study, the …...

35 C 语言字符串转数值函数详解:strtof、strtod、strtold(含 errno 处理、ERANGE 错误)
1 strtof() 函数 1.1 函数原型 #include <stdlib.h> // 必须包含这个头文件才能使用 strtof() #include <errno.h> // 包含 errno 和 ERANGE #include <float.h> // 包含 FlOAT_MAX 和 FLOAT_MIN #include <math.h> // 包含 HUGE_VALF(inf)float…...
解决 idea提示`SQL dialect is not configured` 问题
前言 在 Java 开发中,尤其是使用 IntelliJ IDEA 或 MyBatis 等框架时,开发者常会遇到 SQL dialect is not configured 的警告或错误。这一问题不仅影响代码的高亮和智能提示功能,还可能导致表结构解析失败、语法校验失效等问题。 一、问题分…...
springboot的test模块使用Autowired注入失败
springboot的test模块使用Autowired注入失败的原因: 注入失败的原因可能是用了junit4的包的Test注解 import org.junit.Test;解决方法:再加上RunWith(SpringRunner.class)注解即可 或者把Test由junit4改成junit5的注解,就不用加上RunWith&…...

日志收集工具-Filebeat
提示:windows 环境下 Filebeat 的安装与使用 文章目录 前言一、安装二、配置部署三、启动测试 前言 Filebeat 一般用于日志采集,由两部分组成 :Harvesters 和 prospector Harvesters采集器:逐行读取单个文件的内容,并…...
【PCIe总线】 -- PCI、PCIe相关实现
PCI、PCIe相关概念和知识点 【PCIe总线】-- PCI、PCIe基础知识点整理 【PCIe】非常适合初学的pcie博客(PCIe知识整理) PCIe具体实现 【PCIe】如何获取PCIe的BAR空间大小?...

Vue3学习(4)- computed的使用
1. 简述与使用 作用:computed 用于基于响应式数据派生出新值,其值会自动缓存并在依赖变化时更新。 缓存机制:依赖未变化时直接返回缓存值,避免重复计算(通过 _dirty 标志位实现)。响应式更新&…...

手机上网可以固定ip地址吗?详细解析
在移动互联网时代,手机已成为人们日常上网的主要设备之一。无论是工作、学习还是娱乐,稳定的网络连接都至关重要。许多用户对IP地址的概念有所了解,尤其是固定IP地址的需求。那么,手机上网能否固定IP地址?又该如何实现…...
电脑同时连接内网和外网的方法,附外网连接局域网的操作设置
对于工作一般都设置在内网网段中,而同时由于需求需要连接外网,一般只能通过内网和外网的不断切换进行设置,如果可以同时连接内网和外网会更加便利,同时连接内网和外网方法具体如下。 一、电脑怎么弄可以同时连接内网和外网&#…...

如何在Unity中实现点击一个按钮跳转到哔哩哔哩
1.创建一个按钮 2.编写一个脚本(你可以把链接改成你想要跳转的网站) using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class JumpToBilibili : MonoBehaviour {void Start(){gameObject.…...
DHCP 动态主机配置协议(Dynamic host configuration protocol)逐层封装过程: DHCP --> UDP --> IP
📦 DHCP 报文逐层封装结构(自上而下) 应用层(DHCP 报文) ↓ 传输层(UDP 首部) ↓ 网络层(IP 首部) ↓ 数据链路层(以太网帧头) ↓ 物理层&#x…...

PySide6 GUI 学习笔记——常用类及控件使用方法(单行文本控件QLineEdit)
文章目录 QLineEdit 介绍常用方法QLineEdit.EchoMode 取值光标相关方法文本选择方法输入格式化字符(Input Mask)常用信号QLineEdit 实例 QLineEdit 介绍 QLineEdit 是 PySide6(Qt for Python)中用于单行文本输入的控件。它支持文本…...

【数据结构】6. 时间与空间复杂度
文章目录 一、算法效率1、算法的复杂度 二、时间复杂度1、时间复杂度的概念2、大O的渐进表示法3、常见时间复杂度计算1)实例12)实例23)实例34)实例45)实例56)实例67)实例78)实例8 三…...
Python 函数全攻略:函数进阶(生成器、闭包、内置函数、装饰器、推导式)
一、默认参数中的易错点 问题: 当函数的默认参数是可变类型(如 list, dict)时,存在“坑”。 现象: def func(a2=[]): # a2 默认是一个空列表a2.append(2)print(a2)func() # 第一次调用,a2 默认为 [],输出 [2] func([]) # 传入新列表,输出 [2] func([1]) # 传入带元素的…...

基于springboot的藏文古籍系统
博主介绍:高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实实在…...

重构城市应急指挥布控策略 ——无人机智能视频监控的破局之道
在突发事件、高空巡查、边远区域布控中,传统摄像头常常“看不到、跟不上、调不动”。无人机智能视频监控系统,打破地面视角局限,以“高空布控 AI分析 实时响应”赋能政企单位智能化管理。在城市应急指挥中心的大屏上,一场暴雨正…...

声音信号的基频检测(python版本)
import math import wave import array import functools from abc import ABC, abstractmethod import matplotlib import matplotlib.pyplot as plt from matplotlib.gridspec import GridSpec import os import sys# 设计模式部分 class PreprocessStrategy(ABC):"&q…...

STM32 控制12VRGB灯带颜色亮度调节,TFTLCD显示
接了一个同学的小项目,要实现控制一个实体,控制灯带的亮度为红/绿/蓝/白/黄以及亮度的叠加。 时间要的比较急,要两天实现,因此不能打板,只能采用现有模块拼接。 一. 实施方案 一开始觉得很简单,就是使用五…...
Hive开窗函数的进阶SQL案例
一、开窗函数基础 1. 定义与作用 开窗函数(Window Functions)在保留原始行数据的同时,对分组内的行进行聚合或排序分析,常用于累计计算、排名、移动平均等场景。与普通聚合函数(如SUM、AVG)的区别…...

【JJ斗地主-注册安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …...

《绩效管理》要点总结与分享
目录 绩效管理与目标设定 绩效管理的循环:PDCA 绩效目标的设定要点 绩效设定的工具:SMART法则 绩效跟踪与评估 刻板印象:STAR法 晕轮效应:对比评价法 近因效应:关键事项评估表 绩效面谈 面谈前准备工作 汉堡…...

Microsoft前后端不分离编程新风向:cshtml
文章目录 什么是CSHTML?基础语法内联表达式代码块控制结构 布局页面_ViewStart.cshtml_Layout.cshtml使用布局 模型绑定强类型视图模型集合 HTML辅助方法基本表单验证 局部视图创建局部视图使用局部视图 高级特性视图组件依赖注入Tag Helpers 性能优化缓存捆绑和压缩…...

【评测】用Flux的图片文本修改的PS效果
【评测】Flux的图片文本修改的PS效果 1. 百度图库找一张有英文的图片 2. 打开https://playground.bfl.ai/image/edit上传图片 3. 输入提示词 “change brarfant to goodbeer” 图片的文字被修改了...
青少年编程与数学 01-011 系统软件简介 01 MS-DOS操作系统
青少年编程与数学 01-011 系统软件简介 01 MS-DOS操作系统 1. MS-DOS的历史背景1.1 诞生背景1.2 发展历程1.3 与Windows的关系 2. MS-DOS的技术细节2.1 系统架构2.2 启动过程2.3 内存管理2.4 设备驱动程序 3. MS-DOS的用户界面3.1 命令行界面3.2 配置文件 4. MS-DOS的应用程序与…...

数据库管理-第334期 Oracle Database 23ai测试版RAC部署文档(20250607)
数据库管理334期 2024-06-07 数据库管理-第334期 Oracle Database 23ai测试版RAC部署文档(20240607)1 环境与安装介质2 操作标准系统配置2.1 关闭防火墙2.2 关闭SELinux2.3 关闭avahi-daemon2.4 时间同步配置 3 存储服务器配置3.1 配置本地yum源3.2 安装…...
springCloud2025+springBoot3.5.0+Nacos集成redis从nacos拉配置起服务
文章目录 前言一、网关gateway选型1. 响应式编程模型2. 网关的特定需求3. 技术栈一致性4. 性能对比5. 实际应用场景优势 二、redis的集成1.引入库2.配置类A、自定义配置类RedisAfterNacosAutoConfigurationB、自定义配置类RedisConfig 总结 前言 最近在搭建最新的springCloud …...

AI生成的基于html+marked.js实现的Markdown转html工具,离线使用,可实时预览 [
有一个markdown格式的文档,手头只有notepad的MarkdownPanel插件可以预览,但是只能预览,不能直接转换为html文件下载,直接复制预览的内效果又不太好,度娘也能找到很多工具,但是都需要在线使用。所以考虑用AI…...

机器学习:load_predict_project
本文目录: 一、project目录二、utils里的两个工具包(一)common.py(二)log.py 三、src文件夹代码(一)模型训练(train.py)(二)模型预测(…...