第十六章 RPC三 链接

RPC的执行过程。参考

调用过程

一次远程调用的过程:

  1. 服务器启动
    客户端程序向所在主机上的端口映射器注册自身,然后客户启动。
    调用clnt_create,该函数与服务器上的端口映射器联系,以找到服务器临时端口。
    如果指定tcp,那么clnt_create`,还建立了TCP链接。
  2. 客户端调用函数
    客户端调用客户程序存根的本地过程,其实就是个函数。
    存根的目的在把需要传递给远程过程的参数打包,可能的花把他们转化为某种标准格式。(这中间,参数被转化为char
    吧客户端提供的参数打包成一个网络消息的过程成为集结。
  3. 客户存根把打包的程序发送给远端系统
    这中间需要陷入本地内核系统调用,因为使用的是socket接口,可能是tcp,可能是udp,所以使用write或者是sendto
  4. 在第一步启动的客户存根过程一直在等待客户的请求
    客户存根将传入的消息解散出来。并且根据这些参数选择适合的函数,并且将部分需要传入函数的参数转换为合适的类型。 然后调用选择的函数。
  5. 当服务器过程完成以后,他想服务器存根发送返回值
    在RPC中其实就是两个函数的嵌套。
  6. 客户存根对返回值进行转换,然后把他们集结到一个或多个网络消息中,发送给客户端
  7. 客户端从本地内核中读出这些消息。
  8. 对返回值进行转换后,客户程序存根返回到客户调用的函数。

客户端绑定

运行RPC服务器的任何主机都必须在在运行端口映射器。
赋给端口映射器的是TCP的111和UDP的111。他们是SUN RPC的唯一因特网固定端口。
RPC服务器总是先帮顶一个临时端口,在想本地端口映射器注册自己的临时端口号。
客户端程序总是先联系服务器主机上的端口映射器,询问服务器的临时端口号,然后在跟临时端口上的服务器进行通信。

链接过程

因此上面的执行过程再加上协议,和端口映射以后,在链接建立之时的行为如下:

  1. 端口映射器需要先于服务端程序启动。
  2. 客户端程序启动
    也就是客户端存根中的那个main函数启动,调用库函数svc_create,确定本机所支持的网络协议,并未没个协议创建一个传输点,通常也就是套接字,给tcpudp各绑定一个临时端口。
    之后,该函数向端口映射器联系,并向他注册这两个临时的端口号以及调用程序的RPC程序号和版本号,也就是在double_v.x中的那个8位的数字。
  3. 客户端调用clnt_create函数,该函数的参数报错,服务器主机名或是ip,程序号,版本号以及指定的协议的字符串。
    客户端向服务器主机发送一个rpc请求,通常使用的是udp,询问关于指定程序,版本和协议的信息,如果成功,服务端答复端口号。

认证

如果服务器处于公网,并且可以被其他主机访问的话,那么需要认证。
不过书上说貌似这些认证都没啥用,有用的几个认证又没写。
这本书想干啥?

超时和重传

涉及到了TCP和UDP那么就要存在超时重传

客户端和服务端异常的情况

涉及到网络部分就会有这几个,如果客户端提前结束怎么办,服务端提前结束怎么办,服务器结束又重启了,怎么办。

分组

请求分组

《第十六章 RPC三 链接》 请求分组

应答分组

《第十六章 RPC三 链接》 应答分组

    原文作者:Myth52125
    原文地址: https://www.jianshu.com/p/a60a62afcd28
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