As far as I know, the skeletons remain on the server-side and the stubs are simply serialized to the client. Then the client can invoke methods on that stub. The stub forwards the method call by sending the request and the parameters to the skeleton where the method is invoked on the remote object. The return value is sent back to the stub which again forwards it to the invoker. Stub and skeleton themselves do not implement any network functionality. Low-level rmi classes take care of these tasks.