Betrachtet man den RFC für TCP:RFC 793 - Transmission Control Protocol, scheint die Antwort nein zu lauten, da ein TCP-Header auf 16 Bit für das Quell-/Ziel-Port-Feld beschränkt ist.
Verbessert IPv6 die Dinge?
Nein. Obwohl IPv6 uns einen viel größeren IP-Adressraum geben wird, 32 Bit gegenüber 128 Bit, unternimmt es keinen Versuch, die TCP-Paketbeschränkung von 16 Bit für die Portnummern zu verbessern. Interessanterweise musste im RFC für IPv6:Internet Protocol, Version 6 (IPv6) Specification das IP-Feld erweitert werden.
Wenn TCP über IPv6 läuft, wird die Methode zur Berechnung der Prüfsumme geändert, gemäß RFC 2460:
Jedes Transport- oder andere Protokoll der oberen Schicht, das die Adressen aus dem IP-Header in seine Prüfsummenberechnung einbezieht, muss für die Verwendung über IPv6 modifiziert werden, um die 128-Bit-IPv6-Adressen anstelle der 32-Bit-IPv4-Adressen einzuschließen.
Wie können Sie also mehr Ports bekommen?
Ein Ansatz wäre, zusätzliche IP-Adressen über mehr Schnittstellen zu stapeln. Wenn Ihr System über mehrere NICs verfügt, ist dies einfacher, aber selbst mit nur einer einzigen NIC kann man virtuelle Schnittstellen (auch bekannt als Aliase) verwenden, um bei Bedarf mehr IPs zuzuweisen.
HINWEIS: Die Verwendung von Aliasnamen wurde durch iproute2
ersetzt die Sie verwenden können, um IP-Adressen auf einer einzelnen Schnittstelle zu stapeln (z. B. eth0
) statt.
Beispiel
$ sudo ip link set eth0 up
$ sudo ip addr add 192.0.2.1/24 dev eth0
$ sudo ip addr add 192.0.2.2/24 dev eth0
$ ip addr show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc
pfifo_fast state DOWN qlen 1000
link/ether 00:d0:b7:2d:ce:cf brd ff:ff:ff:ff:ff:ff
inet 192.0.2.1/24 brd 192.0.2.255 scope global eth1
inet 192.0.2.2/24 scope global secondary eth1
Quelle:iproute2:Leben nach ifconfig
Referenzen
- OpenWrt-Wiki » Dokumentation » Netzwerk » Linux-Netzwerkschnittstellen
- Einige nützliche Befehle mit iproute2
- Linux Advanced Routing &Traffic Control HOWTO
- Mehrere Standardrouten / öffentliche Gateway-IPs unter Linux
- iproute2-Spickzettel - Website von Daniil Baturin
Ist es möglich, ein Linux-System so einzurichten, dass es mehr als 65.535 Ports bereitstellt?
Nein.
Die Absicht wäre, dass mehr als 65.000 Daemons auf einem bestimmten System lauschen.
Dann brauchen Sie:
-
ein
iptables
Konfiguration, die Traffic-Inhalte umleitet oder -
ein "Service-Broker-Dienst" oder "Multiplexer-Dienst", der eingehende Verbindungen auf einem einzelnen Port akzeptiert und sie an den entsprechenden Daemon "dahinter" weiterleitet. Wenn Sie möchten, dass Standardprotokolle unverändert passieren, müssen Sie möglicherweise Protokoll-Sniffing/-Erkennung in diesem Multiplexor-Dienst implementieren, in einer Weise, die eine IDS- oder Layer-7-Firewall analysieren würde; bei den allermeisten Protokollen durchaus möglich.
Gemäß dem zweiten Punkt könnten Sie diesen Dienst so gestalten, dass er mehr als 2 ^ 16 "Ports" verarbeitet, wenn Sie dies wirklich möchten. Ich bin mir sicher, dass die Auswirkung auf die Leistung im Vergleich zu der Last von 2^16+ laufenden Listenern minimal sein wird.
Daemons in Linux können auf Unix-Sockets lauschen, die im Dateisystem vorhanden sind, sodass Ihr "Multiplexor-Dienst" eine interne Zuordnung von externem Port <-> internem Unix-Socket aufrechterhalten könnte. Sie werden wahrscheinlich auf ein Kernel-Prozesslimit stoßen (32-KByte-Prozesse?), bevor Ihnen die Inodes auf einem modernen Dateisystem ausgehen.
Nur weil es keine gute Antwort gibt, wollte ich mich einmischen.
Eine Möglichkeit, dies zu tun, wäre das Hinzufügen einer IP-Option, die die Porterweiterung angibt. Die Option muss so gestaltet sein, dass sie in den optionalen Teil des IP-Headers passt und würde von unbekannten Hops übersprungen.
Sie würden diese Option und ihre Informationsinformationen verwenden, um die Quell-, Ziel- oder beide Portnummern zu erweitern.
Die Einschränkungen funktionieren nicht automatisch in vorhandener Software, indem Sie die Option ohnehin hinzufügen. Sie müssen neu geschrieben werden, um die Option nutzen zu können, egal wie sie implementiert ist. Bestehende Software und Firewalls ignorieren das Paket entweder oder verarbeiten es wie gewohnt Verwenden Sie den Wert in den Quell- und Zielportfeldern.
Kurz gesagt, es ist nicht einfach und es wäre besser, einen einzigen wiederverwendbaren Listener und Daten zu verwenden, die in der Nutzlast des Pakets enthalten sind.
Sie können die Wiederverwendung von Ports auch einfacher in der Software zulassen, was dazu beitragen kann, diese Einschränkung zu überwinden, indem Sie Ports des Servers für mehrere Client-Verbindungen wiederverwenden.
Rtsp kann beispielsweise den SessionId-Header in Verbindung mit verschiedenen anderen Headern in der Nutzlast des IP-Pakets verwenden, um festzustellen, für welche Verbindung die Anfrage ausgegeben wurde, und entsprechend handeln, z. Wenn der Socket, von dem die Nachricht geliefert wurde, nicht mit der entfernten Adresse des Sockets übereinstimmt, der die Sitzung entspricht, kann man entweder zulassen, dass eine Sitzung mit dem neuen Socket zur Verarbeitung aktualisiert wird, die Nachricht verweigern oder eine Vielzahl anderer Aktionen ausführen je nach Anwendung.
Dies kann auch ein HTTP-Server oder jeder andere Servertyp.
Wenn Sie die Wiederverwendung von Ports zulassen, müssen Sie unbedingt daran denken, dass Sie auch die Quell-IP-Adresse berücksichtigen müssen.