tcp、http和rpc

news/2024/9/18 6:05:48/ 标签: tcp/ip, http, rpc
http://www.w3.org/2000/svg" style="display: none;">
  1. tcp是传输层协议,httprpc是应用层协议。
  2. httprpc的底层都是tcp。
  3. tcp三大特点:面向连接、可靠、基于字节流。
  4. 纯tcp发送的消息是基于字节流,无边界的,接收方不知道哪些字节是一条完整的消息。所以,tcp不能直接使用。可以制定一些规则(消息格式)用于区分消息边界,根据规则把每条发送的数据都包装一下。根据这些规则的不同,衍生出各种协议,例如httprpc
  5. 既然tcp无边界,那直接将一个消息设置为一个数据包发送不行吗?不行。为了提高数据包传输效率,网络设备会将数据包进行合并和拆分,也就是粘包和拆包。粘包是将多个小数据包合并成一个,拆包是将一个大数据包拆分成多个。例如,在路由器中使用MTU定义一个数据包的大小。
  6. 区别消息边界的规则有3种:
    • 定长消息,消息的长度固定
    • 特殊分隔符分割消息
    • TLV:在消息头部存储消息长度
  7. 服务发现:要获取某个服务,首先需要知道该服务的ip地址和端口。在http中,知道服务的域名,就可以使用dns解析域名得到ip和端口,所以dns是服务发现的一种。在rpc中,一般有专门的中间服务保存服务名和ip,例如etcd。

参考视频:
https://www.bilibili.com/video/BV1Qv4y127B4
https://www.bilibili.com/video/BV1jh4y1D7Gh


http://www.ppmy.cn/news/1525852.html

相关文章

Kubernetes (k8s)v1.27.1版本安装步骤

这 一、k8s 安装步骤1.1 安装docker及containerd容器1.2、设置每台服务器的参数1.3、安装kubelet、kubeadm、kubectl1.4、修改 kubelet 的 cgroup 和 docker 的 cgroup-driver 保持一致1.5、使用containerd 默认容器的配置1.6、使用kubeadm进行初始化1.7、初始化成功1.8、集群部…

【JavaSE】Java基本数据类型缓存池

new Integer(18) 、 Integer.valueOf(18) 、Integer.valueOf(300) 的区别 new Integer(18) :每次都会创建一个新对象Integer.valueOf(x): x in [-128, 127]:使用缓存池中的对象x not in [-128, 127]:创建新对象 Integer缓存池大…

康谋分享 | 汽车仿真与AI的结合应用

在自动驾驶领域,实现高质量的虚拟传感器输出是一项关键的挑战。所有的架构和实现都会涉及来自质量、性能和功能集成等方面的需求。aiSim也不例外,因此我们会更加关注于多个因素的协调,其中,aiSim传感器实现的神经网络渲染仿真方案…

C++20 新特征:Ranges库初探

引言 C20引入了多个令人兴奋的新特性,其中最为突出的是Ranges库。Ranges库是标准模板库(STL)的重要扩展,旨在简化和优化序列数据的处理。本文将深入浅出地介绍Ranges库的核心组件及其对C编程带来的改进。 什么是Ranges库&#x…

【nginx】ngx_http_proxy_connect_module 正向代理

50.65无法访问 服务器, (403 错误) 50.196 可以访问服务器。 那么,配置65 通过196 访问。 需要一个nginx作为代理 【nginx】搭配okhttp 配置反向代理 发送原生的nginx是不支持okhttp的CONNECT请求的。 大神竟然给出了一个java工程 GINX编译ngx_http_proxy_connect_module及做…

计算机毕业设计选题推荐-勤工俭学兼职系统-助学兼职系统-Java/Python项目实战(亮点:手机验证码验证+数据可视化)

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

MySQL权限控制(DCL)

我的mysql里面的一些数据库和一些表 基本语法 1.查询权限 show grants for 用户名主机名;例子1:查询权限 show grants for heima%;2.授予权限 grant 权限列表 on 数据库名.表名 to 用户名主机名;例子2: 授予权限 grant all on itcast.* to heima%;…

阿里短信服务+Redis创建定时缓存

