Network-byte-order auf der MAC-Adresse
Arbeite ich an einem code, der verlangt von mir zu analysieren, einen eingehenden Rahmen, die ich in form von uint8_t * Zeiger.
Ich geschrieben habe, eine utility-Methode zum abrufen der mac-Adresse von dem Bild und wandeln es in uint64_t Wert für einfache Berechnungen.
uint64_t addr = uint64_t(_frm_ptr[0]) << 40 | uint64_t(_frm_ptr[1]) << 32 |
uint64_t(_frm_ptr[2]) << 24 | uint64_t(_frm_ptr[3]) << 16 |
uint64_t(_frm_ptr[4]) << 8 | uint64_t(_frm_ptr[5]);
Brauche ich, um zu wissen, dass, wenn die Quell-mac-Adresse wurde sagen "b8:ac:6f:c0:3d:25" auf einer big-endian-format, wird es übertragen werden in der gleichen Reihenfolge ?
Wie wird die mac-Adresse übertragen auf ein Netzwerk ?
Wird die obige code-snippet, die auf allen Plattformen funktioniert ?
- Beziehen Sie Ihre 1. Frage: Nur das senden software weiß was bringt es auf den Draht, und ob es buggy ist und sendet verschiedene bytes Aufträge abhängig von der hardware auf dem es läuft.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die bytes in einem frame werden in einer festen Reihenfolge (big-endian wie @Caleb Punkte out), unabhängig von der endianness der host-computer.
Da bist du kopieren der bytes, die one-by-one " - das funktioniert immer. Es gibt nur ein problem, wenn man mit multi-byte-Zuordnungen oder
memcpy
's aus dem Rahmen-Daten inshort
,int
, .... Haben Sie einen Blick aufntohs()
und Freunde, dass konvertieren network-to-host und Umgekehrt.Netzwerk-byte-Reihenfolge ist big-endian, also, wenn Sie die Adresse in big-endian-format, es wird übertragen und empfangen werden, die Weg-kein byte-swapping erforderlich.
Die standard-notation, die auch als kanonische format für die MAC-Adressen geschrieben, die bei der übertragung etwas, um mit dem least significant bit wird zuerst übertragen.
IEEE 802.3 (Ethernet) und IEEE 802.4 (Token-Bus) senden der bytes (Oktette) über den Draht, der von Links nach rechts, mit dem least significant bit in jedem byte zuerst, während IEEE 802.5 (Token Ring) und IEEE 802.6 senden der bytes die über die Leitung mit dem am meisten signifikanten bit zuerst
Einer Adresse in kanonischer form 12-34-56-78-9A-BC übermittelt würden, die über die Leitung bits 10000100 00101100 01101010 00011110 01011001 00111101 in die standard-übertragung um (least significant bit first).
Aber für Token Ring-Netzwerke, es würde übertragen werden als bits 00010010 00110100 01010110 01111000 10011010 10111100 in most-significant-bit-Erster Ordnung. Letztere werden möglicherweise falsch angezeigt, als 48-2C-6A-1E-59-3D. Dies bezeichnet man auch als bit-reversed-order, nicht-kanonischer form, MSB-format, IBM format", oder " Token Ring format. Kanonische form ist im Allgemeinen bevorzugt, und ist für alle modernen Implementierungen.
Wie mac-Adresse, es gibt 64-bit-Zahl verwendet, in vielen anderen Fällen, wie dem, openflow/sdn. die lieber es werden nur 64-bit-Zahl, Versuchen Sie die folgenden,