Netzwerk: Unterschied zwischen den Versionen

Aus hyperdramatik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 155: Zeile 155:


[[Windows IP Einstellungen]]
[[Windows IP Einstellungen]]
= [[Sticklebrick Communication]] =
A failed attempt at explaining communication using bricks as bits.

Version vom 12. April 2021, 22:15 Uhr


Was ist ein Netzwerk?

schema eines netzwerks
Wenn mehrere Geräte miteinander Daten austauschen, spricht man oft von Netzwerkkommunikation. Das wohl bekannteste Netzwerk ist das sogenannte Internet. :-)
Damit die Kommunikation zwischen unterschiedlichen Geräten gelingen kann, nutzt jedes Netzwerk eine Reihe von Netzwerkprotokollen und Standards, über die der Austausch von Daten geregelt ist, so dass alle an der Kommunikation beteiligten Geräte die verschickten und empfangenen Daten interpretieren können. In einem Netzwerk werden Daten über Protokolle Codiert und Decodiert und über Standards übertragen, beispielsweise über Twisted Pair Kabel (oft auch LAN Kabel genannt) oder über WiFi (mit unterschiedlichen Namen für die Übertragungsstandards, wie 802.11b, Bluetooth, etc.).
Netzwerke kann man selber machen, oder sich an bereits bestehende Netzwerke anschliessen.

Ein Netzwerkbeispiel

tbd. damit man einmal eine Übersicht bekommt.

Ist jede Kommunikation immer Netzwerkkommunikation?

Device connection example.jpg
Tatsächlich gab es Computerkommunikation bereits bevor der Netzwerkgedanke sich in jegliche Form der Kommunikation eingeschlichen hat. Eine Maus oder ein Keyboard ist ebenso ein Gerät, dass mit dem Computer kommuniziert. Ein Drucker beispielsweise auch. Der Unterschied besteht in diesem Fall darin, dass diese Geräte immer nur direkt mit dem Computer Daten austauschen, mit dem Sie auch verbunden sind. Es besteht also eine direkte Verbindung zwischen Gerät und Computer. An dieser Kommunikation nimmt niemand Drittes Teil. Deswegen spricht man in diesem Fall nicht von Netzwerkkommunikation.
Die Idee eines Netzwerks ist, dass eine unbestimmte Anzahl von Geräten miteinander in Kommunikation treten können. Auch wenn ein Netzwerk so aufgebaut sein kann, dass es über Regulierung bestimmte Teilnehmende ausschliesst.
Trotzdem benutzen auch diese Geräte, ebenso wie Geräte im Netzwerk, bestimmte Protokolle um Daten mit dem Computer auszutauschen. Im Bild oben sind einige der Protokolle und Standards etwas vereinfacht abgebildet.

Hier steht sehr viel Text, was sollte ich davon verstehen?

Einmal durchlesen ist sicherlich hilfreich, damit ihr einen Überblick über die ganze Netzwerkerei bekommt.
Im Endeffekt solltet ihr folgende Fragen für euch beantworten können:

  • Was ist eine IP Adresse?
  • Was ist Serial Communication?
  • Was ist ein Port?
  • Was ist ein Protokoll?
  • Was bedeutet IP, TCP, UDP, OSC und MQTT?
  • Was ist der Unterschied zwischen einem lokalen Netzwerk und dem Internet?
  • Wie kann ich Daten von meinem Sensor an Unity schicken?
  • Wie baue ich ein Netzwerk für eine partizipative Performance auf?
  • Was muss ich wo programmieren, damit ich Daten verschicken kann?
  • Wie plane ich eine Performance, in der Menschen mit verschiedenen Devices interagieren und ich die Interaktionsdaten an einem Computer zusammenführen möchte?

Vieles im Text ist von unserer Seite aufgeführt, um Netzwerke einfacher zu erklären, damit ihr ein Verständnis dafür bekommt, wie die Dinge aufeinander aufbauen. Folgende Fragen werden wir also nicht stellen und sind unseres Erachtens nach für ein weiteres glückliches künstlerisch inspiriertes Leben auch nicht wichtig:

  • "Wieviele Schichten hat das OSI Modell?"
  • "Ist das jetzt im Hardware, Network oder Data Layer?"
  • "Wie funktioniert der Wifi Standard 802.11bg?"
  • "Was ist mit Infrarotkommunikation?"

Protokolle

Trying to communicate.jpg

Ein Protokoll ist die Vereinbarung, die sowohl Sender als auch Empfänger benutzen, um Daten in der gegenseitigen Kommunikation zu Codieren bzw. zu Decodieren. Oft bauen verschiedene Protokolle aufeinander auf, so das selten nur ein einziges Protokoll genutzt wird. Deswegen spricht man bei Protokollen oft von einem Schichtenmodell. Das bekannteste Schichtenmodell ist das [OSI Schichtenmodell].

Vereinfachtes Schema

Für unseren Bereich müssen wir nicht alle Schichten des OSI Modells immer im Kopf haben. Deswegen können wir von ungefähr drei verschiedenen Schichten ausgehen, um die Dinge ein bisschen zu vereinfachen, und damit wir das hier ein bisschen besser erklären können. Im Kontext von Spiel und Objekt hilft es, sich drei verschiedene Schichten vorzustellen, über die wir uns unterhalten, die ich hier jetzt vereinfacht mal als:

  • Hardware (z.B.: Kabel mit 2 Drähten, Kabel mit 24 Drähten, Funk, Infrarot, Ultraschall, usw.)
  • Netzwerk (z.B.: IP, Serial, Mesh Network, usw.)
  • Daten (z.B.: OSC, MQTT, ASCII, Byte-Encoding, etc.)

aufgemalt habe:
Hardware network data.jpg
Wichtig ist in diesem Zusammenhang, dass die drei Schichten aufeinander aufbauen. Je nachdem, für welche Hardware-Schicht ich mich entscheide, stehen mir unterschiedliche Netzwerkprotokolle zur Verfügung. Je nach Netzwerkprotokoll stehen mir dann unterschiedliche Protokolle zur Datenübertragung zur Verfügung. Protokolle kann man selber machen, oder sich ein bereits vorgefertigtes aussuchen. In der Praxis stellen sich folgende Fragen an diese drei Ebenen:
Hnd explained.jpg

Protokolle die wir viel und gerne nutzen

Wenn man mit Computern kommuniziert sind Protokolle oft bereits auf der Hardware-Ebene und der des Betriebssystems vorhanden. So kann jeder PC und jedes Smartphone von Haus aus bereits das IP Protokoll, sowie das TCP und UDP Protokoll auswendig. Alle Programme, die miteinander sprechen wollen und die wir programmieren, können also auf diese Protokolle zugreifen.

Bei Microcontrollern wie dem Arduino sieht die Sache ein wenig anders aus. Dort ist als Hardware Ebene meist nur ein USB-Anschluss vorhanden - Arduino hat beispielsweise keinen WiFi Funkchip, und auch keinen Netzwerkkabelanschluss. Dementsprechend nutzen wir Hardwarebedingt bei Arduino meistens Serial Communication auf dem Netzwerk Layer. Es gibt durchaus Microcontroller mit solchen Anschlüssen, wie beispielsweise den ESP32, oder auch Zusatzplatinen, die mit mehr oder weniger Aufwand solche Funktionalität bereitstellen können. In diesen Fällen werden diese beiden Protokolle meist über Code und Libraries in eure Programme mit eingebunden.

Unser Hardware-Layer

Im Studium nutzen wir WiFi, das ihr auch aus eurem täglichen gebrauch kennt. Hiermit verbinden wir Tablets, Computer, Raspberry Pis und viele weitere Devices.
Hinzu kommt noch Ethernet oder auch gerne LAN -Kabel, was nichts anderes als eine kabelgebundene Version desselben Computernetzwerks ist. Die Kabel selbst werden oft auch als "Twisted Pair" Kabel bezeichnet (macht aber eigentlich kaum jemand. Für gewöhnlich sagen alle "Hast du noch ein LAN-Kabel für mich?"). Viele Laptops haben leider keinen eigenen LAN- oder Ethernet Anschluss mehr, damit sie dünner sein können.

  • Ethernet ist stabiler, weniger anfällig für Störungen und schneller
  • WiFi ist komfortabler und oft die einzige Möglichkeit der Anbindung (Tablets, Smartphones)