在这一章进行的操作是在java中引入阿里云的短信服务接口,在发送短信的时候将短信存进Redis缓存数据库中并且对缓存数据添加倒计时为五分钟 首先 找到阿里云服务的短信服务 例: 【三网106短信】短信接口-短信验证码-短信通知-数字藏品短信-短信API_支持转网_自定义签名模板-A…

CSP程序填空专项练习

已放在资源中,欢迎大家下载,距离初赛还有5天,祝大家成功!

从单体到微服务:FastAPI ‘挂载’子应用程序的转变

在现代 Web 应用开发中,模块化架构是一种常见的设计模式,它有助于将大型应用程序分解为更小、更易于管理的部分。FastAPI,作为一个高性能的 Python Web 框架,提供了强大的支持来实现这种模块化设计。通过“挂载”子应用程序&#…

OSSEC搭建与环境配置Ubuntu

尝试使用Ubuntu配置了OSSEC,碰见很多问题并解决了,发表博客让后来者不要踩那么多坑 环境 : server :Ubuntu22.04 64位 内存4GB 处理器4 硬盘60G agent: 1.Windows11 64位 2.Ubuntu22.04 64位 服务端配置 一、配置安装依赖项&…

计算机网络 第三章: 封装成桢和透明传输

文章目录 封装成帧透明传输习题解析 封装成帧 封装成帧是指数据链路层给上层交付下来的协议数据单元PDU添加一个首部和一个尾部,使之成为帧。 帧的首部和尾部中包含有一些 重要的控制信息。帧首部和尾部的作用之一就是帧定界。 接收方的数据链路层如何从物理层交付…

基于人工智能的智能家居语音控制系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 随着物联网(IoT)和人工智能技术的发展,智能家居语音控制系统已经成为现代家庭的一部分。通过语音控…

【自学笔记】支持向量机(1)

一些概念 支持向量机(Support Vector Machine,简称SVM)是一种广受欢迎的监督学习算法,主要用于分类和回归分析。在分类问题中,SVM的主要目标是在训练数据中找到一个超平面。这个超平面不仅能够准确地区分不同类别的样本…

使用C++实现一个支持基本消息传递的TCP客户端和服务器

使用C实现一个支持基本消息传递的TCP客户端和服务器 在网络编程中,TCP(Transmission Control Protocol)是一种常用的协议,用于在计算机之间建立可靠的连接。通过实现一个TCP客户端和服务器,可以深入理解TCP协议的工作…

干货 | Selenium+chrome自动批量下载地理空间数据云影像

1.背景介绍 1.1地理空间数据云 由中国科学院计算机网络信息中心科学数据中心成立的地理空间数据云平台是常见的下载空间数据的平台之一。其提供了较为完善的公开数据,如LANDSAT系列数据,MODIS的标准产品及其合成产品,DEM数据(SR…

社交媒体的未来:Facebook如何通过AI技术引领潮流

在数字化时代的浪潮中,社交媒体平台不断演变,以适应用户需求和技术发展的变化。作为全球领先的社交媒体平台,Facebook在这一进程中扮演了重要角色。尤其是人工智能(AI)技术的应用,正在深刻地改变Facebook的…

HTTP反向代理教学:轻松实现代理IP的妙用

在当今互联网时代,代理IP已经成为了很多人上网必不可少的工具。无论是为了保护隐私,还是为了更好地管理网络流量,代理IP都能发挥重要作用。今天,我们就来聊聊HTTP反向代理这个神奇的东西,教你如何轻松实现代理IP的妙用…

[git] MacBook 安装git

文章目录 1.Mac Git 安装2. 开发者工具安装 CommandLineTools安装完成,错误解决 3. git 账户配置账户设置生成秘钥git 或者 gitee 仓库添加公钥查看全局账户命令多账户设置config文件测试连接clone到本地 1.Mac Git 安装 Mac一般自带Git工具,也就是说已…

4K投影仪选购全攻略:全玻璃镜头的当贝F6,画面细节纤毫毕现

在当今的投影市场上,4K投影仪已经成了主流产品,越来越多家庭开始关注如何选择一款性价比高、口碑好的4K投影仪。4K投影仪其实指的是具备3840*2160像素分辨率投影仪,它能够提供更清晰、更细腻、更真实的画面效果。 那么4K投影仪该怎么选&…