Почему ТОЛЬКО некоторые соединения имеют «addrlocal» в выводе getpeerinfo

Я подключил два ноутбука A и B к тестовой сети биткойнов. Затем я вручную подключил B к A, используя addnodeбиткойн-клиент.

Фрагмент getpeerinfoиз Б:

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

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

Некоторое соединение имеет addrlocalнабор, и его порт 53818 выбирается случайным образом. Я искал кодовую базу для этого. Похоже fInbound, в A будет установлен какой-то флаг. Кто-нибудь может простыми словами объяснить, что здесь происходит?

Я знаю, что сокет нельзя использовать для прослушивания и отправки данных одновременно. Это связано с этим?

Если 53818 выбран в качестве порта для отправки данных в A, то почему такого случайного выбора не происходит при подключении к начальному узлу? (например, 54.152.9.182 здесь, в примере)

Ответы (1)

Я предполагаю, что addrlocal показывает вам вашу конечную точку соединения, то есть ваш IP-адрес и номер порта. Для всех входящих подключений это будет то же самое, что IP-адрес и порт, который вы прослушиваете, поэтому он не отображается. В вашем случае скорее всего: 137.122.81.217:8333

Я не уверен, что произойдет, если сервер будет многосетевым.

Почему мой номер порта 58318 (выбран случайно), а НЕ 18333? Я все еще подключен через тестовую сеть, верно?
Потому что это исходящее соединение, и именно так работает TCP: исходящие соединения имеют случайный локальный порт (по умолчанию). Когда вы подключаетесь к хосту, вы указываете только этот хост и порт, вы никогда не указываете, какой IP-адрес или порт на своем ПК вы хотите использовать, поэтому он будет случайным.
Да, точно. Но у меня есть два узла (ноутбук A и начальный узел), подключенные сюда с ноутбука B. Оба являются исходящими, поскольку они инициированы B (один при обнаружении однорангового узла, а другой из-за моей ручной команды). Почему для соединения между начальным узлом и ноутбуком B не выбран случайный порт? Почему для этого используется только 18333 с обеих сторон (назначение и источник)? Разве источник не должен также быть случайным портом (на стороне B) для этого? Я также заметил, что для всех начальных узлов исходный порт в B — 18333, как в этом случае.