Dies war eine Frage, die von einem der Softwareentwickler in meiner Organisation aufgeworfen wurde. Ich interessiere mich für die breiteste Definition.
Dies war eine Frage, die von einem der Softwareentwickler in meiner Organisation aufgeworfen wurde. Ich interessiere mich für die breiteste Definition.
Antworten:
Ein TCP - Socket ist eine Endpunkt - Instanz durch eine IP - Adresse definiert ist, und ein Port im Zusammenhang mit entweder einem bestimmten TCP - Anschluss oder dem Hörzustand.
Ein Port ist ein Virtualisierungs - Identifikator einen Service - Endpunkt (im Unterschied zu einem Dienst definierenden Instanz Endpunkt aka Sitzungskennung).
Ein TCP-Socket ist keine Verbindung , sondern der Endpunkt einer bestimmten Verbindung.
Es können gleichzeitige Verbindungen zu einem Dienstendpunkt bestehen , da eine Verbindung sowohl von ihren lokalen als auch von ihren Remote- Endpunkten identifiziert wird , sodass der Datenverkehr an eine bestimmte Dienstinstanz weitergeleitet werden kann.
Es kann nur einen Listener-Socket für eine bestimmte Kombination aus Adresse und Port geben .
Dies war eine interessante Frage, die mich dazu zwang, einige Dinge, die ich zu wissen glaubte, erneut zu untersuchen. Sie würden denken, ein Name wie "Socket" wäre selbsterklärend: Er wurde offensichtlich gewählt, um Bilder des Endpunkts zu erzeugen, an den Sie ein Netzwerkkabel anschließen, da es starke funktionale Parallelen gibt. Trotzdem trägt das Wort "Socket" im Netzwerk-Sprachgebrauch so viel Gepäck, dass eine sorgfältige Überprüfung erforderlich ist.
Im weitesten Sinne ist ein Port ein Ein- oder Ausstiegspunkt. Obwohl das französische Wort porte nicht in einem Netzwerkkontext verwendet wird, bedeutet es wörtlich Tür oder Gateway , was die Tatsache weiter unterstreicht, dass Häfen Transportendpunkte sind, unabhängig davon, ob Sie Daten oder große Stahlcontainer versenden.
Für die Zwecke dieser Diskussion werde ich die Betrachtung auf den Kontext von TCP-IP-Netzwerken beschränken. Das OSI-Modell ist alles sehr gut, wurde jedoch nie vollständig implementiert, geschweige denn unter verkehrsreichen Bedingungen mit hohem Stress weit verbreitet.
Die Kombination einer IP-Adresse und eines Ports wird streng als Endpunkt bezeichnet und manchmal als Socket bezeichnet. Diese Verwendung stammt aus RFC793, der ursprünglichen TCP-Spezifikation.
Eine TCP- Verbindung wird durch zwei Endpunkte ( Sockets) definiert .
Ein Endpunkt (Buchse) wird durch die Kombination aus einer Netzwerkadresse und eine definierten Port - Kennung. 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, bestehend aus der Client-IP-Adresse, der Client-Portnummer, der Server-IP-Adresse und der Server-Portnummer), 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 von C abgeleiteten Sprachen werden TCP-Verbindungen mithilfe von Methoden für eine Instanz einer Socket-Klasse hergestellt und bearbeitet. Obwohl es üblich ist, auf einer höheren Abstraktionsebene zu arbeiten, normalerweise einer Instanz einer NetworkStream-Klasse, wird dadurch 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 den Methoden des Socket-Objekts erstellt und bearbeitet wird.
Um in C # zunächst eine TCP-Verbindung (zu einem vorhandenen Listener) herzustellen, erstellen Sie einen TcpClient . Wenn Sie dem TcpClient- Konstruktor keinen Endpunkt angeben, 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, die 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 . Sie könnten wahrscheinlich 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 Routing-Tabelle 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 anhand des Zielports feststellen, welcher Prozess ein eingehendes Segment erhält. Außerdem ist der einzige der [verschiedenen] Endpunkte an [einer bestimmten Portnummer], der eingehende Verbindungsanforderungen empfängt, der im Empfangsstatus. (S. 255, TCP-IP Illustrated Volume 1 , W. Richard Stevens)
Wie Sie sehen, ist es nicht nur möglich, sondern sehr wahrscheinlich, dass ein Netzwerkdienst über mehrere Sockets mit derselben Adresse / demselben Port verfügt, sondern nur über einen Listener-Socket für eine bestimmte Kombination aus Adresse und Port. Typische Bibliotheksimplementierungen stellen eine Socket-Klasse dar, deren Instanz zum Erstellen und Verwalten einer Verbindung verwendet wird. Dies ist äußerst bedauerlich, da es Verwirrung stiftet und zu einer weitverbreiteten Verschmelzung 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 bin dann gelaufen netstat -an -p tcp
. 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 unterschiedliche Verbindungen zwischen 192.168.1.3 (meine Workstation) und 54.252.94.236:80 (dem Remote-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 Kombination aus Adresse und Port 207.38.110.62:80
und zwei weitere mit der Kombination aus Adresse und Port 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 Adress / Port-Kombination 54.252.94.236:80
. Wenn Sie nur Adresse und Port haben, verfügen Sie nicht über genügend Informationen, um diese Steckdosen voneinander zu unterscheiden. Es reichen nicht genügend Informationen aus, um einen Socket zu identifizieren .
In Abschnitt 2.7 Absatz 2 von RFC793 heißt es
Eine Verbindung wird durch das Sockelpaar an den Enden vollständig spezifiziert. 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 Zuschauer dieser Frage sind Programmierer. Dies ist ein entscheidender funktionaler Unterschied.
Eine Steckdose besteht aus drei Dingen:
Ein Port ist eine Zahl zwischen 1 und einschließlich 65535, die ein logisches Gate in einem Gerät kennzeichnet. Jede Verbindung zwischen einem Client und einem Server erfordert einen eindeutigen Socket.
Zum Beispiel:
Ein Socket repräsentiert eine einzelne Verbindung zwischen zwei Netzwerkanwendungen. Diese beiden Anwendungen werden nominell auf verschiedenen Computern ausgeführt, aber Sockets können auch für die Interprozesskommunikation auf einem einzelnen Computer verwendet werden. Anwendungen können mehrere Sockets für die Kommunikation miteinander erstellen. Sockets sind bidirektional, was bedeutet, dass jede Seite der Verbindung sowohl Daten senden als auch empfangen kann. Daher kann theoretisch ein Socket auf jeder Ebene des OSI-Modells ab 2 erstellt werden. Programmierer verwenden häufig Sockets in der Netzwerkprogrammierung, wenn auch indirekt. Programmierbibliotheken wie Winsock verbergen viele der einfachen Details der Socket-Programmierung. Steckdosen sind seit den frühen 1980er Jahren weit verbreitet.
Ein Port repräsentiert einen Endpunkt oder "Kanal" für die Netzwerkkommunikation. Mithilfe von 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 in der Socket-Programmierung. Manchmal werden Portnummern jedoch für den Gelegenheitsbenutzer 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 zwischen 0 und 65535 liegen. Die meisten gängigen Netzwerkanwendungen verwenden jedoch Portnummern am unteren Ende des Bereichs (z. B. 80 für HTTP).
Hinweis: Der Begriff Port bezieht sich auch auf verschiedene 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.
Siehe http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm
ref http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm
Mit etwas Analogie
Obwohl oben bereits viele technische Dinge für Sockets angegeben sind ... Ich möchte meine Antwort hinzufügen, nur für den Fall, dass jemand den Unterschied zwischen IP, Port und Sockets immer noch nicht spüren kann
Betrachten Sie einen Server S ,
und sagen, Person X, Y, Z benötigen einen Dienst (sagen wir Chat-Dienst) von diesem Server S.
dann
IP-Adresse sagt -> wer? ist der Chat-Server 'S', den X, Y, Z kontaktieren möchten
Okay, du hast "Wer ist der Server?"
Angenommen, der Server 'S' stellt auch anderen Personen einige andere Dienste zur Verfügung. Sagen wir, 'S' bietet Person A, B, C Speicherdienste an
dann
Port sagt ---> welche? Dienst, den Sie (X, Y, Z) benötigen, dh Chat-Dienst und nicht dieser Speicherdienst
Okay .., Sie lassen den Server wissen, dass "Chat-Service" das ist, was Sie wollen und nicht der Speicher
aber
Sie sind drei Jahre alt und der Server möchte möglicherweise alle drei unterschiedlich identifizieren
da kommt die Steckdose
Jetzt sagt Socket -> welches? besondere Verbindung
das heißt, sagen wir
Steckdose 1 für Person X.
Steckdose 2 für Person Y.
und Buchse 3 für Person Z.
Ich hoffe es hilft jemandem, der noch verwirrt war :)
Erstens denke ich, wir sollten mit einem kleinen Verständnis beginnen, 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 je nach Zweck in mehrere Schichten unterteilt. Es gibt einige wichtige, die wir hier behandeln werden:
TCP enthält unter anderem das Konzept der Ports . Dies sind effektiv unterschiedliche Datenendpunkte auf derselben IP-Adresse, an die ein Internet Socket ( AF_INET
) binden kann.
Zufällig auch UDP und andere Transportschichtprotokolle. Sie müssen technisch gesehen keine Ports aufweisen, aber diese Ports bieten mehreren Anwendungen in den obigen Schichten die Möglichkeit, denselben Computer zum Empfangen (und Herstellen) ausgehender Verbindungen zu verwenden.
Das bringt uns zur Anatomie einer TCP- oder UDP-Verbindung. Jedes verfügt über einen Quellport und eine Quelladresse sowie einen Zielport und eine Zieladresse. Auf diese Weise kann die Zielanwendung in einer bestimmten Sitzung sowohl von der Quelle antworten als auch empfangen.
Daher sind Ports im Wesentlichen eine spezifikationspflichtige Methode, um mehrere gleichzeitige Verbindungen zu ermöglichen, die dieselbe Adresse verwenden.
Jetzt müssen wir uns ansehen, wie Sie aus Sicht der Anwendung nach außen kommunizieren. Um dies zu tun, müssen Sie Ihr Betriebssystem freundlich fragen. Da die meisten Betriebssysteme die Vorgehensweise von Berkeley Sockets unterstützen, können wir Sockets mit Ports aus einer Anwendung wie dieser erstellen:
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! Also geben sockaddr
wir in den Strukturen unseren Port und unsere BAM an! Job erledigt! Na ja, fast, außer:
int fd = socket(AF_UNIX, SOCK_STREAM, 0);
ist auch möglich. Urgh, das ist ein Schraubenschlüssel in Arbeit!
Ok, eigentlich hat es nicht. Alles was wir tun müssen, ist einige geeignete Definitionen zu finden:
/var/run/database.sock
.Voila! Das räumt auf. Also in unserem Schema dann,
Ein Port ist also eine Teilmenge der Anforderungen für die Bildung eines Internet-Sockets. Leider kommt es nur so vor, dass die Bedeutung des Wortes Socket auf verschiedene Ideen angewendet wurde. Ich rate Ihnen daher von Herzen, Ihren nächsten Projekt-Socket zu nennen, um die Verwirrung zu vergrößern;)
Ein Socket = IP-Adresse + ein Port (numerische Adresse)
Zusammen identifizieren sie einen Endpunkt für eine Netzwerkverbindung auf einem Computer. (Habe ich gerade das Netzwerk 101 durchgefallen?)
Im Allgemeinen erhalten Sie viele theoretische Informationen, aber eine der einfachsten Möglichkeiten, diese beiden Konzepte zu unterscheiden, ist folgende:
Um einen Service zu erhalten, benötigen Sie eine Service-Nummer. Diese Dienstnummer wird als Port bezeichnet. So einfach ist das.
Beispielsweise wird HTTP als Dienst auf Port 80 ausgeführt.
Jetzt können viele Benutzer den Dienst anfordern, und eine Verbindung vom Client-Server wurde hergestellt. Es wird viele Verbindungen geben. Jede Verbindung repräsentiert einen Client. Um jede Verbindung aufrechtzuerhalten, erstellt der Server pro Verbindung einen Socket, um seinen Client aufrechtzuerhalten.
Es scheint viele Antworten zu geben, die den Socket mit der Verbindung zwischen 2 PCs gleichsetzen. Was ich für absolut falsch halte. Ein Socket war schon immer der Endpunkt auf einem PC, der möglicherweise verbunden ist oder nicht - sicherlich haben wir alle irgendwann 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 unterscheidet sich die Implementierung der Eindeutigkeit, die sowohl von TCP / IP als auch von UDP / IP verwendet wird * ( IP- Adresse: Port), von z. B. IPX (Netzwerk, Knoten und ... ähm, Socket - aber anders Socket als unter dem allgemeinen Begriff "Socket" zu verstehen. IPX-Socket-Nummern entsprechen IP-Ports. Sie alle bieten jedoch einen eindeutigen adressierbaren Endpunkt.
Da IP zum dominierenden Protokoll geworden ist, ist ein Port (in Bezug auf das Netzwerk) entweder mit einer UDP- oder einer TCP-Portnummer synonym geworden - was ein Teil der Socket-Adresse ist.
UDP ist verbindungslos - das heißt, es wird nie eine virtuelle Verbindung zwischen den beiden Endpunkten erstellt. Wir bezeichnen UDP-Sockets jedoch weiterhin als Endpunkt. Die API-Funktionen machen deutlich, dass es sich bei beiden nur um unterschiedliche Socket-Typen handelt - SOCK_DGRAM
UDP (nur Senden einer Nachricht) und SOCK_STREAM
TCP (Erstellen einer virtuellen Verbindung).
Technisch gesehen enthält der IP-Header die IP-Adresse und das Protokoll über IP (UDP oder TCP) die Portnummer. Dies ermöglicht andere Protokolle (z. B. ICMP , die keine Portnummern haben, aber IP-Adressinformationen haben).
Kurze kurze Antwort.
Ein Port kann als interne Adresse innerhalb eines Hosts beschrieben werden, die ein Programm oder einen Prozess identifiziert.
Ein Socket kann als Programmierschnittstelle beschrieben werden, über die ein Programm mit anderen Programmen oder Prozessen, im Internet oder lokal kommunizieren kann.
Es handelt sich um Begriffe aus zwei verschiedenen Domänen: 'Port' ist ein Konzept aus dem TCP / IP-Netzwerk, 'Socket' ist eine API-Sache (Programmierung). Ein 'Socket' wird (im Code) erstellt, indem ein Port und ein Hostname oder ein Netzwerkadapter zu einer Datenstruktur kombiniert werden, mit der Sie Daten senden oder empfangen können.
Dies sind grundlegende Netzwerkkonzepte, daher werde ich sie auf einfache und dennoch umfassende Weise erläutern, um sie im Detail zu verstehen.
Ein Socket im Netzwerk ist also ein virtuelles Kommunikationsgerät, das an ein Paar (IP, Port) = (Adresse, Dienst) gebunden ist.
Hinweis:
Hoffe, es klärt Sie Zweifel
Nachdem ich die hervorragenden Antworten gelesen hatte, stellte ich fest, dass der folgende Punkt für mich, einen Neuling in der Netzwerkprogrammierung, hervorgehoben werden musste:
TCP-IP-Verbindungen sind bidirektionale Pfade, die eine Adresse: Port-Kombination mit einer anderen Adresse: Port-Kombination verbinden. Wenn Sie daher eine Verbindung von Ihrem lokalen Computer zu einem Port auf einem Remote-Server herstellen (z. B. www.google.com:80), ordnen Sie der Verbindung auch eine neue Portnummer auf Ihrem Computer zu, damit der Server senden kann Dinge zurück zu Ihnen (zB 127.0.0.1:65234). Es kann hilfreich sein, netstat zu verwenden, um 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
...
123.132.213.231 # IP address
:1234 # port number
123.132.213.231:1234 # socket address
Eine Verbindung entsteht, wenn 2 Sockets miteinander verbunden sind.
Ein Socket ist eine spezielle Art von Dateihandle, die von einem Prozess verwendet wird, um Netzwerkdienste vom Betriebssystem anzufordern. Eine Socket-Adresse ist das Tripel: {Protokoll, lokale Adresse, lokaler Prozess}, wobei der lokale Prozess durch eine Portnummer identifiziert wird.
In der TCP / IP-Suite zum Beispiel:
{tcp, 193.44.234.3, 12345}
Ein Gespräch ist die Kommunikationsverbindung zwischen zwei Prozessen und zeigt somit eine Assoziation zwischen zwei. Eine Zuordnung ist das 5-Tupel, das die beiden Prozesse, aus denen eine Verbindung besteht, vollständig spezifiziert: {Protokoll, lokale Adresse, lokaler Prozess, Fremdadresse, Fremdprozess}
In der TCP / IP-Suite zum Beispiel:
{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}
könnte eine gültige Assoziation sein.
Eine halbe Assoziation ist entweder: {Protokoll, lokale Adresse, lokaler Prozess}
oder
{Protokoll, Fremdadresse, Fremdprozess}
die jede Hälfte einer Verbindung angeben.
Die Halbzuordnung 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 adressiert werden kann. Die Socket-Schnittstelle ist eine von mehreren Anwendungsprogrammierschnittstellen (APIs) zu den Kommunikationsprotokollen. Es wurde als generische Kommunikationsprogrammierschnittstelle entwickelt und erstmals vom 4.2BSD UNIX-System eingeführt. Obwohl es nicht standardisiert wurde, ist es de facto zu einem Industriestandard geworden.
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 zuerst ein leeres Socket-Objekt vom System erhalten, das Sie dann entweder an eine lokale Socket-Adresse 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 Arten von Protokollen). Sie können sogar beides tun, wenn Sie beide steuern möchten, die lokale Socket-Adresse, an die ein Socket gebunden ist, und die Remote-Socket-Adresse, mit der ein Socket verbunden ist. Bei verbindungslosen Protokollen ist das Anschließen eines Sockets sogar optional. Wenn Sie dies jedoch nicht tun, müssen Sie Müssen Sie auch die Zieladresse mit jedem Paket übergeben, das Sie über den Socket senden möchten, wie sonst würde der Socket wissen, wohin diese Daten gesendet werden sollen? Vorteil ist, dass Sie einen einzelnen Socket verwenden können, um Pakete an verschiedene Socket-Adressen 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 Ziel zu übergeben, und ein Ziel kann es verwenden, um Daten an Sie zurückzugeben. Was Sie in einen Socket schreiben, wird gesendet und was empfangen wurde, steht zum Lesen zur Verfügung. Sie können es verwenden, um Daten an ein Ziel zu übergeben, und ein Ziel kann es verwenden, um Daten an Sie zurückzugeben. Was Sie in einen Socket schreiben, wird gesendet und was empfangen wurde, steht zum Lesen zur Verfügung. Sie können es verwenden, um Daten an ein Ziel zu übergeben, und ein Ziel kann es verwenden, um Daten an Sie zurückzugeben. Was Sie in einen Socket schreiben, wird gesendet und was empfangen wurde, steht zum Lesen zur Verfügung.
Ports hingegen 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. Beispielsweise haben Sie möglicherweise einen Server, der sowohl ein einfacher HTTP-Server als auch ein einfacher FTP-Server sein soll. Wenn jetzt ein Paket für die Adresse dieses Servers eintrifft, wie würde es wissen, ob dies ein Paket für den HTTP- oder den FTP-Server ist? Nun, es wird wissen, dass der HTTP-Server auf Port 80 und der FTP-Server auf Port 21 ausgeführt wird. Wenn das Paket also mit einem Zielport 80 ankommt, gilt dies für den HTTP-Server und nicht für den FTP-Server. Außerdem hat das Paket einen Quellport, da ein Server ohne einen solchen Quellport jeweils nur eine Verbindung zu einer IP-Adresse haben könnte. Der Quellport ermöglicht es einem Server, ansonsten identische Verbindungen zu unterscheiden: Sie haben alle denselben Zielport, z. B. Port 80, dieselbe Ziel-IP (die IP des Servers) und dieselbe Quell-IP, von der sie alle stammen der gleiche Client, aber da sie unterschiedliche Quellports haben, kann der Server sie voneinander unterscheiden. Wenn der Server Antworten zurücksendet, wird dies an den Port gesendet, von dem die Anforderung stammt. Auf diese Weise kann der Client auch verschiedene Antworten unterscheiden, die er vom selben Server empfängt.
Der Port war der einfachste Teil, er ist nur eine eindeutige Kennung für einen Socket. Ein Socket ist etwas, mit dem Prozesse Verbindungen herstellen und miteinander kommunizieren können. Der große Jeff hatte eine großartige Telefonanalogie, die nicht perfekt war, also beschloss ich, sie zu beheben:
netstat
einige Zeit ein Display an. Alle von einem Listening-Socket akzeptierten Sockets teilen sich denselben Port. Ergo ist ein Port keine eindeutige Kennung für einen Socket.
Eine Anwendung besteht aus zwei Prozessen, die über das Netzwerk kommunizieren (Client-Server-Paar). Diese Prozesse senden und empfangen Nachrichten über eine als Socket bezeichnete Softwareschnittstelle in und aus dem Netzwerk . In Anbetracht der Analogie, die im Buch "Computer Networking: Top Down Approach" vorgestellt wird. Es gibt ein Haus, das mit anderen Häusern kommunizieren möchte. Hier ist Haus analog zu einem Prozess und Tür zu einer Steckdose. Beim Senden wird davon ausgegangen, dass sich auf der anderen Seite der Tür eine Infrastruktur befindet, die die Daten zum Ziel transportiert. Sobald die Nachricht auf der anderen Seite angekommen ist, gelangt sie durch die Empfängertür (Steckdose) ins Haus (Prozess). Diese Illustration aus demselben Buch kann Ihnen helfen:
Sockets sind Teil der Transportschicht, die Anwendungen logisch kommuniziert. Dies bedeutet, dass aus Sicht der Anwendung beide Hosts direkt miteinander verbunden sind, obwohl sich zwischen ihnen zahlreiche Router und / oder Switches befinden. Ein Socket ist also keine Verbindung selbst, sondern der Endpunkt der Verbindung. Transportschichtprotokolle werden nur auf Hosts und nicht auf Zwischenroutern implementiert.
HäfenBereitstellung von Mitteln zur internen Adressierung einer Maschine. Der Hauptzweck besteht darin, mehreren Prozessen das Senden und Empfangen von Daten über das Netzwerk zu ermöglichen, ohne andere Prozesse (deren Daten) zu stören. Alle Sockets sind mit einer Portnummer versehen. Wenn ein Segment bei einem Host ankommt, überprüft die Transportschicht die Zielportnummer des Segments. Anschließend wird das Segment an den entsprechenden Socket weitergeleitet. Diese Aufgabe, die Daten in einem Transportschichtsegment an den richtigen Socket zu liefern, wird als De-Multiplexing bezeichnet . Die Daten des Segments werden dann an den an den Socket angeschlossenen Prozess weitergeleitet.
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 physische Sache; Auf diese Weise kann Ihre Software auf physische Dinge verweisen.
Ein Port ist eine geräteähnliche 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.
Möglicherweise verwendet nur ein Socket einen Port an einer Adresse. Der Socket weist den Port ungefähr so zu wie ein Gerät für Dateisystem-E / A. Sobald der Port zugewiesen ist, kann kein anderer Socket eine Verbindung zu diesem Port herstellen. Der Port wird freigegeben, wenn der Socket geschlossen wird.
Schauen Sie sich die TCP / IP-Terminologie an .
aus dem Oracle Java Tutorial :
Ein Socket ist ein Endpunkt einer bidirektionalen Kommunikationsverbindung zwischen zwei im Netzwerk ausgeführten Programmen. Ein Socket ist an eine Portnummer gebunden, damit die TCP-Schicht die Anwendung identifizieren kann, an die Daten gesendet werden sollen.
Port und Socket können mit der Bankfiliale verglichen werden.
Die Gebäudenummer der "Bank" entspricht der IP-Adresse. Eine Bank hat verschiedene Bereiche wie:
1 (Sparkontoabteilung), 2 (Privatkreditabteilung), 3 (Wohnungsbaudarlehensabteilung) und 4 (Beschwerdeabteilung) sind Häfen.
Nehmen wir nun an, Sie eröffnen ein Sparkonto, gehen zur Bank (IP-Adresse), gehen zur Abteilung "Sparkonto" (Portnummer 1) und treffen einen der Mitarbeiter der Abteilung "Sparkonto" ". Nennen wir ihn SAVINGACCOUNT_EMPLOYEE1, um ein Konto zu eröffnen.
SAVINGACCOUNT_EMPLOYEE1 ist Ihr Socket-Deskriptor, daher kann SAVINGACCOUNT_EMPLOYEE1 zu SAVINGACCOUNT_EMPLOYEEN gehören. Dies sind alles Socket-Deskriptoren.
Ebenso werden in anderen Abteilungen Angestellte beschäftigt sein, und sie sind analog zu Socket.
Ein Socket ist ein Daten-E / A-Mechanismus. Ein Port ist ein vertragliches Konzept eines Kommunikationsprotokolls . Ein Socket kann ohne Port existieren. Ein Port kann ohne einen bestimmten Socket existieren (z. B. wenn mehrere Sockets am selben 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 des empfangenden Sockets kann auf andere Weise erfolgen. Ein Port ist vollständig ein Tool, das vom Protokollhandler verwendet wird das Netzwerk-Subsystem. Wenn ein Protokoll beispielsweise keinen Port verwendet, können Pakete an alle empfangenden Sockets oder an jeden Socket gesendet werden.
Die Frage impliziert die relative TCP / IP-Terminologie, von der ich annehme, dass sie impliziert ist. In Laienbegriffen:
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 angesehen werden.
Eine Steckdose hingegen ähnelt eher einem etablierten Telefonanruf zwischen Telefonen zweier Häuser, die miteinander sprechen. Diese Anrufe können zwischen Häusern in derselben Stadt oder zwischen zwei Häusern in verschiedenen Städten hergestellt werden. Es ist dieser vorübergehend eingerichtete Pfad zwischen den beiden Telefonen, die miteinander sprechen, der die Buchse ist.
Im weitesten Sinne ist Socket genau das, eine Steckdose, genau wie Ihre Elektro-, Kabel- oder Telefonsteckdose. Ein Punkt, an dem "erforderliche Dinge" (Leistung, Signal, Information) ausgehen und eintreten können. Es verbirgt viele detaillierte Dinge, die für die Verwendung der "erforderlichen Dinge" nicht erforderlich sind. Im Software-Sprachgebrauch bietet es eine allgemeine Möglichkeit, einen Kommunikationsmechanismus zwischen zwei Entitäten zu definieren (diese Entitäten können beliebig sein - zwei Anwendungen, zwei physisch getrennte Geräte, Benutzer- und Kernel-Speicherplatz innerhalb eines Betriebssystems usw.).
Ein Port ist ein Endpunktdiskriminator. Es unterscheidet einen Endpunkt von einem anderen. Auf Netzwerkebene wird eine Anwendung von einer anderen unterschieden, sodass der Netzwerkstapel Informationen an die entsprechende Anwendung weitergeben kann.
Auf diese Frage wurden bereits theoretische Antworten gegeben. Ich möchte dieser Frage ein praktisches Beispiel geben, das Ihr Verständnis für Socket und Port verdeutlicht.
Ich habe es hier gefunden
In diesem Beispiel werden Sie durch den Prozess der Verbindung zu einer Website wie Wiley geführt. Sie würden Ihren Webbrowser (wie Mozilla Firefox) öffnen und www.wiley.com in die Adressleiste eingeben. Ihr Webbrowser verwendet einen DNS-Server (Domain Name System), um den Namen www.wiley.com nachzuschlagen und die 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 zu dem Port her, an dem der Webserver der Anwendungsschicht ausgeführt wird. Firefox weiß, welcher Port zu erwarten ist, da es sich um einen bekannten Port handelt. Der bekannte Port für einen Webserver ist der TCP-Port 80.
Der Ziel-Socket, den Firefox zu verbinden versucht, wird als Socket: Port oder in diesem Beispiel als 192.0.2.100:80 geschrieben. Dies ist die Serverseite der Verbindung, aber der Server muss wissen, wohin die Webseite gesendet werden soll, die Sie in Mozilla Firefox anzeigen möchten, damit Sie auch einen Socket für die Clientseite der Verbindung haben.
Die clientseitige Verbindung besteht aus Ihrer IP-Adresse, z. B. 192.168.1.25, und einer zufällig ausgewählten dynamischen Portnummer. Der mit Firefox verknüpfte Socket sieht wie folgt aus: 192.168.1.25:49175. Da Webserver an TCP-Port 80 ausgeführt werden, sind beide Sockets TCP-Sockets. Wenn Sie eine Verbindung zu einem Server herstellen, der an einem UDP-Port ausgeführt wird, sind sowohl Server- als auch Client-Sockets UDP-Sockets.
Socket ist eine Abstraktion, die der Kernel Benutzeranwendungen für Daten-E / A bereitstellt. Ein Socket-Typ wird durch das Protokoll, seine Behandlung, eine IPC-Kommunikation usw. definiert. Wenn also jemand einen TCP-Socket erstellt, kann er Manipulationen wie das Lesen von Daten zum Socket und das Schreiben von Daten mit einfachen Methoden und die Protokollbehandlung auf niedrigerer Ebene wie TCP-Konvertierungen und durchführen Das Weiterleiten von Paketen an Netzwerkprotokolle niedrigerer Ebene erfolgt durch die bestimmte Socket-Implementierung im Kernel. Der Vorteil ist, dass sich der Benutzer nicht um protokollspezifische Nitigritien kümmern muss und Daten wie ein normaler Puffer lesen und in den Socket schreiben sollte. Gleiches gilt für IPC. Der Benutzer liest und schreibt nur Daten in den Socket, und der Kernel verarbeitet alle Details der unteren Ebene basierend auf dem Typ des erstellten Sockets.
Port zusammen mit IP ist wie das Bereitstellen einer Adresse für den Socket, obwohl dies nicht erforderlich ist, aber bei der Netzwerkkommunikation hilfreich ist.
Ein einzelner Port kann eine oder mehrere Buchsen 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
Socket ist die SW-Abstraktion des Netzwerkendpunkts, die als Schnittstelle zur Anwendung verwendet wird. In Java wird C # durch ein Objekt dargestellt, in Linux Unix ist es eine Datei.
Port ist nur eine Eigenschaft eines Sockets, den Sie angegeben haben, wenn Sie eine Kommunikation herstellen möchten. Um ein Paket von einem Socket zu empfangen, müssen Sie es an einen bestimmten lokalen Port und eine Netzwerkkarte (mit lokaler IP-Adresse) oder an alle Netzwerkkarten binden (INADDR_ANY wird im Bindungsaufruf angegeben). Um ein Paket zu senden, müssen Sie den Port und die IP des Remote-Sockets angeben.
Ein Socket ist im Grunde ein Endpunkt für die Netzwerkkommunikation, der aus mindestens einer IP-Adresse und einem Port besteht. In Java / C # ist ein Socket eine übergeordnete Implementierung einer Seite einer bidirektionalen Verbindung.
Auch eine Definition in der Java-Dokumentation .
Hafen:
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.
Steckdose:
Ein Socket repräsentiert eine einzelne Verbindung zwischen zwei Netzwerkanwendungen. Diese beiden Anwendungen werden nominell auf verschiedenen Computern ausgeführt, aber Sockets können auch für die Interprozesskommunikation auf einem einzelnen Computer verwendet werden. Anwendungen können mehrere Sockets für die Kommunikation miteinander erstellen. Sockets sind bidirektional, was bedeutet, dass jede Seite der Verbindung sowohl Daten senden als auch empfangen kann.
Ein Port bezeichnet einen Kommunikationsendpunkt in den TCP- und UDP-Transporten für das IP-Netzwerkprotokoll. Ein Socket ist eine Software-Abstraktion für einen Kommunikationsendpunkt, der üblicherweise bei der Implementierung dieser Protokolle verwendet wird (Socket-API). Eine alternative Implementierung ist die XTI / TLI-API.
Siehe auch:
Stevens, WR 1998, UNIX-Netzwerkprogrammierung: Netzwerk-APIs: Sockets und XTI; Band 1, Prentice Hall.
Stevens, WR, 1994, TCP / IP Illustrated, Band 1: The Protocols, Addison-Wesley.