¿Definiendo los puertos "escuchar", "escuchar" y "descubrir" desde admin.nodeinfo?

Si escribe "admin.nodeInfo" en la consola de JavaScript, verá:

 listenAddr: "[::]:<value>",
  name: "Geth/v1.6.1-stable-021c3c28/linux-amd64/go1.8.1",
  ports: {
    discovery: <value>,
    listener: <value>
  },

(junto con un montón de otras cosas, por supuesto).

Entonces tenemos estos tres puertos: listenAddr, listener, discovery. Qué significa cada uno de ellos en este contexto.

No estoy preguntando sobre el puerto RPC o el puerto websockets. Estoy preguntando específicamente sobre lo que acabo de mencionar.

¿Sus puertos de detección y de escucha son iguales?
@0xcaff Según la lectura anterior, sí. Pero aquí es esencialmente a donde va mi pregunta. Una vez que aprenda cuáles son las diferencias, es posible que pueda aprender cómo cambiarlas y qué propósito podría tener.
@stone212 ¿alguna vez llegaste al fondo de esto?
@significance No, no creo que lo haya hecho y dejé de usar geth hace más de un año. Pero aprendí mucho desde mayo de 2017, así que si tiene una pregunta relacionada con esto, ¿quizás pueda responderla?
@stone212 gracias por la oferta! Creo que llegué al fondo. es muy confuso porque geth usa 30303/tcp para comunicaciones de puerto y 30303/udp para descubrimiento de kademlia. Lo escribiré abajo cuando tenga un mes...

Respuestas (2)

Hay básicamente tres puertos importantes. El primero es el puerto de descubrimiento y los otros dos son puertos de escucha:

  1. Puerto de descubrimiento: (el valor predeterminado es 30303). Este puerto se utiliza para conectarse a otros nodos geth.
  2. Puerto RPC: (el valor predeterminado es 8545). Este puerto se usa para enviar solicitudes JSON-rpc al cliente geth.
  3. Puerto websocket: (el valor predeterminado es 8546) Puede conectarse al cliente geth mediante websockets.

Todos ellos son procesos independientes y, por lo tanto, no se pueden ejecutar en los mismos puertos.

Gracias por tomarse el tiempo para responder, pero esto no responde a mi pregunta en absoluto. Mi pregunta es ¿qué pasa con los valores "listenAddr" y "oyente" que encuentro con "admin.nodeInfo" y cómo se relacionan con el puerto Discovery? He editado mi publicación para mayor claridad.
ethereum.stackexchange.com/questions/809/… esto podría ayudarte seguramente
Akshay, aprecio el esfuerzo, pero esa publicación menciona que existe un oyente y un puerto de descubrimiento. Pero por mi OP ves que ya lo sabía. Dice que pueden ser iguales, lo cual es bueno, aunque no tenía dudas al respecto.

listenAddr es una dirección, es decir, contiene IP+número de puerto

el oyente es solo un número de puerto

descubrimiento es también número de puerto para encontrar nuevos pares


La palabra listenertiene el significado de una puerta de conexión, por ejemplo, esta es otra parte de la fuente de ethereum ('node/node.go'):

    ipcListener net.Listener // IPC RPC listener socket to serve API requests
    httpListener  net.Listener // HTTP RPC listener socket to server API requests
    wsListener net.Listener // Websocket RPC listener socket to server API requests

En Go Listeneres un tipo estándar:

A Listener is a generic network listener for stream-oriented protocols.

Multiple goroutines may invoke methods on a Listener simultaneously.

    type Listener interface {
            // Accept waits for and returns the next connection to the listener.
            Accept() (Conn, error)

            // Close closes the listener.
            // Any blocked Accept operations will be unblocked and return errors.
            Close() error

            // Addr returns the listener's network address.
            Addr() Addr
    }

Este es el significado de la palabra listener, pero ListenAddres la dirección completa del socket. se define en el kernel de Linux como esta estructura:

#include <netinet/in.h>

struct sockaddr_in {
    short            sin_family;   // e.g. AF_INET
    unsigned short   sin_port;     // e.g. htons(3490)
    struct in_addr   sin_addr;     // see struct in_addr, below
    char             sin_zero[8];  // zero this if you want to
};

Los campos sin_addry sin_portjuntos es la variable , de hecho, esto es lo que debería devolver listenAddrel método .Addr()

Pero en el código de Ethereum, al decir listenerque no se refieren al Interface listenerobjeto que implementa la interfaz de escucha, se refieren al port number.

¿Podrías ser un poco más específico? ¿Es "oyente" SIEMPRE el número de puerto que va en "listenAddr" o no están relacionados? Y decir que algo es una dirección o un número de puerto no explica qué es o en qué se diferencia de otras direcciones o números de puerto. Si edita su respuesta para responder a la pregunta, la marcaré como la respuesta.
@stone212 Intenté explicarlo, verifica si lo entiendes
Yo no. El último párrafo es la primera parte que parece estar relacionada con la pregunta. Las únicas partes que mencionaste que hablan de los términos que pregunto, solo repiten lo que dijiste antes. Gracias por tomarse el tiempo, pero esto no es ni remotamente una respuesta a mi pregunta.
@ stone212 lo es, simplemente no entiendes nada de lo que acabo de decir. Debería leer sobre el protocolo TCP/IP y sobre la programación de redes. Solo así lo entenderás.
Creo que tal vez estás confundiendo esto con otra respuesta que tal vez escribiste. Esto no está relacionado con las redes, definitivamente no con TCP/IP. La pregunta era sobre la definición de "escuchar", "escuchar" y "descubrimiento" en relación con la salida de "admin.nodeinfo" en la consola de javascript. Está bien. A veces pienso que estoy en un hilo diferente también.
@stone212 no, su pregunta es más sobre redes. Recuerdo que deberías leer TCP/IP, pero probablemente más sobre qué es un socket. Si nombra listenAddrun puerto, entonces no entiende que una dirección en Internet se compone de 2 cosas, una dirección IP y un número de puerto. De lo contrario, no llamarías listenAddra un puerto si supieras eso. Además, dos puntos dobles en su ejemplo significa que es una dirección IPv6 y tiene un valor nulo, esa es la notación utilizada para expresar una dirección llena de ceros. Su pregunta es incorrecta debido a esto, no hay 3 puertos aquí, solo 2 puertos.
No voy a usar el chat para discutir. Pero he estado en DevOps durante años, por lo que el problema no es malinterpretar TCP/IP. Es Ethereum, no lo entiendo. :) Si quieres tener otro intento de responder a la pregunta, está bien. Si no, eso también está bien. Gracias por intentarlo.