Conexión RMI rechazada en localhost

Estoy tratando de aprender la codificación RMI y cuando ejecuto el lado del servidor de RMI obtengo una conexión rechazada. Este es el método principal de mi servidor

public static void main(String[] args)throws Exception {
Implementation impl=new Implementation();
Naming.rebind("//localhost:2020/RMI", impl);
System.out.println("Implementation has been bind to the name RMI and is ready for use");
    }

Creo que el código para la Implementación no importa, ya que simplemente es la interfaz implementada que ejecutará el código. La excepción que obtengo es esta

Exception in thread "main" java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: 
    java.net.ConnectException: Connection refused: connect
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
    at sun.rmi.server.UnicastRef.newCall(Unknown Source)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at java.rmi.Naming.rebind(Unknown Source)
    at epl362Project.Server.main(Server.java:10)
Caused by: java.net.ConnectException: Connection refused: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at java.net.Socket.<init>(Unknown Source)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
    ... 7 more

¿Qué estoy haciendo mal? tanto el cliente como el servidor se ejecutarán en mi computadora portátil, ya que esto es solo un ejercicio. ¿Me estoy perdiendo algo o hay algún problema con mi código? Por favor, además de darme la respuesta, explique por qué es así, ya que no solo quiero que funcione, estoy tratando de aprender.

** EDITAR Descubrí por qué mi código no funcionaba. Me faltaba una línea de código que decía

LocateRegistry.createRegistry(2020);

que encontré de otras preguntas aquí en stackoverflow. Pero no hubo explicación ni encontré una en línea sobre por qué este código era necesario para que RMI funcionara correctamente. ¿Alguien tiene una explicación?

Respuestas a la pregunta(1)

Su respuesta a la pregunta