Sun Microsystems has developed a mechanism for client-server applications called RPC, Remote Procedure Call, which is in the public domain and used by most flavors of Unix. Applications such as NFS, the Network File System, and NIS, the Network Information System are based on RPC.
An RPC server provides a group of procedures which a client can call by sending a request to the server. The server then invokes the procedure on behalf of the client, returning a value as necessary.
The collection of procedures that an RPC server provides is called a program and is identified by a program number. The file /etc/rpc maps service names to their program numbers. Like the /etc/services file, everything that you are likely to need will be in the file as it is distributed. You will only need to edit this file if you bring up a new RPC server providing a new set of procedures. The following is an excerpt from an example /etc/rpc.
# RPC program number data base # $Revision: 1.5 $ (from 88/08/01 4.0 RPCSRC) # portmapper 100000 portmap sunrpc rstatd 100001 rstat rup perfmeter rusersd 100002 rusers nfs 100003 nfsprog ypserv 100004 ypprog mountd 100005 mount showmount ypbind 100007 walld 100008 rwall shutdown yppasswdd 100009 yppasswd etherstatd 100010 etherstat rquotad 100011 rquotaprog quota rquota
A problem is introduced with this mechanism. RPC servers do not use reserved ports (as opposed to those services listed in the /etc/services file); when they start they just use any port that they can find available. When a client program wants to request a particular RPC service, it has no way of knowing on which port the program number it wants to access is provided. It needs a way to find out.
The portmapper daemon solves this problem. It maps RPC program numbers to the TCP/IP ports on which their servers are listening. When an RPC server starts, it picks an available port, and then registers that port and what RPC program numbers it will serve with the portmapper daemon. When a client program needs to access a service, it first queries the portmapper on the RPC server's host which reports the TCP and UDP port on which the server is listening, and then it contacts that port to request its service.
When the portmapper daemon dies it loses all of its port information, and all of the services that rely on the portmapper must be restarted. Unfortunately, since many RPC servers are started via inetd, it is also affected. When restarting services, the portmapper daemon must be started before inetd so that inetd can properly handle its RPC services. To make a long story short, if the portmapper daemon dies, you typically need to reboot.
Terms used: RPC, public domain, NFS, NIS, port, portmapper, inetd, reboot.