- 论坛徽章:
- 0
|
找到一个相关portmap的sun的文档,
http://docs.sun.com/app/docs/doc/816-1435/portmapper-79445?l=zh_TW&a=view
using portmap 解决port和网络地址
portmap是一个基于rpc系统注册服务,它管理一个table,记录着注册的服务和port的对应关系。它为client提供了一种用来查询server支持的rpc程序的port number的标准方法。
对一个client程序,要找到网络中的分布式服务,它需要一种查询服务程序网络地址的方法。
Portmap 协议:
portmap程序将RPC程序和版本号映射成指定的传输层的port number。实现了动态绑定远端程序的方法。
调用过程如下:
1.server使用portmap注册
2.client通过portmap获得server的port
3.client访问server
下面是使用rpc语言描述的portmap协议
Example E–1 portmap Protocol Specification (in RPC Language)
const PMAP_PORT = 111; /* portmapper port number */
/*
* A mapping of (program, version, protocol) to port number
*/
struct pmap {
rpcprog_t prog;
rpcvers_t vers;
rpcprot_t prot;
rpcport_t port;
};
/*
* Supported values for the "prot" field
*/
const IPPROTO_TCP = 6; /* protocol number for TCP/IP */
const IPPROTO_UDP = 17; /* protocol number for UDP/IP */
/*
* A list of mappings
*/
struct pmaplist {
pmap map;
pmaplist *next;
};
/*
* Arguments to callit
*/
struct call_args {
rpcprog_t prog;
rpcvers_t vers;
rpcproc_t proc;
opaque args;
};
/*
* Results of callit
*/
struct call_result {
rpcport_t port;
opaque res;
};
/*
* Port mapper procedures
*/
program PMAP_PROG {
version PMAP_VERS {
void
PMAPPROC_NULL(void) = 0;
bool
PMAPPROC_SET(pmap) = 1;
bool
PMAPPROC_UNSET(pmap) = 2;
unsigned int
PMAPPROC_GETPORT(pmap) = 3;
pmaplist
PMAPPROC_DUMP(void) = 4;
call_result
PMAPPROC_CALLIT(call_args) = 5;
} = 2;
} = 100000;
portmap操作:PMAPPROC_SET:当一个程序第一次出现时,它首先使用本地的portmap程序注册。这个程序传输它的program number:prog,version number:vers,transport protocol prot,和用来接受服务请求的port: port。当procedure成功建立mapping时,返回true。PMAPPROC_UNSET:使用portmapper程序unregister它自己PMAPPROC_GETPORT:对于给定的prog,vers,prot,此procedure返回port numberPMAPPROC_DUMP: 访问所有的portmap数据库中的entries。对应prog,vers,prot,port number
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/35356/showart_696198.html |
|