Mengapa paket Wake-On-LAN mengandung 16 duplikasi alamat MAC target?

16

Dari halaman web Wireshark :

Blok MAC Target berisi 16 duplikasi alamat IEEE target, tanpa jeda atau gangguan.

Apakah ada alasan khusus untuk 16 duplikasi?

4d4c
sumber

Jawaban:

29

Menurut pendapat saya, nilainya harus tepat 16.

Magic Packet Technology ( whitepaper , publikasi # 20213) dikembangkan antara AMD dan Hewlett Packard sekitar tahun 1995. Dari halaman 2:

"Karena pengendali Ethernet sudah memiliki sirkuit pencocokan alamat bawaan ..." mereka mengusulkan untuk menggunakannya kembali, menambahkan penghitung "untuk menghitung 16 duplikasi alamat IEEE".

Mereka beralasan bahwa WOL harus sepele untuk ditambahkan, sementara membiarkan implementasi yang sebenarnya terbuka lebar. Ini tampaknya tidak secara historis arbitrer ("Oh, 16 terlihat cukup lama"), karena:

  1. Bangun apa yang Anda miliki / apa yang Anda ketahui. Sebagai contoh, mari kita asumsikan kita menyukai kekuatan 2 dan karenanya hex digit. Mudahnya, hex digit (4 bit) memiliki nilai positif dari 0-15. Prosesor kami memeriksa semua matematika dan menetapkan "flag" yang meluap jika kami mencoba menambahkan 1 ke nilai yang sudah "maks" (seperti 15). Karena itu cukup umum, kami bahkan mungkin memiliki instruksi khusus untuk kondisi luapan, jadi dalam pseudocode:

    Initialize a single counter that holds values from 0-15.
    Set it to 0.
    Watch the network. When I see the signal:
    Loop:
      Do I see my address at the right spot?
      Yes: Add 1 to counter.
        Did I just overflow? (15+1 = 0?)
        Yes: Jump out of loop to "wake up" code.
    ...otherwise
    Loop again.
    
  2. Garis sinyal chip. Referensi AMD untuk "sirkuit" mengarah ke ujung yang dalam, jadi yang Anda benar-benar perlu tahu adalah bahwa kita dapat membayangkan kasus sederhana di mana "bit set ke 1" sesuai dengan tegangan "tinggi" di suatu tempat dalam sebuah chip, terlihat pada sebuah "pin".

Arduino adalah contoh yang bagus: atur bit memori ke 1, dan Arduino menetapkan pin keluaran "tinggi". Perubahan tegangan ini sering diperagakan dengan menggerakkan LED, tetapi melalui keajaiban transistor, ia dapat secara otomatis mengaktifkan, mengganggu atau "membangunkan" sirkuit atau chip lain.

Mari kita asumsikan representasi hex yang lebih alami (dua digit hex, seperti FF, sering terlihat di IP, mask dan alamat MAC) dan ikat "output pin 5" dari Arduino kami ke "bit position 5" di counter kami:

Memory      Value  Event
0000 0000   00     Nothing, so keep adding 1...
0000 1111   0F     Nothing, but add 1...
0001 0000   10     Arduino pin 5 high. New voltage interrupts other circuits.

Karena lokasi memori terikat pada pin itu, elegan dan semua perangkat keras: terus tambahkan 1, tidak perlu mengganggu driver atau kode pengembang BIOS. Anda hanya pembuat sirkuit. Anda akan memberikan pin yang tinggi, untuk dikonsumsi oleh silikon pembuat chip lain, yang adalah apa yang dilakukan semua orang. Di dunia nyata itu sedikit lebih rumit (misalnya, spesifikasi ENC28J60 menjabarkannya dengan detail yang mengerikan), tapi itulah intinya.

Setelah ini, kejelasan manusia tampaknya lebih merupakan efek samping daripada tujuan. Untuk komputer, 4 salinan MAC Anda sudah cukup, tetapi sekarang penghitung itu tidak akan meluap dan tidak lagi sederhana. Jadi tampaknya lebih mungkin bahwa tujuannya adalah untuk mengimplementasikannya dengan sebanyak mungkin silikon, driver, dan perancang BIOS, dan 16 memberi semua orang pilihan antara "overflow" DAN pensinyalan langsung, tanpa membuat ulang dan memperbarui peralatan.

Bermain advokat iblis untuk deteksi manusia, bagaimana dengan angka lebih tinggi berikutnya dengan fleksibilitas yang sama: 256? Itu tidak berfungsi: Segmen data saja menghasilkan paket WOL yang lebih besar dari bingkai Ethernet ( pada saat itu ).

Jadi bagi saya ini berarti bahwa 16 adalah satu-satunya nilai segmen WOL dapat menjadi.

ǝɲǝɲbρɯͽ
sumber
1
Bukankah seharusnya Anda juga memiliki baris dalam kodesemu untuk mengatur ulang penghitung, jika Anda tidak melihat alamatnya? Kalau tidak, dengan waktu dan kebisingan yang cukup, pada akhirnya Anda akan selalu bangun.
Luke
@ Lukas Ya. Saya awalnya mengakomodasi itu, tetapi selama penyederhanaan dihapus demi thread utama. Saya baru saja mengunjungi kembali (permintaan maaf atas tanggapan yang sangat tertunda) dan dapat memperbaikinya, tetapi saya tidak keberatan menyetujui suntingan jika itu berguna dalam jaringan untuk Anda.
ǝɲǝɲbρɯͽ
19

Iya. Ini sederhana dan kemungkinan seseorang mengirim data ini tanpa sengaja sama sekali nol.

Anda ingin sederhana karena mikrokontroler yang sangat bertenaga rendah di NIC harus dapat secara permanen mengawasi lalu lintas jaringan ethernet mentah dan bertindak jika melihat pola ini dan Anda tidak ingin mengaktifkan sistem secara tidak sengaja karena aliran jaringan acak data adalah perintah untuk menghidupkan sistem.

Sven
sumber
9

Saya pikir itu terutama cara untuk memastikan bahwa hanya paket ajaib yang benar-benar akan membangunkan komputer. Karena paket dipindai untuk urutan ini tanpa melihat header protokol (misalnya, alamat IP, nomor port), paket harus mudah diidentifikasi dan jumlah positif palsu mendekati nol. Probabilitas bahwa protokol jaringan acak mengirim paket yang berisi 16 kali alamat MAC komputer mendekati nol, tetapi kemungkinan false positive jauh lebih tinggi jika hanya ada satu pengulangan.

Ale
sumber
1
Dengan hanya satu pengulangan, kemungkinan false positive adalah 1, karena alamat MAC dikirim sepanjang waktu, dengan setiap paket.
Sven
@ SVW memang, tetapi dalam kasus ini mereka belum tentu diawali oleh enam FF byte - meskipun saya tidak menyebutkan titik ini.
Ale
5

16 karena mati logika mudah untuk menghitung ke 16. Mengulangi alamat MAC karena sudah ada logika pencocokan alamat pada chip. Kertas putih AMD

richardb
sumber