趣谈网络协议
刘超
网易研究院云计算技术部首席架构师
立即订阅
39583 人已学习
课程目录
已完结 51 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 想成为技术牛人?先搞定网络协议!
免费
第一模块 通信协议综述 (4讲)
第1讲 | 为什么要学习网络协议?
第2讲 | 网络分层的真实含义是什么?
第3讲 | ifconfig:最熟悉又陌生的命令行
第4讲 | DHCP与PXE:IP是怎么来的,又是怎么没的?
第二模块 底层网络知识详解:从二层到三层 (5讲)
第5讲 | 从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?
第6讲 | 交换机与VLAN:办公室太复杂,我要回学校
第7讲 | ICMP与ping:投石问路的侦察兵
第8讲 | 世界这么大,我想出网关:欧洲十国游与玄奘西行
第9讲 | 路由协议:西出网关无故人,敢问路在何方
第二模块 底层网络知识详解:最重要的传输层 (4讲)
第10讲 | UDP协议:因性善而简单,难免碰到“城会玩”
第11讲 | TCP协议(上):因性恶而复杂,先恶后善反轻松
第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难
第13讲 | 套接字Socket:Talk is cheap, show me the code
第二模块 底层网络知识详解:最常用的应用层 (4讲)
第14讲 | HTTP协议:看个新闻原来这么麻烦
第15讲 | HTTPS协议:点外卖的过程原来这么复杂
第16讲 | 流媒体协议:如何在直播里看到美女帅哥?
第17讲 | P2P协议:我下小电影,99%急死你
第二模块 底层网络知识详解:陌生的数据中心 (6讲)
第18讲 | DNS协议:网络世界的地址簿
第19讲 | HTTPDNS:网络世界的地址簿也会指错路
第20讲 | CDN:你去小卖部取过快递么?
第21讲 | 数据中心:我是开发商,自己拿地盖别墅
第22讲 | VPN:朝中有人好做官
第23讲 | 移动网络:去巴塞罗那,手机也上不了脸书
第三模块 热门技术中的应用:云计算中的网络 (5讲)
第24讲 | 云中网络:自己拿地成本高,购买公寓更灵活
第25讲 | 软件定义网络:共享基础设施的小区物业管理办法
第26讲 | 云中的网络安全:虽然不是土豪,也需要基本安全和保障
第27讲 | 云中的网络QoS:邻居疯狂下电影,我该怎么办?
第28讲 | 云中网络的隔离GRE、VXLAN:虽然住一个小区,也要保护隐私
第三模块 热门技术中的应用:容器技术中的网络 (3讲)
第29讲 | 容器网络:来去自由的日子,不买公寓去合租
第30讲 | 容器网络之Flannel:每人一亩三分地
第31讲 | 容器网络之Calico:为高效说出善意的谎言
第三模块 热门技术中的应用:微服务相关协议 (5讲)
第32讲 | RPC协议综述:远在天边,近在眼前
第33讲 | 基于XML的SOAP协议:不要说NBA,请说美国职业篮球联赛
第34讲 | 基于JSON的RESTful接口协议:我不关心过程,请给我结果
第35讲 | 二进制类RPC协议:还是叫NBA吧,总说全称多费劲
第36讲 | 跨语言类RPC协议:交流之前,双方先来个专业术语表
第四模块 网络协议知识串讲 (4讲)
第37讲 | 知识串讲:用双十一的故事串起碎片的网络协议(上)
第38讲 | 知识串讲:用双十一的故事串起碎片的网络协议(中)
第39讲 | 知识串讲:用双十一的故事串起碎片的网络协议(下)
第40讲 | 搭建一个网络实验环境:授人以鱼不如授人以渔
答疑与加餐 (9讲)
协议专栏特别福利 | 答疑解惑第一期
协议专栏特别福利 | 答疑解惑第二期
协议专栏特别福利 | 答疑解惑第三期
协议专栏特别福利 | 答疑解惑第四期
协议专栏特别福利 | 答疑解惑第五期
加餐1 | 测一测:这些网络协议你都掌握了吗?
加餐2 | 创作故事:我是如何创作“趣谈网络协议”专栏的?
加餐3 | “趣谈网络协议”专栏食用指南
第2季回归 | 这次我们来“趣谈Linux操作系统”
结束语 (1讲)
结束语 | 放弃完美主义,执行力就是限时限量认真完成
趣谈网络协议
登录|注册

第32讲 | RPC协议综述:远在天边,近在眼前

刘超 2018-07-30
前面我们讲了容器网络如何实现跨主机互通,以及微服务之间的相互调用。
网络是打通了,那服务之间的互相调用,该怎么实现呢?你可能说,咱不是学过 Socket。服务之间分调用方和被调用方,我们就建立一个 TCP 或者 UDP 的连接,不就可以通信了?
你仔细想一下,这事儿没这么简单。我们就拿最简单的场景,客户端调用一个加法函数,将两个整数加起来,返回它们的和。
如果放在本地调用,那是简单的不能再简单了,只要稍微学过一种编程语言,三下五除二就搞定了。但是一旦变成了远程调用,门槛一下子就上去了。
首先你要会 Socket 编程,至少先要把咱们这门网络协议课学一下,然后再看 N 本砖头厚的 Socket 程序设计的书,学会咱们学过的几种 Socket 程序设计的模型。这就使得本来大学毕业就能干的一项工作,变成了一件五年工作经验都不一定干好的工作,而且,搞定了 Socket 程序设计,才是万里长征的第一步。后面还有很多问题呢!

如何解决这五个问题?

问题一:如何规定远程调用的语法?

客户端如何告诉服务端,我是一个加法,而另一个是乘法。我是用字符串“add”传给你,还是传给你一个整数,比如 1 表示加法,2 表示乘法?服务端该如何告诉客户端,我的这个加法,目前只能加整数,不能加小数,不能加字符串;而另一个加法“add1”,它能实现小数和整数的混合加法。那返回值是什么?正确的时候返回什么,错误的时候又返回什么?
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《趣谈网络协议》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(25)

  • 空档滑行
    1.rpc调用是在进行读写操作时,调用的操作系统的读写接口,nfs对接口做了实现,实现的代码里封装了rpc
    2.需要调用双方有接口描述文件,有文件就需要双方要做信息交换,所以客户端和服务端不是完全透明的
    2018-07-30
    12
  • 叹息无门
    1.应用在读写文件时,会创建文件描述符,NFS Client会将文件描述符的操作代理成RPC请求。
    2.XDR有严格的格式限制,两端必须完全匹配,无法支持灵活数据格式的传递。
    2018-07-30
    6
  • 忆水寒
    刘老师,我们目前的分布式系统采用以下方式。我们实现了一种中间件,每个进程(客户端)要与其他进程通信,就要到中间件注册(注册了自己进程的一个ID,任务名称,还有一个消息队列),然后将消息用google的protobuf封装进行传输(因为这种序列化的效率高)。在其他进程中接收到消息,会解析消息id,然后根据定义好的格式去取内容。这样也算RPC调用吧?

    作者回复: 是的

    2018-07-30
    4
  • 吴军旗^_^
    越往后人的留言越少, 看来成为大牛的路上会越来越孤单

    作者回复: 坚持到最后,你就是大牛

    2019-07-10
    3
  • maomaostyle
    作为一名不会coding的从业者,想问刘老师几个基础问题,首先是文中提到的onc rpc框架,就是包含了stub(编解码)+传输(类库)+服务发现的一套东西?那么目前主流的rpc框架,比如dubbo也是实现了这些功能的集大成者?另外一个问题就是,thrift 和protobuf 我理解只是实现了rpc编解码环节的工作,也就是所说的序列化与反序列化,对么?

    作者回复: 是的,rpc的几个时代,就是这样演进过来的

    2018-07-31
    3
  • _CountingStars
    1.nfs挂载的时候指定了文件系统类型 当应用对文件进行read write等操作时 会调用系统底层的vfs文件系统相关函数, nfs 实现了 vfs规定的 接口函数,调用vfs相关函数时 vfs其实会调用nfs的实现 实现访问远程文件系统

    2.不支持多语言
    2018-07-30
    3
  • 何重阳
    能不能收我为徒😂
    2018-08-03
    2
  • Jason
    这篇我看懂了哈哈。工作中一涉及到rpc,我简直是thrift的铁杆粉丝,Google的protobuf也不错,但其中的原理的我并没深究。通过这篇,我学到了rpc的架构原理,赞。至于nfs,其实工作中也有用过,但仅仅是用而已,没有深究其中的奥妙,期待超哥下篇的解答。
    2018-07-31
    2
  • 朽木自雕
    刘老师,我都认真的看了就是有的看不太懂,但是我真的好期待您的那个知识图谱,我觉得这个有助于对知识的加深理解,因为我认为这种图谱被我所喜欢的原因是它属于空间的结构,我自己这么认为的。
    2018-07-30
    2
  • favorlm
    rpc,现在用框架已经简单了很多
    2018-07-30
    1
  • zKerry
    哦...原来是有示范性标准的啊

    作者回复: 是的

    2019-09-08
  • Geek_37984c
    老师GABAGE_ARGS 是写错了吗
    GARBAGE_ARGS?

    作者回复: 是的

    2019-08-24
  • N_H
    老师,您好,文章里面,“RPC程序是用户自己写的,会监听在一个随机端口上”。我们公司用的grpc服务,都会自己指明一个端口号

    作者回复: 当然可以指定。我这里的RPC还比较老。

    2019-08-07
  • java_zhao
    想问一下 我们平时的程序不都是指定端口的吗 为什么还会随机端口 用portmapper呢?

    作者回复: portmapper作为一个服务发现中心,不同端口的都可以注册到他这里,例如有个8081,再有个8082,都行。

    2019-07-10
  • 天天
    强大
    2019-06-27
  • Geek_Huahui
    刘老师,能讲解一下现在用的比较多的JSON-RPC吗

    作者回复: restful会讲的

    2019-06-19
  • 迭代升级
    看了这个大端小端有一些疑惑,百度百科https://m.baidu.com/sf_bk/item/%E5%A4%A7%E5%B0%8F%E7%AB%AF%E6%A8%A1%E5%BC%8F/6750542?fr=aladdin&ms=1&rid=8203658230675846926 上说:大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
    小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。
    而文章上说:最低位放在最后一个位置,叫做小端
    最低位放在第一个位置,叫做大端
    感觉有点矛盾呀,是我的理解出错了吗?

    作者回复: 不矛盾呀,不是一个意思吗

    2019-06-12
    1
  • zj
    插问一下,http协议中有类似XID这样的标识别唯一请求id吗

    作者回复: header里面可以自己加

    2019-06-03
  • 起风了001
    我在使用以太坊的geth客户端的时候, 里面和geth通讯用的也叫rpc协议, 但是他其实是一个json格式的数据传输过程, 感觉和本文讲的rpc协议有很大区别.

    作者回复: json是rpc的一种

    2019-05-24
  • 古夜
    看完知道一点zookeeper这个注册中心为啥要注册了,懵懵懂懂的也算是知道一点了😂
    2019-04-25
收起评论
25
返回
顶部