揭开 gRPC、RPC 、TCP和UDP 的通信奥秘

差异点

特性TCPUDPRPCgRPCHTTP
工作层级传输层传输层应用层应用层应用层
传输协议面向连接的传输协议无连接传输协议使用 TCP、HTTP 等协议HTTP/2HTTP/1.1, HTTP/2
序列化格式字节流数据报文XML、JSON 或自定义Protocol BuffersJSON 或 XML
特点可靠的连接传输无连接、快速传输远程调用封装高效、双向流、多语言支持无状态、请求-响应模式
使用场景底层可靠数据传输实时多播、视频流传输分布式系统中的服务调用现代微服务架构信息传输

简而言之:

  • TCP 是用于低层数据传输的可靠协议,保证数据的完整性和顺序传输。

  • UDP 是一种无连接的传输协议,提供快速的数据传输但不保证可靠性,非常适用于实时通信的场景。

  • RPC 提供了应用层的远程调用封装,使得不同计算机之间的通信就像本地函数调用一样简单。

  • gRPC 是现代化的远程调用框架,结合了 HTTP/2 和 Protocol Buffers,具有高性能、低延迟等特点,非常适合微服务架构中的高效通信。

  • HTTP 是一种无状态的请求-响应协议,用于客户端和服务器之间传输数据,广泛应用于万维网信息交换。

一、TCP

TCP (Transmission Control Protocol) 是一种面向连接的、可靠的传输层协议,广泛用于需要高可靠性的数据传输场景。它工作在 OSI 模型的传输层,为应用程序之间提供可靠的数据流传输。

TCP 的特点

  1. 可靠性传输:TCP 通过确认和重传机制,确保数据在网络上传输的可靠性和顺序性。

  2. 三次握手建立连接:在通信开始前,TCP 通过三次握手建立可靠的连接,以确保双方准备就绪。

  3. 流量控制与拥塞控制:TCP 通过流量控制和拥塞控制,确保网络的稳定性,避免因网络拥堵导致数据丢失。

举个例子:TCP 就像你和朋友传纸条,必须确认对方收到后才能传下一张,而且每张纸条都按顺序编号,避免信息混乱。

TCP 的通信流程图

客户端──> 三次握手请求 ───> 服务器<── 三次握手响应 <─────> 发送数据 ──────><── 确认数据接收 ─────> 四次挥手请求 ──><── 四次挥手响应 <───

TCP 的实际使用场景

  1. 文件传输:如 FTP(文件传输协议)使用 TCP 来确保文件的完整性,避免数据丢失。

  2. 网页浏览:HTTP 基于 TCP,用于确保网页请求和响应能够可靠地到达用户。

  3. 电子邮件传输:SMTP(邮件传输协议)也依赖于 TCP 来确保电子邮件完整、顺序地传输到目的地。

二、UDP:速度至上,无连接的轻量级传输

UDP (User Datagram Protocol) 是一种无连接的传输层协议,它注重速度和效率,不提供数据传输的确认机制,因此不能保证数据的可靠性。UDP 常用于需要快速、实时传输但不需要可靠性的场景。

UDP 的特点

  1. 无连接传输:UDP 不需要建立连接,可以直接发送数据,因此减少了连接建立和释放的时间开销。

  2. 快速传输:由于没有重传机制和确认机制,UDP 的传输效率非常高,适用于对速度要求高、对可靠性要求不高的场景。

  3. 数据报传输:UDP 以数据报的形式发送数据,每个数据报是独立的,彼此之间没有任何依赖关系。

示例:UDP 就像一位快递员,不需要签收确认,直接将包裹丢到你家门口,然后就走了。如果包裹丢失,他也不会返回来补送。

UDP 的通信流程图

客户端──> 直接发送数据报 ───> 服务器
服务器<── 接收数据报(无确认响应) <───

UDP 的实际使用场景

  1. 视频流传输:如在线直播、视频会议等场景,UDP 被广泛用于音视频数据流的传输,保证了低延迟和流畅性,即使部分数据丢失也不影响整体体验。

  2. 在线游戏:实时在线游戏需要极低的延迟,UDP 可以提供快速的数据传输,适用于游戏中的实时位置更新和事件传递。

  3. 物联网(IoT):某些 IoT 设备需要发送简单的状态更新数据,UDP 可以满足轻量和快速的传输需求。

三、RPC:远程过程调用的桥梁

RPC (Remote Procedure Call) 是一种应用层协议,用于实现进程间的通信,使得程序可以调用远程服务器上的函数,就像调用本地函数一样简单。RPC 封装了底层的网络通信,以便开发人员无需关注底层数据传输的细节。

