• HTTP,TCP, socket,RPC 与gRPC都是啥?


    TCP/HTTP与socket

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

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

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

    什么是RPC?

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

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

    HTTP 就是一种 RPC,你通过一定的方法去调用 HTTP 服务器上的某个 procedure,执行完以后把结果返回给你。有的时候我们嫌标准 HTTP 太慢/太复杂/不适合特定场景,那么就自己发明一个新的RPC。

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

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

    RPC 中要解决的问题:

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

    常见名词小结

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

    补充:HTTP/2介绍

    新特性:
    • 新的二进制格式

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

    • 多路复用

      多个request共享一个连接。

    • header压缩

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

    • 服务端推送

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



    作者:RichardBillion
    链接:https://www.jianshu.com/p/959030de7f1c
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    HTTP 404
    hibernate官方新手教程 (转载)
    OpenStreetMap初探(一)——了解OpenStreetMap
    fopen 參数具体解释
    怎样将程序猿写出来的程序打包成安装包(最简单的)
    poj 2253 Frogger (最长路中的最短路)
    android笔记6——intent的使用
    uva 11133
    天津出差系列(五)----第五天
    贪心2--均分纸牌
  • 原文地址:https://www.cnblogs.com/chong-zuo3322/p/13992806.html
Copyright © 2020-2023  润新知