web-dev-qa-db-de.com

Was ist der Unterschied zwischen einem Port und einem Socket?

Dies war eine Frage, die von einem Software-Entwickler in meiner Organisation gestellt wurde. Ich interessiere mich für die breiteste Definition.

780
Richard Dorman

Zusammenfassung

Ein Socket TCP ist eine Endpunktinstanz , die durch eine IP-Adresse und a definiert ist port im Kontext einer bestimmten TCP Verbindung oder des Empfangsstatus.

Ein Port ist eine Virtualisierungs-ID , die einen Service-Endpunkt definiert (im Unterschied zu einem Service-Endpunkt oder einer Sitzung Kennung).

Ein TCP Socket ist keine Verbindung , es ist der Endpunkt von a spezifische Verbindung.

Es können gleichzeitige Verbindungen zu einem Dienstendpunkt bestehen , da eine Verbindung durch sowohl ihre lokale als auch ihre entfernte Endpunkte, sodass der Datenverkehr an eine bestimmte Dienstinstanz weitergeleitet werden kann.

Es kann nur einen Listener-Socket für eine gegebene Adresse/Port-Kombination geben .

Exposition

Dies war eine interessante Frage, die mich dazu zwang, eine Reihe von Dingen, von denen ich glaubte, sie von innen nach außen zu kennen, erneut zu untersuchen. Man könnte meinen, ein Name wie "Socket" wäre selbsterklärend: Er wurde offensichtlich gewählt, um eine Vorstellung von dem Endpunkt zu erhalten, an den Sie ein Netzwerkkabel anschließen, da starke funktionale Parallelen bestehen. Trotzdem trägt das Wort "Steckdose" in der Netzsprache so viel Gepäck, dass eine sorgfältige Überprüfung erforderlich ist.

Ein Hafen ist im weitesten Sinne ein Ein- oder Ausstiegspunkt. Obwohl das französische Wort porte in einem Netzwerkkontext nicht verwendet wird, bedeutet es wörtlich Tür oder Gateway , was die Tatsache weiter unterstreicht, dass Ports Transportmittel sind Endpunkte, egal ob Sie Daten oder große Stahlbehälter versenden.

Zum Zwecke dieser Diskussion beschränke ich mich auf den Kontext von TCP-IP-Netzwerken. Das OSI-Modell ist alles in allem sehr gut, wurde jedoch nie vollständig implementiert, und es wird viel seltener unter Bedingungen mit hohem Verkehrsaufkommen und hohem Stress eingesetzt.

Die Kombination aus einer IP-Adresse und einem Port wird als Endpunkt bezeichnet und manchmal als Socket bezeichnet. Diese Verwendung stammt aus RFC793, der ursprünglichen Spezifikation TCP.

Eine TCP Verbindung wird durch zwei Endpunkte Sockets definiert.

Ein Endpunkt (Socket) wird durch die Kombination einer Netzwerkadresse und einer Portkennung definiert. Beachten Sie, dass Adresse/Port einen Socket nicht vollständig identifiziert (dazu später mehr).

Der Zweck von Ports besteht darin, mehrere Endpunkte auf einer bestimmten Netzwerkadresse zu unterscheiden. Man könnte sagen, dass ein Port ein virtualisierter Endpunkt ist. Diese Virtualisierung ermöglicht mehrere gleichzeitige Verbindungen auf einer einzigen Netzwerkschnittstelle.

Es ist das Socket-Paar (das 4-Tupel, das aus der Client-IP-Adresse, der Client-Port-Nummer, der Server-IP-Adresse und der Server-Port-Nummer besteht), das die beiden Endpunkte angibt, die jede TCP -Verbindung in einem Internet eindeutig identifizieren . ( TCP-IP Illustrated Volume 1 , W. Richard Stevens)

In den meisten C-abgeleiteten Sprachen werden TCP Verbindungen hergestellt und mithilfe von Methoden für eine Instanz einer Socket-Klasse bearbeitet. Obwohl es üblich ist, auf einer höheren Abstraktionsebene zu arbeiten, normalerweise einer Instanz einer NetworkStream-Klasse, wird hierdurch im Allgemeinen ein Verweis auf ein Socket-Objekt verfügbar gemacht. Für den Codierer scheint dieses Socket-Objekt die Verbindung darzustellen, da die Verbindung mit Methoden des Socket-Objekts erstellt und bearbeitet wird.

Um in C # eine TCP Verbindung (zu einem vorhandenen Listener) herzustellen, erstellen Sie zunächst einen TcpClient . Wenn Sie dem TcpClient -Konstruktor keinen Endpunkt zuweisen, werden Standardwerte verwendet. Auf die eine oder andere Weise wird der lokale Endpunkt definiert. Anschließend rufen Sie die Connect -Methode für die von Ihnen erstellte Instanz auf. Diese Methode erfordert einen Parameter, der den anderen Endpunkt beschreibt.

All dies ist ein bisschen verwirrend und lässt Sie glauben, dass eine Steckdose eine Verbindung ist, was Blödsinn ist. Ich arbeitete unter diesem Missverständnis, bis Richard Dorman die Frage stellte.

Nachdem ich viel gelesen und nachgedacht habe, bin ich jetzt überzeugt, dass es viel sinnvoller wäre, eine Klasse TcpConnection mit einem Konstruktor zu haben, der zwei Argumente akzeptiert, LocalEndpoint und RemoteEndpoint . Möglicherweise können Sie ein einzelnes Argument RemoteEndpoint unterstützen, wenn die Standardeinstellungen für den lokalen Endpunkt akzeptabel sind. Dies ist auf Multihomed-Computern nicht eindeutig. Die Mehrdeutigkeit kann jedoch mithilfe der Routingtabelle behoben werden, indem die Schnittstelle mit der kürzesten Route zum Remote-Endpunkt ausgewählt wird.