RPC 的特点

  1. 远程调用抽象:RPC 使得远程服务调用像本地函数调用一样,使得分布式系统中的服务通信更加简单和透明。

  2. 序列化:RPC 会把你要传给远程的方法的参数打包(序列化),然后通过 网络传输(TCP 或 HTTP) 传输到服务器。服务器处理后再把结果序列化返回。

  3. 协议独立性:RPC 可以使用 TCP、HTTP 等多种协议进行传输,灵活性较高。

示例:RPC 就像电话订餐,你只需告诉服务员订单信息,服务员会准备好并送到你家,你不需要关心厨房的操作过程。

RPC 的调用流程图

客户端──> 调用远程方法 ──────────> RPC 框架──> 序列化参数 ──────────> 传输到服务器(TCP/HTTP)
服务器<── 反序列化参数并处理逻辑 <───<── 序列化结果并返回 ───────

RPC 的实际使用场景

  1. 分布式服务调用:RPC 非常适合微服务架构中各个服务之间的调用,比如某个用户服务需要调用订单服务来获取用户订单信息。

  2. 传统企业系统集成:在企业中,不同的业务系统之间需要交互,可以使用 RPC 让这些系统像调用本地服务一样相互协作。

  3. 云服务平台:很多云服务提供的 API 是基于 RPC 的,可以简化开发者调用云服务的过程。

Dubbo:RPC 的增强实现

Dubbo 是阿里巴巴开源的一个高性能 RPC 框架,它对传统 RPC 进行了增强,特别适用于微服务架构。Dubbo 提供了服务治理、负载均衡和故障容错等功能,使得服务之间的调用更加可靠和高效。

  • 多协议支持:Dubbo 支持多种协议,包括自定义的 Dubbo 协议,能够在不同场景下选择最合适的传输方式。

  • 服务注册与发现:通过服务注册中心(如 Zookeeper),Dubbo 可以自动发现并管理服务,使得分布式服务的扩展和管理更加容易。

  • 负载均衡:内置多种负载均衡策略(如随机、轮询、最少活跃调用等),有效地分配请求到各个服务实例。

示例:Dubbo 就像是升级版的电话订餐系统,它不仅能帮你订餐,还能在服务员繁忙时自动找到空闲的服务员来接单,保证服务高效且不中断。

Dubbo 的工作流程图

客户端──> 服务注册中心(Zookeeper)获取服务地址──> 调用远程服务(通过 Dubbo 协议)──> 序列化参数并传输到服务器
服务器<── 反序列化参数并处理逻辑<── 序列化结果并返回给客户端

Dubbo 的实际使用场景

  1. 企业级分布式系统:Dubbo 被广泛应用于大型企业的分布式架构中,适用于有大量服务交互需求的环境,特别是高并发场景。

  2. 高可用服务调用:利用服务注册中心和负载均衡机制,Dubbo 能确保系统在单个服务节点故障时的持续可用。

  3. 微服务治理:Dubbo 可以在微服务架构中实现良好的服务治理,包括版本控制、熔断、限流等。

四、gRPC:现代化的高效通信框架

gRPC 是 Google 开发的一种现代化高性能 RPC 框架,基于 HTTP/2 协议并使用 Protocol Buffers 作为序列化机制。gRPC 是为微服务架构设计的,提供了高效、可扩展的远程调用方式。

gRPC 的特点

  1. 基于 HTTP/2:gRPC 使用 HTTP/2 协议,支持双向流和多路复用,使得通信更加高效,减少了延迟和带宽消耗。

  2. 高效的序列化机制:gRPC 使用 Protocol Buffers(protobuf)进行数据序列化,比传统的 JSON 和 XML 更加高效,占用更少的网络带宽。

  3. 跨语言支持:gRPC 支持多种编程语言,适合构建跨平台的分布式系统,极大简化了不同技术栈之间的通信难题。

gRPC 的双向流通信流程图

客户端──> 调用 gRPC 方法 ───> gRPC 框架──> 使用 Protocol Buffers 序列化参数──> 通过 HTTP/2 传输数据包 ───> 服务器<── 服务器处理并返回序列化结果<── HTTP/2 双向流支持多次请求和响应

gRPC 的实际使用场景

  1. 微服务架构:gRPC 非常适合微服务之间的高效通信,特别是在需要低延迟和高吞吐量的场景中。比如,订单服务和支付服务可以通过 gRPC 高效通信。

  2. 实时通信:例如,实时视频流、聊天应用等需要双向通信的场景,gRPC 的 HTTP/2 支持双向流,是实现实时数据交换的理想选择。

  3. 多语言环境下的服务交互:gRPC 支持多种语言,非常适合不同语言实现的服务之间相互通信,比如前端用 JavaScript,而后端用 Go。

  4. 物联网(IoT):在 IoT 场景中,设备之间的高效通信至关重要,gRPC 可以用于设备和服务器之间高效的数据传输。

五、HTTP:万维网的基石

HTTP (Hypertext Transfer Protocol) 是一种应用层协议,广泛用于客户端和服务器之间的数据传输。HTTP 协议主要用于传输超文本、网页资源以及其他网络服务,通常与 TCP 一起使用,以保证数据传输的可靠性。

HTTP 的特点

  1. 请求-响应模型:HTTP 采用请求-响应的通信模式,客户端发起请求,服务器返回响应。每次请求和响应都是独立的。

  2. 无状态性:HTTP 协议是无状态的,服务器不会保留之前请求的状态信息,因此每个请求都是独立的。为了保持状态,需要使用 Cookies 或其他机制。

  3. 灵活性和扩展性:HTTP 可以传输各种类型的数据,不仅限于文本和网页,还可以传输图片、视频和文件等。

示例:HTTP 就像是向图书馆借书,你需要每次提供借书卡,图书馆不会记住你上一次借了什么书,需要通过你提供的信息来完成服务。

HTTP 的工作流程图

客户端──> 发起 HTTP 请求 ───> 服务器<── 服务器返回 HTTP 响应 <───

HTTP 的实际使用场景

  1. 网页浏览:HTTP 是万维网的核心协议,浏览器通过 HTTP 向服务器请求网页,服务器返回 HTML 页面给客户端展示。

  2. API 调用:RESTful API 基于 HTTP,通过 GET、POST 等方法实现客户端与服务器之间的数据交互。

  3. 文件下载:HTTP 用于从服务器下载文件,客户端发送请求后,服务器会将文件作为响应返回。

HTTP/2:HTTP/2 是 HTTP 协议的改进版本,支持多路复用、请求优先级和头部压缩,大幅度提升了性能,减少了延迟和带宽使用,是现代化 Web 应用程序中广泛使用的协议。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/60256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二叉树搜索树(上)

二叉树搜索树&#xff08;上&#xff09; 概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一颗空树&#xff0c;或者是具有以下性质的二叉树: • 若它的左子树不为空&#xff0c;则左子树上所有结点的值都⼩于等于根结点的值 • 若它的右子树不为空&#xff0c;则右子树…

解读Nature:Larger and more instructable language models become less reliable

目录 Larger and more instructable language models become less reliable 核心描述 核心原理 创新点 举例说明 大模型训练,微调建议 Larger and more instructable language models become less reliable 这篇论文的核心在于对大型语言模型(LLMs)的可靠性进行了深入…

在Linux上部署(MySQL Redis Elasticsearch等)各类软件

实战章节&#xff1a;在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面&#xff0c;我们学习了许多的Linux命令和高级技巧&#xff0c;这些知识点比较零散&#xff0c;同学们跟随着课程的内容进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c…

局域网桥接只能单向ping问题,arp无法建立

一、问题 三台设备&#xff1a;Windows&#xff0c;Ubuntu&#xff0c;开发板。 我的Windows在每次开机后&#xff0c;无法ping通开发板&#xff0c;开发板可以ping通Windows&#xff1b; Windows和另一台局域网内的Ubuntu可以相互ping通&#xff1b; Ubuntu和开发板可以相互pi…

FPGA实现以太网(二)、初始化和配置PHY芯片

系列文章目录 FPGA实现以太网&#xff08;一&#xff09;、以太网基础知识 文章目录 系列文章目录一、MDIO协议介绍二、PHY芯片管脚以及结构框图三、MDIO帧时序介绍3.1 MDIO帧格式3.2 MDIO写时序3.3 MDIO读时序 四、PHY芯片常用寄存器描述4.1 基本模式控制寄存器&#xff08;0…

Spring资源加载模块,原来XML就这,活该被注解踩在脚下 手写Spring第六篇了

这一篇让我想起来学习 Spring 的时&#xff0c;被 XML 支配的恐惧。明明是写Java&#xff0c;为啥要搞个XML呢&#xff1f;大佬们永远不知道&#xff0c;我认为最难的是 XML 头&#xff0c;但凡 Spring 用 JSON来做配置文件&#xff0c;Java 界都有可能再诞生一个扛把子。 <…

Unity WebGL交互通信

Unity 调用 H5 本文使用的 unity 版本为&#xff1a;2021.3.3 1.在unity中通过c#的特性DllImport导出外部实现函数 [DllImport("__Internal")]private static extern void callJsString(string param);[DllImport("__Internal")]private static extern vo…

Android 如何实现不编译指定的apk,不加载系统应用

