6. Paketempfang (Packet Reception)
Wenn ein Paket zur Adressauflösung empfangen wird, übergibt das Ethernet-Modul des Empfängers das Paket an das Modul zur Adressauflösung, welches einen Algorithmus ausführt, der etwa wie folgt aussieht. Negative Bedingungen kennzeichnen das Ende der Verarbeitung und das Verwerfen des Pakets.
Ablauf des Algorithmus (Algorithm Flow):
?Ist der Hardwaretyp in ar$hrd von mir unterstützt?
Ja : (fast mit Sicherheit)
[Optional: Hardwarelänge ar$hln prüfen]
?Ist das Protokoll in ar$pro von mir unterstützt?
Ja :
[Optional: Protokolllänge ar$pln prüfen]
Merge_flag := false
Falls das Paar <Protokolltyp, Protokolladresse des Senders> bereits
in meiner Umsetzungstabelle steht, aktualisiere das Feld
Hardware-Adresse des Senders dieses Eintrags mit den neuen
Informationen aus dem Paket und setze Merge_flag auf true.
?Bin ich die Ziel-Protokolladresse?
Ja :
Falls Merge_flag false ist, füge das Tripel <Protokolltyp,
Protokolladresse des Senders, Hardware-Adresse des Senders>
der Umsetzungstabelle hinzu.
?Ist der Opcode ares_op$REQUEST ? (den Opcode erst jetzt ansehen !!)
Ja :
Hardware- und Protokollfelder vertauschen, die eigenen
Hardware- und Protokolladressen in die Felder des Senders eintragen.
Das Feld ar$op auf ares_op$REPLY setzen
Das Paket auf derselben Hardware, auf der die Anfrage empfangen
wurde, an die (neue) Ziel-Hardware-Adresse senden.
Beachten Sie, dass das Tripel <Protokolltyp, Protokolladresse des Senders, Hardware-Adresse des Senders> bereits in die Tabelle eingefügt wird, bevor der Opcode betrachtet wird. Dies beruht auf der Annahme, dass die Kommunikation bidirektional ist: Wenn A einen Grund hat, mit B zu kommunizieren, dann hat B wahrscheinlich auch einen Grund, mit A zu kommunizieren. Beachten Sie außerdem, dass, falls bereits ein Eintrag für das Paar <Protokolltyp, Protokolladresse des Senders> existiert, die neue Hardware-Adresse den vorhandenen Eintrag ersetzt. Der Abschnitt Verwandte Themen (Related Issues) erläutert dies näher.
Verallgemeinerung (Generalization)
Die Felder ar$hrd und ar$hln erlauben es, dieses Protokoll und das Paketformat auch für ein anderes als das 10-Mbit-Ethernet zu verwenden. Für 10-Mbit-Ethernet nimmt <ar$hrd, ar$hln> den Wert <1, 6> an. Für andere Hardwarenetze muss das Feld ar$pro nicht mehr dem Ethernet-Typfeld entsprechen, sollte aber dem Protokoll zugeordnet sein, dessen Adresse aufgelöst wird.