当前位置: 首页 > news >正文

TCP、HTTP以及RPC的梳理

TCP:一种面向连接的、可靠的、基于字节流的协议

  1. 原生 TCP 和粘包问题
    TCP 是一种面向连接的、可靠的传输层协议,负责在网络上发送字节流数据。它提供了流量控制、错误检测和重传等机制,但并不对应用层的数据进行分隔或解析。
    粘包问题:由于 TCP 是面向字节流的,它无法区分不同的数据包边界。这会导致多个数据包被“粘”在一起,接收端必须通过应用层协议来处理数据边界。
  2. 协议层次与数据分隔
    协议:为了处理 TCP 的粘包问题,各种应用层协议定义了数据的格式和分隔规则。例如,HTTP 和 RPC 都在 TCP 上运行,但它们使用不同的方式来定义和管理消息格式。
    Header 和 Body:许多协议(包括 HTTP 和 RPC)使用头部(Header)和主体(Body)来组织数据。头部通常包含元数据(如内容类型、长度、编码等),而主体包含实际的数据负载。
  3. HTTP 和 RPC
    HTTP:是一个应用层协议,用于在客户端和服务器之间传输数据。HTTP/1.1 和 HTTP/2 支持持久连接(即连接复用),可以提高性能。HTTP 定义了多种请求方法(如 GET、POST、PUT、DELETE)和数据格式(如 JSON、XML)。

HTTP/2 引入了二进制分帧、流量控制和头部压缩等改进,进一步优化了性能。
RPC (Remote Procedure Call):是一种通信协议,允许在网络上调用远程服务器上的函数或过程。RPC 的目标是使远程服务调用像本地服务调用一样方便。RPC 本身不是一个具体的协议,而是一种模式,可以使用多种底层协议来实现,如 HTTP、gRPC、Thrift 等。

HTTP 和 RPC 的关系:RPC 可以使用 HTTP 作为传输协议(例如,JSON-RPC 和 XML-RPC),或者使用其他协议(如 gRPC 使用 HTTP/2)。RPC 聚焦于简化远程调用,而 HTTP 聚焦于传输数据和资源。

参考链接:https://juejin.cn/post/7121882245605883934

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 有关Prompt Engineering(提示词工程)的一些总结
  • 低代码门户技术:赋能业务灵活性与创新的新时代
  • go 开发小技巧
  • 解决Spring Boot中Druid连接池“discard long time none received connection“警告
  • Unity(2022.3.41LTS) - 地形
  • 口语笔记——虚拟语气
  • 智慧灯塔,照亮企业AI Agent实施明路
  • MYSQL:简述对B树和B+树的认识
  • 使用maven搭建微服务框架
  • 基于七牛云上传,下载文件
  • 【数据库】两个集群数据实现同步方案
  • Node.js-身份证号实名认证-小程序实名认证接口集成方法
  • C语言中的预处理器字符串化与拼接操作符:底层原理及实现细节
  • 谷歌发布新AI GameNGen:AI也能实时生成游戏画面!
  • C++ day3
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • CentOS7简单部署NFS
  • CSS魔法堂:Absolute Positioning就这个样
  • Docker入门(二) - Dockerfile
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • Javascript 原型链
  • Javascript编码规范
  • Laravel 实践之路: 数据库迁移与数据填充
  • Linux下的乱码问题
  • PAT A1092
  • php面试题 汇集2
  • SQLServer之创建数据库快照
  • Vue实战(四)登录/注册页的实现
  • 汉诺塔算法
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 数组大概知多少
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • ‌移动管家手机智能控制汽车系统
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #NOIP 2014# day.2 T2 寻找道路
  • (2.2w字)前端单元测试之Jest详解篇
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (十六)、把镜像推送到私有化 Docker 仓库
  • (算法)大数的进制转换
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .Net 高效开发之不可错过的实用工具
  • .net和jar包windows服务部署
  • .net开发引用程序集提示没有强名称的解决办法