GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann TCP mehr als 65535 Ports bereitstellen?

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.


Linux
  1. CentOS / RHEL :So konfigurieren Sie vsftpd, dass andere Ports als die Standardports 20 und 21 verwendet werden

  2. Wie kann ich den TCP-Port 16969 in Bash beenden?

  3. Wie kann ich SSH auf einem anderen Port als 22 ausführen?

  4. Wie kann ich überprüfen, welche Ports belegt und welche Ports auf meinem Linux-Rechner frei sind?

  5. Überwachen Sie den TCP-Verkehr an einem bestimmten Port

So führen Sie einen Port-Scan unter Linux durch

Zorin OS 15 schöner und nützlicher denn je

Öffnen eines Ports unter Linux

Wie kann ich mit iptables weiterleiten?

Kann ich ufw verwenden, um eine Portweiterleitung einzurichten?

Können Sie mehr als eine ~/.ssh/config-Datei haben?