首页 > 代码库 > 究竟什么是RPC?

究竟什么是RPC?

RPC:远程过程调用,是一种允许分布式应用程序调用网络上不同计算机的可用服务的机制。RPC服务会在注册表中给自己注册一个UUID,成为通用唯一标识符,这个UUID针对每一项服务都是一个唯一的值,且在所有的平台上通用。

当一项RPC服务启动的时候,它会获得一个高位端口,并且以其UUID对该端口进行注册,有些RPC服务则会随机使用高位端口,而有些服务每次都尽量使用相同的端口(如果可用)。但在服务的生存期内,端口的分配时静态的,当一个客户端要与特定的RPC服务通信的时候,它无法事先知道该服务在哪一个端口上运行。因此该客户端会先建立一个到服务器的端口映射器服务,Windows在135端口,unix/linux/solaris在111端口,并使用其请求的服务的UUID向服务器端口映射器服务查询该端口号,端口映射器会将相应的端口号返回给客户端,然后关闭连接。最后,客户端利用端口映射器提供的端口号,新建一个到该服务的连接。

例如,NFS启动的时候会启用未被使用的小于1024 的端口作为监听传输使用,并主动的向 RPC 注册,因此RPC知道NFS对应使用的端口。RPC使用固定的port 111端口来监听用户端的需求并且回报给用户端正确的NFS端口。让用户端可以连结到正确的NFS端口上。所以,NFS服务必须启动RPC服务。

软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区。
按端口号可分为3大类:
(1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:80端口实际上总是HTTP通讯。

(2)注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。

(3)动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。

原文:http://blog.csdn.net/genius_lg/article/details/15455217