Ich denke, der Teil, den Sie vermissen, ist eine TCP-Verbindung ist eigentlich zwei Paare von IP: PORT.
Eine für den Server, eine für den Client.
Die zuhörende Seite eines TCP-Sockels ist im Allgemeinen immer das gleiche IP/Port-Paar.
Beispiel: net.Listen("tcp", ":8080")
hört auf Port 8080 (an allen Schnittstellen in diesem Fall)
Die Verbindungs (Client) Seite ist in der Regel verwendet eine einzelne abgehende IP zusammen mit einem zufälligen Port.
Beispiel: net.Dial("tcp","server:8080)
Wählt einen zufälligen verfügbaren kurzlebigen Port und versucht dann, eine Verbindung zu server:8080
herzustellen.
also im obigen Beispiel, daß die Verbindung ist: client.ip:32768 -> server.ip:8080
(wobei 32768 ist die ephemeren Port ausgewählt)
die beide eine einzigartige Verbindung herzustellen kombinierten Paare.
Die Serverseite kann so viele Verbindungen von einem einzelnen Client annehmen, wie verfügbare (clientseitige) Ports vorhanden sind. Es kann auch so viele Clients aufnehmen, wie es IP-Adressen gibt.
Betrachten Sie es als, für eine hörende Steckdose können Sie theoretisch 2^16 (Häfen) * 2^32 (ipv4 addrs) Verbindungen haben.
In der Realität gibt es reservierte IPs, Ports, Speicherbeschränkungen usw., so dass die Anzahl viel kleiner ist. Zum Beispiel ist der flüchtige Port-Bereich unter Linux 32768 - 61000. Was bedeutet, dass ich Fehler bekommen werde, wenn ich net.Dial("tcp", "server:8080")
mehr als 28232 mal habe, da ich meinen kurzlebigen Portbereich für die gegebene Serveradresse erschöpft haben werde. Aber wenn der Server auf zwei separaten Ports abhört, kann ich 28232 zum ersten Port und einen weiteren 28232 zum zweiten Port tun.
Wenn man die Leute die 10MM Verbindungstests sehen zu tun, haben sie mehrere Client-IPs oder mehrere Server-IP-Adressen/Ports verwenden, um dieses zu erreichen (oder eine Kombination aus beiden zu bekommen 10MM eindeutige Client: IP/Server: IP-Paare)
Wenn es alles über einen Socket ist, warum brauchen der Server und der Client all diese FDs und diesen riesigen Rückstand, und was ist alles über inkrementierende Portnummern? – EJP
Meine erste Antwort war falsch. Die steigenden Portnummern sind jedoch nur erforderlich, weil der Test ein einzelnes Betriebssystem zum Ausführen der Clientseite verwendet. – WeakPointer