TCP/IP-Stack programmieren, 1: Ethernet und ARP (2016)
(saminiir.com)-
Implementierung eines TCP/IP-Stacks
- Die direkte Implementierung eines TCP/IP-Stacks kann wie eine komplexe Aufgabe wirken.
- Die Kernspezifikation von TCP besteht aus dem Parsen des TCP-Headers, der Zustandsmaschine, Staukontrolle und der Berechnung von Wiederübertragungs-Timeouts.
- In dieser Blogserie wird ein minimaler TCP/IP-Stack im User Space unter Linux implementiert.
- Der Zweck dieses Beitrags und der Software ist rein lehrreich, um Netzwerk- und Systemprogrammierung tiefer zu verstehen.
-
TUN/TAP-Geräte
- Um Low-Level-Netzwerkverkehr im Linux-Kernel abzufangen, wird ein TAP-Gerät verwendet.
- TUN/TAP-Geräte lassen sich in User-Space-Programmen leicht einrichten und werden in verschiedenen Programmen wie OpenVPN verwendet.
- Mit einem TAP-Gerät lassen sich Daten in Ethernet-Puffern lesen und schreiben.
-
Format von Ethernet-Frames
- Ethernet bildet die Grundlage verschiedener Netzwerktechnologien, die Computer in einem LAN verbinden.
- Der Ethernet-Standard hat sich seit seiner ersten Veröffentlichung im Jahr 1980 stark weiterentwickelt.
- Der Header eines Ethernet-Frames kann als C-Struktur deklariert werden und enthält die Felder DMAC, SMAC, Ethertype und Payload.
-
Parsen von Ethernet-Frames
- Damit der GNU-C-Compiler das Speicherlayout von Strukturen nicht optimiert, wird das Attribut
packedverwendet. - Das gesamte Szenario zum Parsen und Verarbeiten von Ethernet-Frames ist einfach.
- Damit der GNU-C-Compiler das Speicherlayout von Strukturen nicht optimiert, wird das Attribut
-
Address Resolution Protocol (ARP)
- ARP wird verwendet, um 48-Bit-Ethernet-Adressen dynamisch auf Protokolladressen abzubilden.
- Das Format von ARP-Paketen ist relativ einfach und enthält Hardware-Typ, Protokoll-Typ, Hardware-Größe, Protokoll-Größe, Opcode und Datenfelder.
-
Algorithmus zur Adressauflösung
- Um die Ergebnisse von ARP zu speichern, wird eine
translation tableverwendet, damit doppelte ARP-Anfragen vermieden werden. - Der ultimative Test der ARP-Implementierung besteht darin zu prüfen, ob korrekt auf ARP-Anfragen geantwortet wird.
- Um die Ergebnisse von ARP zu speichern, wird eine
-
Fazit
- Eine minimale Implementierung der Verarbeitung von Ethernet-Frames und ARP ist relativ einfach und mit wenigen Zeilen Code möglich.
- Der Quellcode des Projekts ist auf GitHub verfügbar.
- Im nächsten Beitrag wird die Implementierung von ICMP-Echo und -Antwort (Ping) sowie das Parsen von IPv4-Paketen fortgesetzt.
Noch keine Kommentare.