Programmieren mit Java IIhttp://sol.cs.hm.edu/4129Inhaltsverzeichnis
7. Netzwerkprogrammierung7.1 Grundlagen
7.1.4 Hostadressen (IP)
IP-Adressen identifizieren einen Host
Während MAC-Adressen (siehe vorhergehender Abschnitt) an Hardware gebunden sind, arbeiten die höheren Schichten der Netzwerkkommunikation mit logischen Adressen, den sogenannten IP-Adressen.[4]
Neben dem Internet Protocol (IP) gibt es auf Ebene 2 auch andere Protokolle wie zum Beispiel ICMP. IP-Adressen sind streng genommen spezifisch für das IP und darauf aufbauende Protokolle, über das aber heute der überwiegende Teil der Kommunikation abläuft.
IP-Adressen gibt es heute in zwei Formaten, als IPv4- (32-stellige Binärzahlen) und als IPv6-Adressen (128-stellige Binärzahlen). IPv6 wird auf lange Sicht IPv4 verdrängen, jedoch bremst der nicht unerhebliche Aufwand zur Umstellung den Umstieg.[5]
Dieser Text verwendet das heute weiter verbreitete IPv4. Für die Themen dieses Kapitels spielt der Unterschied zwischen IPv4 und IPv6 keine große Rolle.
Aufteilung in Netzwerk- und Hostadresse
Die übliche Schreibweise teilt die 32 Bits einer IP-Adresse in vier einzelne Bytes auf, deren dezimale Werte mit Punkten getrennt aneinandergesetzt werden, wie zum Beispiel:[6]
Diese Schreibweise ist verbreitet, aber nicht die einzige. Gleichwertig sind zum Beispiel eine einzelne Hexadezimalzahl (C0A80117) oder vorzeichenlose Dezimalzahl (3232235799). Viele Programme kommen mit unterschiedlichen Schreibweisen zurecht.
192.168.1.23
Die 32 Bits einer IP-Adresse sind aufgeteilt in einen Vorspann für die Netzwerkadresse (höherwertige Bits) und einen Abspann für die Hostadresse (restliche niederwertige Bits). image/svg+xml Netzwerkadresse(24 Bit) Hostadresse(8 Bit) 31 ... 24 23 ... 16 15 ... 8 7 ... 0 192 168 1 23 . . . Die Grenze zwischen der Netzwerkadresse und der Hostadresse liegt nicht fest, sondern kann innerhalb der 32 Bits nach Bedarf verschoben werden. In der Schreibweise für IP-Adressen legt eine mit / angefügte Zahl fest, wie viele führende Bits zur Netzwerkadresse gehören. Der Rest entfällt automatisch auf die Hostadresse. Beispielsweise adressiert
192.168.1.0/24
ein Netzwerk mit der 24 Bit breiten Netzwerkadresse 192.168.1. Von den insgesamt 32 Bits der IP-Adresse bleiben nach Abzug der 24 Bits für die Netzwerkadresse noch 8 Bits übrig. In diesem Netzwerk stehen also 28 = 256 Hostadressen zur Verfügung.
Hosts eines Netzwerks direkt verbunden
Ein Netzwerk umfasst alle Rechner, die direkt verbunden sind und ohne Vermittler miteinander kommunizieren. Sie haben alle die gleiche Netzwerkadresse, aber unterschiedliche Hostadressen. Hostadressen müssen nicht fortlaufend vergeben werden, sondern können beliebig verteilt sein. image/svg+xml 192.168.0.0/24 192.168.0.23 192.168.0.4 192.168.0.119
Besondere Hostadressen
Zwei Hostadressen innerhalb eines Netzwerks sind besonderen Zwecken vorbehalten: Im Netzwerk 192.168.1.0/24 gibt es also höchstens 254 Hosts mit Adressen von 192.168.1.1 bis 192.168.1.254.
Liste der IP-Adressen und Netzwerkschnittstellen
Es gibt keine eindeutige Zuordnung zwischen Netzwerkschnittstellen und IP-Adressen. Eine Netzwerkschnittstelle kann unter mehreren verschiedenen IP-Adressen erreichbar sein. Das folgende Programm listet alle Netzwerkschnittstellen und deren IP-Adressen auf. Die Angabe in Klammern gibt die Anzahl der Bits an, die auf die Netzwerkadresse entfallen:
import java.net.*;

import java.util.*;



public class IPAddresses {

public static void main(String... args) throws SocketException {

for(Enumeration<NetworkInterface> interfaces =

NetworkInterface.getNetworkInterfaces();

interfaces.hasMoreElements();) {

NetworkInterface networkInterface = interfaces.nextElement();

for(InterfaceAddress address: networkInterface.getInterfaceAddresses())

System.out.printf("%s\t%s (%d)%n",

networkInterface.getDisplayName(),

address.getAddress(),

address.getNetworkPrefixLength());

}

}

}

IPAddresses.java: Netzwerkschnittstellen mit IP-Adressen und Anzahl Bits der Netzwerkadresse auflisten.
Es liefert beispielsweise die folgende Ausgabe:[7]
Die Zeile zur Schnittstelle lo weist in diesem Beispiel 0 Bit für die Netzwerkadresse aus. Diese Angabe hat keine Bedeutung, weil lo keine echte Netzwerkschnittstelle ist, wie unten erklärt wird.
$ java IPAddresses

eth0 /129.187.208.11 (24)

lo /127.0.0.1 (0)

tap0 /10.4.0.1 (24)

wlan0 /192.168.1.23 (24)
IP-Adressen und Hostnamen global eindeutig
IP-Adressen und symbolische Hostnamen (siehe Seite ) sind global eindeutig. Für eine geordnete Zuteilung sorgt die Non-Profit-Organisation ICANN (Internet Corporation for Assigned Names and Numbers) mit Sitz in den USA.[8]
Genauer gesagt ist die IANA (Internet Assigned Numbers Authority), die der ICANN untersteht, für IP-Adressen und Domainnamen zuständig.
Die ICANN delegiert die Aufgaben zum Teil an lokale Organisationen in einzelnen Ländern. In Deutschland verwaltet das DENIC (Deutsches Network Information Center, http://www.DENIC.de) die IP-Adressen.
Private IP-Adressen
Einige IP-Adressen sind von der globalen Zuweisung ausgenommen. Sie werden im Internet ignoriert und stehen für private Netzwerke zur Verfügung. Unter anderem sind das die folgenden Netzwerke:
10.0.0.0/8
127.0.0.0/8
172.16.0.0/12
169.254.0.0/16
192.168.0.0/16
Die Ausgabe des Programms IPAddresses.java zeigt, dass die Schnittstelle eth0 direkt mit dem Internet verbunden ist, lo, tap0 und wlan0 dagegen nicht. 127.0.0.1 liegt im privaten Netzwerk 127.0.0.0/8, 10.4.0.1 in 10.0.0.0/8 und 192.168.1.23 in 192.168.0.0/16