RPC协议

    xiaoxiao2022-07-03  123

    五个问题

    如何规定远程调用的语法如何传递参数如何表示数据如何知道一个服务端都实现了哪些远程调用,从哪个端口可以访问这个远程调用发生了错误、重传、丢包、性能等问题怎么办?

    协议约定问题

    本地调用函数有很多问题,如上图,这些编译器都帮你做了,但是在远程调用中,你需要重新操心。 Sun公司是第一个提供商业化RPC库和RPC编译器的公司。这个RPC框架是在NFS协议中使用的。 XDR 是一个标准的数据压缩格式,可以表示基本的数据类型,也可以表示结构体。

    传输问题

    错误、重传、丢包、性能等问题我们统称为传输问题,这个就不用Stub担心了,而是由ONE RPC的类库来实现。

    在这个类库中,为了解决传输问题,对于每一个客户端,都会创建一个传输管理层,而每一次RPC调用,都会是一个任务,在传输管理层,可以看到熟悉的队列机制、拥塞窗口机制等。 由于在网络中,

    服务发现问题

    在ONE RPC中,服务发现通过portmapper 实现的。

    portmapper会启动一个众所周知的端口上,RPC程序由于是用户自己写的,会监听在一个随机的端口上,但是RPC程序启动的时候,会向portmapper注册。客户端要访问RPC服务端这个程序的时候,首先查询portmapper,获取RPC服务端程序的随机端口,然后向这个随机端口建立连接,开始RPC调用,从图中可以看出,mount命令的RPC调用,就是这样实现的。 小结:

    远程调用看起来用Socket编程就可以了,其实是很复杂的,要解决协议约定问题,传输问题和服务发现问题早期ONC RPC框架,以及NFS的实现,给出了解决这三个问题的示范性实现,也即协议约定要公用协议描述文件,并通过这个文件生成Stub程序;RPC一般需要一个状态机,需要另外一个进程专门做服务发现。
    最新回复(0)