Die Klarheit würde auch in anderer Hinsicht verbessert. Ein Socket wird nicht durch die Kombination von IP-Adresse und Port identifiziert:

[...] TCP demultiplext eingehende Segmente unter Verwendung aller vier Werte, die die lokalen und fremden Adressen umfassen: Ziel-IP-Adresse, Ziel-Port-Nummer, Quell-IP-Adresse und Quell-Port-Nummer. TCP kann nicht bestimmen, welcher Prozess ein eingehendes Segment erhält, indem er nur den Zielport betrachtet. Außerdem ist der einzige der [verschiedenen] Endpunkte an [einer bestimmten Portnummer], der eingehende Verbindungsanforderungen empfängt, derjenige im Empfangsstatus. (p255, TCP-IP Illustrated Volume 1 , W. Richard Stevens)

Wie Sie sehen, ist es nicht nur möglich, sondern auch sehr wahrscheinlich, dass ein Netzwerkdienst mehrere Sockets mit derselben Adresse/demselben Port hat, sondern nur einen Listener-Socket für eine bestimmte Kombination aus Adresse/Port. Typische Bibliotheksimplementierungen stellen eine Socket-Klasse dar, von der eine Instanz zum Erstellen und Verwalten einer Verbindung verwendet wird. Dies ist äußerst bedauerlich, da es Verwirrung stiftet und zu einer weitgehenden Überschneidung der beiden Konzepte geführt hat.

Hagrawal glaubt mir nicht (siehe Kommentare), also hier ein echtes Beispiel. Ich habe einen Webbrowser mit http://dilbert.com verbunden und dann netstat -an -p tcp ausgeführt. Die letzten sechs Zeilen der Ausgabe enthalten zwei Beispiele dafür, dass Adresse und Port nicht ausreichen, um einen Socket eindeutig zu identifizieren. Es gibt zwei verschiedene Verbindungen zwischen 192.168.1.3 (meiner Workstation) und 54.252.94.236:80 (dem entfernten HTTP-Server).

  TCP    192.168.1.3:63240      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63241      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63242      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:63243      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:64161      65.54.225.168:443      ESTABLISHED

Da ein Socket der Endpunkt einer Verbindung ist, gibt es zwei Sockets mit der Adresse/Port-Kombination 207.38.110.62:80 und zwei weitere mit der Adresse/Port-Kombination 54.252.94.236:80.

Ich denke, Hagrawals Missverständnis ergibt sich aus meiner sehr sorgfältigen Verwendung des Wortes "identifiziert". Ich meine "vollständig, eindeutig und eindeutig identifiziert". Im obigen Beispiel gibt es zwei Endpunkte mit der Adresse/Port-Kombination 54.252.94.236:80. Wenn Sie nur Adresse und Port haben, verfügen Sie nicht über genügend Informationen, um diese Sockets voneinander zu unterscheiden. Es ist nicht genug Information, um einen Socket zu identifizieren .

Nachtrag

In Abschnitt 2.7 Absatz 2 von RFC793 heißt es

Eine Verbindung wird vollständig durch das Buchsenpaar an den Enden angegeben. Ein lokaler Socket kann an vielen Verbindungen zu verschiedenen fremden Sockets teilnehmen.

Diese Definition von Socket ist aus Programmiersicht nicht hilfreich, da sie nicht mit einem Socket -Objekt identisch ist, das der Endpunkt einer bestimmten Verbindung ist. Für einen Programmierer und die meisten Programmierer dieser Frage ist dies ein entscheidender funktionaler Unterschied.

Verweise

  1. TCP-IP Illustrated Volume 1 Die Protokolle , W. Richard Stevens, 1994 Addison Wesley

  2. RFC79, Institut für Informationswissenschaften, University of Southern California für DARPA

  3. RFC147, Die Definition eines Sockels, Joel M. Winett, Lincoln Laboratory

900
Peter Wone

Eine Steckdose besteht aus drei Dingen:

  1. Eine IP-Adresse
  2. Ein Transportprotokoll
  3. Eine Portnummer

Ein Port ist eine Zahl zwischen 1 und 65535, die ein logisches Gatter in einem Gerät angibt. Jede Verbindung zwischen Client und Server erfordert einen eindeutigen Socket.

Zum Beispiel:

  • 1030 ist ein Hafen.
  • (10.1.1.2, TCP, Port 1030) ist ein Socket.
164
RT_

A socket steht für eine einzelne Verbindung zwischen zwei Netzwerkanwendungen. Diese beiden Anwendungen werden normalerweise auf verschiedenen Computern ausgeführt, aber Sockets können auch für die Kommunikation zwischen Prozessen auf einem einzelnen Computer verwendet werden. Anwendungen können mehrere Sockets erstellen, um miteinander zu kommunizieren. Sockets sind bidirektional, was bedeutet, dass beide Seiten der Verbindung sowohl Daten senden als auch empfangen können. Daher kann ein Socket theoretisch auf jeder Ebene des OSI-Modells ab 2 erstellt werden. Programmierer verwenden häufig Sockets für die Netzwerkprogrammierung, wenn auch indirekt. Programmierbibliotheken wie Winsock verbergen viele der einfachen Details der Socket-Programmierung. Steckdosen sind seit den frühen achtziger Jahren weit verbreitet.

A-Anschluss steht für einen Endpunkt oder "Kanal" für die Netzwerkkommunikation. Über Portnummern können verschiedene Anwendungen auf demselben Computer Netzwerkressourcen nutzen, ohne sich gegenseitig zu stören. Portnummern erscheinen am häufigsten in der Netzwerkprogrammierung, insbesondere der Socket-Programmierung. Manchmal werden Portnummern jedoch für den gelegentlichen Benutzer sichtbar gemacht. Beispielsweise verwenden einige Websites, die eine Person im Internet besucht, eine URL wie die folgende:

http://www.mairie-metz.fr:8080/ In diesem Beispiel bezieht sich die Nummer 8080 auf die Portnummer, die vom Webbrowser verwendet wird, um eine Verbindung zum Webserver herzustellen. Normalerweise verwendet eine Website die Portnummer 80, und diese Nummer muss nicht in der URL enthalten sein (obwohl dies möglich ist).

In IP-Netzwerken können Portnummern theoretisch von 0 bis 65535 reichen. Die meisten Netzwerkanwendungen verwenden jedoch Portnummern am unteren Ende des Bereichs (z. B. 80 für HTTP).

Hinweis: Der Begriff Port bezieht sich auch auf andere Aspekte der Netzwerktechnologie. Ein Port kann sich auf einen physischen Verbindungspunkt für Peripheriegeräte wie serielle, parallele und USB-Ports beziehen. Der Begriff Port bezieht sich auch auf bestimmte Ethernet-Verbindungspunkte, z. B. auf einem Hub, Switch oder Router.

ref http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm

ref http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm

89
Galwegian

Mit etwas Analogie

Obwohl oben für sockets bereits eine Menge technisches Material angegeben ist, möchte ich meine Antwort hinzufügen, nur für den Fall, wenn jemand den Unterschied zwischen ip immer noch nicht fühlen kann, Port und Sockets

Betrachte einen Server S,

und sag Person X, Y, Z brauche einen Dienst (sag Chat-Dienst) von diesem Server S

dann

IP address tell -> who? ist der Chat-Server 'S', den X, Y, Z kontaktieren möchten

okay, du hast "wer ist der Server"

angenommen, Server 'S' stellt auch anderen Personen einige andere Dienste zur Verfügung. Sagen wir 'S' stellt den Personen A, B, C Speicherdienste zur Verfügung.

dann

port tell ---> which? service you (X, Y, Z) brauche zB Chatdienst und nicht diesen Speicherdienst

okay .., du machst den Server darauf aufmerksam, dass "Chat-Service" das ist, was du willst und nicht der Speicher

aber

sie sind drei und der Server möchte möglicherweise alle drei unterschiedlich identifizieren

da kommt die buchse

jetzt socket tell -> welches? bestimmte Verbindung

das heißt, sagen wir

Buchse 1 für Person X

Buchse 2 für Person Y

und Buchse 3 für Person Z

Ich hoffe es hilft jemandem, der noch verwirrt war :)

71
eRaisedToX

Zunächst sollten wir zunächst einmal ein wenig verstehen, was es bedeutet, ein Paket von A nach B zu bekommen.

Eine gebräuchliche Definition für ein Netzwerk ist die Verwendung des OSI-Modells , das ein Netzwerk nach Zweck in mehrere Schichten unterteilt. Es gibt einige wichtige, die wir hier behandeln werden:

  • Die Datenverbindungsschicht. Diese Schicht ist für das Übertragen von Datenpaketen von einem Netzwerkgerät zu einem anderen verantwortlich und liegt direkt über der Schicht, die tatsächlich die Übertragung durchführt. Es spricht über MAC-Adressen und kann Hosts anhand ihrer MAC-Adresse (Hardware-Adresse) finden, mehr jedoch nicht.
  • Die Netzwerkschicht ist die Schicht, mit der Sie Daten zwischen Computern und über physische Grenzen, z. B. physische Geräte, transportieren können. Die Netzwerkschicht muss im Wesentlichen einen zusätzlichen adressenbasierten Mechanismus unterstützen, der sich irgendwie auf die physische Adresse bezieht. Geben Sie das Internetprotokoll (IPv4) ein. Eine IP-Adresse kann Ihr Paket von A nach B über das Internet übertragen, weiß jedoch nicht, wie Sie einzelne Hops durchlaufen. Dies wird von der darüber liegenden Schicht gemäß den Routing-Informationen behandelt.
  • Die Transportschicht. Diese Schicht ist für die Definition der Art und Weise, wie Informationen von A nach B gelangen, sowie für Einschränkungen, Überprüfungen oder Fehler in diesem Verhalten zuständig. Zum Beispiel fügt TCP zusätzliche Informationen zu einem Paket hinzu, so dass daraus abgeleitet werden kann, ob Pakete verloren gegangen sind.

TCP enthält unter anderem das Konzept von ports . Dies sind effektiv verschiedene Datenendpunkte auf derselben IP-Adresse, an die ein Internet-Socket (AF_INET) gebunden werden kann. 

Wie auch immer, auch UDP und andere Transportschichtprotokolle. Sie verfügen technisch gesehen nicht über brauchen Ports, aber diese Ports bieten eine Möglichkeit, dass mehrere Anwendungen in den darüberliegenden Ebenen denselben Computer verwenden, um ausgehende Verbindungen zu empfangen (und tatsächlich herzustellen).

Das bringt uns zur Anatomie einer TCP - oder UDP-Verbindung. Jeder verfügt über einen Quellport und eine Quelladresse sowie einen Zielport und eine Zieladresse. Auf diese Weise kann die Zielanwendung in jeder Sitzung von der Quelle aus antworten und auch empfangen.

Ports sind also im Wesentlichen eine Spezifikation, die es erlaubt, mehrere gleichzeitige Verbindungen mit derselben Adresse zuzulassen.

Nun müssen wir uns ansehen, wie Sie aus der Sicht der Anwendung nach außen kommunizieren. Um dies zu tun, müssen Sie das Betriebssystem nachfragen. Da die meisten Betriebssysteme die Vorgehensweise von Berkeley Sockets unterstützen, können Sie aus einer Anwendung wie folgt Sockets erstellen, die Ports enthalten:

int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...

Großartig! In den sockaddr-Strukturen geben wir also Port und Bam an! Job erledigt! Fast, außer:

int fd = socket(AF_UNIX, SOCK_STREAM, 0);

ist auch möglich. Urgh, das hat einen Schraubenschlüssel in Arbeit gebracht!

Ok, das hat es eigentlich nicht. Alles was wir tun müssen, ist ein paar passende Definitionen zu finden:

  • Ein Internet-Socket ist die Kombination aus einer IP-Adresse, einem Protokoll und der zugehörigen Portnummer, auf der ein Dienst Daten bereitstellen kann. Stackportflow.com ist also ein Internet-Socket. 
  • Ein Unix-Socket ist ein IPC -Endpunkt, der im Dateisystem dargestellt wird, z. /var/run/database.sock.
  • Eine Socket-API ist eine Methode zum Anfordern einer Anwendung, Daten in einen Socket zu lesen und zu schreiben.

Voila! Das räumt die Dinge auf. Also in unserem Schema dann 

  • Ein Port ist eine numerische Kennung, die als Teil eines Transportschichtprotokolls die Dienstnummer identifiziert, die auf die gegebene Anforderung antworten soll.

Ein Port ist also eine Teilmenge der Anforderungen für das Bilden einer Internet-Socket. Leider kommt es gerade so vor, dass die Bedeutung des Word-Sockets auf verschiedene Ideen angewendet wurde. Daher empfehle ich Ihnen herzlich, Ihr nächstes Projekt-Socket zu benennen, um der Verwirrung etwas hinzuzufügen;)

41
user257111

Ein Socket = IP-Adresse + ein Port (numerische Adresse)
Gemeinsam identifizieren sie einen Endpunkt für eine Netzwerkverbindung auf einem Computer. (Habe ich gerade das Netzwerk 101 durchgefallen?)

27
Gishu

Im Allgemeinen erhalten Sie eine Menge theoretischer Möglichkeiten, aber eine der einfachsten Möglichkeiten, diese beiden Konzepte zu unterscheiden, lautet wie folgt:

Um einen Dienst zu erhalten, benötigen Sie eine Dienstnummer. Diese Dienstnummer wird als Port bezeichnet. So einfach ist das.

Beispielsweise wird HTTP als Dienst auf Port 80 ausgeführt.

Nun können viele Leute den Dienst anfordern und eine Verbindung vom Client-Server hergestellt haben. Es wird viele Verbindungen geben. Jede Verbindung repräsentiert einen Client. Um jede Verbindung aufrechtzuerhalten, erstellt der Server pro Verbindung einen Socket, um den Client zu verwalten.

25
kta

Kurze kurze Antwort.

Ein Port kann als interne Adresse innerhalb eines Hosts beschrieben werden, der ein Programm oder einen Prozess identifiziert.

Eine socket kann als Programmierschnittstelle bezeichnet werden Damit kann ein Programm mit anderen Programmen oder Prozessen im Internet oder lokal kommunizieren. 

24
Andy

Es scheint viele Antworten zu geben, die Socket mit der Verbindung zwischen 2 PCs gleichsetzen. Was ich für absolut falsch halte. Ein Socket war immer der Endpunkt auf einem PC, der verbunden sein kann oder nicht - sicherlich haben wir alle irgendwann einmal Listener- oder UDP-Sockets * verwendet. Der wichtige Teil ist, dass es adressierbar und aktiv ist. Das Senden einer Nachricht an 1.1.1.1:1234 funktioniert wahrscheinlich nicht, da für diesen Endpunkt kein Socket definiert ist.

Sockets sind protokollspezifisch - daher wird bei der Implementierung der Eindeutigkeit, dass sowohl TCP / IP als auch UDP / IP (ipaddress: port) verwendet. ist anders als zB, IPX (Netzwerk, Knoten und ... ähm, Socket - aber ein anderer Socket als der allgemeine "Socket" - Begriff). IPX-Socket-Nummern entsprechen IP-Ports ). Sie bieten jedoch alle einen eindeutigen adressierbaren Endpunkt.

Seit IP das dominierende Protokoll ist, ist ein Port (vernetzt) ​​mit einer UDP- oder TCP -Portnummer synchronisiert - einem Teil der Socket-Adresse.

  • UDP ist verbindungslos - es wird also nie eine virtuelle Verbindung zwischen den beiden Endpunkten erstellt. Als Endpunkt verweisen wir jedoch weiterhin auf UDP-Sockets . Die API-Funktionen machen deutlich, dass es sich bei beiden nur um unterschiedliche Socket-Typen handelt: SOCK_DGRAM ist UDP (nur Senden einer Nachricht) und SOCK_STREAM ist TCP (Erstellen einer virtuellen Verbindung).

  • Technisch gesehen enthält der IP-Header die IP-Adresse und das Protokoll auf IP (UDP oder TCP) die Portnummer. Dadurch können andere Protokolle verwendet werden (z. B. ICMP , die keine Portnummern haben, jedoch Informationen zur IP-Adressierung haben).

23
Mark Brackett

Es handelt sich dabei um Ausdrücke aus zwei verschiedenen Domänen: 'port' ist ein Konzept aus dem TCP/IP-Netzwerk, 'socket' ist eine API (Programmier-) Sache. Ein Socket wird (im Code) hergestellt, indem ein Port und ein Hostname oder ein Netzwerkadapter in einer Datenstruktur zusammengefasst werden, die Sie zum Senden oder Empfangen von Daten verwenden können.

15
Roel

Nachdem ich die hervorragenden Antworten gelesen hatte, stellte ich fest, dass der folgende Punkt für mich als Neuling in der Netzwerkprogrammierung wichtig war:

TCP-IP-Verbindungen sind bidirektionale Pfade, die eine Adresse: Portkombination mit einer anderen Adresse: Portkombination verbinden. Immer wenn Sie eine Verbindung von Ihrem lokalen Computer zu einem Port auf einem Remote-Server (z. B. www.google.com:80) öffnen, ordnen Sie der Verbindung auch eine neue Portnummer auf Ihrem Computer zu, damit der Server senden kann Dinge zurück an Sie (zB 127.0.0.1:65234). Es kann hilfreich sein, mit netstat die Verbindungen Ihres Computers zu überprüfen:

> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  192.168.0.6.49871      17.172.232.57.5223     ESTABLISHED
...
12
Colin

Eine Socket-Adresse ist eine IP-Adresse und Portnummer

123.132.213.231         # IP address
               :1234    # port number
123.132.213.231:1234    # socket address

Eine Verbindung tritt auf, wenn 2 Sockets miteinander verbunden sind.

12
Zaz

Ein Socket ist ein spezieller Typ von Dateihandle, der von einem Prozess verwendet wird, um Netzwerkdienste vom Betriebssystem anzufordern. Eine Socketadresse ist das Dreifache: {Protokoll, lokale Adresse, lokaler Prozess} wobei das Socket Lokaler Prozess wird durch eine Portnummer identifiziert.

Zum Beispiel in der TCP/IP-Suite:

{tcp, 193.44.234.3, 12345}

Eine Konversation ist die Kommunikationsverbindung zwischen zwei Prozessen und stellt somit eine Assoziation zwischen zwei dar. Eine Assoziation ist der 5-Tupel, der die beiden Prozesse, aus denen eine Verbindung besteht, vollständig spezifiziert: {Protokoll, lokale Adresse, lokaler Prozess , ausländische Adresse, fremder Prozess}

Zum Beispiel in der TCP/IP-Suite:

{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}

könnte eine gültige Vereinigung sein.

Eine Halbzuordnung ist entweder: {Protokoll, lokale Adresse, lokaler Prozess}

oder

{Protokoll, Fremdadresse, Fremdprozess}

die jede Hälfte einer Verbindung angeben.

Die Halbassoziation wird auch als Socket oder Transportadresse bezeichnet. Das heißt, ein Socket ist ein Endpunkt für die Kommunikation, der in einem Netzwerk benannt und angesprochen werden kann. Die Socket-Schnittstelle ist eine von mehreren Anwendungsprogrammierschnittstellen (APIs) für die Kommunikationsprotokolle. Als generische Kommunikations-Programmierschnittstelle konzipiert, wurde es zuerst vom 4.2BSD-UNIX-System eingeführt. Obwohl es nicht standardisiert wurde, hat es sich de facto zu einem Industriestandard entwickelt.

10
Krishna

Der Port war der einfachste Teil, es ist nur eine eindeutige Kennung für einen Socket. Ein Socket ist etwas, das Prozesse verwenden können, um Verbindungen herzustellen und miteinander zu kommunizieren. Tall Jeff hatte eine großartige Telefon-Analogie, die nicht perfekt war, also entschied ich mich, das Problem zu beheben:

  • iP und Port ~ Telefonnummer
  • buchse ~ Telefongerät
  • verbindung ~ Anruf
  • verbindungsaufbau ~ Rufnummer anrufen
  • prozesse, Remote-Anwendungen ~ Menschen
  • nachrichten ~ Rede
6
inf3rno

von Oracle Java Tutorial :

Ein Socket ist ein Endpunkt einer bidirektionalen Kommunikationsverbindung zwischen zwei im Netzwerk laufenden Programmen. Ein Socket ist an eine Portnummer gebunden, sodass die TCP - Schicht die Anwendung identifizieren kann, an die Daten gesendet werden sollen.

5
yondoo

Ein Socket ist eine Struktur in Ihrer Software. Es ist mehr oder weniger eine Datei. Es hat Operationen wie Lesen und Schreiben. Es ist keine körperliche Sache. Es ist eine Möglichkeit für Ihre Software, sich auf physische Dinge zu beziehen.

Ein Port ist eine geräteartige Sache. Jeder Host verfügt über ein oder mehrere Netzwerke (diese sind physisch). Ein Host hat in jedem Netzwerk eine Adresse. Jede Adresse kann Tausende von Ports haben. 

Nur ein Socket kann einen Port an einer Adresse verwenden. Der Socket weist den Port ungefähr auf, als würde er ein Gerät für Dateisystem-E/A zuordnen. Sobald der Port zugewiesen ist, kann kein anderer Socket eine Verbindung zu diesem Port herstellen. Der Port wird freigegeben, wenn der Socket geschlossen wird.

Werfen Sie einen Blick auf TCP/IP-Terminologie .

5
S.Lott

Eine Anwendung besteht aus einem Paar von Prozessen, die über das Netzwerk kommunizieren (Client-Server-Paar). Diese Prozesse senden und empfangen Nachrichten in und aus dem Netzwerk über eine Softwareschnittstelle namens socket. In Anbetracht der im Buch "Computer Networking: Top Down Approach" dargestellten Analogie. Es gibt ein Haus, das mit einem anderen Haus kommunizieren möchte. Haus ist hier analog zu einem Prozess und Tür zu einer Steckdose. Beim Versandvorgang wird davon ausgegangen, dass sich auf der anderen Seite der Tür eine Infrastruktur befindet, die die Daten zum Zielort transportiert. Sobald die Nachricht auf der anderen Seite angekommen ist, wird sie durch die Tür des Empfängers (Steckdose) in das Haus geleitet (Prozess). Diese Abbildung aus demselben Buch kann Ihnen dabei helfen:
 enter image description here
