Unterschied zwischen Netzwerkprogrammierung und Socket-Programmierung

16

Gibt es größere Unterschiede zwischen "Socket-Programmierung" und "Netzwerk-Programmierung"?

Gibt es Themen, die sich mit "Netzwerkprogrammierung" befassen, aber nicht mit "Socket-Programmierung"?

Wassermann_Mädchen
quelle

Antworten:

26

Socket-Programmierung (zumindest wie der Begriff normalerweise verwendet wird) ist die Programmierung auf eine bestimmte Netzwerk-API. Sockets unterstützen IP-basierte Protokolle (hauptsächlich TCP und UDP) 1 .

Die Netzwerkprogrammierung kann über verschiedene andere APIs erfolgen. Windows verfügt über eine Reihe von protokollunabhängigen APIs, z. B. die Funktionen WNet * und Net *. Ältere Versionen von Windows verwendeten ebenfalls NetBIOS / NetBEUI (NetBIOS End User Interface) und die meisten unterstützten (und wahrscheinlich immer noch) IPX / SPX (ein altes Netware-Protokoll).

Die meisten aktuellen Netzwerkprogramme werden jedoch entweder direkt über Sockets oder auf verschiedenen Ebenen über Sockets ausgeführt (z. B. wird viel über HTTP ausgeführt, was normalerweise mit TCP über Sockets implementiert wird). TCP / IP und UDP / IP (sowie eine Reihe anderer IP-basierter Protokolle) werden hauptsächlich über die Sockets-Schnittstelle ausgeführt. Theoretisch könnten andere Programmierschnittstellen verwendet werden, aber in der Praxis scheinen die Steckdosen ausreichend zu sein, so dass kein großes Interesse besteht, sie zu ersetzen. Ich sollte jedoch erwähnen, dass Windows-Sockets (WinSock) einige Erweiterungen haben, die mehr oder weniger einzigartig für Windows sind. Ich nehme an, es ist fraglich, ob Code, der diese Erweiterungen verwendet, tatsächlich als "Sockets" -Code qualifiziert ist oder nicht - es handelt sich um Erweiterungen, die auf denselben Konzepten basieren, aber Code, der sie verwendet, ist nicht ' t normalerweise auf andere Systeme übertragbar. Ich denke, ob es sich um "Sockets" handelt oder nicht, hängt in erster Linie davon ab, ob Sie Sockets eher als Konzept oder als einen ganz bestimmten Satz von Funktionen, Parametern usw. ansehen.

Bearbeiten (als Antwort auf den Kommentar):

Es ist ein bisschen schwer zu sagen, ob "Sockets kennen" bedeutet, "alles" über TCP und UDP zu wissen. Betrachten wir nur ein kleines Stück: Ein typisches Demo-Programm für Sockets ist das Erstellen eines Client / Server-Chat-Programms. Der Client stellt eine Verbindung zum Server her, und wenn der Benutzer auf einem Client etwas eingibt, wird er an die anderen Clients weitergeleitet, die mit demselben Server verbunden sind. Jeder Client zeigt an, was vom Server eingeht, und lässt den Benutzer Nachrichten eingeben, die an die anderen Clients gesendet werden sollen.

Bedenken Sie gleichzeitig, was ein "echtes" Chat-Programm wie AIM, Windows Messenger, iChat usw. beinhaltet. Ein typisches Programm, das nicht nur Text, sondern auch Sprache, Video, Dateiübertragungen, Gruppen, Listen usw. verarbeitet, umfasst wahrscheinlich ein Dutzend verschiedener Standards, darunter SIP, STUN, TURN, RTCP, RTP, XAMPP, mDNS usw .

IMO, jemand, der "Sockets kennt", sollte in der Lage sein, das erste Chat-Programm (Demo-Level, nur Text) in wenigen Stunden zu programmieren, ohne viel Zeit in Hilfedateien (und dergleichen) zu investieren, die Nachforschungen anstellen. Ich würde nicht erwarten, dass sie überhaupt wissen, welche RFCs / Standards für solche Dinge gelten, es sei denn, sie haben zumindest einige Vorkenntnisse in der Arbeit an einem "echten" Chat-Programm.

Das Gleiche gilt im Allgemeinen: Angesichts der Anzahl der RFCs (und verschiedener anderer Standards), die auf all die verschiedenen Aktionen angewendet werden, die Menschen über Netzwerke ausführen, ist es unvernünftig zu erwarten, dass sich jemand alle auswendig gelernt hat. Wenn Sie jedoch eine Reihe von Anforderungen für etwas haben, von dem Sie erwarten, dass die Benutzer in einem "lokalen" Programm problemlos damit umgehen können, sollte das Hinzufügen von "über das Netzwerk" als Anforderung normalerweise keine enormen Schwierigkeiten mit sich bringen (obwohl der Umgang mit Problemen wie Netzwerklatenz möglicherweise).


1 Sockets unter Unix unterstützen auch Sockets der Unix-Familie, diese werden jedoch (zumindest normalerweise) für IPCs innerhalb der Maschine verwendet, nicht für Netzwerke. Es gibt auch buchstäblich Dutzende anderer Protokolle für Dinge wie Router-Management, die Sockets nicht wirklich unterstützen (über Raw-Sockets hinaus, mit denen Sie beliebige Pakete erstellen und senden können).

Jerry Sarg
quelle
Danke, das ist jetzt eine Antwort, die es wert ist, bewertet zu werden. :-) Also kann ich feststellen , dass , wenn ich mich Programmierung wissen Buchse sagen, es bedeutet „tat alles “ mit TCP / UDP, nur? Ich muss alles über TCP / UDP wissen.
Aquarius_Girl
@AnishaKaul: Siehe bearbeitete Antwort.
Jerry Coffin
@ JerryCoffin: Möglicherweise erwähnenswert, dass Sockets auch eine Teilmenge von IP-basierten Protokollen sind. Es gibt Dinge wie ICMP / IP, die auch nicht von Sockets abgedeckt werden.
Matthew Scharley
6

"Netzwerkprogrammierung" erfordert einige Netzwerktechnologien - beispielsweise RPC. Ein Beispiel für diese Technologie sind Sockets (wahrscheinlich BSD-Sockets). "Socket-Programmierung" ist also eine Teilmenge der "Netzwerkprogrammierung".

scharfer Zahn
quelle
@Anisha Kaul: Okay, RPC-Programmierung ist Netzwerkprogrammierung (eine Teilmenge davon) und ein wichtiges RPC-Konzept ist eine sogenannte String-Bindung - siehe msdn.microsoft.com/en-us/library/aa378691(v=VS.85). .aspx Das brauchen Sie nicht, wenn Sie BSD-Sockets programmieren.
Sharptooth
@Anisha Kaul: Nein, "alle Möglichkeiten" ist eine riesige Liste. Ich würde einige häufig verwendete nennen - Java RMI und .NET Remoting sind gute Beispiele.
Scharfzahn
-3

Ja, es stimmt, dass die Netzwerkprogrammierung Netzwerktechnologie erfordert, während die Socket-Programmierung eine Teilmenge der Netzwerkprogrammierung ist. Die meisten aktuellen Netzwerkprogramme werden entweder direkt über Sockets oder über verschiedene andere Ebenen über Sockets ausgeführt.

Ajay Prasad
quelle
3
Dies scheint nichts Wesentliches über das hinzuzufügen, was bereits in früheren Antworten gepostet wurde
Mücke