weidner/computer/netz/

Subnetting üben mit KGN und GND

In unserem Betrieb haben wir Lehrlinge, die neben anderen Sachen auch Grundlagen der IP-Netzwerkadressierung mit Host- und Subnetbits lernen sollen. Insbesondere am Anfang, wenn sie zum ersten Mal mit den Konzepten von IP-Adresse, Netzmaske, Hostbits und Netzwerkbits konfrontiert werden, steht einigen von ihnen die Ratlosigkeit ins Gesicht geschrieben.

Zwar gut gemeint, aber nicht immer hilfreich ist es dann wenn jeder seine ganz persönlichen Tricks verrät, mit denen er Subnetzmasken, Netz- und Broadcastadressen und was sonst noch benötigt wird, ausrechnet. Auch ich muss bekennen, dass ich mit meiner Hilfsbereitschaft die bestehende Konfusion schon vergrößert habe.

Inzwischen bin ich davon abgekommen und versuche, zusätzliche Informationen, Tricks und Kniffe nur dann abzugeben, wenn ich glaube, dass sie aufgenommen werden können oder wenn ich explizit danach gefragt werde.

Was ich aber nach wie vor für unerlässlich halte, ist üben, üben, üben. Und genau dafür gibt es dieses Spiel.

Gegeben sind zwei beliebige IP-Adressen und gesucht sind

a) das kleinste gemeinsame Netz (KGN), das beide Adressen beinhaltet und

b) das größte Netz dazwischen (GND), das zwischen den beiden Adressen liegt, sie aber nicht enthält.

Wie die beiden Netze ausgerechnet werden, ist mir egal. Hauptsache die Netzadresse und -maske erfüllen jeweils die gegebenen Bedingungen.

Damit die Mitspieler motiviert sind, das Spiel mitzuspielen, gibt es die Aufgabe immer dann, wenn jemand etwas von mir will, zum Beispiel einen Switchport für eine Dose freischalten.

Perl-Skript

Damit ich mir nicht jedes mal zwei IP-Adressen ausdenken muss, habe ich folgendes simple Perl-Skript geschrieben, das bei jedem Aufruf zwei zufällige Adressen ausgibt.

#!/usr/bin/env perl
#
# vim: set sw=4 ts=4 et ai si:
#
# The game goes like this:
# 1. The scripts prints two IPv4 addresses.
# 2. You determine the smallest IPv4 network comprising both addresses.
# 3. You determine the biggest IPv4 network that fits between both
#    addresses without containing either of them.
#
use strict;
use warnings;

# generate random IPv4 address
# thanks to Anonymous Monk at https://www.perlmonks.org/?node_id=389031
#
sub random_ipv4 {
    return join ".", map int rand 256, 1..4;
}

print random_ipv4, "\n", random_ipv4, "\n";

__END__

Damit kann ich in wenigen Sekunden eine neue Aufgabe stellen und komme nicht in Versuchung, absichtlich ein paar interessante Kombinationen auszudenken. Das hebe ich mir für Fortgeschrittene auf.

Einfache Lösungsverfahren

Falls jemand absolut nicht klar kommt mit der Aufgabe, folgt hier noch ein einfaches Verfahren für IPv4, mit denen man zur Lösung kommen kann.

Simples Verfahren für KGN

  1. Sind beide Adressen gleich, dann ist das KGN genau diese Adresse mit einer Netzmaske von 32 Bit.

  2. Starte mit dem Netz 0.0.0.0/0, dieses enthält beide Adressen.

  3. Halbiere das Netz.

    2.1. Sind beide Adressen in verschiedenen Teilnetzen, dann ist das eben halbierte Netz das KGN.

    2.2. Mach mit dem Halbieren des Netzes weiter, welches beide Adressen enthält.

Simples Verfahren für GND

  1. Sind beide Adressen gleich oder folgen sie unmittelbar aufeinander, gibt es kein GND.

  2. Halbiere das KGN

  3. Halbiere das Teilnetz mit der kleineren Adresse:

    2.1. Ist die kleinere Adresse im ersten Teilnetz, dann ist das zweite Teilnetz ein Kandidat für das GND.

    2.2. Hat die neue Netzmaske 32 Bit, dann gibt es keinen Kandidat in dieser Hälfte des KGN.

    2.3. Mach weiter mit dem Halbieren des Teilnetzes mit der kleineren Adresse.

  4. Halbiere das Teilnetz mit der größeren Adresse:

    3.1. Ist die größere Adresse im zweiten Teilnetz, dann ist das erste Teilnetz ein Kandidat für das GND.

    3.2. Hat die neue Netzmaske 32 Bit, dann gibt es keinen Kandidat in dieser Hälfte des KGN.

    3.3. Mach weiter mit dem Halbieren des Teilnetzes mit der größeren Adresse.

  5. Vergleiche die Kandidaten und wähle das größere Teilnetz.

Es ist möglich, dass beide Kandidaten gleich groß sind, dann gibt es zwei GND.

Posted 2019-11-21
Tags: