====== Aufgaben B: IP-Adresse & Subnetzmaske ======
=== 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?
=== 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?
=== 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 (Eingabeaufforderung): ipconfig
Mac:
* Terminal: ifconfig
* Systemeinstellung / Netzwerk / WLAN / Weitere Optionen / TCP/IP
=== 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 Eintrag zu IPv6 unten:
++++IPv6 Info|
Um die Knappheit der IPv4 Adressen zu lösen, wurde ab 1999 [[wpde>IPv6]] eingeführt, das 2128 mögliche Adressen bietet. Damit ist also nicht nur möglich, jedes Gerät mit einer Adresse zu versorgen, sondern es hat sogar genügend Adressen für jedes Atom im Universum...
IPv6-Adressen werden meist in Blöcken zu vier Hexadezimalzahlen (0-9,a-f) dargestellt: `2001:0db8:85a3:08d3:1319:8a2e:0370:7347`
Beim Routing und den anderen Netzwerkschichten ändert sich nur wenig im Vergleich zu IPv4
++++
=== Aufgabe B5 (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$.
a) Wandle um $4-$Byte-Notation $\rightarrow$ CIDR-Notation:
* i) $255.255.255.255$
* ii) $255.255.255.0$
* iii) $255.240.0.0$
b) Wandle um CIDR-Notation $\rightarrow$ $4-$Byte-Notation:
* i) $/7$
* ii) $/25$
=== Aufgabe B6: Subnetzmasken ===
1. Wie viele Hosts kann ein Netzwerk mit Subnetzmaske $255.255.255.192$ haben?
1. Wie viele Hosts kann ein Netzwerk mit CIDR /14 haben?
1. Welche Subnetzmaske (normal und CIDR) sollte der Informatiker einer Firma mit ca. $5000$ Geräten für das Netzwerk der Firma wählen?
=== Zusatzaufgaben (Programmieren) ===
== a) ==
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.
== b) ==
Programmiere nun eine eigene Auswahl der folgenden Funktionen:
* Subnetzmaske in andere Formate umwandeln:
* `subnet_dec_to_bin(subnet)`
* `subnet_bin_to_dec(subnet_bin)`
* `subnet_bin_to_cidr(subnet_bin)`
* `subnet_dec_to_cidr(subnet)`
* `cidr_to_subnet_bin(cidr)`
* `cidr_to_subnet_dec(cidr)`
* Abzahl mögliche Hosts für Subnetzmaske (in versch. Formaten) bestimmen:
* `nr_hosts_from_subnet_bin(subnet_bin)`
* `nr_hosts_from_subnet_dec(subnet_dec)`
* `nr_hosts_from_cidr(cidr)`
== c) ==
Erweitere deinen Code aus a) und b) 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.
==== Lösungen ====
++++Aufgabe B1|
1. $2^{32} \approx 4.3$ Milliarden
1. Nein, da ca. $30$ Milliarden Geräte gibt
++++
++++Aufgabe B2|
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|
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|
$$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|
a)
i) 32, ii) 24, iii) 12
b) i) 254.0.0.0, ii) 255.255.255.128
++++
++++Aufgabe B6|
1. 62
1. 262142
1. 19
++++
**NODISP**
++++Zusatzaufgaben|
CIDR-Rechner:
### SUBNET MASK DEC TO BINARY
def subnet_dec_to_bin(subnet):
subnet_bin = []
for nr in subnet.split('.'):
nr = int(nr)
b = bin(nr)[2:]
while len(b) < 8: b = b + '0'
subnet_bin.append(b)
return '.'.join(subnet_bin)
def subnet_bin_to_dec(subnet_bin):
subnet = []
for nr in subnet_bin.split('.'):
subnet.append(str(int(nr,2)))
return '.'.join(subnet)
### GET CIDR OF SUBNET MASK
def subnet_bin_to_cidr(subnet_bin):
return subnet_bin.count('1')
def subnet_dec_to_cidr(subnet):
return subnet_bin_to_cidr(subnet_dec_to_bin(subnet))
### GET SUBNET MASK FROM CIDR
def cidr_to_subnet_bin(cidr):
b = '1' * cidr
while len(b) < 32: b = b + '0'
return b[0:8] + '.' + b[8:16] + '.' + b[16:24] + '.' + b[24:]
def cidr_to_subnet_dec(cidr):
subnet_bin = cidr_to_subnet_bin(cidr)
return subnet_bin_to_dec(subnet_bin)
### GET NR HOSTS
def nr_hosts_from_subnet_bin(subnet_bin):
zeros = subnet_bin.count('0')
return 2**zeros - 2
def nr_hosts_from_subnet_dec(subnet_dec):
subnet_bin = subnet_dec_to_bin(subnet_dec)
return nr_hosts_from_subnet_bin(subnet_bin)
def nr_hosts_from_cidr(cidr):
subnet_bin = cidr_to_subnet_bin(cidr)
return nr_hosts_from_subnet_bin(subnet_bin)
###
print(subnet_dec_to_bin("255.255.255.0"))
print(subnet_dec_to_cidr("255.192.0.0"))
print(subnet_bin_to_cidr("11111111.11111111.11111111.00000000"))
print(subnet_bin_to_dec("11111111.11000000.00000000.00000000"))
print(cidr_to_subnet_dec(10))
print(cidr_to_subnet_bin(10))
print(nr_hosts_from_subnet_bin("11111111.11111111.11111110.00000000"))
print(nr_hosts_from_subnet_dec("255.255.255.192"))
print(nr_hosts_from_cidr(12))
print(nr_hosts_from_cidr(19))
++++