本文来源于:HTTP,TCP, socket,RPC 与gRPC都是啥? https://www.jianshu.com/p/959030de7f1c

TCP/HTTP与socket

首先回顾下计算机网络的五(七)层协议:物理层、数据链路层、网络层、传输层、(会话层、表示层)和应用层。那么从协议上来讲:

  • TCP是传输层协议,主要解决数据如何在网络中传输
  • HTTP 是应用层协议,主要解决如何包装数据(文本信息),是建立在tcp协议之上的应用。TCP协议是以二进制数据流的形式解决传输层的事儿,但对上层的应用开发极不友好,所以面向应用层的开发又产生了HTTP协议。

而socket 是针对TCP或UDP的具体接口实现,提供了在传输层进行网络编程的方法。

以上内容我们应该都听说的比较多了,下面主要来谈一谈RPC。

什么是RPC?

  • RPC(Remote Procedure Call)是远程过程调用,比如说现在有两台服务器A, B,一个在A服务器上的应用想要调用B服务器上的应用提供的某个,由于不在两个方法不在一个内存空间,不能直接调用,需要通过网络表达调用的语义和传达调用的数据。常存在于分布式系统中。

为何有http协议之后,还要RPC调用?

RPC跟HTTP不是对立面,RPC中可以使用HTTP作为通讯协议。RPC是一种设计、实现框架,通讯协议只是其中一部分。

RPC的本质是提供了一种轻量无感知的跨进程通信的方式,在分布式机器上调用其他方法与本地调用无异(远程调用的过程是透明的,你并不知道这个调用的方法是部署在哪里,通过PRC能够解耦服务)。RPC是根据语言的API来定义的,而不是基于网络的应用来定义的,调用更方便,协议私密更安全、内容更小效率更高。

http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议 进行传输。但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先(基于TCP协议的情况下)就是长链接,不必每次通信都要像http 一样去3次握手什么的,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统 一化的操作。第三个来说就是安全性。最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑。

RPC 中要解决的问题:

  • 建立通信:在客户端与服务端建立起数据传输通道,大都是TCP连接(gRPC使用了HTTP2)。
  • 寻址:A服务器上的应用需要告诉RPC框架:B服务器地址、端口,调用函数名称。所以必须实现待调用方法到call ID的映射。
  • 序列化与反序列化:由于网络协议都是二进制的,所以调用方法的参数在进行传递时首先要序列化成二进制,B服务器收到请求后要再对参数进行反序列化。恢复为内存中的表达方式,找到对应的方法进行本地调用,得到返回值。返回值从B到A的传输仍要经过序列化与反序列化的过程。

常见名词小结

名词 特点
RPC 远程过程调用(分布式、微服务间的方法调用)
HTTP 无状态,每次请求都要发送一个request,服务器响应之后就断掉(http header中的keep-alive指的是tcp)
TCP 面向连接,三次握手保证通信可靠
UDP 非面向连接,不可靠,速度快(可以手动对数据收发进行验证,IM系统多采用,QQ)
socket TCP协议的接口实现,面向传输层进行网络编程

单独来谈一谈gRPC

gRPC是谷歌开源的一个 RPC 框架,面向移动和 HTTP/2 设计。

  • 内容交换格式采用ProtoBuf(Google Protocol Buffers),开源已久,提供了一种灵活、高效、自动序列化结构数据的机制,作用与XML,Json类似,但使用二进制,(反)序列化速度快,压缩效率高。
  • 传输协议 采用http2,性能比http1.1好了很多

和很多RPC系统一样,服务端负责实现定义好的接口并处理客户端的请求,客户端根据接口描述直接调用需要的服务。客户端和服务端可以分别使用gPRC支持的不同语言实现。

ProtoBuf 具有强大的IDL(interface description language,接口描述语言)和相关工具集(主要是protoc)。用户写好.proto描述文件后,protoc可以将其编译成众多语言的接口代码。

补充:HTTP/2介绍

新特性:

  • 新的二进制格式

    HTTP1.X都是基于文本解析,而因为文本表现形式的多样性,基于文本协议的格式解析天然存在健壮性问题。而采用二进制格式后实现方便且健壮。

  • 多路复用

    多个request共享一个连接。

  • header压缩

    在HTTP1.x中header信息很多,且每次都会重复发送,造成很大浪费。HTTP2.0使用encoder减少了传输的header大小,且通信双方都缓存一份包含了header信息的表,此后的请求可以只发送差异数据,避免信息的重复传输,进一步减少需要传输的内容大小。

  • 服务端推送

    主要的思想是:当一个客户端请求资源X,而服务器知道它很可能也需要资源Z的情况下,服务器可以在客户端发送请求前,主动将资源Z推送给客户端。这个功能帮助客户端将Z放进缓存以备将来之需。也遵守同源策略,且客户端可以拒绝推送过来的资源。

介绍下短链接和长连接的区别:

短连接

连接->传输数据->关闭连接
比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。 这也是HTTP协议无状态的原因之一。

长连接

连接->传输数据->保持连接 -> 传输数据-> ...........->直到一方关闭连接,多是客户端关闭连接。
长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

推荐阅读:

  • 既然有http 请求,为什么还要用rpc调用?
  • HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事
  • HTTP/2协议–特性扫盲篇
  • HTTP/2.0相比1.0有哪些重大改进

TCP、RPC与HTTP到底是何方神圣?!相关推荐

  1. 【一】数据挖掘(DM)到底是何方神圣?

    [一]数据挖掘(DM)到底是何方神圣? 什么是数据挖掘? 数据挖掘有什么用处? 数据挖掘怎么做? 在此借助 5W1H 的思想,从整体上了解下数据挖掘,比如什么是数据挖掘.为什么要做数据挖掘.在哪些场景 ...

  2. 齐天大圣孙悟空的师傅到底是何方神圣?

    下面是我引自百度的一段原文: 菩提即是佛教的醒悟真理.灵台方寸山即指人的思想和内心世界. 菩提祖师到底是谁?有三种猜测,其一,认为是如来本人:其二,认为是如来的师兄:其三,认是如来的十大弟子之一,即须 ...

  3. token 案例,只是测试,功能并不完善(只是看看token 到底是何方神圣)

    token 简单理解就是 加密 解密的一个过程 JavaWebToken(加密解密工具) public class JavaWebToken { private static Logger log = ...

  4. 传说中的RNN到底是何方神圣?

    假设你已经知道最基本的人工神经网络模型(也就是全连接的前馈神经网络),那么希望本文可以帮助你理解RNN,也就是传说中的循环神经网络.严格来说,本文是综合了(或翻译了)网上若干最容易理解.写得最棒的文章 ...

  5. 续写千倍币神话,PlusFo到底是何方神圣?

    周星驰的<新喜剧之王>已经上映,但似乎反响平平.是他江郎才尽?黔驴技穷?答案是不!这部电影不仅仅是个喜剧,其中蕴含的道理值得你慢慢体会.影片中的小龙套获得影后的感言发人深省:也许我们会失败 ...

  6. 拿到华为200万年薪的8个人到底是何方神圣?为什么有人反而不屑?

    点击上方"AI算法与图像处理",选择加"星标"或"置顶" 重磅干货,第一时间送达 转载自:计算机视觉联盟 昨天,任正非签发的总裁办电子邮件刷 ...

  7. GraalVM到底是何方神圣?

    JVM的弊端 JVM实现了跨平台,使得一次编译即可到处运行,但是詹姆斯·高斯林没有跟你说的是,应用运行之前要先启动JVM虚拟机,然后还要加载一大批的类.并做链接和初始化等步骤,而使得光启动一个JVM就 ...

  8. 好评率超94%,aigo智能播放器M2 Pro到底是何方神圣?

    在手机.平板.电脑等设备的挤压之下,MP3 已经消失殆尽?其实不然,现在的MP3 之所以没有那么热门,最根本的原因是产品功能过于单一.在某些方面,MP3 要比手机更有优势,比如:音质.推力.续航这些都 ...

  9. 理一次发要4万的店,到底是何方神圣?

    这两天被一则新闻刷屏, 杭州一小伙去一家店理发,理发期间服务员推荐其它附加服务项目免费体验, 小伙一听免费决定体验一番,完事结账一看账单,小伙惊呆了,账单上写着,所有项目加起来,总共消费4万块,不过店 ...

最新文章

  1. CVE-2017-11882 POC 全版本通杀
  2. linux密码修改实验
  3. 清华团队研发,首款国产电力电子仿真软件来啦~已捐赠哈工大、海工大、清华使用!...
  4. 将uglifyjs添加到鼠标右键菜单
  5. python怎么做数据分析_如何用python进行数据分析
  6. mysql数据库写分页函数_mysql数据库写分页函数
  7. 从哲学源头思考自动驾驶网络架构设计
  8. Hive 之 导入导出数据
  9. 滴滴新规则明日起试行:将影响一大波人
  10. Exalogic Elastic Cloud
  11. sql里的正则表达式
  12. c# 汉语拼音排序函数
  13. 【Linux】rpm包是什么
  14. jQuery获取浏览器语言
  15. 自定义view————涂鸦画板
  16. C++输出流cout的执行顺序问题
  17. 使用uvm_report_catcher屏蔽掉特定的uvm_error/uvm_warning
  18. CTF密码学之RSA攻击算法
  19. 机器学习之DBSCAN算法
  20. 28 Apr 10:25:21.537 # HandleServiceCommands: system error caught. error code=1072, message = Create

热门文章

  1. Docker容器学习梳理 - Volume数据卷使用
  2. 计算机开机主机没有电源指示,电脑无法开机,无显示画面怎么办?
  3. 计算机蓝屏的原因及解决方法,电脑启动就蓝屏怎么回事 电脑蓝屏的原因与解决办法...
  4. 硕士码农的offer档次排行(个人版)
  5. 【linux】函数grep正则表达式匹配邮箱地址
  6. 线程死锁的成因以及解决方案
  7. Android定时器死循环问题,Android定时器实现的几种方式整理及removeCallbacks失效问题解决...
  8. Linux常用命令(精简版)
  9. 【运维】服务器硬件基本知识
  10. 云开发在教育应用开发、运维全流程实践