¿Por qué SOLO algunas conexiones tienen 'addrlocal' en la salida de getpeerinfo?

Conecté dos computadoras portátiles A y B a la red de prueba de bitcoin. Luego conecté manualmente B a A usando addnodebitcoin-client.

Fragmento de getpeerinfode B:

  {
    "id": 1,
    "addr": "172.22.94.40:18333",
    "addrlocal": "137.122.81.217:53818",

  }
 { 
   "id": 10,
   "addr": "54.152.9.182:18333",
   "services": "000000000000000
 }

Algunas conexiones tienen un addrlocalconjunto y su puerto 53818 se elige aleatoriamente. Busqué a través de la base de código para esto. Parece que fInboundse establecerá una bandera en A. ¿Alguien puede explicar en términos simples lo que está sucediendo aquí?

Sé que un socket no se puede usar para escuchar y enviar datos al mismo tiempo. ¿Tiene que ver con eso?

Si se elige 53818 como puerto para enviar datos a A, entonces ¿por qué no ocurre tal elección aleatoria en la conexión del nodo inicial? (como 54.152.9.182 aquí en el ejemplo)

Respuestas (1)

Supongo que addrlocal le muestra su punto final de la conexión, es decir, su dirección IP y número de puerto. Para todas las conexiones entrantes, sería lo mismo que la dirección IP y el puerto en el que está escuchando, por eso no se muestra. En tu caso lo más probable: 137.122.81.217:8333

No estoy seguro de qué sucedería si el servidor es multitarjeta.

¿Por qué mi número de puerto es 58318 (elegido al azar) y NO 18333? Todavía estoy conectado a través de la red de prueba, ¿verdad?
Porque es una conexión saliente y así funciona TCP: las conexiones salientes tienen un puerto local aleatorio (por defecto). Cuando se conecta a un host, solo especifica ese host y un puerto, nunca especifica qué IP o puerto en su propia PC desea usar, por lo tanto, será aleatorio.
Sí exactamente. Pero tengo dos nodos (computadora portátil A y un nodo semilla) conectados aquí desde la computadora portátil B. Ambos son salientes ya que B los inicia (uno en el descubrimiento de pares y otro debido a mi comando manual). ¿Por qué no se elige un puerto aleatorio para la conexión entre el nodo semilla y la computadora portátil B? ¿Por qué usa solo 18333 en ambos lados (destino y origen) para eso? ¿No debería la fuente también ser un puerto aleatorio (en el lado B) para eso? También observo que para todos los nodos semilla el puerto de origen en B es 18333 como en este caso.