Warum haben NUR einige Verbindungen 'addrlocal' in der Ausgabe von getpeerinfo

Ich habe zwei Laptops A und B mit Bitcoin Testnet verbunden. Ich habe dann manuell B mit A verbunden, indem ich den addnodeBitcoin-Client verwendet habe.

Ausschnitt getpeerinfoaus 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
 }

Einige Verbindungen haben einen addrlocalSatz und ihr Port 53818 wird zufällig ausgewählt. Ich habe die Codebase danach durchsucht. Es sieht so aus fInbound, als würde in A eine Flagge gesetzt. Kann jemand in einfachen Worten erklären, was hier passiert?

Ich weiß, dass ein Socket nicht gleichzeitig zum Abhören und Senden von Daten verwendet werden kann. Hat es damit zu tun?

Wenn 53818 als Port zum Senden von Daten an A ausgewählt wird, warum erfolgt dann keine solche zufällige Auswahl in der Seed-Node-Verbindung? (wie 54.152.9.182 hier im Beispiel)

Antworten (1)

Ich würde vermuten, dass addrlocal Ihnen Ihren Endpunkt der Verbindung anzeigt, dh Ihre IP-Adresse und Portnummer. Für alle eingehenden Verbindungen wäre dies die gleiche IP-Adresse und der Port, auf dem Sie lauschen, daher wird es nicht angezeigt. In Ihrem Fall höchstwahrscheinlich: 137.122.81.217:8333

Ich bin mir nicht sicher, was passieren würde, wenn der Server multihomed ist.

Warum ist meine Portnummer 58318 (zufällig gewählt) und NICHT 18333? Ich bin immer noch über das Testnetz verbunden, richtig?
Weil es sich um eine ausgehende Verbindung handelt und TCP so funktioniert: Ausgehende Verbindungen haben (standardmäßig) einen zufälligen lokalen Port. Wenn Sie sich mit einem Host verbinden, geben Sie nur diesen Host und einen Port an, Sie geben niemals an, welche IP oder welchen Port auf Ihrem eigenen PC Sie verwenden möchten, daher ist es zufällig.
Ja genau. Aber ich habe zwei Knoten (Laptop A und einen Seed-Knoten), die hier von Laptop B verbunden sind. Beide sind ausgehend, da sie von B initiiert werden (einer bei der Peer-Erkennung und der andere aufgrund meines manuellen Befehls). Warum wird kein zufälliger Port für die Verbindung zwischen Seed-Knoten und Laptop B gewählt? Warum wird dafür nur 18333 auf beiden Seiten (Ziel und Quelle) verwendet? Sollte die Quelle dafür nicht auch ein zufälliger Port (auf der B-Seite) sein? Ich stelle auch fest, dass für alle Seed-Knoten der Quellport in B wie in diesem Fall 18333 ist.