====== Aufgaben D: Vom Subnetz zum Internet ====== ==== Aufgabe D1: Lokale vs. globale IP-Adresse ==== Typischerweise verbindet man sich mit einem Subnetz, welches mit dem Internet verbunden ist. Der Computer hat dann zwei unterschiedliche IP-Adressen: eine lokale und eine globale. 1. Erkläre den Unterschied zwischen der lokalen und einer globalen IP-Adresse. 1. Wie ermittelst man die lokale und die globale IP-Adresse? Beachte: Zwei ziemlich unterschiedliche Vorgehen. 1. Ermittle die aktuelle lokale und globale IP-Adresse deines Computers. ==== Aufgabe D2: Gleiches Netzwerk oder nicht? ==== Löse diese Aufgabe mithilfe von Python/TigerJython (siehe Tipps unten). In einem Subnetz mit Maske 255.255.255.192 hat ein Laptop die IP-Adresse 192.168.1.102. Aufgrund der Maske ist festgelegt, welche anderen IP-Adressen im gleichen Subnetz vergeben werden dürfen. Bestimme, welche der folgenden IP-Adressen in diesem Subnetz vergeben werden können und welche nicht: * 192.168.1.33 * 192.168.1.87 * 192.168.1.130 Begründe deine Antworten. Tipp 1: Es muss gerechnet werden, verwende dafür Python/TigerJython. Für mehr Tipps, siehe unten. *Optional:* (aber sehr empfohlen): Schreibe einen Code, mit dem du einfach IP-Adressen und Subnetzmasken von der dezimalen 4-Byte-Notation in die Binär-Notation umwandeln kannst und umgekehrt. Schreibe z.B. folgende Funktionen: print(ip_dec_to_bin([133,162,149,238])) print(ip_bin_to_dec("10000101.10100010.10010101.11101110")) ++++Tipps Python/TigerJython| Mit Python/TigerJython kannst du ganz einfach Binärzahlen in Dezimalzahlen umrechnen und umgekehrt: print(int("1101",2)) # Binärstring in Dezimalzahl umwandeln print(bin(13)) # Dezimalzahl in Binärstring umwandeln Erinnerung: Auch mit allen grundlegenden Operationen kann einfach gerechnet werden: print(2*3*5*7*11) print(2**15) # Potenzen, Hoch-Rechnen ++++ ++++Tipps 2| Erinnerung: Die Subnetzmaske gibt an, in welchen Bits die IP-Adressen eines Netzwerks übereinstimmen müssen. Daher musst du die Adressen und Maske zuerst in Binärzahlen umrechnen. Verwende dazu Python/TigerJython (siehe Tipp dazu). ++++ ==== Aufgabe D3: I InformatikerIn ==== Du wurdest beauftragt, ein Heimnetzwerk einzurichten, an welches folgende Geräte angeschlossen werden sollen: * 5 Smartphones, 3 Laptops, 1 Desktop-Computer, 1 Drucker, 2 Fernsehboxen, 1 PlayStation, 1 Kühlschrank. * Platz für weitere 5 Geräte. Auftrag: 1. Welche **Subnetzmaske** wählst du? Wähle diese so restriktiv wie möglich, so dass sie aber genügend Platz für die geforderte Anzahl Geräte bietet. Gib die Subnetzmaske in den folgenden drei Formaten an: 4-Byte, binär, CIDR 1. Mache eine **Skizze des Netzwerks**, an dessen Zentrum ein Switch steht. Weise jedem Gerät eine passende **lokale IP-Adresse** zu. Beachte: Diese muss mit der Subnetzmaske kompatibel sein. 1. Wähle eine passende **globale IP-Adresse** für das Netzwerk. ==== Aufgabe D4: Umrechnungen Repetition ==== Solche Aufgabentypen hast du bereits gelöst. 1. Wandle die Maske von der 4-Byte-Notation 255.254.0.0 in die CIDR-Notation um 1. Wie viele IP-Adressen können im Subnetz aus 1. vergeben werden? 1. Im Netzwerk einer Firma benutzen allerhöchstens $1000$ Geräte das Netzwerk. Welche Maske (in 4-Byte-Notation) sollte gewählt werden? 1. In einem Netzwerk mit Maske /20 existiert ein Gerät mit IP 29.185.149.170. Ist es möglich, dass im gleichen Netzwerk auch die IP 29.185.144.42 vergeben wird? ==== Aufgabe D5: Broadcast und Netzwerk Adresse ==== Wir haben bereits gesehen, dass man beim Berechnen der Anzahl IP-Adressen, die innerhalb eines Subnetzes vergeben werden können, zwei abziehen muss. Dies kommt daher, dass zwei IP-Adressen fix vergeben sind: * Die kleinste mögliche erlaubte IP-Adresse ist die sogenannte **Netzwerk Adresse.** Diese kann man als die Adresse des gesamten Netzwerks betrachten. * Die grösste mögliche erlaubte IP-Adresse heisst **Broadcast Adresse.** Über diese kann man direkt alle Geräte des Subnetzes Adressieren. In dieser Aufgabe geht es darum, für ein vorgegebenes Netzwerk diese beiden Spezialadressen zu ermitteln. Klicke auf "Tipps", um solche zu erhalten, falls du sie benötigen solltest. ++++Tipps| Stelle die Maske und die vorgegebene IP-Adresse im Binärsystem dar. Verwende dafür wieder Python. Die Netzwerk Adresse und Broadcast Adressen stimmen in dem Teil, in dem die Maske aus Einsen besteht mit der vorgegebenen IP-Adresse überein. Um die Netzwerk Adresse zu erhalten, füllst du den Rest mit Nullen auf (kleinste mögliche erlaubte IP-Adresse. Wie ermittelt man die Broadcast Adresse? ++++ Ermittle die **Netzwerk Adresse** und die **Broadcast Adresse** für ein Netzwerk mit Maske ..., in dem die IP-Adresse ... vorkommt: 1. Maske /24, IP-Adresse: 192.168.1.127 1. Maske /20, IP-Adresse: 29.185.149.17 1. In den beiden Netzwerken von 1. und 2.: Welches sind die kleinste und grösste IP-Adressen, die an normale Geräte vergeben werden können? ===== Lösungen ===== ++++Aufgabe D1| siehe Slides zum Thema ++++ ++++Aufgabe D2| * 192.168.1.33: nicht gleiches NW * 192.168.1.87: gleiches NW * 192.168.1.130: nicht gleiches NW ++++ ++++Aufgabe D3| Wichtig: Stelle sicher, dass alle IP-Adressen im gleichen Subnetz vorkommen können. Siehe dazu Aufgabe D2. ++++ ++++Aufgabe D4| 1. $15$ 1. $131070$ 1. 255.255.252.0 1. Ja. Wandle IP-Adressen und Masken ins Binärsystem um, um dies zu zeigen! Verwende dazu Python. ++++ ++++Aufgabe D5| 1. Netzwerk Adresse: 192.168.1.0, Broadcast Adresse: 192.168.1.255 1. Netzwerk Adresse: 29.185.144.0, Broadcast Adresse: 29.185.159.255 1. 192.168.1.1 / 192.168.1.254 und 29.185.144.1 / 29.185.159.254 ++++ NODISP ++++Code IP bin <-> dec| def ip_dec_as_string(ip): st = "" for nr in ip: st += str(nr) + "." return st[0:len(st)-1] def ip_dec_list_to_bin(ip): # [133,162,149,238] -> "10000101.10100010.10010101.11101110" bin_ip = '' for nr in ip: b = bin(nr)[2:] while len(b) < 8: b = '0' + b bin_ip += b + "." return bin_ip[0:len(bin_ip)-1] def ip_dec_to_bin(ip): # "133.162.149.238" -> "10000101.10100010.10010101.11101110" ip = [int(x) for x in ip.split('.')] return ip_dec_list_to_bin(ip) def ip_bin_to_dec_list(ip_bin): # "10000101.10100010.10010101.11101110" -> [133,162,149,238] ip = [] ip_bin = ip_bin.split('.') for nr in ip_bin: ip.append(int(nr,2)) return ip def ip_bin_to_dec(ip_bin): # "10000101.10100010.10010101.11101110" -> "133.162.149.238" ip = ip_bin_to_dec_list(ip_bin) ip = [str(x) for x in ip] return '.'.join(ip) def mask_bin_to_cidr(mask_bin): count = 0 for x in mask_bin: if x == '1': count += 1 return count print(ip_dec_list_to_bin([133,162,149,238])) print(ip_dec_to_bin("133.162.149.238")) print(ip_bin_to_dec_list("10000101.10100010.10010101.11101110")) print(ip_bin_to_dec("10000101.10100010.10010101.11101110")) def ip_dec_same_network_all_dec(mask,ip_1,ip_2): cidr = mask_bin_to_cidr(ip_dec_to_bin(mask)) ip_1 = ''.join(ip_dec_to_bin(ip_1).split('.')) ip_2 = ''.join(ip_dec_to_bin(ip_2).split('.')) for i in range(cidr): if ip_1[i] != ip_2[i]: return False return True print(ip_dec_same_network_all_dec("255.255.255.192","192.168.1.102","192.168.1.33")) print(ip_dec_same_network_all_dec("255.255.255.192","192.168.1.102","192.168.1.87")) print(ip_dec_same_network_all_dec("255.255.255.192","192.168.1.102","192.168.1.130")) ++++