Krautkanal.com

Veröffentlicht am 2017-01-20 09:56:00 in /prog/

/prog/ 9806: Netzwerkprotokolle

leonfedotov Avatar
leonfedotov:#9806

Bernd arbeitet als Werkstudent in der IT.
Da Bernd ein wertvolles Schaf ist, sind die einzigen, unausgesprochenen Erwartungen der Vorgesetzten und Kollegen eben, dass er nicht im Weg steht.
Das hat er allerdings erst vor 2 Monate so wirklich wahrgenommen.
Vorgesetzter sagt immer: Netzwerkprotokolle sind foll wichtig und so.
Seitdem sitzt Bernd auf der Weide vor dem Rechner und liest zu allem ein, was mit dem ISO/OSI-Modell zu tun hat.
Nun hat er sich viel theoretisches Wissen angeeignet, weiß aber nicht wie er das praktisch in der Entwicklung anwenden kann. Mag Bernd Bernd auf die Sprünge helfen?

shesgared Avatar
shesgared:#9807

"Netzwerkprotokolle" ist ein sehr breit gefächerter Begriff, da musst du schon deutlich genauer werden. Feldbus, Echtzeitprotokolle, usw. oder nur normaler TCP Kram? Was willst du damit tun? In welchem Umfeld? Mit welchen Anforderungen?

lanceguyatt Avatar
lanceguyatt:#9808

Zum Beispiel HTTP fällt auch unter die Netzwerkprotokolle, ist aber auf einer anderen Schicht angesiedelt als TCP.

Auf welcher Schicht sollst du entwickeln? In der Schicht, in der sich HTTP befindet sind unter Linux Sockets ein Stichwort. Die kann man - glaube ich - auch unter Windows nutzen, ich habe noch nicht für Windows mit Netzwerkprogrammierung zu tun gehabt.

int sockfd = socket(AF_INET, SOCK_STREAM, 0); hat schon mal die ersten Stichworte drin. Bei Interesse kann ich ein Beispiel abtippen. Hätte ich sogar Spaß dran! :3

m4rio Avatar
m4rio:#9809

>>9808
>In der Schicht, in der sich HTTP befindet sind unter Linux Sockets ein Stichwort. Die kann man - glaube ich - auch unter Windows nutzen, ich habe noch nicht für Windows mit Netzwerkprogrammierung zu tun gehabt.

Man muss hier zwischen zwei Konzepten unterscheiden:
- Netzwerksockets gibt es überall, bei fast allen Geräten und Betriebsystemen die Internet und Netzwerkfähig sind. Allerdings sind Sockets glaub ich an Portnummern gebunden, daher vermutlich auch nur für Protokolle ohne Port - z.B. Ping - einsetzbar.
- UNIX/POSIX-Sockets. Eine IPC-Methode in POSIX-kompatiblen Betriebsystemen.

ryhanhassan Avatar
ryhanhassan:#9810

>>9809
>daher vermutlich auch nur für
*auch nicht für

sawalazar Avatar
sawalazar:#9812

Also normaler HTTP und TCP wäre für Bernd schon ein toller Anfang. Sockets hat er damals kurz in Java angeschnitten, aber da er weder Netzwerkprotokolle kannte noch Server-Client-Architektur, hat er dabei nicht mal verstanden was er eigentlich verstehen soll. Wenigstens weiß Bernd jetzt, dass er sich nochmal genauer auseinander setzen muss.

>Auf welcher Schicht sollst du entwickeln?
Er soll gar nichts entwickeln. Das ist unter anderem das Problem. Wenn es nach seine Kollegen geht, könnte er auch den ganzen Tag Däumchen drehen. Daher fragt er Bernd was er auf der Weide während der Arbeitszeit lernen könnte, um nicht später bei einem Vorstellungsgespräch zu erklären, dass er ein Jahr oder länger was mit Netzwerk gemacht hat und nicht sagen kann was man mit TCP etc anstellt.

Versteht Bernd es richtig, dass Sockets nur auf der Anwendungsschicht sind?
Gibt es Stichwörter neben Sockets für die anderen Schichten? Braucht man als Entwickler überhaupt noch andere Schichten außer der Anwendungsschicht?

franciscoamk Avatar
franciscoamk:#9815

>>9812
>Also normaler HTTP und TCP wäre für Bernd schon ein toller Anfang.
Um per HTTP runterzuladen gibt es zum Beispiel "cURL", dessen Bibliothek, schreibt HTTP-Anfragen, verschickt sie und wertet die Ergebnisse aus. Also runter- und hochladen.