Sockets sind Teil der Transportschicht, die Anwendungen logisch kommuniziert. Dies bedeutet, dass aus Sicht der Anwendung beide Hosts direkt miteinander verbunden sind, obwohl sich zahlreiche Router und/oder Switches zwischen ihnen befinden. Ein Socket ist also keine Verbindung selbst, sondern der Endpunkt der Verbindung. Transportschichtprotokolle werden nur auf Hosts und nicht auf Zwischenroutern implementiert.
Ports ermöglichen die interne Adressierung einer Maschine. Der Hauptzweck besteht darin, es mehreren Prozessen zu ermöglichen, Daten über das Netzwerk zu senden und zu empfangen, ohne andere Prozesse (ihre Daten) zu beeinträchtigen. Alle Steckdosen sind mit einer Portnummer versehen. Wenn ein Segment bei einem Host ankommt, prüft die Transportschicht die Zielportnummer des Segments. Dann leitet es das Segment an die entsprechende Buchse weiter. Diese Aufgabe, die Daten in einem Transportschichtsegment an den richtigen Socket zu liefern, wird als Demultiplexing bezeichnet. Die Daten des Segments werden dann an den an den Socket angeschlossenen Prozess weitergeleitet.

5
Ugnes

Port und Socket können mit der Bankfiliale verglichen werden.

Die Hausnummer der "Bank" ist analog zur IP-Adresse . Eine Bank hat verschiedene Bereiche wie:

  1. Sparkonto-Abteilung
  2. Persönliche Darlehensabteilung
  3. Wohnungsbaudarlehen
  4. Abteilung für Beschwerden

1 (Sparkontenabteilung), 2 (Privatkreditabteilung), 3 (Baufinanzierungsabteilung) und 4 (Beschwerdeabteilung) sind Häfen.

Lassen Sie uns nun sagen, dass Sie ein Sparkonto eröffnen, Sie gehen zur Bank (IP-Adresse), dann zur "Sparkonto-Abteilung" (Portnummer 1), dann treffen Sie einen der Mitarbeiter, die unter "Sparkonto-Abteilung" arbeiten ". Nennen wir ihn SAVINGACCOUNT_EMPLOYEE1 für die Kontoeröffnung.

SAVINGACCOUNT_EMPLOYEE1 ist Ihr Socket-Deskriptor. Es kann also __. SAVINGACCOUNT_EMPLOYEE1 bis SAVINGACCOUNT_EMPLOYEEN geben. Dies sind alles Socket-Deskriptoren.

In anderen Abteilungen werden ebenfalls Mitarbeiter beschäftigt sein, die analog zu Socket arbeiten.

3
Shridhar410

Ein Socket ist ein Kommunikationsendpunkt. Ein Socket steht nicht in direktem Zusammenhang mit der TCP/IP-Protokollfamilie. Er kann mit jedem von Ihrem System unterstützten Protokoll verwendet werden. Die C-Socket-API erwartet, dass Sie zunächst ein leeres Socketobjekt vom System abrufen, das Sie entweder an eine lokale Socketadresse binden können (um eingehenden Datenverkehr für verbindungslose Protokolle direkt abzurufen oder eingehende Verbindungsanforderungen für verbindungsorientierte Protokolle zu akzeptieren.) oder dass Sie eine Verbindung zu einer Remote-Socket-Adresse herstellen können (für beide Protokollarten). Sie können sogar beides tun, wenn Sie sowohl die lokale Socket-Adresse, an die ein Socket gebunden ist, als auch die Remote-Socket-Adresse, an die ein Socket angeschlossen ist, steuern möchten. Für verbindungslose Protokolle ist das Anschließen eines Sockets sogar optional. Wenn Sie dies nicht tun, müssen Sie auch die Zieladresse mit jedem Paket, das Sie über den Socket senden möchten, übergeben, da sonst der Socket weiß, wohin er senden soll diese Daten an? Vorteil ist, dass Sie einen einzelnen Socket verwenden können, um Pakete an verschiedene Socketadressen zu senden. Wenn Sie Ihre Steckdose konfiguriert und möglicherweise sogar angeschlossen haben, betrachten Sie sie als bidirektionale Kommunikationsleitung. Sie können es verwenden, um Daten an ein bestimmtes Ziel zu übergeben, und einige Ziele können es verwenden, um Daten an Sie zurückzugeben. Was Sie in einen Socket schreiben, wird gesendet, und das, was Sie empfangen haben, steht zum Lesen zur Verfügung.

Ports dagegen haben nur bestimmte Protokolle des TCP/IP-Protokollstapels. TCP und UDP-Pakete haben Ports. Ein Port ist nur eine einfache Nummer. Die Kombination aus Quellport und Zielport identifiziert einen Kommunikationskanal zwischen zwei Hosts. Z.B. Sie haben möglicherweise einen Server, der sowohl ein einfacher HTTP-Server als auch ein einfacher FTP-Server sein soll. Wenn nun ein Paket für die Adresse dieses Servers ankommt, wie würde es wissen, ob es sich um ein Paket für den HTTP- oder den FTP-Server handelt? Nun, der HTTP-Server wird an Port 80 und der FTP-Server an Port 21 ausgeführt. Wenn das Paket an einem Zielport 80 ankommt, gilt dies für den HTTP-Server und nicht für den FTP-Server. Das Paket hat auch einen Quellport, da ein Server ohne einen solchen Quellport nur eine Verbindung zu einer IP-Adresse gleichzeitig haben kann. Der Quellenport ermöglicht es einem Server, ansonsten identische Verbindungen zu unterscheiden: Alle haben denselben Zielport, z. Port 80, dieselbe Ziel-IP, immer dieselbe Serveradresse und dieselbe Quell-IP, da sie alle vom selben Client stammen. Da sie jedoch unterschiedliche Quellports haben, kann der Server sie voneinander unterscheiden. Wenn der Server Antworten zurücksendet, erfolgt dies an dem Port, von dem die Anforderung stammt. Auf diese Weise kann der Client auch verschiedene Antworten unterscheiden, die er erhält.

