Welche bedeutung hat der bind aufruf für udp-sockets

LIBRARIES

WHAT'S NEW

New FreeRTOS Long Term Support version now available.

Receive security patches and critical bug fixes on FreeRTOS libraries for two years. See the blog post.

FreeRTOS Extended Maintenance Program (EMP) registration now open.

Providing security patches and critical bug fixes on FreeRTOS Long Term Support (LTS) versions for up to 10 additional years. See the blog post.

FreeRTOS-Plus-TCP v3.0.0 released:

We've added comprehensive unit tests and penetration and protocol testing. See the blog post.

Featured FreeRTOS IoT Integrations:

Introducing three featured integrations for more secure IoT applications. See the blog post.

Delta Over-the-Air Updates:

Announcing Delta OTA updates. See the blog post.

Binding

Each socket needs a unique address. As already stated, an address is the combination of an IP address and a port number.

When a socket is created it assumes the IP address of the network node that created it. If a socket has an IP address but not a port number it is said to be 'unbound'. An unbound socket cannot receive data because it does not have a complete address.

When a socket has both an IP address and a port number it is said to be 'bound to a port', or 'bound to an address'. A bound socket can receive data because it has a complete address.

The process of allocating a port number to a socket is called 'binding'.

The API function FreeRTOS_bind() is used to bind a FreeRTOS-Plus-TCP socket to a port number.

If ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND is set to 0 in FreeRTOSIPConfig.h then FreeRTOS_bind() must be used to bind a socket to a port number before the socket can be used to either send or receive data. If ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND is set to 1 in FreeRTOSIPConfig.h then an unbound socket will be automatically bound to a port number the first time it attempts to send data (for UDP sockets) or connect (for TCP sockets), but can still only receive data after it has been bound.

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Ein Port ist der Teil einer Netzwerk-Adresse, der die Zuordnung von TCP- und UDP-Verbindungen und -Datenpaketen zu Server- und Client-Programmen durch Betriebssysteme bewirkt. Zu jeder Verbindung dieser beiden Protokolle gehören stets zwei Ports, je einer auf Seite des Clients und des Servers.

Gültige Portnummern sind 0 bis 65 535 (= 216 − 1).

Zweck[Bearbeiten | Quelltext bearbeiten]

Ports dienen zwei Zwecken:

  • Primär sind Ports ein Merkmal zur Unterscheidung mehrerer Verbindungen zwischen demselben Paar von Endpunkten.[1]
  • Ports können auch Netzwerkprotokolle und entsprechende Netzwerkdienste identifizieren (z. B. HTTPS läuft standardmäßig über den TCP-Port 443, RDP hingegen über UDP-/TCP-Port 3389).

Beispiele

  • Ein Webbrowser kann während eines laufenden HTTP-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 80 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.
  • Der Port 25 ist für das Simple Mail Transfer Protocol (SMTP) reserviert. Wenn eine Verbindung zum Port 25 eines Servers aufgebaut wird, wird diese Verbindung vom SMTP-Dienst des Servers angenommen, sofern dieser Dienst verfügbar ist.

Funktionsweise[Bearbeiten | Quelltext bearbeiten]

Startende Server fordern beim Betriebssystem bestimmte Ports an, um Verbindungen annehmen zu können. Dies sind in aller Regel „well-known Ports“, da hier die Portnummer nicht veröffentlicht werden oder bekannt sein muss. Die Nummern sind vielmehr den betreffenden Programmen fest zugeordnet.

Clients fordern beim Betriebssystem normalerweise einen zufälligen Port an (zumeist im sehr hohen Bereich über 30.000), um Verbindungen aufbauen zu können. Allerdings kann ein Client sich auch an einen bestimmten Port binden (Aufruf von bind()); dies ist zum Beispiel nötig für bestimmte verbindungslose Protokolle, beschränkt allerdings die Nutzung dieses Clients auf einen Prozess pro Computer.

Der Verbindungsaufbau erfolgt durch den Client, der dazu den Port des Servers kennen muss. Durch den Verbindungsaufbau erfährt der Server den Port des Clients, sodass er diesem antworten kann. Im Falle der Benutzung eines „well-known Ports“ wird gleichzeitig die Portnummer serverseitig geändert, um die bekannte, standardisierte Portnummer auch weiterhin für neue Verbindungen bereitstellen zu können.

Geschichte[Bearbeiten | Quelltext bearbeiten]

Portnummern wurden ursprünglich AEN genannt, was für Another Eightbit Number stand.[2]

1981 wurde mit dem Transmission Control Protocol ein viel größerer Bereich von 16 Bit definiert.[3]

Die Standardisierung geht maßgeblich auf Initiativen von Jon Postel Anfang der 1970er-Jahre zurück.[4][5]

Standardisierung[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

Ports 0 bis 1023 (0hex bis 3FFhex)

Diese Ports werden auch „well-known Ports“ genannt und sind für Netzwerkdienste reserviert, wenn sie nicht bereits als „reservierte Ports“ der IANA selbst (etwa für zukünftige Erweiterungen) zugewiesen worden sind, was etwa insbesondere auf die Intervall-Grenzen zutrifft (zum Beispiel: 0, 1023, 1024), die also nicht für die Verwendung für Server zur Verfügung stehen. Neue Zuordnungen erfolgen nur unter Beteiligung der Internet Engineering Task Force (IETF).

User Ports[Bearbeiten | Quelltext bearbeiten]

Ports 1024 bis 49151 (400hex bis BFFFhex)

Diese Ports sind für registrierte Dienste vorgesehen, können aber auch für Clientprogramme verwendet werden. Die dynamische Zuordnung für Clientprogramme wird von der Mehrzahl der aktuellen Betriebssysteme nicht mehr durchgeführt, da hierfür die „Dynamic Ports“ vorgesehen sind. In diesem Bereich können auf Antrag neue Zuordnungen ohne Beteiligung der IETF erfolgen.

Dynamic Ports[Bearbeiten | Quelltext bearbeiten]

Ports 49152 bis 65535 (C000hex bis FFFFhex)

Diese Ports werden vom Betriebssystem dynamisch an Clientprogramme vergeben.

Ergänzung: Linuxsysteme halten sich sehr oft nicht an diesen Standard und vergeben die Clientports im Bereich zwischen 32768 und 61000. 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 ist. Einige NAT-Router verwenden sogar noch niedrigere Ports.

Bedeutung[Bearbeiten | Quelltext bearbeiten]

Abweichungen von den Zuordnungen der IANA erschweren die Kontaktaufnahme, ohne sie verhindern zu können.

Einen Überblick von Zuordnungen gibt die Liste der standardisierten Ports.

Dienstnamen[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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[Bearbeiten | Quelltext bearbeiten]

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.

  • Service Name and Transport Protocol Port Number Registry – Liste der Zuordnungen bei der Internet Assigned Numbers Authority

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Internet Engineering Task Force (Hrsg.): Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry (= Best Current Practice. Band 165). ISSN 2070-1721, S. 6 (BCP 165 [abgerufen am 22. Februar 2012]).
  2. RFC 433 – Socket Number List, Dezember 1972
  3. RFC 793 – Transmission Control Protocol, September 1981
  4. RFC 204 – Sockets in use, August 1971
  5. RFC 349 – Socket Number List, Mai 1972