>Versteht Bernd es richtig, dass Sockets nur auf der Anwendungsschicht sind?
Normalerweise, ja. Ich habe dunkel in Erinnerung, dass es "Raw-Sockets" gibt, die nur das zur Verfügung stellen, was IP so von sich aus hergibt, also die Vermittlungsschicht.

>Braucht man als Entwickler überhaupt noch andere Schichten außer der Anwendungsschicht?
Normalerweise nicht.

SOCK_DGRAM anstatt SOCK_STREAM kümmert sich um UDP, wollte ich noch erwähnen. sockaddr_in oder sockaddr_in6 muss dafür verwendet werden. Das sind structs, die für den Verbindungsaufbau verwendet werden.

Ich mach mich nacher mal ans abtippen von einem kleinen Beispiel. Wenn die Muße reicht, ist das heute irgendwann hier drin. Wenn nicht, kommt's nicht hier hin.

_kkga Avatar
_kkga:#9816

>>9815
http://www.linuxhowtos.org/C_C++/socket.htm hat ein Beispiel da, also erspar ich mir das abtippen.

freddetastic Avatar
freddetastic:#9817

>Seitdem sitzt Bernd auf der Weide vor dem Rechner und liest zu allem ein, was mit dem ISO/OSI-Modell zu tun hat.
>Nun hat er sich viel theoretisches Wissen angeeignet, weiß aber nicht wie er das praktisch in der Entwicklung anwenden kann.
Ach Bernd, warum seid ihr Werksstudenten immer so unfähig m(

Also erstens wird dir Theoriewissen zum OSI-Modell im Bereich der Anwendungsentwicklung recht wenig helfen. Mit Schichten 1-4 hast du eh nichts zu tun (oder nur oberflächlich) und der für Entwickler interessante Part bei 5-7, welchen direkten Einfluss auf das Programm hat, wird eh vom Architekten grob festgelegt. Was man dann als Kotaffe noch zu tun hat, ist das ganze eben in die Tat umzusetzen. Das macht man dann eigentlich immer mit bereits vorhandenen (Bord-)mitteln wie z.B. java.net.* oder boost.asio und hat dann mit den Grundlagen des OSI-Modells so gut wie nichts mehr zu tun. Du musst nur wissen wie man Bibliotheken nutzt, nicht wie das System dahinter irgendwelche Ethernet-Frames befüllt.

>Er soll gar nichts entwickeln. Das ist unter anderem das Problem.
Dann les dir was anderes durch, Design Patterns oder so. OSI-Modell ist für Kotaffen in der Praxis weitestgehend wertlos. Grundbegriffe wie Sockets sollte man aber trotzdem kennen

sindresorhus Avatar
sindresorhus:#9852

SSL solltest du inhaltlich zuordnen können: "Secure Socket Layer".

millinet Avatar
millinet:#9868

>>9852
SSL soll man nun schon seit länger nicht mehr einsetzen.

trickyolddog Avatar
trickyolddog:#9911

>>9868
>SSL soll man nun schon seit länger nicht mehr einsetzen.
Warum?

keyuri85 Avatar
keyuri85:#9912

Bernd, du bist doch Student, es kann doch nicht sein, dass du völlig ratlos bist, wie du an die Sache rangehen sollst.

Als Erstes solltest du schauen, ob du eventuell noch einen Kurs zu dem Thema hast. Der sollte "Rechnernetze" oder so ähnlich heißen. Wenn das noch kommt, warte bis dahin, oder zieh die Veranstaltung vor.

Dann solltest du dir darüber klar werden, auf welcher Abstraktionsebene du einsteigen möchtest. Willst du wissen wie die Bits über die Leitung flitzen? Dann schau dir die verschiedenen Ethernet-Standarts an.

Wenn du weiter oben einsteigen möchtest (ich nehme an dich interessiert IP), dann such dir ein Protokoll aus, lerne wie es aufgebaut ist, wie die Pakete aussehen und schau dir Datenverkehr an. So merkst du ob du die Theorie verstanden hast.

Dann kommt erst die Programmierung. Ein Socket ist nichts anderes als eine Abstraktion deiner Netzwerkverbindung und das ist in Verschiedenen Sprachen unterschiedlich implementiert und auch unterschiedlich schwer zu benutzen. Python fand Bernd einfach, Boost/ASIO (cpp) fand Bernd schmerzhaft. Aber wenn du das verstanden hast, bist du auf dem Stand der Technik und deinen Kollegen sicher eine Nase vorraus.
Also Programmier irgendwelchen Quatsch z. B. einen Chat, RSS-Reader, oder worauf du sonst so Lust hast.

Neuste Fäden in diesem Brett: