Fachinformatik/ Protokolle

Aus Wikibooks
ISO/OSI-Referenzmodell
Vergleich des OSI-Modells mit dem TCP/IP-Referenzmodell

Layer 1, Physical Layer (Bitübertragungsschicht)[Bearbeiten]

General Problems of Communication over a Shared Medium.

Auf der Bitübertragungsschicht wird die digitale Bitübertragung bewerkstelligt:

Wir übertragen Nullen und Einsen über ein Kabel − aber wie soll ein Empfänger mit diesen Daten etwas anfangen, sie richtig interpretieren?

Aufgabe 1: Zwei Teilnehmer können sich nur elektrische Signale senden, die eine Lampe an- bzw. ausschalten. Wie übermitteln sie Information?
Aufgabe 2: Jetzt kommen weitere Teilnehmer hinzu, die alle das gleiche Signal (an oder aus, immer von allen) empfangen. Wie muss das Protokoll erweitert werden und welche Probleme können auftreten?

Layer 2, Data Link Layer (Sicherungsschicht)[Bearbeiten]

How to build an Ethernet Frame.

Aufgabe des Data Link Layers bzw. der Sicherungsschicht ist es, eine zuverlässige Übertragung von Daten zu gewährleisten und den Zugriff auf das Übertragungsmedium zu regeln. Dazu wird der Bitdatenstrom in Blöcke, sog. Frames (Rahmen) aufgeteilt. Jeder Netzteilnehmer besitzt eine MAC-Adresse, über die er „angesprochen“ werden kann. Eine Prüfsumme hilft, fehlerhafte Frames zu erkennen und zu verwerfen. Carrier Sense Multiple Access/Collision Detection (CSMA/CD) erlaubt die Verwendung auf einem gemeinsamen Übertragungsmedium (Bus-Topologie).

Ethernetframe[Bearbeiten]

Aufbau eines Ethernet Frames mit Preamble, SFD und IFG.

Ein Ethernetframe ist folgendermaßen aufgebaut: Nach der Preamble mit dem Start Frame Delimiter (SFD) folgt der Ethernet Header, der Ziel- und Quell-MAC Adresse als die ersten zwei Felder enthält, gefolgt vom EtherType-Feld. Darauf folgt die Payload des Frames. Abgeschlossen wird der Frame mit der Frame Check Sequence (FCS), einer Prüfsumme, um korrupte Daten zu erkennen.

Zwischen dem Versenden zweier Frames liegt mindestens die Interframe Gap (IFG)-Zeit (oft als Interpackage Gap bezeichnet).

MAC-Adresse[Bearbeiten]

Ethernet MAC-Adresse im Detail

Die ersten drei Bytes der 48 Bit langen MAC-Adresse sind die Herstellerkennung, die verbleibenden drei Bytes sind eine vom Hersteller vergebene, eindeutige Nummer.

Eine Zuordnung der OUIOrganizationally Unique Identifier — findet man u.a. auf Debian-basierten Systemen nach Installation des Pakets ieee-data in /var/lib/ieee-data/oui.txt.

Die MAC-Adresse FF:FF:FF:FF:FF:FF, bei der alle Bits auf 1 gesetzt sind, ist die Broadcast-Adresse. Ein Switch leitet Frames mit dieser Ziel-Adresse an alle Ports weiter. Ebenso gibt es auf Ethernet-Ebene auch Multicast-Adressen, die insbesondere bei IPv6 relevant werden.

(Layer 2) Switch, Multiport Bridge[Bearbeiten]

Links: Der veraltete Hub agiert auf Layer 1 (Physical Layer). Er verstärkt/vervielfältigt einfach jedes eingehende Signal und leitet es an alle Ports weiter. Damit bleiben Broadcast- und Collision-Domain wie beim Anschluss aller Geräte an einen Bus.
Mitte: Ein (Layer 2) Switch ordnet über die MAC-Adresse Frames dem Port zu, hinter dem sich das adressierte Gerät befindet. Bei Halbduplex-Betrieb kann es aber noch immer zu Kollisionen kommen, wenn Switch und Rechner gleichzeitig eine Nachricht senden.
Rechts: Aktuelles, vollständig geswitchtes (Teil-)Netzwerk im Vollduplex-Betrieb. Kollisionen können nicht mehr stattfinden.
Broadcasts werden von Switchen an allen Ports ausgegeben.
(Layer 2) Switch = Multiport Bridge

Im lokalen Netzwerk (LAN) spielt der Switch auf Layer 2 eine entscheidende Rolle: Er leitet eingehende Frames nur an den, bzw. bei Multicasts/Broadcasts, nur an die Ports weiter, „hinter“ denen sich die betreffenden Empfänger befinden. Um diese Funktion zu erfüllen führt er eine Tabelle, die sog. Source Address Table (SAT, auch „MAC Address Table“), in der jede MAC-Absender-Adresse nach Empfang eines Frames dem Switch-Port zugeordnet wird, hinter dem sich das sendende Gerät befindet (möglicherweise hinter weiteren Switchen).

Damit kann der Switch jeden, als Unicast adressierten Frame, genau an den betroffenen Empfänger weiter leiten. Durch Vollduplex und puffern von gleichzeitigen Frames sind damit Kollisionen ausgeschlossen und CSMA/CD kann abgeschaltet werden; man spricht von einem vollständig „geswitchten“ Netzwerk.

Ist ein Gerät ganz neu im Netz und seine MAC-Adresse noch nicht in der SAT eingetragen, sendet der Switch den Frame als Broadcast an alle.

VLANs[Bearbeiten]

Oben: Standard Ethernet-Frame mit Ethertype z.B.: 0x0800 (IPv4), 0x86DD (IPv6), 0x0806 (ARP), ….
Mitte: 802.1Q-Tag in einem Ethernet-Frame, 802.1Q VLAN-Tag beginnend mit 0x8100, anschließend u.A. die VLAN-ID.
Unten: Spezialfall QinQ gemäß IEEE 802.1ad, beginnend mit 0x88A8 für „verschachtelte“ VLANs.

VLANs, Virtual Local Area Networks, erlauben eine physikalischen Netze-Infrastruktur in mehrere logisches Teilnetze (Netzwerksegmente) aufzuteilen. Die Technik ist in IEEE 802.1Q standardisiert. Dabei erhält jeder Ethernet-Frame vom Switch/Interface eine Markierung inklusive VLAN-ID (Tag), die ihn einem VLAN zuordnet.

Die Konfigurationsmöglichkeiten von VLANs sind umfangreich. Z.B. können Switch-Ports jeweils einem VLAN zugeordnet werden. Nur Frames mit der gleichen VLAN-ID werden am jeweiligen Port ausgegeben, Tags dabei vorher evtl. entfernt. Dort eingehende Frames werden entsprechend mit dem passenden Tag versehen. Andere Ports werden als Trunk deklariert, d.h. sie leiten Frames mitsamt ihrem Tag (zum nächsten Switch/Interface) weiter.

Spanning Tree Protocol[Bearbeiten]

Spanning tree topology

Das Spanning Tree Protocol (STP) verhindert genauso wie das verbesserte Rapid Spanning Tree Protocol (RSTP) Broadcast-Stürme in Netzwerken indem es Schleifentopologien unterbricht.

Layer 3, Network Layer (Vermittlungsschicht)[Bearbeiten]

Auf Basis des Ethernet-Protokolls können wir Frames im LAN versenden. Switche leiten diese an das jeweils adressierte Gerät weiter. Wie aber können wir Rechner in ganz anderen Netzen erreichen? Dafür ist das Internet Protocol (IP) auf der nächst höheren Schicht, dem Layer 3, Network Layer (Vermittlungsschicht), zuständig.

Die im Ethernet-Frame transportierten Daten enthalten dazu als erstes erneut einen (Internet Protocol) Header, der wie zuvor, die „Verwaltungsinformationen“ der transportierten Daten enthält. Anschließend folgen die eigentlichen Daten des IP-Pakets. Auf Layer 3, Network Layer (Vermittlungsschicht), wird die Kombination aus IP-Header und Daten (Payload) als Paket bezeichnet.

Man bezeichnet im ISO/OSI-Modell unabhängig vom jeweiligen Layer die vollständige Nachricht einer Schicht, d. h. den kompletten Satz Nutzdaten plus die Verwaltungsinformationen der Schicht, auch als Protocol Data Unit (PDU).

Internet Protocol Header IPv4 und IPv6[Bearbeiten]

IPv4-Header Bit
0 4 8 12 16 20 24 28 31
Version IHL TOS Total Length
Identification Flags Fragment Offset
Time To Live (Next) Protocol Header Checksum
Source IP Address (32 Bit)
Destination IP Address (32 Bit)
Options (if IHL > 5)
↓     Data [≤ 65515 Byte]     ↓
………………………………………………………

IPv6-Header Bit
0 4 8 12 16 20 24 28 31
Version Traffic Class Flow Label
Payload Length Next Header Hop Limit
Source IP Address (128 Bit)
Destination IP Address (128 Bit)
↓     Data [≤ 65515 Byte (mit Ausnahme von „jumbo payloads“)]     ↓
………………………………………………………

Heute werden zwei verschiedene Versionen von Internetprotokollen, IPv4 und IPv6, verwendet, deren Header sich maßgeblich unterscheiden. Im Folgenden sind die Felder der Header für beide IP-Versionen dargestellt. Felder mit gleicher bzw. vergleichbarer Bedeutung sind mit der selben Hintergrundfarbe dargestellt, für Details folge man den hinterlegten Links.

Von der Länge der IP-Adresse abgesehen gibt es weitere bemerkenswerte Unterschiede zwischen IPv4 und IPv6, die bereits aus dem Vergleich der Header ersichtlich werden:

  • IPv6 hat eine feste Header-Länge von 40 Bytes. Optionen sind gegebenenfalls in „Extension Headern“ untergebracht (entsprechend vermerkt im „Next Header“-Feld). Eine Angabe der Header-Länge erübrigt sich daher.
  • Die Fragmentierung übergroßer Pakete erfolgt bei IPv6 nicht mehr durch Router. Der Absender kann unter Zuhilfenahme des „Fragment Extension Header“ diese aber vorher aufteilen. Die die Fragmentierung betreffenden Felder „Identification“, „Flags“ und „Fragment Offset“ enfallen damit im IPv6-Fixed-Header.
  • Bei IPv6 werden keine Prüfsummen mehr über die IP-Header-Daten berechnet. Es wird nur noch die Fehlerkorrektur in Layer 2 und 4 genutzt.

Router: Lokale Netze verbinden[Bearbeiten]

IP-Paket Routing über Netzwerke

Wollen wir Pakete aus dem lokalen Netz (LAN) an Rechner in anderen Netzen senden, benötigen wir das Internet Protocol. Es erlaubt, Netze zu verbinden. Im Gegensatz zu MAC-Adressen können wir mit IP-Adressen Netze strukturieren, z.B. Subnetze bilden. Diese logische Adressierung ist die Grundlage für Routing, also der Wahl einer Route und entsprechender Weiterleitung von Paketen.

Wird ein Paket an einen Rechner außerhalb des eigenen LANs adressiert (zu erkennen an der fremden Netzadresse), so trägt das Betriebssystem als Destination MAC Adresse des zugehörigen Frames die MAC-Adresse des Gateways[1] ein. Der Frame erreicht über das Gateway einen Router der sich dadurch auszeichnet, dass er mehrere Netzwerk-Interfaces besitzt, die sich jeweils in verschiedenen Netzen befinden. Es gibt nun zwei Möglichkeiten:

  1. Das Paket ist für den Router selbst bestimmt und auch bezüglich der IP-Adresse an ihn adressiert. In diesem Fall unterscheidet sich der Router nicht von jedem anderen Rechner im lokalen Netz.
  2. Das Paket ist (bezüglich er IP-Adresse) an einen Rechner eines anderen Netzes adressiert (Normalfall). In diesem Fall leitet der Router das Paket so weiter, dass es, möglicherweise über weitere Router, schließlich sein Ziel erreicht.

Bei IPv4 gehört das Gateway neben IPv4-Adresse, Netzmaske und DNS-Server zu einer vollständigen IPv4-Konfiguration. Diese kann statisch oder per DHCP erfolgen. Bei IPv6 hingegen verkünden Router durch automatisch periodisch oder auf Anfrage gesendete Router-Advertisements (RA) ihre Funktionalität als Gateway. Eine Node fragt beim hochfahren eines Interfaces mittels Router-Solicitation (RS) nach Routern (= Gateway) im lokalen Netz und erhält über RAs automatisch die erforderliche Information.

Routingtabelle[Bearbeiten]

Durch Router verbundene Netze.

Die Entscheidung über die Weiterleitung des Pakets erfolgt basierend auf einer Routingtabelle. Eine Routingtabelle hat mindestens die folgenden drei Einträge:

  • Network Identifier, Zielnetzadresse (Subnetz und Netzmaske),
  • Next Hop, nächstes Ziel (immer in einem der Netze, in denen der Router ein Netz-Interface hat),
  • Metric, Gewichtung, d.h. Bewertung der Route.

Zusätzlich können u.a. noch weitere Einträge vorliegen:

  • Quality of Service, Informationen, die eine Route weiter beschreiben (z.B. gibt „U“ an, dass eine Route „up“ ist.)
  • Interface, die zur Route gehörende Netzwerkkarte/Interface.

Betrachten wir drei Spalten der Routingtabelle des Router 2 im Bild.

Routingtabelle Router 2
Zielnetz-
adresse
Subnetzmaske
bzw. Netmask
Next Hop,
Gateway/Router
Interface,
Schnittstelle
192.168.0.0 255.255.255.0 192.168.1.1 192.168.1.2
192.168.1.0 255.255.255.0 192.168.1.2 192.168.1.2
192.168.2.0 255.255.255.0 192.168.2.1 192.168.2.1
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.2
  • Die zwei mittleren Einträge betreffen die Netze, mit denen der Router direkt verbunden ist. Pakete an Adressen in diesen Netzen kann der Router direkt über das betreffende Netzwerk-Interface an die Ziel-Adresse senden[2].
  • Die erste und letzte Zeile betrifft Netze, die nur indirekt erreichbar sind. In beiden Fällen führt der Weg (die Route!) über den Router 1. Wie es von dort weiter geht, braucht Router 2 nicht zu wissen. Er sendet diese Paket über sein Interface im betreffenden Netz an den Router 1 (Next Hop), dieser muss sich dann um eine Weiterleitung gemäß seiner eigenen Routingtabelle kümmern.
  • Bei der letzten Zeile mit der Netzadresse „0.0.0.0“ handelt es sich um die Standardroute, auch Default Gateway genannt. Über diese Route werden alle Pakete gesendet, die auf keine der explizit aufgeführten Routen passen.

Verbindung zwischen MAC und IP-Adresse[Bearbeiten]

Netzwerkkarten senden Ethernet-Frames immer an MAC-Adressen: Im Falle einer IP-Adresse aus dem eigenen LAN an die MAC-Adresse des zugehörigen Hosts, im Falle einer IP-Adresse aus einem anderen Netz an die MAC-Adresse des Gateways/Routers.

Wie ermittelt der sendende Rechner aus der IP-Adresse die MAC-Adresse seines nächsten Ziels?

ARP-Spoofing, standard Methode für MITM-Angriffe im LAN.

Dafür zuständig ist das Address Resolution Protocol (ARP, IPv4) bzw. das Neighbor Discovery Protocol (NDP, IPv6). Einen ermittelten Zusammenhang zwischen IP- und MAC-Adresse fügt der Kernel des Betriebssystems in eine Tabelle ein, den sog. ARP-Cache. Einträge darin werden immer mal wieder „aufgefrischt“ oder, falls länger nicht benötigt, wieder aus der Tabelle entfernt. Mit ip neigh kann der Inhalt des ARP-Cache angezeigt werden.

Address Resolution Protocol[Bearbeiten]

Das Address Resolution Protocol ist ein Layer 2 Protokoll mit dem Ethertype 0x0806. Details findet man im verlinkten Wikipedia-Artikel. Der Host sendet mittels Broadcast eine Anfrage wie: „Who has 192.168.2.100? Tell 192.168.2.121“. Die Antwort der betreffenden Node ist sinngemäß: „192.168.2.100 is at 00:22:4d:f6:cd:94“. Damit können anfragender Sender und Empfänger die jeweilige IP- und MAC-Adresse zuordnen.

Neighbor Discovery Protocol[Bearbeiten]

Hintergrundwissen zu IPv6 siehe z.B.:

Bei IPv6 wird der Zusammenhang zwischen Link-Layer-Adresse und IPv6-Adresse über ICMPv6-Pakete hergestellt. Details findet man in RFC 4861. Verwendete Adress-Typen werden in RFC 4291 definiert und erläutert.

Beispiel[Bearbeiten]

Ein Host sendet ein ICMPv6-Ping: ping6 -c 1 fd39:4487:170a::e37. Vor dem Versenden des Frames muss er die MAC-Adresse der Node mit der entsprechenden IPv6-Adresse herausfinden. Dazu wird eine „Neighbor Solicitation“ (Typ 135) an die (multicast) „Solicited-Node Address“ ff02::1:ff00:e37 gesendet. Diese „Solicited-Node Address“ setzt sich zusammen aus ff02::1:ff/104 kombiniert mit den letzten drei Bytes der IPv6-Adresse der angefragten Node, hat also die Form ff02:0:0:0:0:1:ffXX:XXXX. Als MAC-Zieladresse wird die zur multicast IPv6-Adresse gehörende Adresse 33:33:ff:00:0e:37 verwendet, generiert aus 33:33 und den letzten vier Bytes der IPv6-Adresse: 33:33:ff:XX:XX:XX. Das Paket enthält im Wesentlichen die IPv6-Adresse, deren zugehörige MAC-Adresse gesucht ist („Target Address: fd39:4487:170a::e37“).

Die angefragte Node antwortet mit einem „Neighbor Advertisement“ (Typ 136) an die anfragende Adresse (unicast) und enthält die gesuchte MAC-Adresse. Anschließend kann der Frame des Pings gesendet werden.

Layer 4, Transport Layer (Transportschicht)[Bearbeiten]

Verschiedene Protokolle „eingekapselt“

Bislang können wir ein beliebiges Paket von einem Rechner mit IP-Adresse und Internetzugang an das Interface eines jeden Rechners senden, der über eine global geroutete IP-Adresse erreichbar ist. An welchen, auf dem Zielrechner laufenden Prozess, soll das Betriebssystem aber die übertragenen Daten weitergeben? Und wie erreicht die Antwort den zugeordneten Prozess/Dienst auf dem ursprünglichen Absender-Rechner? Dafür benötigen wir die Transport-Schicht, Layer 4, mit ihren „Adressen“, den Ports. Die Schicht spielt neben der Zuordnung von Paketen zu Prozessen/Diensten aber auch bei der Übertragung eine zentrale Rolle.

User Datagram Protocol UDP[Bearbeiten]

Das User Datagram Protocol UDP enthält im Header nur Source- und Destination-Port sowie Length und eine Prüfsumme. Daraus folgt direkt, dass ohne Weiteres die Datagramme weder sortiert noch Verluste bemerkt werden können.

Bit 0 15 16 31
Source Port Destination Port
Length Checksum
Data
UDP-Datagramm

UDP hat damit die folgenden Eigenschaften:

  • verbindungs- und zustandslos
  • „Best Effort“-Übertragung

UDP eignet sich damit insbesondere für die Übertragung von kleinen Datenmengen (DHCP, DNS, NTP, …) oder wenn geringe Latenzen erwünscht sind (Gaming, Audio/Video-Übertragung) und der Verlust von Paketen in gewissem Maß toleriert werden kann.

In höheren Protokollschichten kann aber, wie zum Beispiel beim Trivial File Transter Protocol (TFTP) oder bei QUIC (Quick UDP Internet Connections), Funktionalität implementiert werden, die den Unzulänglichkeiten von reinem UDP Rechnung trägt.

Transmission Control Protocol TCP[Bearbeiten]

Bit 0 15 16 31
Source Port Destination Port
Sequence Number
Acknowledgment Number
Data Offset, Flags Windowsize
Checksum Urgent Pointer
Options
Data
TCP-Datagramm

Im Gegensatz zu UDP zeichnet sich das Transmission Control Protocol TCP durch folgende Eigenschaften aus:

  • verbindungsorientiert
  • zustandsbehaftet
  • Loss Recovery: Verluste werden bemerkt und korrigiert.
  • Congestion Control: „Staukontrolle“

Auch hier kann man die Implementierung schon anhand des TCP-Headers erkennen: Sequence Number und Acknowledgment Number erlauben Segmente zu sortieren genauso wie Verluste zu bemerken und fehlende Segmente erneut anzufordern. TCP eignet sich damit ohne weitere Implementierung in höheren Schichten zur zuverlässigen Übertragung von Datenströmen.

Auf- und Abbau einer TCP-Verbindung[Bearbeiten]

Abbau TCP-Verbindung
Aufbau TCP-Verbindung: SYN, SYN/ACK, ACK.

Eine zentrale Rolle bei TCP-Verbindungen spielt der Auf- und Abbau mittels sog. „Handshakes“. Beim Aufbau der Verbindung, einem 3-Wege-Handshake, tauschen Client und Server gegenseitig im Wesentlichen ihre (zufällig erzeugten) Sequenz-Nummern aus. Gleichzeitig reservieren die Teilnehmer Ressourcen für die erwartete Datenübertragung.

Der Angreifer (grün) sendet viele SYN-, jedoch keine ACK-Pakete. Durch die halboffenen Verbindungen wird der Server so sehr ausgelastet, dass die Anfrage eines legitimen Benutzers (lila) nicht bearbeitet werden kann.
Erfolgreicher TCP-Handshake

Dieser Umstand wird bei einem SYN-Flood, einer Form des Denial-of-Service (DoS) ausgenutzt, um alle Ressourcen eines Systems zu belegen. Legitime Anfragen können anschließend nicht mehr oder nur noch stark verzögert bearbeitet werden.

Wird die Verbindung nicht mehr benötigt, so wird sie abgebaut und die jeweils benötigten Ressourcen werden frei gegeben.


Ethernet Frame


Anwendungsprotokolle: SMTP[Bearbeiten]

SMTP-Transfer-Modell. Die blauen Pfeile sind mittels SMTP (oder Varianten davon) implementiert.

Exemplarisch betrachten wir das Simple Mail Transfer Protocol (SMTP). Eine ausführliche Beschreibung findet sich in der BSI ISI-Reihe, in der Veröffentlichung eMail-Server.

Auswahl wichtiger RFCs[Bearbeiten]

Techniken zur Verbesserung der Sicherheit[Bearbeiten]

Man beachte immer auch die englische Wikipedia-Seite des jeweiligen Begriffs.



Anmerkungen und weiterführende Links[Bearbeiten]

  1. Die MAC-Adresse des Routers wird aus der zugehörigen IP-Adresse, die z.B. mittels DHCP oder statisch konfiguriert wird und damit dem Host bekannt ist, ermittelt. Dies erfolgt bei IPv4 mit Hilfe des Address Resolution Protocol (ARP); bei IPv6 mittels des Neighbor Discovery Protocol (NDP).
  2. Dazu ermittelt der Router wie jeder andere Rechner im gleichen LAN die MAC-Adresse des Ziel-Hosts und adressiert den Frame entsprechend.

Aufgaben[Bearbeiten]

MAC-Adressen[Bearbeiten]

  1. Gib alle MAC-Adressen deines Rechners an. Ändere eine der Adressen.
  2. Ermittle die MAC-Adresse des "Default Gateways".
  3. Ein Hotel erlaubt die kostenlose Benutzung seines WLANs für eine Stunde. Wie kann man seine Nutzungszeit nach Ablauf verlängern?
  4. Diskutiere den folgenden Sachverhalt: Durch einen MAC-Adress-Filter soll verhindert werden, dass fremde Geräte IP-Adressen aus einem festgelegten Adressbereich erlangen. Erläutere in diesem Zusammenhang, was von einer auf MAC-Adressen basierenden „Sicherheit“ zu halten ist.
  5. Schreibe ein shell-Skript, welches das lokale Netzwerk scannt und alle MAC-Adressen auflistet. Sortiere die MAC-Adressen nach Herstellern und erstelle eine Liste. Mache dich dazu insbesondere mit dem Programm nmap und seinen Optionen, für die Aufgabe insbesondere -sn, vertraut.
  6. Folgender Ausschnitt aus einem Ethernet-Frame wurde mitgeschnitten:
BC AE C5 8E  98 05 E0 28  6D 9A 1E C1  86 DD 60 00
00 00 00 20  06 3A 20 01  06 7C 02 E8  00 22 00 00
00 00 C1 00  06 8B 20 03  00 C1 1F 4C  62 00 05 27
37 CC 63 88  49 6B 01 BB  95 34 28 6E  08 3D 8C 47
28 9E 80 10  01 3C F5 B9  00 00 01 01  08 0A 98 94
C1 04 00 17  2C 8D .. ..  .. .. .. …

Ermittle hieraus die Quell-MAC-Adresse, die Ziel-MAC-Adresse sowie das verwendete Internetprotokoll.

Lösung

Lösungsvorschlag shell-Skript

#!/usr/bin/bash
#
#  scan network and list NIC vendors found from MAC addresses
#
set -eu

NET=$(ip a | grep 'inet ' | grep -v '127' | \
        sed "s/^\W*//" | cut -d ' ' -f 2)

for N in $NET ; do
        echo "Scanning $N ..."
        nmap -sn "$N" > /dev/null
done

## old version:
#MACS=$(ip neigh | cut -d " " -f 5 | cut -d: -f1-3 | \
#       grep "[[:xdigit:]][[:xdigit:]]:[[:xdigit:]][[:xdigit:]]:[[:xdigit:]][[:xdigit:]]" \
#       | tr ':' '-' | sort | uniq)

MACS=$(ip neigh | \
        grep -o " [[:xdigit:]][[:xdigit:]]:[[:xdigit:]][[:xdigit:]]:[[:xdigit:]][[:xdigit:]]" \
        | tr ':' '-' | sort | uniq)

for MAC in $MACS ; do
        grep -i "$MAC" /var/lib/ieee-data/oui.txt || echo "No vendor for $MAC found!" | tr "-" ":"
done

Spanning Tree Protocol (STP)[Bearbeiten]

  1. Erstelle ein Mesh-Netz (jede Bridge ist mit jeder verbunden) aus vier virtuellen Switchen (Bridges).
  2. Aktiviere STP und fahre alle Komponenten hoch.
  3. Untersuche die Topologie, die sich einstellt.
  4. Ändere die (Bridge-)Priority einer Komponente und untersuche, wie sich die Topologie verändert.
Hilfe
## 2 Bridges erstellen, STP einschalten:
ip link add dev br0 type bridge
ip link add dev br1 type bridge
ip link set br0 type bridge stp_state 1
ip link set br1 type bridge stp_state 1
## link erstellen und bridges verbinden:
ip link add veth01 type veth peer name veth10
ip link set veth01 master br0
ip link set veth10 master br1
## Alles hochfahren:
ip link set br0 up
ip link set br1 up
ip link set veth01 up
ip link set veth10 up
## Untersuchen mit:
bridge monitor
bridge link
brctl showstp br0
ip -d link show type bridge_slave master br0
## Bridge-Priority oder Path-Cost ändern:
ip link set br0 type bridge priority 255
bridge link set dev veth01 cost 5

Routing[Bearbeiten]

  1. Erstellen Sie die Routingtabellen für Router 1 und Router 3.
  2. Router 1 erhält eine zusätzliche Netzwerkkarte und wird darüber mit dem Netz 192.168.2.0/24 verbunden. Das Interface erhält die IP-Adresse 192.168.2.254. Erörtern Sie möglichen Änderungen an den bestehenden Routingtabellen und ihre Folgen.
  3. Untersuchen Sie lokale Routingtabellen, z.B. mit dem Befehl ip route show und der Manpage man ip-route.

Layer 3: ICMPv6[Bearbeiten]

Neighbor Discovery Protocol: Neighbor Solicitation (NS) und Neighbor Advertisement (NA)[Bearbeiten]

  1. Fertigen Sie einen Wireshark-Mitschnitt für die „Neighbor Discovery“, d.h. „Neighbor Solicitation (NS)“ und „Neighbor Advertisement (NA)“, an.
  2. Untersuchen Sie IPv6- und Link-Layer-Adressen der Pakete bzw. Frames. Wann wird ein NS-Frame tatsächlich an eine Multicast Link-Layer-Adresse (33:33:XX:XX:XX:XX) gesendet?
  3. Viele NAs enthalten in den ICMPv6-Daten keine Option mit der MAC Adresse: Link-layer address: Tp-LinkT_f3:22:90 (e8:94:f6:f3:22:90). Unter welchen Bedingungen wird eine NS mit gesetzter Option, wann ohne beantwortet?
  4. Untersuchen Sie lokale Multicast-Adressen mittels ip maddress show (vergl. man ip-maddress).

Weitere, im Zusammenhang nützliche Kommandos:

ip neighbor                                    ## Cache kontrollieren
sudo ip neighbor flush fd39:4487:170a::e37     ## Adresse aus Cache löschen
sudo ip -6 neighbor flush all                  ## alle IPv6 Adressen aus Cache löschen
ping6 -c 1 fd39:4487:170a::e37
Hilfe

Da am Netzwerk-Interface je nach LAN zahlreiche Multicast-Frames auftauchen, die eine systematische Analyse von NS und zugehörigem NA erschweren und oftmals noch Unicast-Frames (Cache Updates) für weitere Unklarheit sorgen, hier noch weitere Empfehlungen:

  • In Wireshark filtern, und zwar nach ICMPv6-Paketen Typ 135 oder 136:
    icmpv6.type == 135 || icmpv6.type == 136
  • Gegebenenfalls zusätzlich nur Pakete anzeigen lassen, die von oder an eine eigenen IPv6-Adresse gesendet wurden, z.B.:
    ipv6.addr == fe80::222:4dff:fea6:ca34
    Kombinieren Sie derartige Filter zielführend.

Neighbor Discovery Protocol: Duplicate Address Detection (DAD)[Bearbeiten]

  1. Vergeben Sie eine neue, nicht verwendete Adresse und beobachten Sie mit Wireshark, wie der Rechner dies mittels Neighbor Solicitation überprüft. Prüfen Sie, ob die Adresse dem Interface zugeordnet ist.
  2. Ermitteln Sie jeweils die Sender- und Zieladressen auf Layer 2 und Layer 3 des Neighbor Solicitation Frames sowie den Typ der ICMPv6 Nachricht.
  3. Vergeben Sie nun eine bereits benutzte Adresse und untersuchen Sie wieder mit Wireshark die Duplicate Address Detection. Wie wird die Adresse dem Interface jetzt zugeordnet?
  4. Ermitteln Sie jeweils die Sender- und Zieladressen auf Layer 2 und Layer 3 des Neighbor Advertisement Frames sowie den Typ der ICMPv6 Nachricht.

Router Solicitation (RS) und Router Advertisement (RA)[Bearbeiten]

  1. Machen Sie sich kundig, wie Sie in Ihrem Betriebssystem ein Netzwerk-Interface hoch- und runterfahren.
  2. Fahren Sie ein Interface herunter und starten Sie Wireshark. Beobachten Sie mit Wireshark die ICMPv6 Frames, die beim wieder Hochfahren des Interfaces gesendet und empfangen werden.
  3. Welcher Typ ist Router Solicitation (RS) und Router Advertisement (RA) zugeordnet?
  4. Welche Information wird in einem RA übertragen?
  5. An welche Adressen (Layer 2 und Layer 3) werden RS versendet? An welche Adressen erfolgt die Antwort?
  6. Untersuchen Sie die Flags im ICMPv6 Paket und ermitteln Sie deren Bedeutung.
  7. Ermitteln Sie die Zeit zwischen automatischen (d.h. ohne explizite Anfrage) gesendeten Router Advertisements. Falls Sie kein eindeutiges Ergebnis erhalten, erklärt dies evtl. die man-Page des IPv6 router advertisement daemon's radvd.

Layer 4: TCP und UDP[Bearbeiten]

  1. Untersuche TCP-Verbindungen mit Wireshark und dem Programm netcat.
  2. Führe die Untersuchung ebenso für UDP durch.
netcat -kl 1234                  ## Listen for an incoming connection. To check, run: ss --tcp -l -p
netcat localhost 1234            ## Send stdin to the listening socket.

Beobachte genau, wie bei TCP die Verbindung mit dem Aufruf netcat localhost 1234 aufgebaut, durch beenden mit Strg-C abgebaut wird.

TFTP mittels UDP[Bearbeiten]

  1. Informiere Dich über das Trivial File Transfer Protocol (TFTP), auch anhand von RFCs, u.a. RFC 1350.
  2. Schneide einen TFTP-Download mit Wireshark mit und skizziere den Austausch der Datagramme. (Skizze analog zur Illustration eines TCP-Handshake.)
  3. Welche Daten werden jeweils übertragen?
  4. Wie reagiert das Protokoll auf den Verlust eines Datenpakets, wie auf den Verlust einer Bestätigung (Acknowledgment)?
  5. Erörtere Vor- und Nachteile einer TFTP-Übertragung. Wie könnte man den Durchsatz des Protokolls verbessern?
  6. Mache Dich mit der Erweiterung des Protokolls durch Optionen vertraut (u.a. RFC 2348 und RFC 7440). Probiere sie in der Praxis aus.
       ## TFTP Client atftp ##
apt install atftp
…
atftp --trace
tftp> connect tftpserver.domain.tld
tftp> get some/file/like/bootnetx64.efi
…
tftp> option blksize 1400
tftp> option windowsize 4
tftp> get some/file/on/bootnetx64.efi
Lösungshilfe
Download mittels TFTP.
Illustration des Trivial File Transfer Protocol (TFTP) mit der Windowsize Option (RFC 7440).
Klassisches TFTP

Der Client sendet per UDP einen Read Request (RRQ) mit dem Pfad der gewünschten Datei an den Server. Dieser antwortet mit dem ersten Datenpaket. Jedes Paket wird bei Erhalt vom Client mit einem Acknowledgement (ACK) bestätigt. Anschließend wird das nächste Segment gesendet.

TFTP Optionen

Mit Hilfe von Optionen (vergl. RFC 2347) kann der Client die Übertragung beeinflussen und mit dem Server gewisse Parmeter (blksize, timeout, tsize, windowsize) aushandeln.