3
Mecki

Die relative TCP/IP-Terminologie, von der ich annehme, dass die Frage impliziert. In Laien ausgedrückt:

Ein PORT ist wie die Telefonnummer eines bestimmten Hauses in einer bestimmten Postleitzahl. Die Postleitzahl der Stadt könnte als IP-Adresse der Stadt und aller Häuser in dieser Stadt betrachtet werden.

Ein SOCKET dagegen ist eher wie ein etablierter Telefonanruf zwischen Telefonen von zwei miteinander sprechenden Häusern. Diese Anrufe können zwischen Häusern in derselben Stadt oder zwischen zwei Häusern in verschiedenen Städten eingerichtet werden. Es ist dieser temporäre Weg zwischen den beiden miteinander telefonierenden Telefonen, dem SOCKET.

3
Tall Jeff

Im weitesten Sinne ist .__ Socket - genau das, eine Steckdose, genau wie Ihre Strom-, Kabel- oder Telefonbuchse. Ein Punkt, an dem "benötigtes Material" (Strom, Signal, Informationen) ausgehen und von dort kommen kann. Es verbirgt eine Menge detaillierter Informationen, die für die Verwendung der "erforderlichen Dinge" nicht erforderlich sind. Im Software-Sprachgebrauch bietet es eine generische Methode zum Definieren eines Kommunikationsmechanismus zwischen zwei Entitäten (diese Entitäten können alles sein - zwei Anwendungen, zwei physisch getrennte Geräte, ein Benutzer- und Kernelbereich innerhalb eines Betriebssystems usw.)

Ein Port ist ein Endpunktdiskriminator. Es unterscheidet einen Endpunkt von einem anderen. Auf Netzwerkebene unterscheidet es eine Anwendung von einer anderen, so dass der Netzwerkstapel Informationen an die entsprechende Anwendung weiterleiten kann.

2
Harty

Ein einzelner Port kann eine oder mehrere Steckdosen haben, die mit verschiedenen externen IPs verbunden sind, wie z. B. eine Mehrfachsteckdose.

  TCP    192.168.100.2:9001     155.94.246.179:39255   ESTABLISHED     1312
  TCP    192.168.100.2:9001     171.25.193.9:61832     ESTABLISHED     1312
  TCP    192.168.100.2:9001     178.62.199.226:37912   ESTABLISHED     1312
  TCP    192.168.100.2:9001     188.193.64.150:40900   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.23.194.149:43970   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.49.73.11:38842     ESTABLISHED     1312
2
guest

Socket ist eine Abstraktion, die der Kernel für Benutzeranwendungen für Daten-E/A bereitstellt. Ein Socket-Typ wird definiert durch das Protokoll, dessen Handhabung, eine IPC - Kommunikation usw. Wenn also jemand einen TCP - Socket erstellt, kann er Manipulationen ausführen, z Die Protokollverarbeitung auf niedrigerer Ebene wie TCP - Konvertierungen und das Weiterleiten von Paketen an Netzwerkprotokolle auf niedrigerer Ebene erfolgt durch die spezielle Socketimplementierung im Kernel. Der Vorteil ist, dass der Benutzer sich nicht um die Handhabung protokollspezifischer Nitigrities kümmern muss und Daten wie ein normaler Puffer lesen und in den Socket schreiben muss. Das Gleiche gilt für IPC. Der Benutzer liest und schreibt Daten nur in Socket, und der Kernel verarbeitet alle Details der niedrigeren Ebene basierend auf dem Typ des erstellten Sockets.

Port zusammen mit IP ist wie das Bereitstellen einer Adresse für den Socket. Dies ist zwar nicht erforderlich, hilft jedoch bei der Netzwerkkommunikation. 

2
Navneet Singh

Ein Socket ist ein Daten-E/A-Mechanismus. Ein Port ist ein VertragsKonzept eines Kommunikationsprotokolls . Ein Socket kann ohne Port existieren. Ein Port kann in einem bestimmten Socket existieren (z. B. wenn mehrere Sockets auf demselben Port aktiv sind, was für einige Protokolle zulässig sein kann).

Ein Port wird verwendet, um zu bestimmen, an welchen Socket der Empfänger das Paket mit vielen Protokollen weiterleiten soll. Dies ist jedoch nicht immer erforderlich, und die Auswahl der empfangenden Sockets kann auf andere Weise erfolgen das Netzwerk-Subsystem. z.B. Wenn ein Protokoll keinen Port verwendet, können Pakete an alle empfangenden Sockets oder einen beliebigen Socket gesendet werden.

2
Sander

Auf diese Frage wurden bereits theoretische Antworten gegeben. Ich möchte dieser Frage ein praktisches Beispiel geben, das Ihr Verständnis von Socket und Port verdeutlicht.

Ich habe es gefunden hier

Dieses Beispiel führt Sie durch den Verbindungsaufbau zu einer Website wie Wiley. Sie öffnen Ihren Webbrowser (wie Mozilla Firefox) und geben www.wiley.com in die Adressleiste ein. Ihr Webbrowser verwendet einen DNS-Server (Domain Name System), um den Namen www.wiley.com nachzuschlagen, um seine IP-Adresse zu ermitteln. In diesem Beispiel lautet die Adresse 192.0.2.100.

Firefox stellt eine Verbindung zur Adresse 192.0.2.100 und zum Port .__ her. wo der Application Layer Webserver arbeitet. Firefox weiß es. welcher Hafen zu erwarten ist, weil es ein bekannter Hafen ist. Die gut bekannten Port für einen Webserver ist TCP Port 80.

