TCP、HTTP以及RPC的梳理

2024-08-27 05:52
文章标签 http rpc tcp 梳理

本文主要是介绍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

这篇关于TCP、HTTP以及RPC的梳理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110822

相关文章

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Python如何实现 HTTP echo 服务器

《Python如何实现HTTPecho服务器》本文介绍了如何使用Python实现一个简单的HTTPecho服务器,该服务器支持GET和POST请求,并返回JSON格式的响应,GET请求返回请求路... 一个用来做测试的简单的 HTTP echo 服务器。from http.server import HT

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa