Prof. Dr. Franz Schweiggert Abteilung Angewandte Informationsverarbeitung 7. November 2001
Christian Ehrhardt Blatt 3


Uni Logo



Allgemeine Informatik 3 (WS 2001/2002)


Abgabetermin 13.11.2001 vor den Übungen

Netzwerke (10 Punkte)

Jeder Rechner im Internet wird durch eine sogenannte IP-Adresse identifiziert. Eine solche Adresse besteht aus 32 Bit. Normalerweise wird sie aber als Folge von vier Bytes getrennt durch einen Punkt geschrieben. Zum Beispiel ist 134.60.66.5 die Adresse der thales. Als eine 32 Bit Zahl würde dies dezimal dem Wert 2252096005 und Hexadezimal dem Wert 0x863c4205 ergeben.
Wenn man eine ganze Klasse von Adressen (auch Netzwerk genannt) beschreiben will, dann benötigt man zwei Angaben: Eine weitere Adresse liegt genau dann in dem so beschriebenen Netzwerk, wenn diejenigen Bits, die in der Netzmaske den Wert 1 haben in beiden Adressen (diejenige aus der Netzwerkbeschreibung und die, die getestet werden soll) übereinstimmen. Bits, die in der Netzmaske den Wert 0 haben können durchaus abweichen.
Die thales gehört zu einem Netzwerk, mit der Netzmaske 255.255.255.0, d.h. die ersten 24 Bits der Netzmaske sind gesetzt, die letzten 8 nicht. Zum selben Netzwerk gehören also alle Rechner, deren Adresse mit 134.60.66 beginnt.
Ihr Programm soll ein Netzwerk, d.h. eine Adresse und eine Netzmaske einlesen. Für jede weitere eingelesene Adresse soll dann entschieden werden, ob diese Adresse zum angegebenen Netzwerk gehört.
Die Netzmaske wird üblicherweise direkt hinter der Adresse angegeben und von ihr durch einen Schrägstrich (/) getrennt. Um die Netzmaske selbst anzugeben, gibt es zwei Möglichkeiten: Diese beiden Netze sind also identisch: 134.60.66.0/255.255.255.0 und 134.60.66.0/24.
Wenn bei einer Netzwerkbeschreibung gar keine Netzmaske angegeben ist, soll folgende Heuristik zur Bestimmung der Netzmaske verwendet werden: Beim Einlesen der Netzwerkbeschreibung soll Ihr Programm selbständig erkennen, ob eine Netzmaske mit angegeben wurde und welche der beiden Formen verwendet wurde.
Zur Verdeutlichung wird die Eingabe hier noch formal in EBNF beschrieben ($\backslash$n steht für ein Newline):
input ::= network addresses
network ::= address ``$\backslash$n'' $\vert$ address ``/'' netmask ``$\backslash$n''
addresses ::= address ``$\backslash$n'' $\vert$ address ``$\backslash$n'' addresses
address ::= number ``.'' number ``.'' number ``.'' number
netmask ::= address $\vert$ number
number ::= positive Dezimalzahl

Hinweise: Sie können in dieser Aufgabe davon ausgehen, daß 0.0.0.0 keine gültige Adresse sein kann und auch nicht als solche in der Eingabe auftaucht. Als Netzmaske ist 0.0.0.0 dagegen zulässig.
Für alles, was mit Netzmasken oder Adressen zu tun hat, sollten vorzeichenlose Datentypen (am besten ``unsigned int'') verwendet werden. Um eine solche Zahl einzulesen oder auszugeben, muß ``%u'' statt ``%d'' verwendet werden.



Christian Ehrhardt 2001-11-07