IPv4 (Internet Protocol Version 4), vor der Entwicklung von IPv6 auch einfach IP, ist die vierte Version des Internet Protocols (IP). Es war die erste Version des Internet Protocols, welche weltweit verbreitet und eingesetzt wurde, und bildet als Teil der Internetprotokollfamilie eine wichtige technische Grundlage des Internets. Es wurde in RFC 791 im Jahr 1981 definiert[1] und stellt einen Internetstandard der Internet Engineering Task Force dar. IPv4 verwendet 32 Bit lange IP-Adressen.
IPv4 wurde als Teil der Internetprotokollfamilie für das Arpanet entwickelt und kam darin ab 1983 zum Einsatz. Damals waren nur einige hundert Rechner an das Netz angeschlossen. Das Arpanet entwickelte sich zum Internet und überschritt 1989 die Grenze von 100.000 Rechnern. Durch seine Verbreitung im Internet hat IPv4 schließlich auch LAN-Protokolle wie DECnet oder IPX verdrängt. NetWare, AppleTalk und NetBIOS wurden als neue Versionen hervorgebracht, die auf IP aufsetzen.
Am Anfang der 1990er Jahre war erkennbar, dass IP-Adressen bald knapp würden, da die damals übliche Netzklassen-basierte Adressvergabe erheblichen Verschnitt verursachte. Als kurzfristige Lösung wurde 1993 Classless Inter-Domain Routing eingeführt, das eine deutlich effizientere Adressvergabe ermöglichte. Eine weitere kurzfristige Lösung war das 1994 eingeführte Network Address Translation (NAT), das die Wiederverwendung von IP-Adressen ermöglichte.[2] In der Variante Network Address Port Translation (NAPT) ermöglichte es die gleichzeitige Mehrfachverwendung von IP-Adressen. Mit diesen Maßnahmen konnte der Adressbedarf soweit gedämpft werden, dass der Adressraum trotz immensen Wachstums des Internets erst in den 2010er Jahren knapp wurde (siehe Abschnitt Adressknappheit).
Als langfristige Lösung der Adressknappheit sollte ein neues Protokoll mit größerem Adressraum entwickelt werden. Dies führte zuerst zur Entwicklung des experimentellen Protokolls TP/IX, das die Versionsnummer 7 trug und 1993 veröffentlicht wurde.[3] TP/IX sollte dabei einen 64-Bit-Adressbereich unterstützen, wurde dann aber zugunsten von IPv6 verworfen. Die erste Fassung von IPv6 wurde 1995 veröffentlicht und verwendete einen 128-Bit-Adressraum.[4] Die Versionsnummer 5 wurde nicht für einen IPv4-Nachfolger verwendet, da sie bereits 1990 durch das experimentelle Internet Stream Protocol Version 2 (ST2) belegt war, einem für Streaming optimierten Protokoll.[5]
IPv4 benutzt 32-Bit-Adressen, wodurch ein Adressraum von knapp 4,3 Milliarden Adressen zur Verfügung steht. IPv4-Adressen werden meist in Dezimalpunktschreibweise dargestellt: vier Oktetts (je 8 Bit) werden durch Punkt getrennt mit vier Zahlen von 0 bis 255 dargestellt.
Beispiel: 192.0.2.155
Eine IPv4-Adresse kann in dezimal, binär, oktal und hexadezimal sowohl in der Punkt- als auch in der Nichtpunktnotation dargestellt werden. Eine führende Null zeigt eine Oktalzahl an. Daher dürfen in der Dezimalpunktschreibweise ein- und zweistellige Zahlen nicht auf ein gleichförmiges Längenformat gebracht werden (also nicht: 192.000.002.155).
Jedes der vier Oktette besteht aus 8 Bit und stellt somit 28 = 256 verschiedene Werte dar. Daraus ergibt sich eine Gesamtzahl von 256 × 256 × 256 × 256 = 2564 = 232 = 4.294.967.296 IPv4-Adressen.
Netzanteil und Hostanteil
Eine IP-Adresse besteht aus einem Netzanteil und einem Hostanteil. Der Netzanteil identifiziert ein Teilnetz, der Hostanteil identifiziert ein Gerät (Host) innerhalb eines Teilnetzes.
Die genaue Aufteilung zwischen Netzanteil und Hostanteil wird durch eine Subnetzmaske festgelegt, beispielsweise 255.255.255.0, was in binärer Darstellung 11111111.11111111.11111111.00000000 entspricht. Die Bits der Subnetzmaske, die „1“ lauten, legen die Stellen der IP-Adresse fest, die zum Netzanteil gehören. Alle restlichen Stellen der IP-Adresse, die entsprechend in der Subnetzmaske auf „0“ gesetzt sind, gehören zum Hostanteil. In der CIDR-Notation wird die Länge des Netzanteils durch die Anzahl Bits angegeben und mit Schrägstrich getrennt als Suffix an die IP-Adresse angehängt, beispielsweise /24. Somit ist der Netzanteil 24 Bits lang, was der Subnetzmaske 255.255.255.0 entspricht. Die übrigen 8 Bits gehören somit zum Hostanteil.
Beispiel:
dezimal
binär
IP-Adresse
192.0.2
.155
→
11000000.00000000.00000010
.10011011
Subnetzmaske
255.255.255
.0
→
11111111.11111111.11111111
.00000000
Netzanteil
Hostanteil
Netzanteil
Hostanteil
CIDR-Notation
192.0.2.155/24
Die Unterscheidung zwischen Netzanteil und Hostanteil ist erforderlich für die Entscheidung, ob sich eine Zieladresse in demselben lokalen Netz oder in einem anderen Netz befindet. Wenn der Netzanteil identisch ist, können die Endgeräte innerhalb einer Broadcast-Domäne direkt miteinander kommunizieren, beispielsweise per Ethernet oder WLAN. Im selben Teilnetz darf der Hostanteil nicht mehrfach vergeben sein, da es ansonsten zu einem IP-Adresskonflikt kommt. Für jedes Endgerät vergibt der zuständige Netzwerkadministrator den Hostanteil eindeutig durch eine manuelle oder automatische IP-Adresszuweisung.
Ein Netz kann in weitere Teil- oder Subnetze unterteilt werden. Dies erfolgt, indem ein oder mehrere höchwertige Bits des Hostanteils zur Unterscheidung des Subnetzes verwendet werden. Innerhalb eines Subnetzes wird die Subnetzmaske angepasst, um den verkleinerten Hostanteil widerzuspiegeln. Subnetting wird zur Segmentierung von Netzen verwendet. Für die Kommunikation zwischen den Subnetzen ist ein Router erforderlich.
Beispiel:
Netzadresse (CIDR)
Subnetzmaske
Adressbereich
Netz-, Subnetz- und Hostanteil (binär)
Netz
192.0.2.0/24
255.255.255.0
192.0.2.0 – 192.0.2.255
11000000.00000000.00000010.xxxxxxxx
Subnetz
192.0.2.0/25
255.255.255.128
192.0.2.0 – 192.0.2.127
11000000.00000000.00000010.0xxxxxxx
Subnetz
192.0.2.128/26
255.255.255.192
192.0.2.128 – 192.0.2.191
11000000.00000000.00000010.10xxxxxx
Subnetz
192.0.2.192/26
255.255.255.192
192.0.2.192 – 192.0.2.255
11000000.00000000.00000010.11xxxxxx
Nach außen hin wird das Netz beim Routing als ein Ganzes adressiert. Die innere Unterteilung in Subnetze ist nicht direkt ersichtlich. Das Gegenteil von Subnetting ist Supernetting und beschreibt die Zusammenfassung von mehreren angrenzenden Netzadressen in einer gemeinsamen Route. Der Zweck ist die Minimierung von Einträgen in einer Routingtabelle. Supernetting wird bei Classless Inter-Domain Routing als Routenaggregation bezeichnet.
Historische Netzklassen (nicht mehr in Gebrauch seit 1993)
Historische IP-Netzklassen
Bit 31–28
27–24
23–16
15–8
7–0
Class A: Netze 0.0.0.0/8 bis 127.255.255.255
0 … 128 8-Bit-Netze
24-Bit-Host
Class B: Netze 128.0.0.0/16 bis 191.255.255.255
1 0 … 16.384 16-Bit-Netze
16-Bit-Host
Class C: Netze 192.0.0.0/24 bis 223.255.255.255
1 1 0 … 2.097.152 24-Bit-Netze
8-Bit-Host
Class D: Multicast-Gruppen 224.0.0.0/4 bis 239.255.255.255
1 1 1 0
28-Bit-Multicast-Gruppen-ID
Class E: Reserviert 240.0.0.0/4 bis 255.255.255.255
Ursprünglich gab es fest vorgeschriebene Einteilungen für Netzklassen mit einer festen Länge des Netzanteils. Die Größe des Netzanteils ergab sich aus den ersten Bits der Adresse; eine Subnetzmaske musste nicht angegeben werden. Da diese Einteilung sehr unflexibel ist, wird seit 1993 ausschließlich das Verfahren Classless Inter-Domain Routing angewandt, welches bitvariable Netzmasken ermöglicht. Obwohl das Konzept von Netzklassen seitdem nicht mehr im Einsatz ist, blieb der Begriff der Netzklasse über Jahre verbreitet. Hierbei steht „Klasse A“ für ein Netz der CIDR-Präfixlänge /8, „Klasse B“ für /16 und „Klasse C“ für /24. Die ursprüngliche Zuordnung zu festgelegten Adressbereichen wird für gewöhnlich ignoriert, sodass diese Begrifflichkeit nicht mit dem ursprünglichen Konzept der Netzklassen konform ist.
Nutzbare Adressen
Die jeweils erste und letzte Adresse eines Subnetzes haben eine besondere Bedeutung und stehen üblicherweise nicht zur Vergabe an Hosts zur Verfügung. Die maximale Anzahl der zu vergebenen Hostadressen in einem Netz beträgt somit effektiv:
2Anzahl Bits der Hostadresse − 2.
Diese Einschränkung geht auf die Praxis zurück, Adressen mit „0“ an allen Stellen als „dieses Netz“ und Adressen mit „1“ an allen Stellen als „alle Hosts“ zu interpretieren.[6] Die erste Adresse eines Subnetzes (zum Beispiel 192.0.2.0) bezeichnet das Netz selbst. Die letzte Adresse (zum Beispiel 192.0.2.255) bezeichnet die Broadcast-Adresse, unter der alle Hosts im Netz angesprochen werden können. Ein Versuch, diese Einschränkung aufzuheben, hat sich nicht durchgesetzt,[7] sodass auch heute noch in praktisch jedem Netz beide Adressen reserviert sind. Gängig ist außerdem, das Default Gateway auf die zweite oder die vorletzte IP-Adresse im Netz zu legen (zum Beispiel 192.0.2.1 oder 192.0.2.254), wobei es dafür keinerlei Vorgaben gibt.
Besondere Netzadressen
Einige Netzadressen sind für spezielle Zwecke reserviert. Siehe RFC 6890:[8]
Bestimmte IP-Adressbereiche stehen zur freien Verfügung und können ohne vorherige Registrierung für private Netze verwendet werden. Im Internet werden diese IP-Adressbereiche nicht geroutet. Historisch befand sich jeder der Adressbereiche in einer anderen Netzklasse. Aus Gewohnheitsgründen ist es gängig für Subnetze im Adressblock 172.16.0.0/12 die Präfixlänge /16 und im Adressblock 192.168.0.0/16 die Präfixlänge /24 zu verwenden. Eine Vorgabe existiert diesbezüglich nicht.
CIDR-Adressblock
Adressbereich
Anzahl IP-Adressen
10.0.0.0/8
10.0.0.0 – 10.255.255.255
224 = 16.777.216
172.16.0.0/12
172.16.0.0 – 172.31.255.255
220 = 1.048.576
192.168.0.0/16
192.168.0.0 – 192.168.255.255
216 = 65.536
Beispiele
Beispiel: (24-Bit-Netz)
Subnetzmaske
=
11111111.11111111.11111111.00000000
(255.255.255.0)
Der Besitzer legt den Netzteil auf 192.168.0 fest:
Netzteil
=
11000000.10101000.00000000
Das führt zu folgender Adressverteilung:
Netzname
=
11000000.10101000.00000000.00000000
(192.168.0.0)
erste Host-Adresse
=
11000000.10101000.00000000.00000001
(192.168.0.1)
letzte Host-Adresse
=
11000000.10101000.00000000.11111110
(192.168.0.254)
Broadcast
=
11000000.10101000.00000000.11111111
(192.168.0.255)
Anzahl zu vergebende Adressen: 28 − 2 = 254
Beispiel: (21-Bit-Netzwerk)
Subnetzmaske
=
11111111.11111111.11111000.00000000
(255.255.248.0)
Der Besitzer legt den Netzteil auf 192.168.120 fest (wobei im dritten Oktett nur die fünf höchstwertigen Bits zum Netzteil gehören):
Ein IP-Paket besteht aus einem Header und den eigentlichen Nutzdaten. Der IPv4-Header ist normalerweise 20 Bytes lang, kann aber durch zusätzliche Optionen in jeweils 4-Byte-Schritten auf bis zu 60 Bytes verlängert werden. Die Optionen sind größtenteils ungenutzt und IPv4-Pakete mit Optionen werden oft blockiert.[19]
IPv4 dient als Grundlage, um darüber andere Protokolle zu transportieren. In dem Datenteil eines IP-Pakets werden der Header, die Nutzdaten und ein eventueller Trailer eines anderen Netzwerkprotokolls gekapselt. Typische Beispiele sind TCP, UDP oder ICMP. Um welches Protokoll es sich handelt, wird durch eine Nummer im Protokoll-Feld des IP-Headers festgelegt. Die Internet Assigned Numbers Authority verwaltet eine Liste der registrierten Protokollnummern.[20]
Die maximale Länge eines IP-Pakets beträgt 65535 Bytes (216−1) und die maximale Datenlänge 65515 Bytes (Paketlänge – minimale Headerlänge von 20 Byte). Die Paketlänge wird jedoch normalerweise von dem zugrundeliegenden Netzwerkprotokoll auf Netzzugangsschicht weiter eingeschränkt, woraus sich eine für das Netz spezifische maximale IP-Paketlänge ergibt, die Maximum Transmission Unit (MTU) genannt wird. Bei Ethernet beispielsweise beträgt die MTU 1500 Bytes. Die MTU reduziert sich, wenn ein IP-Paket über einen Tunnel oder ein Virtual Private Network transportiert wird. Die minimale Frame-Länge von Ethernet hat hingegen keine Auswirkung auf IPv4, da durch das Längenfeld im IPv4-Header ein beliebig kurzes IPv4-Paket transportiert werden kann, selbst wenn der Ethernet-Frame mit Nullbytes aufgefüllt werden muss.
Eine spezielle Bedeutung kommt in modernen Implementierungen dem früheren Feld Type of Service (ToS) im zweiten Oktett des IPv4-Headers zu. Ursprünglich diente dieses Feld bei der Vermittlung eines Datenpaketes als Entscheidungshilfe für die beteiligten Router bei der Wahl der Übertragungsparameter. In modernen Implementierungen wird dieses Feld im Zusammenhang mit der network congestion avoidance (Vermeidung von Überlastungen) verwendet. Das ToS-Feld wurde durch das DS-Feld (differentiated services) ersetzt, dessen erste sechs Bits als differentiated services code point (DSCP) und dessen letzte beiden Bits als explicit congestion notification (ECN) benutzt werden.
Routing
IPv4 unterscheidet nicht zwischen Endgeräten (Hosts) und Vermittlungsgeräten (Router). Jeder Computer und jedes Gerät kann gleichzeitig Endpunkt und Router sein. Ein Router verbindet dabei verschiedene Netze. Die Gesamtheit aller über Router verbundenen Netze bildet das Internet (siehe auch Internetworking).
IPv4 ist für LANs und WANs gleichermaßen geeignet. Ein Paket kann verschiedene Netze vom Sender zum Empfänger durchlaufen, die Netze sind durch Router verbunden. Anhand von Routingtabellen, die jeder Router individuell pflegt, wird der Netzteil einem Zielnetz zugeordnet. Die Einträge in die Routingtabelle können dabei statisch oder über Routingprotokolle dynamisch erfolgen. Die Routingprotokolle dürfen dabei sogar auf IP aufsetzen.
Bei Überlastung eines Netzwerks oder einem anderen Fehler darf ein Router Pakete auch verwerfen. Pakete desselben Senders können bei Ausfall eines Netzes auch alternativ „geroutet“ werden. Jedes Paket wird dabei einzeln „geroutet“, was zu einer erhöhten Ausfallsicherheit führt.
Wird TCP auf IP aufgesetzt (d. h. die Daten jedes IP-Pakets enthalten ein TCP-Paket, aufgeteilt in TCP-Header und Daten), so wird neben dem Aufheben der Längenbeschränkung auch der Paketverlust durch Wiederholung korrigiert. Doppelte Pakete werden erkannt und verworfen. Die Kombination TCP mit IP stellt dabei eine zuverlässige bidirektionale Verbindung eines Datenstroms dar.
Auf dem Weg vom Sender zum Empfänger kann es vorkommen, dass ein IP-Paket ein Netz durchlaufen muss, bei dem das Paket länger ist als die vom Netz maximal unterstützte Paketlänge (MTU). In einem solchen Fall kann der Router entweder eine Fehlermeldung zurücksenden (siehe Abschnitt #ICMP) oder das Paket in Fragmente aufteilen und in separaten IP-Paketen weiter versenden. Jedes der Fragmente trägt dieselbe Identifikationsnummer im Header, mit denen der Empfänger eine Zusammensetzung vornehmen kann. Die Fragmentierung erfolgt in folgenden Schritten:
Aufteilen der Nutzdaten an einer 8-Byte-Grenze (das letzte Fragment enthält dann nicht unbedingt ein Vielfaches von 8 Byte Daten).
Kopieren der IP-Headerdaten des Originalpakets in die neuen Header der Fragmente.
Setzen des Felds „More Fragments“ auf den Wert 1 bei allen bis auf das letzte Fragment.
Beim letzten Fragment wird der Wert von „More Fragments“ aus dem Originalpaket kopiert. Im Regelfall ist der Wert 0, kann aber auch 1 sein, falls das Originalpaket bereits ein Fragment ist.
Setzen der Längen-Felder und des Fragment-Offsets in den Headern. Das Fragment-Offset gibt die Position eines Datenfragments im Originalpaket an (als Vielfaches von 8 Bytes).
Um ein Paket wieder zusammenzusetzen, kombiniert der Empfänger alle Fragmente, welche die gleiche Identifikationsnummer, den gleichen Absender, Empfänger und das gleiche Protokoll haben. Die Reihenfolge der Fragmente ergibt sich aus dem jeweiligen Fragment-Offset im Header. Das letzte Fragment erkennt der Empfänger daran, dass das Feld „More Fragments“ auf 0 gesetzt ist.
IP ist eng verknüpft mit dem Internet Control Message Protocol (ICMP), das zur Fehlersuche und Steuerung eingesetzt wird. ICMP setzt auf IP auf, das heißt ein ICMP-Paket wird im Datenteil eines IP-Pakets abgelegt. Eine IP-Implementierung enthält stets auch eine ICMP-Implementierung. ICMP besteht aus verschiedenen Pakettypen, die unterschiedlichen Funktionen dienen. Ein prominentes Beispiel sind „Echo Request“ und „Echo Reply“, was für das Diagnosewerkzeug Ping verwendet wird. Auch Traceroute verwendet ICMP.
ICMP kann zusammen mit dem Don’t-Fragment-Bit des IP-Pakets auch eingesetzt werden, um die maximale Paketgröße eines Übertragungsweges zu einer Zieladresse zu ermitteln. Dies wird als Path MTU Discovery bezeichnet und ermittelt die kleinste MTU aller passierten Netze. Dadurch kann auf IP-Fragmentierung verzichtet werden, wenn der Sender nur Pakete mit der maximalen Größe der PMTU erzeugt.
Netzzugangsschicht
IPv4 kann auf verschiedene Übertragungsmedien und Protokolle in der Netzzugangsschicht aufsetzen, zum Beispiel das Point-to-Point Protocol oder Serial Line Internet Protocol. In lokalen Netzen wird überwiegend Ethernet oder WLAN eingesetzt. Beide verwenden eine 48 Bit lange MAC-Adresse zur Adressierung von Netzwerkkarten. Ein Sender muss die MAC-Adresse des Ziels kennen, bevor ein IP-Paket gesendet werden kann. Um für eine gegebene IP-Adresse des Ziels die zugehörige MAC-Adresse zu ermitteln, wird das Address Resolution Protocol (ARP) verwendet. Unbekannte MAC-Adressen fragt der Sender mittels einer ARP-Anfrage an, die er als Broadcast an alle Netzwerkgeräte im lokalen Netz sendet. Das Ziel sendet daraufhin eine ARP-Antwort zurück, die die gesuchte MAC-Adresse enthält. Die Kommunikationsteilnehmer speichern die gelernten Zuordnungen von IP-Adresse zu MAC-Adresse in einem Cache zwischen.
Adressknappheit
Anzahl verfügbarer IPv4-Adressblöcke zwischen 1995 und 2015
Aufgrund des unvorhergesehenen Wachstums des Internets herrscht heute Adressknappheit. Im Januar 2011 teilte die IANA der asiatisch-pazifischen Regional Internet RegistryAPNIC die letzten zwei /8-Adressblöcke nach der regulären Vergabepraxis zu.[21] Gemäß einer Vereinbarung aus dem Jahr 2009[22] wurde am 3. Februar 2011 schließlich der verbliebene Adressraum gleichmäßig auf die regionalen Adressvergabestellen verteilt: jeweils ein /8-Adressblock pro Vergabestelle.[23][24] Seitdem hat die IANA auf der globalen Ebene keine weiteren /8-Adressblöcke mehr zu vergeben.
Auf der regionalen Ebene verschärften die Regional Internet Registrys ihre Vergabepraktiken, um aus dem letzten /8-Adressblock möglichst lange schöpfen zu können. Bei der APNIC traten diese am 15. April 2011 in Kraft, da die zuvor erhaltenen beiden /8-Adressblöcke bereits nach drei Monaten aufgebraucht waren.[25] Am 14. September 2012 folgte dann RIPE NCC mit der letzten regulären Zuteilung in der Region Europa/Naher Osten.[26] Mit der neuen Vergabepraxis hatten APNIC- und RIPE-NCC-Mitglieder jeweils nur noch Anspruch auf Zuteilung eines /22-Adressbereichs, selbst wenn sie einen größeren Bedarf nachweisen konnten.[27][28]
Am 25. November 2019 hat RIPE NCC ihren /8-Adressblock endgültig aufgebraucht. Seitdem werden nur noch /24-Kleinstblöcke per Warteliste aus Rückläufern vergeben.[29]
Adressfragmentierung
Die historische Entwicklung des Internets wirft ein weiteres Problem auf: Durch die mit der Zeit mehrmals geänderte Vergabepraxis von Adressen des IPv4-Adressraums ist dieser inzwischen stark fragmentiert, d. h., häufig gehören mehrere nicht zusammenhängende Adressbereiche zur gleichen organisatorischen Instanz. Dies führt in Verbindung mit der heutigen Routingstrategie (Classless Inter-Domain Routing) zu langen Routingtabellen, auf welche Speicher und Prozessoren der Router im Kernbereich des Internets ausgelegt werden müssen. Zudem erfordert IPv4 von Routern, Prüfsummen jedes weitergeleiteten Pakets neu zu berechnen, was eine weitere Prozessorbelastung darstellt.
Weil die IPv4-Adressen auszugehen drohten, wurde IPv6 als 128-Bit-Adressen entwickelt. Diese werden in acht hexadezimale 4er-Gruppen dargestellt und die Gruppen durch Doppelpunkte getrennt. Damit können 2128 = 65.5368 ≈ 340 Sextillionen IPv6-Adressen vergeben werden, eine extrem hohe Zahl. Zusätzlich wurde die Systematik der Adress-Struktur wesentlich verbessert. Verfügbar sind die Adressen seit 2017.