epmd is a small name server used by Erlang programs when establishing distributed Erlang communications.
This daemon acts as a name server on all hosts involved in distributed Erlang computations. When an Erlang node starts, the node has a name and it obtains an address from the host OS kernel. The name and the address are sent to the epmd daemon running on the local host. In a TCP/IP environment, the address consists of the IP address and a port number. The name of the node is an atom on the form of Name@Node. The job of the epmd daemon is to keep track of which node name listens on which address. Hence, epmd map symbolic node names to machine addresses.
The TCP/IP epmd daemon actually only keeps track of the Name (first) part of an Erlang node name, the Host part (whatever is after the @ is implicit in the node name where the epmd daemon was actually contacted, as is the IP address where the Erlang node can be reached. Consistent and correct TCP naming services are therefore required for an Erlang network to function correctly.