Der Ziel-Socket, mit dem Firefox eine Verbindung herzustellen versucht, wird als .__ geschrieben. Socket: Port oder in diesem Beispiel 192.0.2.100:80. Dies ist der Server Seite der Verbindung, aber der Server muss wissen, wohin die .__ gesendet werden soll. Webseite, die Sie in Mozilla Firefox anzeigen möchten, damit Sie einen Socket für .__ haben. die Client-Seite der Verbindung auch.

Die clientseitige Verbindung besteht aus Ihrer IP-Adresse, z. B. 192.168.1.25 und eine zufällig gewählte dynamische Portnummer. Der mit Firefox verknüpfte Sockel sieht aus wie 192.168.1.25:49175. Weil web Server arbeiten am TCP - Port 80, beide Sockets sind TCP - Sockets, Wenn Sie jedoch eine Verbindung zu einem Server herstellen, der an einem UDP-Port arbeitet, wird Sowohl die Server- als auch die Client-Sockets wären UDP-Sockets.

2
Omkar Ramtekkar

Ich weiß, dass es viele Erklärungen gibt. Es gibt jedoch einen einfacheren Weg, anhand praktischer Beispiele zu verstehen. Wir können alle eine Verbindung zum HTTP-Port 80 herstellen, aber bedeutet das, dass jeweils nur ein Benutzer eine Verbindung zu diesem Port herstellen kann? Die Antwort lautet offensichtlich "Nein". Mehrere Benutzer für mehrere Zwecke können auf den HTTP-Port 80 zugreifen, erhalten aber trotzdem die richtige Antwort, auf die sie warten, vom Server, oder? Denken Sie jetzt eine Minute darüber nach, wie ?. Ja, Sie sind richtig, ihre IP-Adresse identifiziert eindeutig verschiedene Benutzer, die sich zu unterschiedlichen Zwecken ansprechen. Wenn Sie die vorherigen Antworten gelesen hätten, bevor Sie hier ankamen, würden Sie wissen, dass die IP-Adresse Teil der Informationen ist, aus denen der Socket besteht. Denken Sie darüber nach, ist eine Kommunikation ohne Steckdosen möglich? Die Antwort lautet 'Ja', aber Sie können nicht mehr als eine Anwendung in einem Port ausführen. Wir wissen jedoch, dass wir nicht ein 'Dump'-Switch sind, der nur auf Hardware läuft.

1
Vishal S

Ein Socket ist im Wesentlichen ein Endpunkt für die Netzwerkkommunikation, bestehend aus mindestens einer IP-Adresse und einem Port. In Java/C # ist ein Socket eine übergeordnete Implementierung einer Seite einer bidirektionalen Verbindung.

Auch eine Definition in der Java Dokumentation .

1
Erik van Brakel

Hafen:

Ein Port kann sich auf einen physischen Verbindungspunkt Für Peripheriegeräte wie serielle, parallele und USB-Ports Der Begriff Port bezieht sich auch auf bestimmte Ethernet-Verbindungspunkte, z. B. auf einem Hub, Switch oder Router. 

Steckdose:

Ein Socket stellt eine einzelne Verbindung zwischen zwei Netzwerkanwendungen dar. Diese beiden Anwendungen werden normalerweise auf verschiedenen Computern ausgeführt. Sockets können jedoch auch für die Kommunikation zwischen Prozessen auf einem einzelnen Computer verwendet werden. Anwendungen können mehrere Sockets erstellen, um miteinander zu kommunizieren . Sockets sind bidirektional, was bedeutet, dass beide Seiten der Verbindung sowohl Daten senden als auch empfangen können. 

1
balaweblog

Ein Port bezeichnet einen Kommunikationsendpunkt im TCP und UDP-Transporte für das IP-Netzwerkprotokoll. Ein Socket ist eine Software-Abstraktion für einen Kommunikationsendpunkt, der üblicherweise in Implementierungen dieser Protokolle verwendet wird (Socket-API). Eine alternative Implementierung ist die XTI/TLI-API.

Siehe auch:

Stevens, W. R. 1998, UNIX Network Programming: Netzwerk-APIs: Sockets und XTI; Band 1, Prentice Hall.
Stevens, W. R., 1994, TCP/IP Illustrated, Band 1: The Protocols, Addison-Wesley.

0
VoidPointer

Dies sind grundlegende Vernetzungskonzepte, daher werde ich sie auf einfache Weise erklären:

  • Eine Steckdose ist wie ein Telefon (d. H. Ein End-to-End-Gerät für die Kommunikation)
  • IP ist wie Ihre Telefonnummer (d. H. Adresse Ihrer Steckdose)
  • Port ist wie die Person, mit der Sie sprechen möchten (d. H. Der Dienst, den Sie von dieser Adresse aus bestellen möchten)

Der Socket ist also (Adresse + Port), dh die Person, mit der Sie sprechen möchten (Port), kann unter vielen Telefonnummern (IPs) erreichbar sein.

Dies ist eine präzise, ​​einfache und dennoch ausreichend zu erklärende Erklärung. Ich hoffe, es klärt Sie Zweifel

0
Mosab Shaheen

Socket ist eine SW-Abstraktion des Netzwerkendpunkts, die als Schnittstelle zur Anwendung verwendet wird. In Java wird C # durch ein Objekt dargestellt, in Linux ist es eine Datei. 

Port ist nur eine Eigenschaft eines Sockets, den Sie angegeben haben, wenn Sie eine Kommunikation aufbauen möchten. Um ein Paket von einem Socket zu erhalten, müssen Sie es an einen bestimmten lokalen Port und NIC (mit lokaler IP-Adresse) oder an alle NICs binden (INADDR_ANY wird im Bindungsaufruf angegeben). Um ein Paket zu senden, müssen Sie Port und IP des Remote-Sockets angeben.

0
Dražen G.