# Port (Netzwerkadresse)

Ein Port oder eine Portnummer ist in Rechnernetzen eine Netzwerkadresse, mit der das Betriebssystem die Datenpakete eines Transportprotokolls zu einem Prozess zuordnet. Zusammen mit der IP-Adresse ermöglicht der Port die Adressierung eines Servers oder Clients. Durch Angabe von Quell- und Zieladresse, jeweils bestehend aus IP-Adresse und Port, ist es möglich, eine bestehende Verbindung eindeutig zu identifizieren.
Die weit verbreiteten Transportprotokolle Transmission Control Protocol (TCP) und User Datagram Protocol (UDP) verwenden 16 Bit als Port. Daraus ergibt sich ein Portnummernbereich von 0 bis 65.535 ($2^{16}-1$).

## Zweck

Ports dienen zwei Zwecken:
* Primär sind Ports ein Merkmal zur Unterscheidung mehrerer Verbindungen zwischen demselben Paar von Kommunikationsteilnehmern (Hosts) in einem Rechnernetz. Die Angabe von IP-Adressen ist alleine nicht eindeutig, da es mehrere Verbindungen gleichzeitig zwischen den beiden IP-Adressen geben kann.
* Ports können auch Netzwerkprotokolle und entsprechende Netzwerkdienste identifizieren. Dies ergibt sich daraus, dass Netzwerkdienste üblicherweise standardisierte Portnummern verwenden.
Beispiele
* Ein Webbrowser kann während eines laufenden HTTPS-Downloads einen weiteren Download von ein und demselben Webserver starten, weil der Browser dann (client-seitig) einen weiteren Port öffnet und so eine zusätzliche Verbindung zum selben Port 443 des Servers aufbaut. Der Server antwortet den unterschiedlichen Ports des Browsers mit unterschiedlichen jeweils zusammengehörigen Inhalten. Für eine Unterscheidung der Verbindungen genügen also verschiedene Portnummern an nur einem der beiden Endpunkte.
* Ein HTTPS-Webserver läuft standardmäßig über den TCP-Port 443. Ohne explizite Angabe einer Portnummer versucht ein Webbrowser einen Verbindungsaufbau standardmäßig zum Zielport 443. Beobachtet man im Rechnernetz eine TCP-Verbindung zu einem Port 443, so ist dies ein starkes Indiz, dass es sich dabei um eine HTTPS-Verbindung handelt.

## Funktionsweise

Ein startender Server fordert beim Betriebssystem einen lauschenden Socket auf einem bestimmten Port an, um Verbindungen annehmen zu können. Bei Standardanwendungen ist die Portnummer bei der IANA registriert (siehe Abschnitt #Standardisierung). Somit ist die Portnummer der Server-Anwendung fest zugeordnet, kann jedoch bei Bedarf durch den Administrator umkonfiguriert werden.
Ein Client fordert beim Betriebssystem normalerweise einen Socket mit einem zufälligen Port an, um eine ausgehende Verbindung aufbauen zu können. Das Betriebssystem weist in der Regel eine zufällige Portnummer ≥ 49.152 zu, da es in diesem Bereich keine registrierten Ports gibt. Der Client kann auch einen bestimmten Port beim Betriebssystem anfordern. Dies kann beispielsweise für die Realisierung von verbindungslosen Peer-to-Peer-Systemen erforderlich sein.
Der Verbindungsaufbau erfolgt durch den Client, der dazu den Port des Servers kennen muss. Beim Verbindungsaufbau erfährt der Server den Port des Clients, sodass er diesem antworten kann.

## Geschichte

Portnummern wurden ursprünglich AEN genannt, was für Another Eightbit Number stand.
1981 wurde mit dem Transmission Control Protocol ein viel größerer Bereich von 16 Bit definiert.
Die Standardisierung geht maßgeblich auf Initiativen von Jon Postel Anfang der 1970er Jahre zurück.

## Standardisierung

Seit 2011 beschreibt mit RFC 6335 ein Request for Comments das Verfahren, nach dem die Internet Assigned Numbers Authority (IANA) Ports Protokollen zuordnet. Es werden drei Bereiche unterschieden: System Ports, User Ports und Dynamic Ports.

### System Ports

Ports 0 bis 1023 (0$_{hex}$ bis 3FF$_{hex}$)
Diese Ports werden auch „well-known Ports“ genannt und sind für Netzwerkdienste vorgesehen. Einige der Portnummern, wie beispielsweise 0 und 1023, sind durch die IANA reserviert und werden nicht vergeben. Neue Zuordnungen erfolgen nur unter Beteiligung der Internet Engineering Task Force (IETF) und setzen die Zustimmung der Internet Engineering Steering Group voraus. Der Antragsteller muss begründen, warum eine Portnummer aus den anderen Bereichen für den Anwendungszweck ungeeignet ist.
Unix-artige Betriebssysteme behandeln die Ports von 1 bis 1023 als privilegierten Bereich, dessen Verwendung root-Rechte voraussetzt. Die Portnummer 0 wird nicht für Netzwerkkommunikation verwendet.

### User Ports

Ports 1024 bis 49.151 (400$_{hex}$ bis BFFF$_{hex}$)
Diese Ports sind für registrierte Netzwerkdienste vorgesehen. In diesem Bereich können auf Antrag neue Zuordnungen je nach Verfahren mit oder ohne Beteiligung der IETF erfolgen.
Bei gängigen Betriebssystemen steht dieser Portbereich zur Verwendung durch Client und Server zur Verfügung, sofern die Anwendung den Port explizit anfordert.

### Dynamic Ports

Ports 49.152 bis 65.535 (C000$_{hex}$ bis FFFF$_{hex}$)
Diese Ports sind für eine dynamische Zuweisung durch das Betriebssystem vorgesehen. Die IANA führt in diesem Bereich keine Registrierungen durch.
Microsoft verwendet seit Windows Vista und Windows Server 2008 standardmäßig diesen Bereich für die dynamische Zuordnung an Clientprogramme. Linux verwendet standardmäßig einen davon abweichenden Bereich und vergibt dynamische Ports im Bereich von 32.768 bis 60.999. Ursprünglich waren von der IANA die Ports ab 1024 für Clientprogramme vorgesehen. Bei der Umstellung des Portbereiches gab es jedoch einige Diskussionen, bis sich die heutige Einteilung durchsetzte. Die Umstellung wurde in Linux allerdings während der Diskussionszeit vorgenommen und nicht auf den endgültigen Standard umgesetzt. Als Begründung hierfür wird auch immer wieder angeführt, dass der Bereich der Dynamic Ports zu klein sei. NAT-Router verwenden ebenfalls dynamische Ports außerhalb dieses Bereichs.

## Dienstnamen

Ports sind neben Protokollen auch Namen für die entsprechenden Netzwerkdienste zugeordnet. Ein solcher Service Name kann beispielsweise für SRV Resource Records verwendet werden.
Auf einem Unix-Rechner ist diese Liste in der Datei /etc/services definiert.
Unter Betriebssystemen der Windows-NT-Linie findet sich diese unter %WINDIR%\system32\drivers\etc\services, bei der Windows9x-Linie direkt im Windows-Ordner (%WINDIR%\services).

## Portfilter

Eine Portweiterleitung bewirkt, dass ein angesprochener Port über einen zweiten Port an ein anderes System weitergeleitet wird.
Eine Portsperre ist das Sperren oder Drosseln eines bestimmten Portes bzw. des darauf zugreifenden Netzwerkdienstes. Das Sperren von Ports wird von einigen Internet Service Providern eingesetzt, um unerwünschte Dienste zu blockieren. Bei Providern können Dienste beispielsweise unerwünscht sein, weil sie sehr viel Datenverkehr verursachen, wie beispielsweise beim Filesharing.
Ports können auch mit einer Firewall gesperrt werden. Bei einer lokalen Firewall wird normalerweise andersherum vorgegangen: Nur die tatsächlich benötigten Ports werden freigegeben und alle anderen Ports bleiben gesperrt. Somit werden die Angriffspunkte auf das geschützte Netz bzw. den PC reduziert.

## Portscanner

Portscanner dienen dem Auffinden von Ports und können ein Anzeichen eines Angriffs sein. Unterstützt die Firewall bzw. der Paketfilter das Portknocking, so kann ein Portscan erschwert werden, indem Ports erst dann geöffnet werden, wenn ihnen eine vorher vereinbarte Folge von Paketen gesendet wurde.