Die TCP/IP-Nummer (IPv4)
Willemers Informatik-Ecke
Die TCP/IP- oder Internetnummer ist eine 32-Bit Zahl, die die Netzwerkschnittstelle eines Computers im Netz eindeutig bestimmt.

Die Netzkennung in der IP-Adresse

Der erste Teil der Nummer bezeichnet das Netz, in dem der Computer sich befindet, der zweite Teil den Computer selbst. Alle Computer, die direkt miteinander verbunden sind, gehören zum gleichen Netz und haben die gleiche Netzkennung in ihrer Internetnummer. Wie man mit einem Computer kommunizieren kann, der eine fremde Netzkennung hat, wird unter Routing behandelt. Ohne besondere Maßnahmen reagiert der Computer auf den Versuch, auf eine fremde Netzadresse zuzugreifen mit der Fehlermeldung "no route to host".

Die Hostkennung in der IP-Adresse

Der hintere Teil der Internetnummer ist die Adresse des Computers im Netz. Um genau zu sein, ist es die Kennung des Netzwerkadapters des Computers. Da aber die meisten Computer nur einen Adapter haben, soll der einfacheren Lesbarkeit halber auch weiter von Computern die Rede sein. Jeder Adapter muss eine eigene Nummer haben. Mehrere Rechner mit gleicher Hostkennung führen in größeren Netzen zu schwer auffindbaren Fehlern.

Darstellung

Die Grenze zwischen Netzkennung und Hostkennung liegt normalerweise auf einer Bytegrenze. Darum wird für IP-Nummern eine byteweise Darstellung gewählt. Da Dezimalzahlen am einfachsten zu lesen sind, schreibt man jedes der vier Byte einer IP-Adresse dezimal auf und trennt sie durch einen Punkt. Beispielsweise hat mein Arbeitsplatzrechner in meinem heimatlichen Netzwerk die TCP/IP-Nummer 192.168.109.144. Hexadezimal ergibt dies C0 A8 6D 90. Wieder als ganze Zahl geschrieben lautet die Nummer 3232263568. Mein Macintosh hat die Adresse 192.168.109.25 oder hexadezimal C0 A8 6D 19 und damit 3232263449.

Darstellung Arbeitsplatz Macintosh
dezimal 3232263568 3232263449
hexadezimal C0 A8 6D 90 C0 A8 6D 19
dotted decimal 192.168.109.144 192.168.109.25

Netzwerkklasse und Netzmaske

Wie schon ausgeführt, kennzeichnet die IP-Nummer den Rechner bzw. dessen Netzadapter und das Netzwerk, in dem sich der Rechner befindet. Im Beispiel meines Netzes ist offensichtlich 192.168.109 bei beiden Rechnern gleich. Und tatsächlich benennen die ersten drei Byte in diesem Fall das Netz und das letzte Byte den Rechner. Man sollte also denken, ich könnte in mein Hausnetz maximal 256 Rechner einbinden, da ein Byte die Werte von 0 bis 255 annehmen kann. Allerdings sind die 0 und die 255 für andere Zwecke reserviert, so dass ich mit 254 Rechnern in meinem Arbeitszimmernetz auskommen muss.

Netzmaske und Netzklasse

Welcher Teil der IP-Nummer zum Host und welche zum Netzwerk gehört, wird durch die Netzmaske bestimmt. Die Maske ergibt sich zunächst aus der Netzklasse, zu der die IP-Nummer gehört. Die Netzklasse wiederum wird durch die ersten Bits des ersten Bytes der IP-Nummer bestimmt.

Class A

Ist das erste Bit 0, liegt das erste Byte also zwischen 1 und 127, gehört die Adresse zu einem Class A Netz. Class A Netze haben eine Netzmaske von 255.0.0.0.

