Vermittlung-vermittlungdeiner5.0 (IP, ARP, etc)
| Back to OverviewNe quatsch
Willkommen im Neuland
Wie immer erstmal nen bisschen Einführung.
IP-Aufbau
Der Hauptgrund warum wir überhaupt eine IP brauchen ist, ist die IP-Adresse. Sie ist als globale Adresse eines Computers gedacht, anders als die MAC-Adresse die nur lokal gedacht ist. Somit verbinden wir in der Vermittlungsschicht mehrere Netzwerke miteinander.
Also nun dröseln wir zunächst mal IPv4 auf.
IPv4
Also gehen wir mal den Header durch
-
Version [4 Bit]: Entweder 4 oder 6.
-
Header Length (IHL) [4 Bit]: wie lang der Header ist, da es optionale Optionen gibt, kann es sich unterscheiden. Wichtig wo die Nutzdaten anfangen.
-
Type of Service (TOS) [8 Bit]: Priorität, etc. (unnötig)
-
Total Length [16 Bit]: Gesamtlänge des Pakets inklusive Header
-
Identification [16 Bit]: Identifiziert das Paket, wenn es fragmentiert wird (in mehrere Pakete aufgeteilt).
-
Flags [3 Bit]:
- Bit 0 (Reserved): Muss 0 sein
- Bit 1 (Don't Fragment): Wenn 1, darf das Paket nicht fragmentiert werden
- Bit 2 (More Fragments): Wenn 1, gibt es noch weitere Fragmente. Wichtig für die Rekonstruktion.
-
Fragment Offset [13 Bit]: Offset des Fragments.
-
Time to Live (TTL) [8 Bit]: Wie lange das Paket noch lebt. Wenn 0, wird es verworfen. Wird in Schritten (hops) gezählt nicht in Zeit oder so :|
-
Protocol [8 Bit]: Welches Protokoll verwendet wird. z.B. TCP, UDP, ICMP, etc.
-
Header Checksum [16 Bit]: Prüft ob der Header korrekt ist. unnötig wird auch nichtmehr überprüft, wegen Stressig und so.
-
Source Address [32 Bit]: Quelladresse
-
Destination Address [32 Bit]: Zieladresse
- Options: Zusatzinfos.
Fragmentierung
Ich würde schätzen es kommt irgendeine Aufgabe über IP-Fragmentierung dran also hier nochmal detailierter.
Ein Paket (1) mit 1976 Bytes wird aufgeteilt in 2 Pakete mit 1480 (2), 496 (3) Bytes. die Total Length von (1) ist 1996, ID = 42. MF-Flag = 0. Offset = 0.
So nun hat Paket 2 das MF-Flag = 1 und Offset = 0 aber auch die ID=42 und eine Total Length von 1500.
Paket 3 hat das MF-Flag = 0 und Offset = 185 (*8 = 1480 implizit) und auch die ID=42 und eine TotalLength von 516.
Ein Router der 2 erhält merkt das noch was fehlt, durch das MF-Flag und merkt sich die id. Wenn er dann 3 erhält, merkt er das es das letzte Paket ist und rekonstruiert das Paket 1 dank des Offsets.
IPv6
Das objektiv bessere Protokoll. Es hat mehr Adressen, ist besser, schneller, stärker. Es wurde viel weggelassen, da die Adressen auf 128-Bit erweitert wurden. Aber in IPv4 war auch viel Schwachsinn.
-
Version [4 Bit]: Entweder 4 oder 6.
-
Traffic Class [8 Bit]: Priorität, etc. (mittelmäßig unnötig... Ja DSCP gibt es aber naja) und hier ist noch bissle was wegen Congestion Notification drin.
-
Flow Label [20 Bit]: Pakete die den gleichen Flow Label haben, werden gleich behandelt.
-
Payload Length [16 Bit]: Länge des Pakets ohne Header, da der eine feste Größe hat, finaly.
-
Next Header [8 Bit]: Welches Protokoll verwendet wird. z.B. TCP, UDP, ICMP, etc. Es gibt auch ein Erweiterungsheader auf den verwiesen werden könnte.
-
Hop Limit = TTL [8 Bit]: Wie lange das Paket noch lebt. Wenn 0, wird es verworfen. Wird in Schritten (hops) gezählt nicht in Zeit oder so :|
-
Source Address [128 Bit]: Quelladresse
-
Destination Address [128 Bit]: Zieladresse
ARP
Also IP-Adressen sind eigentlich nur virtuell ausgedachte Adressen. Die echte Adresse ist die MAC-Adresse. Jeder PC-hört nur ab ob seine MAC-Adresse im Ethernet Paket drin ist. Also muss man IP-Adressen auflösen zu MAC-Adressen. Das macht ARP.
Erstmal wir das Paket soweit mit IP-geroutet bis es nichtmehr geht.
Dann überprüft ARP als erstes einen Cache, ob an schon die MAC-Adresse kennt, falls nicht Broadcastet ARP eine Frage
Heee ich brauch die MAC-Adresse von IP-xxx.xxx.xxx.xxx
Die Antwort kommt dann entweder von nem anderen Router oder vom Gerät selber.
Nun hat man die MAC-Adresse
Hacks
IPv4 war nicht auf die immense Menge von 8k Katzenvideos vorbereitet, deswegen wurde bis zur IPv6 eingesetzt wird umwege gesucht, um ein Hauptproblem zu umgehen: Adressknapheit
Früher gab es sogenannte Adressklassen (Namentlich A, B, C, D, E) die Adressen unterteilt haben, eine A Klasse hat zum Beispiel die Adressen bekommen. Da wurde aber schon schnell klar, das es so viel zu viele Adressen gibt, die nicht genutzt werden, weil die Unterteilung einfach zu steif war.
Deswegen => Subnetzmasken, der Schmerz der IT.
Subnetzmasken
Eine Subnetzmaske ist eine 32-Bit Zahl, die eine Adresse in einen Host-Teil und einen Netzwerk-Teil unterteilt, man bekommt ihn indem die Subnetzmaske mit der Adresse verundet. Hier für ein Beispiel
137.243.21.1/22 => 137.243.20.0 Netzwerk-Teil und 0.0.1.1 Host-Teil
//TODO genaue Aufteilung
NAT
Network Adress Translation ist ein Verfahren, um praktisch nur eine global Adresse für ein gesamtes lokales Netzwerk zu verwenden. Dafür gibt es einen NAT-Router, der sich mit einer Abbbildungstabelle speichert welche IP-Adresse mit welchem Port kommuniziert. Ein Beispiel einer solchen Tabelle:
Protocol | lokaler Socket | globaler Socket | Ziel Socket |
---|---|---|---|
TCP | 192.168.0.4:53211 | 137.226.12.32:53211 | 134.130.5.1:80 |
TCP | 192.168.0.5:45201 | 137.226.12.32:45201 | 134.130.5.1:80 |
Wenn nun also ein Paket von 134.130.5.1 an die 137.226.12.32 gesendet wird, wird vom NAT-Router der Port überprüft an den lokalen Socket gesendet.
Das wars auch schon. So muss die Telekom für deine scheiß Studenten"wohnung" nur eine IP-Adresse haben und nicht 1000.
DHCP
DHCP sorgt dafür, dass dich dein PC nicht immer wenn du in einem neuen Netzwerk bist, nach der IP-Adresse fragen muss die er haben soll. Der DHCP-Server (meist auch der Router) verteilt die IP-Adressen.
DHCP-Request als Broadcast: Hey ich brauch ne IP-Adresse meine MAC ist xx:xx:xx:xx:xx:xx
DHCP-Response an das Gerät: Wer
DHCP-Request als Broadcast: Ich bin das Gerät mit der MAC xx:xx:xx:xx:xx:xx
DHCP-Response an das Gerät: Wer hat gefragt. Ne Hier hast du deine IP-Adresse xxx.xxx.xxx.xxx mit dem Default Gateway xxx.xxx.xxx.xxx und der Subnetzmaske xxx.xxx.xxx.xxx und jetzt halts maul.
Ja oke ohne die zwei in der mitte aber so gehts.
ICMP
Für Fehlermeldungen und so. z.B. wenn ein Paket nicht ankommt, wird ein ICMP-Paket zurückgeschickt. Aber nicht immer ist ja auch viel Arbeit.
Routing
Routing ist scheiße
Auch hier gibt es wieder verschiedene Ansätze aber für effizienz Messungen müssen erstmal Metriken entworfen werden. Eine ist die Hop-Count, aber auch Sachen wie Verzögerung und Netzdurchsatz sind wichtig.
-
Das einfachste zuerst: Static Routing Es gibt eine Routing-Tabelle jeder Zielknoten hat eine Zeile. In dieser Zeile gibt es mehrere Wahlen mit einer relativen Gewichtung der Wahl. Dann wähle zufällig mit den Gewichtungswahrscheinlichkeiten.
-
Backward Learning Jeder Router trift seine eigene Entscheidung isoliert. Es funktioniert also ähnlich zu einem Switch. Routing während des lernens ungünstig und Ausfälle sind nicht bedacht und werden nicht weitergemeldet.
-
Distance Vector
Jeder Router sendet seine Abstandswerte an alle (lokal) anderen Router. Die anderen Router fügen die Routing-Tabelle des anderen hinzu und wählen die beste Route.
Das Vector kommt von der Notation dahinter, in der Routing Tabelle stehen (Ziel, Next Hop, Kosten), eine Übertragung der Abstände wird als Vector bezeichnet ((A,4), (B,2), (C,0), (D,3), ...).
Dat Problem bei dem ganzen shit ist der Bouncing Effect. Wenn B mit 1 direkt zu A kann und C mit 2 zu A über B und mit 5 direkt zu A kann, aber dann die Verbindung A-B ausfällt, sendet C seinen Traffic an B mit Kosten 1, B sendet ihn zurück, da es der beste/einzige Weg ist mit Kosten 2, C denkt aber weiterhin B währe der beste Weg und sendet ihn wieder zurück, B währe der beste Weg und so weiter. Bis Kosten 5 wo C es dann auch irgendwann mal checkt.
Falls man gar nicht nach A kommt gibt es ein Count-To-Infinity.
- Link State
Link state verteilt das Wissen über die Verbindungen und die Kosten. Jeder Router sendet seine Nachbarkosten per Flooding ins Netz mit Altersangaben und Sequenznummer für Duplikate.
Nun nutzt man Dijkstra um den kürzesten Weg zu finden.
Um das komplete Flooding zu verhindern, werden Duplikate mit Sequenznummern und Altersangaben verworfen.
Ich glaube Dijkstra guckt ihr euch kurz eine Animation an.
Uff das war anstrengend aber fürs üben sind Aufgaben wichtig:
Aufgaben
Du bekommst ein Netzwerk mit Subnetzen und Routern. Du musst die IP-Adressen und die Routing-Tabelle ausrechnen.
Du bekommst eine Network-Adresse wie 137.222.25.0/22 und musst sie in 6 Subnetze aufteilen. mit Subnetz 1 und 2 doppelt so groß wie die anderen
Erkläre die Unterschiede zwischen IPv4 und IPv6
Erkläre was das Problem bei Distance Vector Routing ist
Führe mit einer gegebenen Tabelle Dijkstra aus
Aufgabe 7.3 a) Kosten für i) Untersee kabel benachteiligen, ii) Hohe Kapazität bevorzugen iii) load balancen