Wenn wir mit Mikrocontrollern wie Arduino arbeiten, nutzen wir für gewöhnlich USB Kabel.

Unser Netzwerk-Layer

IP, TCP, UDP und Serial Communication sind die Protokolle die wir in unserer Arbeit benutzen und sie bilden die Grundlage unseres Netzwerklayers.

Unser Daten-Layer

Darauf aufbauend gibt es dann im Kontext des Curriculums Spiel und Objekt noch zwei High-Level Protokolle, die das Codieren und Decodieren von Daten sehr viel einfacher machen. Für uns sind das OSC und MQTT, die als Library für die meisten Computer-Programmierumgebungen zur Verfügung stehen.

Wenn wir mit Serial Communication arbeiten, schreiben wir unsere Codierung und Decodierung für gewöhnlich selbst.

Serial, IP, UDP, TCP usw. erklärt

Serial Communication

Bei Serial Communication wird davon ausgegangen, dass beide Geräte einen Serial Port besitzen, mit einem Kabel miteinander verbunden sind, und dieser Serial Port so konfiguriert ist, dass Datenpakete als Bytes in einer gewissen Geschwindigkeit (Bytes Pro Sekunde, oder auch Baud) hintereinander gesendet werden.
Für gewöhnlich sind Serial Ports auf 9600 baud konfiguriert, weil nur kleine Datenmengen, etwa Sensordaten, ausgetauscht werden.
Mehr und vollständigeres Wissen zum Thema Serial Communication auf Hard- und Softwareebene gibt es bei Sparkfun.

Beispiel Arduino zu Processing

Um mit einem Arduino zu einem Processing Sketch zu kommunizieren, nutzen wir für gewöhnlich das USB Kabel des Arduino (Hardware Layer). Aufbauend auf diesem Kabel, haben Arduino und Processing bereits eine Vereinbarung getroffen, wie sie am Besten miteinander kommunizieren können: Serial Communication!
Arduino computer serial.jpg

Bei serieller Kommunikation werden die Datenpäckchen als Bytes nacheinander über das USB Kabel verschickt. Der Computer holt die Pakete nacheinander an einer Seriellen Schnittstelle ab. Diese Schnittstelle (oder Interface) wird in Windows auch als COM Port bezeichnet. Deswegen könnt ihr beim Arduino Programm auch den COM-Port einstellen.

Jetzt kommen Daten an, aber was tun wir damit?

Das Arduino programm auf eurem Computer benutzt genau dieselbe Schnittstelle um für euch euren Arduino zu programmieren. Jedes Mal wenn ihr im Arduino programm auf Upload drückt, findet eine serielle Kommunikation mit dem Arduino statt. Diese Kommunikation ist so Codiert (im Data-Layer), dass das Arduino Gerät weiss, dass die nachfolgenden Daten dann Programmcode sind, die es demnächst dann ausführen soll.
Mit Hilfe der Serial Library könnt ihr diese Schnittstelle auch in eurem eigenen Code zum Datenaustausch zwischen dem Computer, auf dem bspw. Processing läuft, und eurem programmierten Arduino benutzen. Dazu müssen sowohl Arduino als auch Processing einige Verabredungen treffen:

  • beide müssen sich darauf einigen, in welcher Geschwindigkeit die Daten hintereinander geschickt und abgerufen werden (die sogenannte baud rate).
  • Processing muss zudem den Serial Port öffnen, damit der Computer weiss, dass die dort abgelegten Daten von Processing weiterverarbeitet werden.
  • schliesslich müsst ihr euch in eurem Code entscheiden, wie ein übertragenes Byte interpretiert werden soll. Ist es ein ASCII Zeichen? Ist es eine Zahl zwischen 0 und 255? Das müsst ihr in eurem Code in Arduino und Processing jeweils selbst festlegen, damit die beiden Programme jeweils verstehen, was sie mit den übertragenen Daten anfangen sollen.

Arduino sensor integer byte.jpg

Im Beispiel Arduino -> Processing würdet ihr als ein USB Kabel als Hardware Layer nutzen, als Netzwerk-Layer würdet ihr Serial Communication verwenden und dort die Baud-Rate einstellen, damit bei beiden die Geschwindigkeit der Datenübertragung klar ist, und auf der Datenebene würdet ihr euch ein eigenes Protokoll schreiben, dass die Interpretation der einzelnen kommunizierten Bytes zulässt.

Kommentierter Beispielcode

Hier dazu ein kommentiertes Beispiel: Arduino_Processing_Serial

IP und TCP, UDP

Wenn mehrere Computer, Smartphones oder Tablets miteinander Daten austauschen sollen, nutzen wir meistens Ethernet oder WiFi, und das daruaf aufbauende IP Protokoll.
Ip packet.jpg

Das IP Protokoll ist auch die Basis der Netzwerkkommunikation mit dem Internet. Im Gegensatz zur Serial Communication werden die Datenpakete nicht einfach nur als Bytes, sondern mit einer ganzen Menge zusätzlicher Informationen auf die Reise durch den Hardware Layer geschickt. So beinhaltet ein IP-Packet unter anderem Informationen zum Absender, Empfänger, wieviele Daten es beinhaltet, und noch ein paar weiter mehr oder weniger spannendere Informationen.

IP Adressen

Absender und Empfänger haben in diesem Protokoll eine eindeutige Adresse zugewiesen, so dass das Paket weiss, von wem es kommt (damit man dorthin antworten kann) und wo es hin soll. Diese Adressen werden meistens über das Betriebssystem konfiguriert. Sie sind für die meisten unserer Anwendungen als vier aufeinanderfolgende Bytes codiert:

byte.byte.byte.byte

Die Einschränkung auf Bytes bedeutet nur, dass nur Zahlen zwischen 0 und 255 als Adresse vergeben werden können. Also eine Adresse ist dann:

x.x.x.x

wobei x jeweils eine Zahl von 0-255 ist.

Eine IP Adresse kann also so aussehen:

192.168.100.10

Oder so:

80.54.254.1

IP Adressen machen Sinn für Netzwerke, in denen die Kommunikation nicht mehr ausschliesslich zwischen zwei Geräten stattfindet. Wenn man also mehr als 2 geräte in einem Netzwerk hat, kann über die Adresse herausgefunden werden, an wen die Kommunikation gehen soll. Deswegen eignet sich das IP Protokoll für Netzwerke, in denen sehr viele Geräte miteinander kommunizieren.

Verbindungsbeispiele

  • Um von Arduino Daten (z.B. Sensorwerte) and ein Computerprogramm (z.B. Processing oder Unity) zu senden, benutzen wir für gewöhnlich ein USB-Kabel und Serial Communication, und schreiben unsere Dateninterpretation dann meistens selber. Siehe auch das Beispiel unten.
  • Um von einem Programm (z.B. Processing oder Unity) an ein anderes Programm (z.B. Unity oder Processing) innerhalb eines Raumes Daten zu schicken (z.B. Antworten auf eine Frage, die dann auf einem anderen Computer visualisiert werden), benutzen wir meist WiFi, das IP Protokoll (genauer IPv4) und dann die OSC library, um die Daten zu interpretieren. Siehe auch das Beispiel weiter unten.
  • Um von einem Processing Sketch Daten an einen anderen Processing Sketch irgendwo anders auf der Welt zu senden, benutzen wir meist WiFi, das IP Protokoll und die MQTT library. Siehe auch das Beispiel weiter unten.

Beispiel Processing zu Processing

Ein Netzwerk kann mit, oder ohne Internet existieren. Wenn ein Netzwerk ohne Internet vorhanden ist, dann spricht man von einem Lokalen Netzwerk. Dieses lokale Netzwerk kommuniziert über einen Router, der sich im idealfall im Raum befindet. Dieser Router ist mit der Aufgabe betraut, Päckchen von Informationen, sogenannte Protokolle zwischen den Computern bzw. Devices die mit dem lokalen Netzwerk verbunden sind, hin und her zu schicken. Dazu verteilt der Router automatisch und in eigenregie, an alle Devices die mit ihm Verbunden sind/eingeloggt sind, eine IP Adresse. Die Vergabe der IP Adresse kann aber auch manuell festgelegt werden, sodass ein Device immer dieselbe IP Adresse verwendet.
Wichtig: Firewall muss ausgeschalten sein um in einem Netzwerk kommunizieren zu können.

Windows IP Einstellungen


Sticklebrick Communication

A failed attempt at explaining communication using bricks as bits.