====== - Netzwerke & Internet ======
===== Materialien =====
* [[gf_informatik:web:internet|Wiki zu Netzwerke & Internet]]
===== Aufgaben =====
==== Aufgaben A ====
=== Aufgabe A1: Unterseekabel ===
Ein typischer Schweizer Haushalt hat eine Internetverbindung von etwa $500$ Mbit / s. Wie viele solche Haushalte könnte man mit dem MAREA-Kabel versorgen, angenommen, dass alle gleichzeitig ihre Internetverbindung voll auslasten?
=== Aufgabe A2: Netzwerk mit direkten Verbindungen ===
* Betrachte ein Netzwerk mit $n$ Geräten, welche alle direkt miteinander verbunden sind. Wie viele Verbindungen / Kabel sind nötig?
* Entscheide selbst: Löse das Problem, indem du ...
* eine mathematische Formel dafür herleitest (besser!) oder ...
* einen Python-Code schreibst, der die Berechnung für dich übernimmt.
* Wie viele Kabel benötigt man für ein Netzwerk mit ...
* $5$ Geräten (kleiner Haushalt)?
* $200$ Geräten (mittlere Firma)?
* $30$ Milliarden Geräten (Internet)?
++++Lösungen|
=== A1 ===
$320000$ Geräte ([[https://www.google.com/search?q=160+Tbit+%2F+500+Mbit|Google]])
=== A2 ===
Anzahl Verbindungen für $n$ Geräte:
$$A = \frac{n-1}{2} \cdot n$$
Tipp für Herleitung: Berechne explizit für einige Beispiele:
* $n=5$: $A = 4 + 3 + 2 + 1 = 2 \cdot 5$
* $n=6$: $A = 5 + 4 + 3 + 2 + 1 = 2.5 \cdot 6$
* $n=7$: $A = 6 + 5 + 4 + 3 + 2 + 1 = 3 \cdot 7$
Mit Code:
def anzahl_verbindungen(n):
a = 0
for i in range(1,n):
a = a + i
return a
print(anzahl_verbindungen(1000000))
Problem: Dauert sehr lange, kaum berechenbar für $30$ Mia. Geräte
++++
==== Aufgaben B ====
=== Aufgabe B1: IPv4-Adressen ===
1. Wie viele verschiedene IPv4-Adressen gibt es?
1. Reicht dies aus, um alle Geräte im Internet eindeutig zu adressieren?
++++Lösung:|
1. $2^{32} \approx 4.3$ Milliarden
1. Nein, da es ca. $30$ Milliarden Geräte gibt.
++++
=== Aufgabe B2: Subnetzmaske ===
Eine typische Subnetzmaske in einem Heimnetzwerk ist $255.255.255.0$. Wie viele verschiedene Geräte kann man maximal haben in diesem Subnetz?
++++Lösung|
Für Hosts stehen $8$ Bits zur verfügung, also $2^8-2 = 254$ Geräte.
Achtung: Muss $2$ abziehen, da zwei Adressen nicht an Geräte vergeben werden - später mehr dazu.
++++
=== Aufgabe B3: Mein IP ===
1. Stelle sicher, dass dein Computer mit dem Eduroam-Netz der Schule verbunden ist. Bestimme dann die **(lokale) IP deines Geräts** in diesem Subnetz, sowie die **Subnetzmaske** (siehe unten).
1. Trage deine IP mit Name in Tabelle an Wandtafel.
1. Wie viele Geräte können sich mit diesem Subnetz verbinden? Reicht dies oder sollte man die Subnetzmaske anpassen?
Win:
* Terminal: ipconfig
Mac:
* Terminal: ifconfig
* Systemeinstellung / Netzwerk / WLAN / Weitere Optionen / TCP/IP
++++Lösung|
1. IP (Beispiel): $172.16.27.145$, Subnetzmaske: $255.255.248.0$
1. $11$ Bits für Hosts, also $2^{11}-2 = 2046$ Hosts. Ca. $600$ Personen an KSR, sollte also passen.
++++
=== Aufgabe B4: IPv4 ===
1. Wie du gesehen hast, reicht der IPv4-Standard nicht aus, um alle Geräte im Internet zu adressieren. Aus wie vielen Bytes müsste eine IP-Adresse mindestens bestehen, damit dies aktuell möglich ist?
1. Tatsächlich wurde dieses Problem mit IPv6 bereits angegangen. Studiere den [[gf_informatik:web:internet:ip_adressen#ipv6|Eintrag zu IPv6.]]
++++Lösung|
$2^x = 30 \cdot 10^9$
$x \approx 34.8$
Also mind. $35$ Bit.
Gleichung kann gelöst werden mit dem Logarithmus oder einfach durch ausprobieren.
++++
=== Aufgabe B5: MAC-Adresse ===
1. Bestimme die MAC-Adresse deines Computers (resp. von dessen Netzwerkkarte).
1. In welchem Format wird diese geschrieben?
1. Berechne, für wie viele Geräte dies reicht.
1. Wie viele Geräte kann bei der aktuellen Weltbevölkerung eine Person im Durchschnitt gerade noch haben? Wird die mögliche Anzahl Adressen auch für die Zukunft ausreichen?
++++Lösung|
1. MAC-Adressen bestehen aus $6$ Bytes, also $6*8 = 48$ bits.
1. Typischerweise wird jedes Byte mit einer zweistelligen Hexadezimalzahl ($16$er System) geschrieben, z.B. `2b:80:41:ae:fd:7e`.
1. Anzahl Möglichkeiten: $16^{12} = {2^{4}}^{12} = 2^{48} \approx 281 \cdot 10^{12}$, allerdings sind zwei Bits fix, also deshalb nur $2^{46} \approx 70 \cdot 10^{12}$
1. ca. $9000$ Geräte (MAC mit $46$ freien Bits), mit $48$ Bits wären es sogar etwa $35000$. Wird irgendwann nicht mehr reichen. Laut Quellen im Internet dürften um 2040 die MAC-Adressen ausgehen.
++++
=== Aufgabe B6 (CIDR) ===
Subnetzmasken können auch durch CIDR-Suffix kürzer ausgedrückt werden. Dieser Wert gibt die Anzahl Bits an, die in der Subnetzmaske $1$ sind. Z.B. steht $/10$ für $255.192.0.0$. Erklärung: `255.192.0.0` entspricht binär `11111111.11000000.00000000.00000000`, hat also zehn Einsen.
Wandle um $4-$Byte-Notation $\rightarrow$ CIDR-Notation:
* $255.255.255.255$
* $255.255.255.0$
* $255.240.0.0$
Wandle um CIDR-Notation $\rightarrow$ $4-$Byte-Notation:
* $/7$
* $/25$
++++Lösung|
siehe Tabelle hier: [[wpde>Classless_Inter-Domain_Routing#Übersicht_für_IPv4]]
++++
=== Zusatzaufgaben (Basic) ===
1. Wie viele Hosts kann ein Netzwerk mit Subnetzmaske $255.255.255.192$ haben?
=== Zusatzaufgaben (Advanced) ===
== Aufgabe 1 ==
Schreibe ein Python-Programm (z.B. eine Funktion), welches für einen gegebenen CIDR-Suffix die entsprechende Subnetzmaske im $4$-Byte-Format (z.B. $255.192.0.0$) bestimmt und umgekehrt.
== Aufgabe 2 ==
Erweitere deinen Code der vorherigen Zusatzaufgabe und implementiere einen **ultimativen Netzwerk-Rechner** im Stile der folgenden Website: https://www.heise.de/netze/tools/netzwerkrechner/
Man soll seine IP-Adresse und CIDR-Suffix angeben können und zurück erhalten:
* Subnetzmaske (verwende Code von vorheriger Zusatzaufgabe)
* Anzahl Hosts
Die weiteren Angaben (IP-Range, Broadcast, ...) können dann später hinzugefügt werden.
Falls du bereits über **Klassen/OOP** Bescheid weisst, wäre diese Aufgabe ein gutes Anwendungsbeispiel.
==== Aufgaben C ====
=== Aufgabe C1 ===
Betrachte folgendes Netzwerk
{{ :gf_informatik:web:internet:network.png?600 |}}
Die Routing-Tabelle für den Router oben links ist:
^Zeile ^ IP-Präfix ^ Router ^ Handlung ^
| 1 | 1.1.3.1 | localhost (ich selbst, Netzwerkkarte 1) | Paket empfangen (eigene Adresse) |
| 2 | 3.3.3.3 | localhost (auch ich selbst, Netzwerkkarte 2) | Paket empfangen (eigene Adresse) |
| 3 | 1.1.3.0/24 | -- | Direkt versenden über Netzwerkkarte 1, Ziel im gleichen Subnetz 1.1.3 |
| 4 | 3.3.3.0/24 | -- | Direkt versenden über Netzwerkkarte 2, Ziel im gleichen Subnetz 3.3.3 |
| 5 | 1.1.1.0/24 | 3.3.3.2 | Weiterleiten über 3.3.3.2 |
| 6 | 1.1.8.0/24 | 3.3.3.8 | Weiterleiten über 3.3.3.8 |
| 7 | 1.1.6.0/24 | 3.3.3.4 | Weiterleiten über 3.3.3.4 |
| 8 | * | 3.3.3.1 | Alles andere: An den Router (auch *Gateway*) 3.3.3.1 senden zur Weiterleitung |
**Teil I:**
Der Router erhält ein Paket für eine gewisse IP-Adresse. Lese entsprechend die Routing-Tabelle aus und notiere die relevanten Zeilen:
1. IP-Adresse: 1.1.3.2
1. IP-Adresse: 1.1.1.5
1. IP-Adresse: 94.130.229.77
1. IP-Adresse: 1.1.3.1
**Teil II:** Notiere die Routing-Tabelle für den Router 1.1.8.1/3.3.3.8
++++Lösung:|
** Teil 1:**
1. Zeile 3 (gleiches Subnetz)
1. Zeile 4, dann Zeile 4 (Weiterleiten via 3.3.3.2)
1. Zeile 8, dann Zeile 4 (Weiterleiten via 3.3.3.1)
1. Zeile 1 (Localhost - Gerät selber)
** Teil 2:**
^Zeile ^ IP-Präfix ^ Router ^ Handlung ^
| 1 | 1.1.8.1 | localhost (ich selbst, Netzwerkkarte 1) | Paket empfangen (eigene Adresse) |
| 2 | 3.3.3.8 | localhost (auch ich selbst, Netzwerkkarte 2) | Paket empfangen (eigene Adresse) |
| 3 | 1.1.8.0/24 | -- | Direkt versenden über Netzwerkkarte 1, Ziel im gleichen Subnetz 1.1.8 |
| 4 | 3.3.3.0/24 | -- | Direkt versenden über Netzwerkkarte 2, Ziel im gleichen Subnetz 3.3.3 |
| 5 | 1.1.1.0/24 | 3.3.3.2 | Weiterleiten über 3.3.3.2 |
| 6 | 1.1.3.0/24 | 3.3.3.3 | Weiterleiten über 3.3.3.3 |
| 7 | 1.1.6.0/24 | 3.3.3.4 | Weiterleiten über 3.3.3.4 |
| 8 | * | 3.3.3.1 | Alles andere: An den Router (auch *Gateway*) 3.3.3.1 senden zur Weiterleitung |
++++
==== Aufgaben D: TCP/IP ====
=== Aufgabe D ===
Studiere die **TCP/IP-Visualisierung:** https://oinf.ch/interactive/tcp-ip-visualisierung/
Diese zeigt sehr detailliert, was genau passiert, wenn man eine Website aufruft.
Hole dir aus den Slides die nötigen Informationen, um die folgenden Fragen zu beantworten:
1. Was ist ein **Three Way Handshake** und wozu werden die **SYN,ACK,FIN**-Bits gebraucht?
1. Wofür steht **ARP**? Wozu wird dieses Protokoll benötigt und wie funktioniert es (grob)?