Internet Protocol (IPv4/IPv6) und Hilfsprotokolle

Werbung
Fakultät Informatik, Institut für Systemarchitektur, Professur Rechnernetze
Rechnernetzpraxis
Internet Protocol (IPv4/IPv6)
und Hilfsprotokolle
[email protected]
Einleitung
• Schicht 3 / das Internet Protocol bietet eine vom Übertragungsmedium
unabhängige Schicht
• Ermöglicht Adressierung von Knoten eines weltweiten Rechnernetzes
• Verfügbar in zwei Versionen: IPv4 und IPv6
Dienstnutzer
HTTP
TCP
z.B. durch Local
Internet-Schicht Internet Registry
z.B. dynamisch
(z.B. ISP) vergebene
zugewiesene Adresse
Adresse
IP
Ethernet
Dienstanbieter
Internet
IP
Technologie X
Router
Ethernet
IP
IP
TechnoTechnologie X
logie Y
Router
TechnoEthernet
logie Y
Router
HTTP
TCP
IP
Ethernet
• Protokolldetails der Internet-Schicht?
• Adressierung von Knoten? Größe und Struktur des Adressraums?
• Erforderliche Hilfsprotokolle u.a. zur Ermittlung von Netzcharakteristika und
Konfiguration von Knoten?
• Möglichkeiten zur 1-zu-n-Kommunikation?
2
• Abhängigkeiten von Netzcharakteristika?
Inhalte
1. Internet Protocol Version 4
• Header
• Adressierung
• Address Resolution Protocol
• Internet Control Message Protocol
2. Internet Protocol Version 6
• Header
• Fragmentierung
• Adressen
• Multicast
• Neighbor Discovery Protocol
• Stateless Address Autoconfiguration
• Übergang zu IPv6
3. Raw Sockets
4. Übersicht zur IP-Implementierung im Linux-Kernel
3
IPv4-Header
31
0
Version
IHL
DSCP
ECN
Identification
TTL
Total Length
Flags
Protocol
Fragment Offset
Header Checksum
Source Address
Destination Address
Options + Padding
Daten
•
•
•
•
•
•
•
•
•
•
•
•
Version – 4 Bit: Protokollversion
Internet Header Length (IHL) – 4 Bit: Länge des Headers in 32-Bit-Wörtern; ohne Optionen
beträgt die Länge 5 → 5 * 32 Bit = 160 Bit = 20 Byte
Differentiated Service Code Point (DSCP) – 6 Bit: Feld für Differentiated Services (DiffServ)
Explicit Congestion Notification (ECN) – 2 Bit: Meldung von Überlastsituationen
Total Length – 16 Bit: Gesamtlänge des Datagramms / Fragments in Bytes
Identification – 16 Bit: Eindeutige Kennung eines Datagramms
Flags – 3 Bit: Bit 0 → reserviert; muss Null sein (siehe RFC 3514 ;-)); Bit 1: Don't Fragment
(DF); Bit 2: More Fragments (MF)
Fragment Offset – 15 Bit: Offset in acht Byte-Blöcken, die Daten innerhalb eines
ursprünglichen Pakets hatten
Time To Live (TTL) – 8 Bit: Laut Spezifikation Lebenszeit, in der Praxis Anzahl von Hops, die
Paket weitergeleitet werden kann
Protocol – 8 Bit: Im Datenbereich verwendetes Protokoll; Werte finden sich beispielsweise unter
Linux in /etc/protocols
Header Checksum: Cheksumme nur für den IP-Header
4
Options: Zusatzdaten z.B. zum Routing oder Zeitstempel
IPv4-Adressierung
•
Struktur IPv4-Adresse:
Netzadresse
0 bis n Bit
•
•
innerhalb eines Netzes eindeutig
Host-Adresse
32-n Bit
Notation: IP-Adresse/n (=Classless-Inter-Domain-Routing-Notation (CIDRNotation))
Netzanteil ermöglicht Ausbildung einer hierarchischen Netzstruktur und damit
effizientes Routing
Pfad zum
Internet
Netz:
141.76.40.0/24
Netz:
141.76.40.0/25
Netz:
141.76.40.128/25
Router mit Routing-Tabelle:
141.76.40.0/25 → eth0 (= 1. Ethernetschnittstelle)
141.76.40.128/25 → eth1 (= 2. Ethernetschnittstelle)
•
•
IP-Adresse des Hosts:
141.76.40.42/25
IP-Adresse des Hosts:
141.76.40.140/25
Einteilung von IPv4-Adressen in öffentl. Adressen (innerhalb des Internets
eindeutig; durch zentrale Instanzen vergeben) und private Adressen
(innerhalb eines lokalen Netzes eindeutig; z.B. im Netz 192.168.0.0/24)
Insbesondere aufgrund der Knappheit von IPv4-Adressen werden öffentliche
Adressen durch Network Address Translation (NAT) auf mehrere Hosts
5
abgebildet
Address Resolution Protocol (ARP) - Einordnung
Hostname
Resolver
2
IP-Adresse
•
1
Web
Browser
Verbindungsaufbau
mit IP-Adresse
3
TCP
4
ARP
6
7
EthernetSchnittstelle
5
Sende IP-Datagramm
zu IP-Adresse
•
•
IP
8
Fallunterscheidung: Führt Lookup
in lokaler ARP-Tabelle durch;
falls kein Eintrag gefunden wird,
wird ein Broadcast gesendet
•
•
1
Eingabe eines URI in den
Web Browser
4
2
Auflösen des URI in eine
IP-Adresse
5
3
Verbindungsaufbau mittels
TCP-Schicht initiieren
6
ARP ermittelt die zu IP-Adressen
(bzw. weiteren Adressfamilien)
gehörigen Hardwareadressen über
ein Request/Reply-Protokoll
Ermittelte Zuordnungen werden für
bestimmten Zeitraum in ARPTabellen auf Knoten gespeichert
Sollte IP-Paket nicht für Host in
lokalem Netz sein, kann via ARP die
Hardwareadresse des lokalen
Gateways / eines Routers bestimmt
werden → wird für ausgehendes
Datagramm auf Schicht 2 als
Zieladresse verwendet
Im Fall von IPv6 wird ARP durch
das Neighbor Discovery Protocol
abgelöst
ARP-Tabelle unter Linux bspw. via
ip neigh show anzeigbar
Host mit angefragter IP-Adresse
IP-Schicht wird mit Weiterleitung
des Datagramms beauftragt
Anfrage nach MAC-Adresse des
nächsten Knoten auf dem Weg
7 hat sich gemeldet und seine MAC-
Senden einer ARP-Anforderung
(ARP Request) an BroadcastAdresse (ff:ff:ff:ff:ff:ff)
8
Adresse in ARP-Antwort (ARP
Reply) zurückgesendet
Übermittlung des IPDatagramms mit ZielMAC = erfragte
Adresse
6
Address Resolution Protocol (ARP) - Protokolldetails
•
Ablauf, falls Host über Gateway (IPv4: 192.168.0.1) einen Knoten im Internet
kontaktiert:
Wert: 00:00:00:00:00:00
Host
Wert: 1 = Request
n
0
IP Adr. Hard. Adr. IP Adr. Hard. Adr. Op. Prot. Hard. Prot. Hard. Ethernet
Rec.
Receiver Sender Sender Code size size type type -Header
Gateway
Identische Paketstruktur mit:
• Hardware Address Sender = Hardware-Adresse des Gateways
• IPv4 Address Sender = IPv4-Adresse des Gateways
• Op. Code (Operation-Code) = 2 → Reply
• Hardware Address Receiver = Hardware-Adresse des Hosts
• IPv4 Address Receiver = IPv4-Adresse des Hosts
• Hard. type (Hardware Address type): Technologischer Typ der Hardware-Adresse (1 =
Ethernet)
• Prot. type (Protocol type): Typ der Schicht 3 Protokolladresse, die auf die HardwareAdresse abgebildet wird (0x0800 = IPv4)
• Hard. size (Hardware size) / Prot. size (Protocol size): Größe der Hardware- und
7
Protokolladresse in Bytes
ICMP-Übersicht
• Internet Control Message Protocol (ICMP) dient der Kommunikation von Fehlern und der
Abfrage von Statusinformationen in (fast immer IP-basierten) Netzwerken
• Für IPv4 spezifiziert in RFC 792, für IPv6 spezifiziert in RFC 4443
• Spezifikation der Typ-Nummern und Code-Nummern erfolgt durch die IANA
0
31
Typ
Code
Prüfsumme
Weitere Inhalte abhängig vom Nachrichtentyp / Code
ICMP Nachrichtentypen
Fehlermeldungen
Anfrage/Antwort
Einordnung:
IPHeader
ICMPNachricht
20 Bytes
Typ: Klassifiziert ICMPNachricht
Code: Unterkategorie des Typs
Prüfsumme: Über die gesamte
Nachricht inkl. Daten berechnet
• Ausgewählte Typen:
• 0 - Echo Reply: Antwort auf ein Echo Request
• 3 - Destination Unreachable: Ziel ist nicht erreichbar; u.a. folgende Codes verfügbar:
• 0 – Net unreachable
• 3 – Port unreachable
• 4 – Fragmentation needed and don‘t fragment was set
• 9 - Router Advertisement: Dient dem automatischen Disovery von Routern
• 11 - Time Exceeded: Time-To-Life-Feld eines IP-Datagramms ist abgelaufen
• 13 - Timestamp: Dient Zeitmessung auf dem Kanal zu einem Host bzw. der Messung
der Verarbeitungszeit im Host
8
ICMP-Beispiel: ICMP-Redirect (Typ: 5)
Szenario:
Gateway 1
Ursprünglich geplanter Umweg
Netzwerk 1
mit Sender
ICMP-RedirectNachricht
Gateway 2
Netzwerk 2
mit
Empfänger
Nach Empfang der ICMP-Nachricht tatsächlich
verwendeter und effizienterer Weg
• ICMP-Redirect-Nachricht wird von einem Gateway versendet, der feststellt, dass ein
Router, an den ein Datagramm als nächstes weitergeleitet wird, im gleichen Netz
lokalisiert ist wie der Sender des Datagrams
• Sehr gutes Beispiel für ICMP-Nachricht mit Potential zur Durchführung von Angriffen
→ ICMP-Redirect-Angriff, bei dem ein Angreifer Datenverkehr durch gefälschte RedirectNachrichten über sich leitet
Nachrichtenformat:
Code-Angabe:
1
31 • 0 = Redirect von Datagrammen für Netz
• 1 = Redirect von Datagrammen für Host
5
0-3
Prüfsumme
• 2 = Redirect von Datagrammen des Type
Gateway Internet Adresse
of Services und des Netzwerks
• 3 = Redirect von Datagrammen des Type
Mindestens 20 Oktette IP-Paketkopf
9
of Services und des Hosts
Mind. 64 Bits des ursprünglichen Paketes
Gateway: Zu verwendender Gateway
Ausgewählte Nachteile von IPv4
•
Ausgeschöpfter Adressraum:
•
•
•
•
•
•
IP-Adresse muss manuell oder über
das Dynamic Host Configuration
Protocol (DHCP) vergeben werden
Zusätzliche Infrastruktur für
automatische Konfiguration
erforderlich
Ineffizientes Routing:
•
theoretisch 4 Milliarden Adressen
Durch ungünstige Vergabe zusätzlich
begrenzt (z.B. erhielt IBM ein /8Netz)
IPv4-Adressen werden für Kunden
zunehmend teuer
Einsatz von Network Address
Translation (NAT) kann Verwendung
von einigen Diensten erschweren
bzw. verhindern (Ende-zu-EndePrinzip wird gebrochen)
Keine automatische Konfiguration:
•
•
•
•
•
Header von IPv4-Paketen hat
eine variable Länge
Optionen können den Header
auf bis zu 60 Bytes ausweiten
Router prüfen meist, ob ein
Paket die MTU überschreitet
und leiten ggf. Fragmentierung
ein (siehe dennoch RFC 1191)
Nur optionale bzw. nachträglich
ergänzte Unterstützung für
neue Anforderungen, z.B.:
•
•
Keine garantierte Sicherheit auf
der Internet-Schicht (IPSec ist
optional)
Keine native
Mobilitätsunterstützung
10
IPv6
• IPv6 soll in den nächsten Jahren schrittweise IPv4 ablösen
• Ausgewählte Verbesserungen:
• Vergrößerung des Adressraums durch Einführung 128-Bit-Adressen
• Erweiterte Adressierungsmöglichkeiten für Multicasts und Einführung v. AnycastAdressierung für die Adressierung eines beliebigen Knotens in einer Gruppe
• Vereinfachung des Headers zur Steigerung der Verarbeitungsgeschwindigkeit in
intermediären Knoten
• Verbesserte Unterstützung für Erweiterungen und Optionen
• Automatische Konfiguration von IPv6-Adressen in Knoten
• Steigerung der Sicherheit durch IPSec und Privacy-Ansätze
• Klassifizierung von Datagrammen durch Flow Label mit verbundener Möglichkeit zur
Umsetzung von Quality-of-Service (Qos)
0
Traffic Class:
Traffic Class
Flow Label
• Prioritätsvergabe Version
für QoS
Payload Length
Next Header
Hop Limit
Flow Label:
• Klassifizierung v.
Datagrammen in
Source Address
verschiedene
Flows mit je
gleichem Label
Destination Address
Next Header:
• Identifikation für
ErweiterungsPayload Length:
Hop Limit:
header / Schicht• Größe des gesamten Datagramms • Ersatz für TTL-Feld zur
11
4-Header
(exkl. erstem Header)
Angabe maximaler Hops
31
IPv6 – Extension Header
• Im einfachsten Fall verweist das Next-Header-Feld auf einen Header eines
Protokolls der nächsthöheren Schicht
IPv6-Header
z.B. Next Header = TCP
Payload
z.B. TCP-Header + Daten
• Für Zusatzinformationen und spezielle Anwendungsfälle können
(wohldefinierte) Extension Header in ein Datagramm eingebettet werden
IPv6-Header
z.B. Next H. = Hop-by-Hop-Options
Extension Header
Next Header = TCP
Payload
z.B. TCP-Header + Daten
• Folgende Extension Header werden in RFC 2460 definiert:
• Hop-by-Hop-Optionen
• Falls mehrere Extension Header
• Destination-Optionen
auftauchen, muss die gegebene
Reihenfolge eingehalten werden
• Routing
• Alle Extension Header (mit Ausnahme
• Fragment
der Destination-Optionen) dürfen
• Authentication
maximal einmalig in einem
• Encapsulation Security Payload
Datagramm vorliegen
• Next-Header-Wert 59 zeigt an, dass kein weiterer Header (auch kein
Header höherer Schichten) folgt
12
IPv6 - Fragmentierung
• Pakete, die größer als die zulässige minimale Maximum Transmission Unit (MTU) des
Pfads zum Ziel sind, werden durch den Sender fragmentiert
• Absender wird über ICMPv6-Nachricht vom Typ 2 („Packet Too Big“) über
Fragmentierungsbedarf informiert
• Absender fragmentiert Paket (und nicht wie bei IPv4 Router) → Effizienzsteigerung
Zu fragmentierendes IPv6-Paket
IPv6-Header plus ExtensionHeader, die von intermediären
Knoten verarbeitet werden müssen
fragmentierbarer Anteil
nicht fragmentierbarer Anteil
Nicht fragmentierbarer Anteil
…
Nicht fragmentierbarer Anteil
Extension-Header, die nur von Zielknoten
verarbeitet werden müssen plus Header und
Daten höherer Schichten
Fragment Header 1
Fragment 1
…
…
Fragment Header N
Fragment N
Aufteilung in N
Pakete, die die
minimale Pfad-MTU
unterschreiten
• Fragment Header enthält vier essentielle Angaben:
• Next Header: Identifiziert den initialen Header des fragmentierbaren Anteils
• Fragment Offset: 13-Bit-Wert zur Identifikation des Offsets des Fragments innerhalb
des ursprünglichen Pakets (Angabe in 8-Oktett-Einheiten)
• M-Flag: 1 = Es folgen weitere Fragmente; 0 = keine weiteren Fragmente folgen
• Identification: 32-Bit-Identifikator für das ursprüngliche Paket; ermöglicht
13
Rückschluss, welche Fragmente zu welchem Paket gehören
IPv6-Adressen - Notation
• Adressierung in RFC 4291 festgelegt und in RFC 5952 detailliert
• Verbreitetste Form der Adressnotation: x:x:x:x:x:x:x:x
• x = vier hexadezimale Zahlen → je 16 Bit
• Falls längere Folgen von Null-Blöcken in Adressen auftauchen, können diese durch
zwei Doppelpunkte einmalig pro Adresse abgekürzt werden
• Beispiel: ff01:0:0:0:0:0:2342:78fa → ff01::2342:78fa
• Für die letzten 32 Bit einer Adresse kann die dezimale Notation (wie in IPv4)
verwendet werden → ermöglicht leicht lesbare Notation von IPv4-Adressen in IPv6Adressraum
Beispiel: ::141.76.40.1
• RFC 4291 schränkt mögliche Notation von Adressen nicht strikt ein, so dass es
zahlreiche Varianten einer Adresse gibt → erschwert Arbeit mit Adressen
• Empfehlungen aus RFC 5952:
• Alle führenden Nullen eines Blocks weglassen
• Zwei Doppelpunkte
• sollen maximale Anzahl von Null-Blöcken repräsentieren
• dürfen nicht zur Abkürzung eines einzelnen Blocks verwendet werden
• Bei mehreren Kürzungsoptionen soll Kürzung möglichst weit links durchgeführt
werden
• Es sollen Kleinbuchstaben in den Adressen verwendet werden
• Wenn Portnummern angegeben werden, ist die IPv6-Adresse in eckige
Klammern zu schreiben
• Beispiel: [ff01:0:0:0:0:0:2342:78fa]:80
(alternativ: [ff01::2342:78fa]:80)
→ Klammern ebenfalls zur Notation von URLs verwendet
14
IPv6 - Adressen
• Unterscheidung von drei Typen von Adressen (neben Spezialfällen):
• Unicast-Adressen mit verschiedenen Scopes / Gültigkeitsbereichen
• Identifikator eines einzelnen Netzwerkinterfaces
• Link-local (verbindungslokale) Unicast-Adressen
• Interface-Adressierung innerhalb abgeschlossener Netzsegmente
• Globale Unicast-Adressen
D0
• Weltweite Interface-Adressierung
S
Unicast-Adressierung
Einziger
Empfänger
des Pakets
D1
• Anycast-Adressen
D2
• Identifikator für eine Menge von Interfaces
• An Anycast-Adresse gesendetes Paket wird an eines der Interfaces
gesendet, das durch die Adresse identifiziert wird
S
ng
ssieru
e
r
d
A
st
Anyca
D0
D1
Adressat des Pakets
Einziger Empfänger
des Pakets
• Multicast-Adressen
D2
Adressat des Pakets
• Identifikator für eine Menge von Interfaces
• An Multicast-Adresse gesendetes Paket wird an alle Interfaces gesendet,
die durch die Adresse identifiziert werden
• Aufgrund von Multicasts sind keine Broadcasts mehr erforderlich
S
ssie
t-Adre
s
a
c
i
lt
Mu
rung
D0
D1
D2
Empfänger des
Pakets
15
IPv6-Adressen
Generelle Struktur von IPv6-Adressen
Für Routing
verwendeter
Adressanteil
(entspricht NetzAdresse von IPv4)
Präfix
Interface-Identifier
Eindeutiger Identifikator
einer Schnittstelle
innerhalb des durch den
Präfix bestimmten
Netzbereichs
• Textuelle Notation analog zur Classless-Inter-Domain-Routing-Schreibweise
(CIDR): IPv6-Adresse/Präfixlänge
• Beispiel: 2001:0db8:0000:e0d2:ab01:0002:4500:a001/48
Präfix-Länge
Präfix
Interface-Identifier
• Typ einer Adresse kann an den höchstwertigsten Bits erkannt werden:
• Unspecified-Adressen:
• Binärer Präfix: 00…0 (128 Bit) IPv6-Notation: ::/128
• Loopback-Adressen:
• Binärer Präfix: 00…1 (128 Bit) IPv6-Notation: ::1/128
• Multicast-Adressen:
• Binärer Präfix: 11111111 (8 Bit) IPv6-Notation: ff00::/8
• Link-local Unicast-Adresse:
• Binärer Präfix: 1111111010 (10 Bit)
• IPv6-Notation: fe80::/10
• Globale Unicast-Adresse: alle anderen Adressen (z.B. 2000::/3)
• Anycast-Adressen: Befinden sich im Adressraum der Unicast-Adressen und
können von diesen syntaktisch nicht unterschieden werden
16
siehe auch http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml
Erzeugung Link-local Adresse
• Link-lokale Adresse kann aus Link-Layer Adresse des Interfaces berechnet
werden und muss anschließend auf Eindeutigkeit hin überprüft werden
(siehe SLAAC)
• Erzeugung eines 64 Bit Interface-Identifiers im Fall von EthernetInterfaces aus Modified EUI-64
Präfix (64 Bit)
Modified EUI-64
Beispiel:
MAC-Adresse:
24
77
03
22
E8
2D
Invertieren von Bit 7
(=„universal/local
26
Bit”)
77
03
FF
FE
22
E8
2D
ergänzt
Resultierende Link-lokale Adresse:
fe80:0000:0000:0000
2677:3ff:fe22:e82d
• Problem für globale Adresse: Einfache Identifikation von Nutzern im Internet
möglich
• Lösung: Privacy Extensions for Stateless Address Autoconfiguration in IPv6
(RFC 4941) = regelmäßige Generierung des Interface-Identifiers unter
17
Verwendung von Zufallswerten
IPv6-Multicasts
• Aufbau einer Multicast-Adresse:
Präfix fe00 (8 Bit)
Flags (4 Bit) Scope(4 Bit)
z.B. Flag T → von IANA
definierte Adresse?
Gruppen-ID (112 Bit)
z.B. Link-lokal
• Beispiel für festgelegte („well-known“) Multicast-Adressen:
• ff02::1 → Alle Knoten am Link
• ff02::2 → Alle Router am Link
• ff02::16 → Alle MLDv2-fähigen Router
• Beitritt zu einer Multicast-Gruppe auf dem Link erfolgt über das in ICMPv6
eingebettete Protokoll Multicast Listener Discovery (MLDv2, RFC 3810)
Host
MLDv2-fähiger
Router
ICMP-Nachricht (Typ 14
3 = Multicast Listene
r Report Message v2)
an Adresse ff02::16
18
Neighbor Discovery Protocol (NDP)
• Hauptaufgaben von NDP:
• Ermitteln von verfügbaren Routern
• Bestimmung der Link-Layer-Adresse eines
Knotens
• Verwaltung von Erreichbarkeitsinformation
eines Knotens
• Grundlage für Stateless Address
Autoconfiguration
• Spezifiziert in RFC 4861
• Definiert fünf ICMPv6-Nachrichtentypen:
• Router Solicitation
• Router Advertisement
• Neighbor Solicitation
• Neighbor Advertisement
• Redirect
1 Host sendet Router
Solicitation Message an
Multicast-Adresse ff01::2
(alle Router)
Router
R
Host
R
Router antworten mit Router2 AdvertisementNachricht, die Konfigurationsparameter (z.B. Präfix) enthält
R
R
1
Host sendet Neighbor Solicitation
Message an die Solicited Node MulticastAdresse eines Knotens, dessen LinkLayer-Adresse ermittelt werden soll
2
Host, der auf Neighbor Solicitation
Multicast-Adresse lauscht antwortet mit
einer Neighbor-AdvertisementNachricht
R
R
R
R
19
Neighbor Discovery Protocol (NDP)
• Generischer IPv6-Host verwaltet vier Datenstrukturen, die durch NDP gefüllt werden:
•
Neighbor Cache
•
•
•
•
Destination Cache
•
•
Prefix List
•
•
•
Default Router List
Menge von Nachbarknoten, zu denen kürzlich Daten geschickt
wurden
Entspricht ARP-Tabelle in IPv4
Einträge werden klassifiziert in Router und Hosts
Für jeden Nachbarn wird ein Zustand gespeichert, u.a.:
• INCOMPLETE: Erreichbarkeitsprüfung wird gerade durchgeführt
• REACHABLE: Nachbar war kürzlich erreichbar
Beinhaltet für Knoten, zu denen kürzlich Daten gesendet wurden,
einen Verweis in den Neighbor Cache
Referenzierter Eintrag in Neighbor Cache ist der Next-Hop-Knoten
auf dem Weg zum Zielknoten
Beinhaltet Liste mit allen Präfixen, die am Link („on-link prefix“)
sind
Für Entscheidung verwendet, ob Zieladressen zu direktem
Nachbar gehört oder nicht
Aus den Informationen in Router Advertisements erzeugt
Enthält Router, von denen einer für die Paketweiterleitung
ausgewählt wird, falls Zielknoten nicht am lokalen Link verfügbar
ist
20
NDP – ausgewählte Protokolldetails: Router Advertisement
• Router Advertisement wird von einem Router in regelmäßigem Abstand an den lokalen
Link versendet; alternativ: Versand nach Anfrage durch Host
• IP-Header-Informationen:
• Zieladresse: Anfragender Knoten oder Multicast-Adresse für alle Knoten
• Hop Limit = 255; Pakete mit Werten < 255 werden verworfen → verhindert, dass
valides Paket von außerhalb des Links stammen kann
Typ
Code
Prüfsumme
Cur Hop Limit M O Reserved
Router Lifetime
Reachability Time
Retransmission Time
Options
• Cur Hop Limit: Vorgabe für Hop-Limit-Feld für ausgehende IP-Pakete
• M-Bit („Managed address configuration”): 1 = IP-Adressen werden durch DHCP verwaltet
• O-Bit („Other configuration”): 1 = weitere Konfigurationsinformationen werden am Link
via DHCP verwaltet (z.B. DNS-Konfiguration)
• Router Lifetime: Zeit in Millisekunden, die ein Router der Default-Router bleiben sollte
• Reachability Time: Zeit in Millisekunden, die ein Nachbar nach Lebenszeichen als
erreichbar gilt
• Retransmission Time: Zeit, in Millisekunden, die zwischen zwei Neighbor-SolicitationNachrichten liegen soll
• Protokoll wird beispielsweise implementiert durch Router Advertisement Daemon (radvd)
21
IPv6 – Stateless Address Autoconfiguration (SLAAC)
• Phase I: Erzeugung und Überprüfung einer Link-lokalen Adresse, um Zugriff
auf Knoten am lokalen Link zu haben (z.B. lokale Router)
2
1
Link
Host
3
4
1
Host generiert eine Link-lokale Adresse aus der MAC-Adresse
2
Host tritt der Solicited-Node-Multicast-Adresse der erzeugten Link-lokalen Adresse
bei und sendet eine Neighbor-Solicitation-Nachricht an diese Adresse
3
4
Der Host wartet eine bestimmte Zeitspanne; das Ausbleiben einer Antwort wird als
Indikator für die Eindeutigkeit der selbst zugewiesenen Adresse interpretiert → die
Adresse wird dem Interface zugewiesen
Der Host sendet Neighbor-Advertisement-Nachrichten an alle Hosts des Links
(= Multicast-Adresse ff02::1)
22
IPv6 – Stateless Address Autoconfiguration (SLAAC)
• Phase 2: Erzeugen einer weltweit eindeutigen Global-Unicast-Adresse:
1
3
Host
2
Link
2
Router
4
1
Host fragt mittels einer Router-Solicitation-Nachricht nach einem Router Advertisement
(vermeidet unnötiges Warten auf regelmäßig übertragenes Advertisement)
2
Router versendet ein Router Advertisement mit allen für die Konfiguration wichtigen
Informationen (insbesondere Angabe des Präfixes)
3
Unter Verwendung des Präfixes und des zuvor erzeugten Interface-Identifiers der
Link-local Adresse wird eine Global Unicast-Adresse erzeugt
4
Nach Beitritt zur Solicited-Node-Multicast-Adresse für die Global Unicast-Adresse,
werden mehrere Neighbor-Solicitation-Nachrichten an die Global Unicast-Adresse
versendet; sollte die Adresse bereits verwendet werden, antwortet der
entsprechende Host mit einer Neighbor-Advertisement-Nachricht
23
Übergang zu IPv6
• Baldige Transition eines Großteils des Internets zu IPv6 wird seit über fünfzehn
Jahren propagiert
• Aktuell ist IPv4 noch dominierend
• Gegenwärtige Situation: Koexistenz von IPv4 und IPv6
→ Erfordert Mechanismen zur Realisierung des Übergangs und für
Interoperabilität
Übergangsmechanismen
•
Dual-Stack
Tunnelmechanismen
•
•
•
Übersetzungsverfahren
•
•
Interfaces erhalten sowohl eine IPv4- wie
auch eine IPv6-Adresse
Knoten können über beide Protokolle
unabhängig voneinander Kommunizieren
Kapselung von Paketen von IPv4 bzw. IPv6 in
IPv6 bzw. IPv4
Ausgewählte Varianten: 4in6, 6in4, 6over4, …
Transformation von Headern einer Version in
Header der anderen Version
Beispiel: NAT64 zur Übersetzung von IPv4Adressen in IPv6-Adressen
24
Dual-Stack Lite (DS-Lite)
• Dual-Stack Lite Broadband Deployments Following IPv4 Exhaustion ist
spezifiziert in RFC 6333
• Ermöglicht Internet-Service-Providern (ISPs) die Wiederverwendung
von IPv4-Adressen für verschiedene Kunden durch
1. IPv4-in-IPv6-Kapselung und
2. Network Address Translation (NAT)
4
1
3 Vermittlung via
IPv6
Einsatz von
privatem IPv4
1. Entpacken des IPv4-Pakets
2. Abbildung der IPv4Absenderadresse auf
öffentliche IPv4-Adresse
CGN
Kundennetz
CGN = Carrier Grade NAT
CPE
ISP-Netzwerk
CPE = Customer-Premises
Equipment
2
IPv4Internet
Router
(IPv6)
IPv6Internet
Kapselt IPv4Pakete in IPv6Pakete
• Vorteile:
• Infrastruktur des Providers kann auf IPv6 umgestellt werden
• IPv4-Adressen werden beim Provider eingespart
25
Raw Sockets
• Ermöglichen die Implementierung von IPv4-Protokollen im User-Space
• IP-Headerelemente wie auch gekapselte Datagramme können im Programm
befüllt werden
• Durch Raw Sockets können z.B. implementiert werden:
• Netzwerksicherheitswerkzeuge wie Portscanner
• ICMP-basierte Anwendungen
IP-Header wird
• Routing-Protokolle
durch die
…
struct iphdr *ip = (struct iphdr *)packet;
struct tcphdr *tcp = (struct tcphdr *)(packet + sizeof(struct iphdr));
…
int rawsock = socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
setsockopt(rawsock, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one));
…
unsigned int packetsize = sizeof(struct iphdr) + sizeof(struct tcphdr);
ip->version = 4;
ip->ihl = 5;
ip->id = htonl(random());
ip->saddr = inet_addr("127.0.0.1"); // Source IP
ip->daddr = inet_addr("127.0.0.1"); // Destination IP
ip->ttl = 123;
ip->protocol = IPPROTO_TCP;
ip->tot_len = packetsize;
ip->check = 0; // wenn == 0, wird sie vom Kernel berechnet
Anwendung und
nicht durch das
Betriebssystem
erstellt
Im fiktiven Beispiel
wird nur ein IPHeader und ein TCPHeader ohne weitere
Inhaltsdaten
versendet
Beliebige Quell- und
Ziel-IP-Adressen
(bei Angabe
öffentlicher Adresse
ggf. vom InternetServiceProvider gefiltert)
26
Übersicht IPv6-Implementierung im Linux-Kernel (4.9)
• Implementierung von IPv4 bzw. IPv6 befindet sich im Ordner net/ip bzw.
net/ipv6
• Pakete können in verschiedenen Verarbeitungszuständen durch registrierte
Netfilter-Hook-Funktionen abgefangen, untersucht und manipuliert werden;
Anwendungsfeld: Paketfilterdefinition mittels Iptables
Transportschicht
ip6_input_finish(…)
ip6_xmit(…)
(net/ipv6/ip6_input.c)
(net/ipv6/ip6_output.c)
nf_hook(…, NF_INET_LOCAL_OUT,…)
nf_hook(…, NF_INET_LOCAL_IN,…)
ip6_forward(…)
ROUTING
(net/ipv6/ip6_output.c)
nf_hook(…,
NF_INET_FORWARD,…)
ROUTING
nf_hook(…, NF_INET_PRE_ROUTING,…)
ip_output(…)
ipv6_rcv(…)
(net/ipv6/ip_output.c)
(net/ipv6/ip6_input.c)
nf_hook(…, NF_INET_POST_ROUTING,…)
Datenübertragungsschicht
27
IPv6-Implementierung im Linux-Kernel (4.9)
• Minimaler Auszug aus ip6_forward(…) (net/ipv6/ip6_output.c)
int ip6_forward(struct sk_buff *skb)
{
struct dst_entry *dst = skb_dst(skb);
struct ipv6hdr *hdr = ipv6_hdr(skb);
struct inet6_skb_parm *opt = IP6CB(skb);
struct net *net = dev_net(dst->dev);
...
if (hdr->hop_limit <= 1) {
skb->dev = dst->dev;
icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, 0);
IP6_INC_STATS(net,
ip6_dst_idev(dst), IPSTATS_MIB_INHDRERRORS);
} ...
Kann Paket weitere
„Hops“ durchlaufen?
Schicke ICMPNachricht an Sender
und erhöhe
Statistikzähler
kfree_skb(skb);
return -ETIMEDOUT;
hdr = ipv6_hdr(skb);
hdr->hop_limit--;
__IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
__IP6_ADD_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len);
return NF_HOOK(NFPROTO_IPV6, NF_INET_FORWARD,
skb, skb->dev, dst->dev,
ip6_forward_finish);
... }
Dekrementiere Feld
„hop limit“
Erhöhe
Statistikzähler
Sprung zu NetfilterHooks und
anschließend zu
ip6_forward_finish
28
Zusammenfassung
Automatische IPAdressvergabe durch Dynamic
Host Configuration Protocol
(DHCP)
IPv4Host
• IPv4-Adressen: 32 Bit
Schwächen:
• Begrenzter Adressraum
• Ineffizientes Routing
• Keine automatische
Konfiguration
• Nur optionale bzw.
nachträglich ergänzte
Unterstützung für neue
Anforderungen
Wichtige Hilfsprotokolle:
• Internet Control
Message Protocol (auch
in IPv6 eingesetzt →
ICMPv6)
• Address Resolution
Protocol
Übergang unterstützt durch:
Dual-Stack, Tunnelmechanismen,
Übersetzungsverfahren
Automatische IP-Adressvergabe Ausgewählte Eigenschaften:
• Multicast + Anycastdurch Stateless Address
Adressierung
Autoconfiguration oder Dynamic
• Effizienteres Routing
Host Configuration Protocol
(Vereinfachter Header)
(DHCP)
• Steigerung der Sicherheit durch
IPv6IPSec und Privacy-Ansätze
Host
• Verbesserte Quality-of-ServiceUnterstützung (Qos)
• IPv6-Adressen: 128 Bit
Partieller ARP-/DHCPErsatz:
Neighbor
Discovery
Protocol
→
→
→
→
→
Router Solicitation
Router Advertisement
Neighbor Solicitation
Neighbor Advertisement
Redirect
29
Literatur / Links
Ausgewählte RFCs
•
•
•
•
•
Internet Protocol Version 4
http://tools.ietf.org/html/rfc791
Internet Protocol Version 6
http://tools.ietf.org/html/rfc2460
IPv6 SLAAC
http://tools.ietf.org/html/rfc4862
IPv6-Adressierungsarchitektur
http://tools.ietf.org/html/rfc4291
Neighbor Discovery Protocol http://tools.ietf.org/html/rfc4861
Bücher
•
TCP/IP Illustrated Volume 1 von W. Richard Stevens, Addison-Wesley
Professional Computing Series, 1994
•
Linux Kernelarchitektur von Wolfgang Mauerer, (Kapitel 9 zur
Protokollrealisierung in Kernel 2.6), Carl Hanser Verlag, 2004
Sonstiges
•
Linux IPv6 Router Advertisement Daemon (radvd):
• http://www.litech.org/radvd/
30
Zugehörige Unterlagen
Herunterladen