Warum heißt nun diese Zahl Netzmaske und warum ist sie 255? Mit der Netzmaske und der UND-Verknüpfung kann man den Netzanteil einer IP-Adresse herausfiltern. Das UND ist ein logischer Ausdruck auf Binärebene, die genau dann eine 1 ergibt, wenn beide Operanden 1 sind. Um das an einem Beispiel zu demonstrieren, wird die Class A Netzadresse 10.3.4.7 mit der Netzmaske 255.0.0.0 gefiltert.

Adresse:
dezimal     10       3        4        7
binär       00001010 00000011 00000100 00000111

Netzmaske: dezimal 255 0 0 0 binär 11111111 00000000 00000000 00000000

Adresse 00001010 00000011 00000100 00000111 Netzmaske 11111111 00000000 00000000 00000000 UND ------------------------------------- Ergebnis 00001010 00000000 00000000 00000000 dezimal 10 0 0 0

Durch die Verknüpfung UND von Adresse und Netzmaske wird der Netzanteil der Adresse >>herausmaskiert<<. Der Netzanteil heißt hier 10.0.0.0. Es ist also das erste Byte die Netzadresse und der Rest ist die Adresse des Netzadapters.

Class B

Die 192 ist binär 11000000. Alle Werte, die kleiner als 192 sind, beginnen mit der Bitkombination 10 und gehören zu einem Class B Netz. Die Netzmaske im Class B Netz ist 255.255.0.0, also sind die ersten zwei Byte der Anteil der Netzadresse und der Rest ist die Rechneradresse.

Class C

Die Nummern 224-255 im ersten Byte sind reserviert und dürfen nicht als Netzwerknummern verwendet werden. Dies sind die IP-Nummern, die mit drei Einsen beginnen. Das erste Byte in einem Class C Netz beginnt mit der Bitkombination 110 und liegt zwischen 192 und 223 (also auch mein Hausnetz). Es hat die Netzmaske 255.255.255.0 und hat damit 3 Byte für die Netzkennung und ein Byte für die verschiedenen Computer.

Bei einem größeren Unternehmen könnte ein Class B Netz mit den Nummern 128-191 schon sinnvoller sein, da hier ca. 16000 Computer im Netz sein können. Richtig viele Computer passen in ein Class A Netz. Allerdings gibt es von diesen nur 128.

Class D

Der Bereich der Netze über 224 hat eine Sonderstellung. So ist dienen die Adressen des Class D Netzes für Multicast-Adressen. Durch das Ansprechen einer Adresse werden mehrere Rechner gleichzeitig angesprochen. Anwendung findet diese Technik bei Routern und auch bei Rendezvous, einer Technologie von Apple zum Betrieb lokaler Netze, die keine Konfiguration erfordern.

Anzahl Bits für Netze Anzahl der Netze Anzahl Bits für Hosts Anzahl der Hosts Kennungen des ersten Byte
Class A 7 128 24 16777216 1-127 (0xxxxxx)
Class B 14 16384 16 65534 128-191 (10xxxxxx)
Class C 21 2097152 8 254 192-223 (110xxxxx)
Class D 224-239 (1110xxxx)
Class E 240-255 (1111xxxx)

Die Nummer einer Station darf weder alle Bits der Host-ID 1 oder 0 haben. Alle Bits 1 ist die Broadcast-Adresse des Netzes. Ein Paket an diese Adresse wird von allen Rechnern des Netzes gelesen. Sind alle Bits 0, bezeichnet diese Adresse das Teilnetz. Dies wird beispielsweise beim Routing so verwendet.

Verbindungsanforderung

Wenn also zwei oder mehrere Rechner in einem lokalen Netz direkt miteinander verbunden werden sollen, müssen folgende Dinge gewährleistet sein:

Freie IP-Nummern

Nummern für lokale Netze

Für jede Klasse wurde in der RFC 1597 ein Bereich von Nummern definiert, der im Internet nicht weiter transportiert wird. Eine solche Nummer sollte für lokale Netze verwendet werden, sofern keine eigenen internetfähigen IP-Nummer reserviert worden sind.1) Anders ausgedrückt heißt das, dass diese Nummern beliebig oft in der Welt verwendet werden können. Da solche Pakete im Internet nicht weitergeleitet werden, macht es gar nichts, wenn noch jemand anderes genau die gleichen Netzwerkadressen für sein Hausnetz verwendet.

Klasse Nummernkreis
Class A 10.0.0.0
Class B 172.16.0.0 bis 172.31.0.0
Class C 192.168.0.0 bis 192.168.255.0

Freie Nummern gewährleisten Kollisionsfreiheit

Wenn eine kleine Firma für ihr internes TCP/IP-Netz einen Nummernkreis sucht, sollte es sich unbedingt einen dieser Bereiche aussuchen. Da keine dieser Nummern im Internet vorkommt, gibt es auch keinen Web-, FTP- oder E-Mailserver mit einer solchen Adresse. Damit ist immer eindeutig, ob mit einer Adresse ein Rechner im lokalen Netz oder ein Server im Internet angesprochen wird. Es können auch durch eigene Adressen keine Internetadressen ausgeblendet werden. Ein zweiter Grund betrifft die Sicherheit gegen Angriffe aus dem Internet. Dadurch, dass diese Nummern im Internet nicht geroutet werden, kann ein Angreifer die Rechner des Netzes kaum direkt erreichen.

Grundeinstellungen des Netzadapters: ifconfig

IP-Adressen im laufenden Betrieb ändern

Mit dem Befehl ifconfig kann die Internet-Adresse jeder Schnittstelle festgelegt werden. Das funktioniert auch im laufenden Betrieb. Für das Umstellen der IP-Nummer ist also unter UNIX kein Reboot erforderlich. Allerdings hängen an der IP-Nummer oft einige andere Konfigurationen. Der Aufruf von ifconfig hat folgende Struktur:

ifconfig  Netzadapter  IP-Nummer

ifconfig erwartet als ersten Parameter die Bezeichnung des Netzadapterdevices. Dabei wird allerdings der Pfadname /dev weggelassen. Die Namen dieser Gerätedateien unterscheiden sich je nach System.

System Interfacename
SCO: Je nach Hardware 3b0, wdn0 und so weiter
OS/2 ftp PCTCP: nd0
Linux: eth0
Solaris: le0
FreeBSD: ed0

loopback

Das einzige Device, das auf jeder Maschine den gleichen Namen hat, ist die Loopback-Einheit und heißt lo0. Dieses Pseudodevice verweist auf die eigene Maschine.

Soll mein Arbeitsplatzrechner auf die bereits genannten IP-Adresse umgestellt werden, lautet der Befehl unter Linux:

ifconfig eth0 192.168.109.144

Hier wird der ersten Ethernetkarte die Internet-Adresse 192.168.109.144 zugeordnet.

Schnittstelleninfo

Der Befehl ifconfig eth0 ohne weiteren Parameter zeigt die aktuelle Einstellung des Interfaces an. Beispiel:

gaston:~ # ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:00:E8:59:88:0F
          inet addr:192.168.109.144  Bcast:192.168.109.255 
          Mask:255.255.255.0
          inet6 addr: fe80::200:e8ff:fe59:880f/10 Scope:Link
          inet6 addr: fe80::e859:880f/10 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          Interrupt:5 Base address:0xef40 

Ohne gleich alles verstehen zu wollen, was in dieser Meldung auftritt, können Sie schon einiges wiedererkennen. In der ersten Zeile ist unter HWaddr (Hardware Address) die Ethernetadresse zu sehen. Man kann sehen, dass die Broadcastadresse der Netzadresse mit einer 255 anstelle des Hosts entspricht. Die Netzmaske ist erwartungsgemäß 255.255.255.0. Besonders interessant ist das Wörtchen UP. Es bedeutet, dass dieses Netzinterface aktiv ist. Man kann einen Netzadapter auch einfach mit dem Befehl ifconfig abschalten. Dazu dient der Parameter down zum abstellen bzw. up zum reaktivieren. Beispiel:

ifconfig eth0 down

Dies ist vor allem bei temporären Verbindungen von Bedeutung. Aber es kann auch im Servicefall ganz praktisch sein, eine Maschine schnell mal aus dem Netz zu nehmen.

Wenn es Schwierigkeiten mit der Netzanbindung gibt, kann ein ifconfig auf die Netzschnittstelle anzeigen, ob die Schnittstelle aktiv ist. Wenn die Netzwerkhardware nicht korrekt erkannt wird, meldet der Befehl einen IOCTL-Fehler. Das ist eine Fehlermeldung des Hardwaretreibers, dass er keinen Control Befehl absetzen kann.

Dauerhaftes Einstellen der IP-Nummer

Die IP-Nummer wird normalerweise in einer der rc-Dateien eingestellt. Dabei wird üblicherweise der Befehl ifconfig verwendet. Durch die Suche nach dem Wort ifconfig mit dem Befehl grep ist die entsprechende Stelle schnell gefunden. Allerdings wird die IP-Nummer unterschiedlich konfiguriert. Auf älteren UNIX-Systemen stand die IP-Nummer direkt hinter dem ifconfig und man hat sie dort im rc-Skript einfach geändert, wenn der Rechner auf Dauer eine andere Adresse haben sollte. Finden Sie an dieser Stelle eine IP-Nummer, können Sie sie bedenkenlos ändern. Steht hinter dem ifconfig eine Umgebungsvariable oder das Ergebnis eines Dateiauslesens, sollten Sie versuchen, die Quelle zu finden und dort zu ändern. Ein Einsetzen der direkten IP-Nummer wird sicher auch funktionieren. Falls aber jemand anders später versucht, die Nummer auf korrekte Art zu ändern, wird er sich wundern, warum nach jedem Reboot die alte IP-Nummer wieder aktiv ist.

Solaris über den Hostname

Bei Solaris wird die IP-Adresse über den Namen definiert. Für jeden Netzadapter gibt es eine Datei, die den Namen der Maschine oder besser des Adapters enthält, beispielsweise /etc/hostname.le0. Der darinstehende Name wird dann in der Hostnamensdatei /etc/hosts gesucht und daraus die IP Nummer bestimmt. Eine Änderung der IP-Nummer würde also in der Datei /etc/hosts erfolgen.

rc.config

Unter Linux ist die Art der Bestimmung von der Distribution abhängig. SuSE verwendet dazu seine Universalkonfigurationsdatei /etc/rc.config. Im Skript /etc/init.d/network findet man den ifconfig, der die Umgebungsvariable IFCONFIG benutzt, die in rc.config definiert ist.

FreeBSD

FreeBSD verwendet die Datei rc.config um eine Umgebungsvariable mit den Parametern des ifconfig zu setzen, die beim Booten in der Datei rc.network als Parameter für den Aufruf von ifconfig verwendet wird.

Auf einer unbekannten Maschine ist der Startpunkt der Suche der Ort, wo in den rc-Dateien der Befehl ifconfig abgesetzt wird. Dort muss man ermitteln, woher der ifconfig seine Informationen bekommt. Die etwas einfachere Variante dürfte die Verwendung des jeweiligen Administrationstools sein, das auf allen Plattformen eine Möglichkeit zur Einstellung der IP-Nummern anbietet. Beim MacOS X wird die TCP/IP-Nummer mit dem Systemprogramm SystemPreferences gesetzt.

Das Prüftool ping

ping prüft Verbindungen

Wenn es einen heimlichen Superstar unter den einfachen TCP/IP Werkzeugen für die Konfiguration von Netzen gibt, so ist es ping. ping sendet einfach kleine Pakete an den angegebenen Zielrechner. Da dieser ein Pingpaket sofort zurücksendet, kann Ping erstens feststellen, ob der Rechner gestartet ist, ob die Verkabelung korrekt ist und wie schnell und zuverlässig die Verbindung zu diesem Rechner ist.

