Aufgaben B: IP-Adresse & Subnetzmaske
Aufgabe B1: IPv4-Adressen
Wie viele verschiedene IPv4-Adressen gibt es?
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
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).
Trage deine IP mit Name in Tabelle an Wandtafel.
Wie viele Geräte können sich mit diesem Subnetz verbinden? Reicht dies oder sollte man die Subnetzmaske anpassen?
Win:
Mac:
Aufgabe B4: IPv4
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?
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 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:
Aufgabe B6: Subnetzmasken
Wie viele Hosts kann ein Netzwerk mit Subnetzmaske $255.255.255.192$ haben?
Wie viele Hosts kann ein Netzwerk mit CIDR /14 haben?
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:
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:
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
$2^{32} \approx 4.3$ Milliarden
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
IP (Beispiel): $172.16.27.145$, Subnetzmaske: $255.255.248.0$
$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
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))