Tại sao gói Wake-On-LAN chứa 16 bản sao của địa chỉ MAC đích?


16

Từ trang web của Wireshark :

Khối MAC đích chứa 16 bản sao địa chỉ IEEE của mục tiêu, không bị gián đoạn hoặc gián đoạn.

Có bất kỳ lý do cụ thể cho 16 bản sao?

Câu trả lời:


29

Theo tôi, giá trị phải chính xác là 16.

Công nghệ gói ma thuật ( whitepaper , ấn phẩm # 20213) được phát triển giữa AMD và Hewlett Packard vào khoảng năm 1995. Từ trang 2:

"Vì bộ điều khiển Ethernet đã có mạch khớp địa chỉ tích hợp ..." nên họ đề xuất sử dụng lại nó, thêm bộ đếm "để đếm 16 bản sao của địa chỉ IEEE".

Họ cho rằng WOL nên tầm thường để thêm vào, trong khi để thực hiện rộng rãi thực tế. Điều này dường như không tùy tiện trong lịch sử ("Ồ, 16 có vẻ đủ dài"), bởi vì:

  1. Xây dựng trên những gì bạn có / những gì bạn biết. Ví dụ: giả sử chúng ta thích lũy thừa 2 và do đó là các chữ số hex. Thuận tiện, một chữ số hex (4 bit) giữ các giá trị dương từ 0-15. Bộ xử lý của chúng tôi kiểm tra tất cả toán học và đặt "cờ" tràn nếu chúng tôi cố gắng thêm 1 vào giá trị "tối đa" (như 15). Bởi vì điều đó khá phổ biến, chúng tôi thậm chí có thể có một hướng dẫn đặc biệt cho các điều kiện tràn, do đó, trong mã giả:

    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. Đường tín hiệu chip. Tham chiếu của AMD về "mạch" dẫn đến kết thúc sâu, vì vậy tất cả những gì bạn thực sự cần biết là chúng ta có thể tưởng tượng một trường hợp đơn giản trong đó "bit đặt thành 1" tương ứng với điện áp "cao" ở đâu đó trong chip, có thể nhìn thấy ở một "ghim".

Arduinos là một ví dụ điển hình: đặt bit bộ nhớ thành 1 và Arduino đặt chân đầu ra "cao". Sự thay đổi điện áp này thường được thử nghiệm bằng cách điều khiển đèn LED, nhưng thông qua sự kỳ diệu của bóng bán dẫn, nó có thể tự động kích hoạt, ngắt hoặc "đánh thức" các mạch hoặc chip khác.

Giả sử một biểu diễn hex tự nhiên hơn (hai chữ số hex, như FF, thường thấy trong IP, mặt nạ và địa chỉ MAC) và gắn "chân đầu ra 5" của Arduino của chúng tôi vào "vị trí bit 5" trong bộ đếm của chúng tôi:

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.

Vì vị trí bộ nhớ được gắn với pin đó, nó thanh lịch và tất cả phần cứng: chỉ cần tiếp tục thêm 1, không cần can thiệp vào mã trình điều khiển hoặc trình phát triển BIOS. Dù sao bạn cũng chỉ là một nhà sản xuất mạch. Bạn sẽ cung cấp một pin cao, được tiêu thụ bởi silicon của nhà sản xuất chip khác, đó là những gì mọi người đang làm. Trong thế giới thực, nó phức tạp hơn một chút (ví dụ, thông số ENC28J60 đưa ra chi tiết khủng khiếp), nhưng đó là ý chính.

Sau này, sự rõ ràng của con người dường như là một tác dụng phụ hơn là mục tiêu. Đối với máy tính, 4 bản sao MAC của bạn sẽ đủ, nhưng bây giờ bộ đếm đó sẽ không bị tràn và nó không còn đơn giản nữa. Vì vậy, có vẻ như mục tiêu là để nó được thực hiện bởi càng nhiều nhà thiết kế silicon, trình điều khiển và BIOS càng tốt, và 16 cho mọi người lựa chọn giữa "tràn" và báo hiệu trực tiếp, mà không cần kiến ​​trúc lại và trang bị lại.

Chơi người ủng hộ ma quỷ để phát hiện con người, còn con số cao hơn tiếp theo với tính linh hoạt tương tự: 256 thì sao? Điều đó không hoạt động: Chỉ riêng phân đoạn dữ liệu tạo ra gói WOL lớn hơn khung Ethernet ( tại thời điểm đó ).

Vì vậy, với tôi điều này có nghĩa là 16 là giá trị duy nhất mà phân khúc WOL có thể đạt được.


1
Bạn cũng không nên có một dòng trong mã giả để đặt lại bộ đếm, nếu bạn không thấy địa chỉ? Nếu không có đủ thời gian và tiếng ồn, cuối cùng bạn sẽ luôn thức dậy.
Lu-ca

@Luke Vâng. Ban đầu tôi thích điều đó, nhưng trong quá trình đơn giản hóa đã loại bỏ nó vì mục đích chính. Tôi chỉ xem lại (xin lỗi vì phản hồi rất chậm) và có thể khắc phục, nhưng tôi không ngại phê duyệt các chỉnh sửa nếu điều đó hữu ích trong mạng cho bạn.
ǝɲǝɲbρɯͽ

19

Đúng. Thật đơn giản và khả năng ai đó vô tình gửi dữ liệu này là không.

Bạn muốn đơn giản vì một bộ vi điều khiển có công suất rất thấp trong NIC phải có khả năng theo dõi vĩnh viễn lưu lượng mạng ethernet thô và hành động nếu nó thấy mẫu này và bạn không muốn bật hệ thống một cách tình cờ vì một luồng mạng ngẫu nhiên dữ liệu là lệnh để bật hệ thống.


9

Tôi nghĩ rằng đó chủ yếu là một cách để đảm bảo rằng chỉ có một gói ma thuật sẽ thực sự đánh thức máy tính. Vì các gói được quét cho chuỗi này mà không cần nhìn vào bất kỳ tiêu đề giao thức nào (ví dụ: địa chỉ IP, số cổng), gói cần phải được nhận dạng dễ dàng và số lượng dương giả gần bằng không. Xác suất một giao thức mạng ngẫu nhiên gửi một gói chứa 16 lần địa chỉ MAC của máy tính gần bằng 0, nhưng khả năng dương tính giả sẽ cao hơn nhiều nếu chỉ có một lần lặp lại.


1
Chỉ với một lần lặp lại, xác suất dương tính giả sẽ là 1, vì các địa chỉ MAC được gửi qua dây mọi lúc, với mọi gói.
Sven

@SvW thực sự, nhưng trong trường hợp này, chúng không nhất thiết phải có tiền tố bởi sáu byte FF - mặc dù tôi không đề cập đến điểm này.
Ale

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.