lokales TCP/IP prüfen

ping akzeptiert als Ziel TCP/IP-Nummern und Namen. Mit letzterem kann man also auch die Namensauflösung testen. Bevor man fremde Rechner anpingt, ist es kein schlechter Gedanke die eigene Nummer einmal per ping aufzurufen. Wenn das lokale TCP/IP nicht richtig konfiguriert ist, wird man auch keine Verbindung nach außen bekommen.

ping zum Dauerläufer machen

Bei einigen Implementationen wird nur die lapidare Meldung >>xxx is alive<< (beispielsweise SunOS) abgegeben. Andere (so beispielsweise MS-Win­dows) machen 5 Versuche zu senden und enden dann bereits mit einer Zusammenfassung. Beides ist unzureichend, wenn man beispielsweise sehen will, ob ein Wackelkontakt im Kabel ist. Durch entsprechende Optionen (-t) ist aber die typische Ausgabe von ping zu erhalten. Diese läuft durch, bis man ctrl-C drückt und zeigt dann eine Statistik an.

PING gaston.willemer.edu (192.168.109.144): 56 data bytes
64 bytes from 192.168.109.144: icmp_seq=0 ttl=255 time=0.172 ms
64 bytes from 192.168.109.144: icmp_seq=1 ttl=255 time=0.099 ms
64 bytes from 192.168.109.144: icmp_seq=2 ttl=255 time=0.095 ms
64 bytes from 192.168.109.144: icmp_seq=3 ttl=255 time=0.093 ms
64 bytes from 192.168.109.144: icmp_seq=4 ttl=255 time=0.094 ms
64 bytes from 192.168.109.144: icmp_seq=5 ttl=255 time=0.093 ms
64 bytes from 192.168.109.144: icmp_seq=6 ttl=255 time=0.093 ms
64 bytes from 192.168.109.144: icmp_seq=7 ttl=255 time=0.098 ms
--- gaston.willemer.edu ping statistics ---
8 packets transmitted, 8 packets received, 0% packet loss
round-trip min/avg/max = 0.093/0.104/0.172 ms

Das Beispiel zeigt die Statistik einer gut laufenden Verbindung. Jedes zurückkommende Paket wird gemeldet. Die icmp_seq ist lückenlos. Die Laufzeiten sind minimal. Dass das erste Paket etwas länger dauert, ist völlig normal.

ttl

Die Abkürzung ttl bedeutet hier time to live, also übersetzt etwa Lebensdauer. Ein Pingpaket versucht sein Ziel auch durch Wechsel des Netzes zu erreichen. Dabei passiert es jedesmal einen Router, ein Rechner, der die Verbindung zwischen zwei Netzwerken herstellt. Bei jedem Wechsel wird der ttl-Wert des Pakets um eins heruntergezählt. Sobald der Wert 0 ist, wird das Paket nicht mehr weitergeleitet. Zweck der Übung ist es, zu verhindern, dass Pakete, die ihr Ziel nicht finden, nicht endlos im Internet umherschwirren. Mit der Option -t kann der Startwert für ttl verändert werden.

ping kann auch große Pakete senden

Man kann die Paketgröße des ping beliebig angeben. Dazu gibt es je nach System den Parameter -s oder einfach die Größe in Byte als Parameter hinter das Ziel. Damit kann man große Datenpakete und eine große Netzlast erzeugen.


1 Internetfähige IP-Bereiche können von einem Internetprovider für die eigene Organisation reserviert werden. In Deutschland ist dafür das Europäische RIPE in Amsterdam zuständig, http://www.ripe.org das hierfür aber einen ausführlichen Antrag mit Begründung des Bedarfs von heute bis in drei Jahren verlangt.

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru
Verlagsrechte bei galileo computing