All communication between the JNFS client and server is achieved with the Java Remote Method Invocation  mechanism. Remote Method Invocation (RMI) is a framework for ``distributed Java-to-Java applications, in which the methods of remote Java objects can be invoked from other Java virtual machines, possibly on different hosts.''
In many respects, RMI is like Remote Procedure Call (RPC), an abstraction built on top of IP that provides a type-safe mechanism for calling functions remotely. Like RPC, RMI provides connection establishment and shutdown, and automatic marshaling and un-marshaling of arguments and return values. RMI, like the newer RPCs (Microsoft and DCE, for example), is also well-integrated with exception-handling mechanisms; exceptions thrown while invoking a remote method on the server side are thrown across the network to the client.
However, since RPC is procedure-based, it does not fit well in the object-oriented model that Java provides. RMI provides RPC-like functionality for Java at the object level. Another difference is that RPC may be used over several different protocols, including TCP or UDP; RMI runs only over TCP or HTTP.