1.把Android.mk改为Android.mk_bak 2.删除当前Android.mk内容变为空mk 或者注释掉里面所有内容 3.以上方法存在些许问题&#xff0c;因为只是把当前的mk屏蔽了&#xff0c;但其他路径的类似应用也会编译进去。 在内置应用mk下添加需要覆盖的应用&#xff0c;这个比较全面&…

SpringCloud框架学习(第二部分:Consul、LoadBalancer和openFeign)

目录 六、Consul服务注册和发现 1.基本介绍 2.下载运行 3.服务注册与发现 &#xff08;1&#xff09;支付服务provider8001注册进consul &#xff08;2&#xff09;修改订单服务cloud-consumer-order80 4.CAP &#xff08;1&#xff09;CAP理论 &#xff08;2&#x…

[每日一练]通过自连接实现混合列的筛选(pandas解法)

#该题目来源于力扣&#xff1a; 1241. 每个帖子的评论数 - 力扣&#xff08;LeetCode&#xff09; 题目要求&#xff1a; 表 Submissions &#xff1a;------------------------- | 列名 | 类型 | ------------------------- | sub_id | int | | pa…

Playwright——快速入门(初章)

Playwright&#xff1a;引领自动化测试的未来 在数字化时代&#xff0c;Web应用的复杂性和用户期望的提高对软件测试提出了更高的要求。微软开发的Playwright&#xff0c;作为一个创新的自动化测试框架&#xff0c;正以其卓越的性能和全面的浏览器支持&#xff0c;重新定义Web…

ssm094学生宿舍管理+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;学生宿舍管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生宿舍管理系统…

Redis中的过期删除与内存淘汰

1.Redis中的过期删除策略 在 Redis 中&#xff0c;过期删除策略是为了管理存储在 Redis 中的带有过期时间的数据。每当数据存储时&#xff0c;可能会为其设定一个过期时间。当到达这个时间点后&#xff0c;该数据就被标记为“过期”。为了确保不再需要的过期数据不会占用系统资…

Kubernetes 中的 GPU 管理与 Device Plugin 机制深度解析

Kubernetes 中的 GPU 管理与 Device Plugin 机制深度解析 在现代计算领域,GPU(图形处理器)的强大计算能力越来越受到重视。Kubernetes 作为一种流行的容器编排平台,也提供了对 GPU 资源的管理和使用支持。本节课将深入剖析 Kubernetes 中的 GPU 管理与 Device Plugin 机制…

机器学习——贝叶斯

&#x1f33a;历史文章列表&#x1f33a; 机器学习——损失函数、代价函数、KL散度机器学习——特征工程、正则化、强化学习机器学习——常见算法汇总机器学习——感知机、MLP、SVM机器学习——KNN机器学习——贝叶斯机器学习——决策树机器学习——随机森林、Bagging、Boostin…

Leetcode 3352. Count K-Reducible Numbers Less Than N

Leetcode 3352. Count K-Reducible Numbers Less Than N 1. 解题思路2. 代码实现 题目链接&#xff1a;3352. Count K-Reducible Numbers Less Than N 1. 解题思路 这一题的话思路上我是拆成了两步来做的&#xff0c;首先&#xff0c;我们要认识到&#xff0c;这里的变化本质…

403 Request Entity Too Lager(请求体太大啦)

昨天收到 QA 的生产报障&#xff0c;说是测试环境的附件上传功能报了 403 的错误&#xff0c;错误信息&#xff1a;403 Request Entity Too Lager。我尝试复现问题&#xff0c;发现传个几兆的文件都费劲啊&#xff0c;一传一个失败。不用说&#xff0c;项目用到 ng 代理&#x…

232转485模块测试

概述 常用的PLC一般会有两个左右的232口&#xff0c;以及两个左右的485口&#xff0c;CAN口等&#xff0c;但是PLC一般控制的设备可能会有很多&#xff0c;会超出通讯口的数量&#xff0c;此时我们一般会采用一个口接多个设备&#xff0c;这种情况下要注意干扰等因素&#xff0…

科技资讯|Matter 1.4 标准正式发布,低功耗蓝牙助力其发展

连接标准联盟&#xff08;CSA&#xff09;宣布推出最新的 Matter 1.4 版本&#xff0c;引入了一系列新的设备类型和功能增强&#xff0c;有望提高包括 HomeKit 在内的智能家居生态系统之间的互操作性。 设备供应商和平台能够依靠增强的多管理员功能改善多生态系统下的用户体验&…

@ComponentScan注解引发外部请求无法处理的解决办法

ComponentScan注解引发外部请求无法处理的解决办法 问题起因 最近通过maven从项目中拆分出模块module-db和模块module-seckill 模块module-db主要通过mybatisplus实现数据库的操作&#xff0c;并封装业务接口&#xff1b; 模块module-seckill引入module-db依赖&#xff0c;…