Wake-On-LAN 패킷에 대상 MAC 주소가 16 개 중복 된 이유는 무엇입니까?


답변:


29

제 생각에는 값은 정확히 16이어야합니다.

Magic Packet Technology ( 백서 , 간행물 # 20213)는 1995 년경 AMD와 Hewlett Packard간에 개발되었습니다.

"이더넷 컨트롤러에는 이미 주소 일치 회로가 내장되어 있기 때문에" IEEE는 16 개의 중복 주소를 세는 카운터를 추가하여이를 재사용 할 것을 제안합니다 .

그들은 WOL을 추가하는 것이 쉽지만 실제 구현은 크게 열어 두어야한다고 생각합니다. 다음과 같은 이유로 역사적으로 임의적이지 않은 것으로 보입니다 ( "오, 16은 충분히 길게 보입니다").

  1. 당신이 가진 것 / 당신이 알고있는 것에 기초하십시오. 예를 들어, 우리는 2의 거듭 제곱과 16 진수를 좋아한다고 가정합니다. 16 진수 (4 비트)는 0 ~ 15의 양수 값을 유지하는 것이 편리합니다. 우리의 프로세서는 모든 수학을 검사하고 이미 "max"값에 1을 추가하려고하면 오버플로 "플래그"(예 : 15)를 설정합니다. 그것이 일반적이기 때문에 의사 코드에서 오버플로 조건에 대한 특별한 지시가있을 수도 있습니다.

    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. 칩 신호 라인. "회로"에 대한 AMD의 참조는 깊은 끝을 가져옵니다. 따라서 실제로 알아야 할 것은 "1로 설정된 비트"가 칩의 어딘가에서 "높은"전압에 해당하는 간단한 경우를 상상할 수 있다는 것입니다. "핀".

Arduino는 좋은 예입니다. 메모리 비트를 1로 설정하고 Arduino는 출력 핀을 "높음"으로 설정합니다. 이 전압 변화는 종종 LED를 구동함으로써 시연되지만, 트랜지스터의 마법을 통해 다른 회로 나 칩을 자동으로 활성화, 중단 또는 "깨울"수 있습니다.

좀 더 자연스러운 16 진수 표현 (FF, IP, 마스크 및 MAC 주소에서 자주 볼 수있는 2 개의 16 진수)을 가정하고 Arduino의 "출력 핀 5"를 카운터의 "비트 위치 5"에 연결합니다.

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.

메모리 위치는 해당 핀에 묶여 있기 때문에 우아하고 모든 하드웨어입니다. 1을 계속 추가하면 드라이버 나 BIOS 개발자 코드를 방해 할 필요가 없습니다. 당신은 어쨌든 회로 제작자입니다. 다른 칩 메이커의 실리콘이 소비하는 높은 핀을 제공 할 것입니다. 이는 모든 사람이하는 일입니다. 실제로는 조금 더 복잡하지만 (예를 들어, ENC28J60 사양은 끔찍한 세부 사항으로 설명되어 있습니다), 그것은 요점입니다.

이 후, 인간의 명확성은 목표보다 부작용으로 보입니다. 컴퓨터의 경우, MAC 사본 4 개로 충분하지만 이제는 카운터가 넘치지 않으며 더 이상 간단하지 않습니다. 따라서 가능한 많은 실리콘, 드라이버 및 BIOS 디자이너가 구현할 수 있도록하는 것이 목표 인 것으로 보이며, 16은 재구성 및 재 툴링없이 모든 사용자에게 "오버플로"와 직접 신호 전달 중에서 선택할 수 있습니다.

인간 탐지를위한 악마의 옹호자 역할을 수행하면 다음과 같은 유연성을 가진 다음 더 높은 숫자는 어떻습니까? 작동하지 않습니다. 데이터 세그먼트만으로는 이더넷 프레임보다 큰 WOL 패킷을 생성 할 수 있습니다 ( 당시 ).

16 WOL 세그먼트가 유일한 값이 너무 나에게이 의미 할 수 있습니다 합니다.


1
주소가 보이지 않으면 의사 코드에 카운터를 재설정하는 줄이 없어야합니까? 그렇지 않으면 충분한 시간과 소음으로 결국 깨어날 것입니다.
Luke

@ 루크 예. 나는 원래 그것을 수용했지만 단순화하는 동안 주 스레드를 위해 그것을 제거했습니다. 방금 재 방문 (매우 지연된 답변에 대한 사과)하고 고칠 수 있지만, 네트워크 내에서 유용한 수정 사항은 승인하지 않습니다.
ǝɲǝɲbρɯͽ

19

예. 간단하고 누군가 실수로이 데이터를 보낼 가능성은 사실상 제로입니다.

NIC의 초 저전력 마이크로 컨트롤러는 원시 이더넷 네트워크 트래픽을 영구적으로 감시 할 수 있어야하고이 패턴이 표시되면 조치를 취해야하며 임의의 네트워크 스트림으로 인해 우연히 시스템을 켜고 싶지 않기 때문에 간단합니다. data는 시스템을 켜는 명령입니다.


9

매직 패킷 만 실제로 컴퓨터를 깨울 수 있도록하는 방법이라고 생각합니다. 프로토콜 헤더 (예 : IP 주소, 포트 번호) 보지 않고이 순서로 패킷을 스캔 할 때 패킷을 쉽게 식별 할 수 있어야하고 오 탐지 수가 0에 가까워 야합니다. 임의의 네트워크 프로토콜이 컴퓨터의 MAC 주소의 16 배를 포함하는 패킷을 전송할 확률은 0에 가깝지만 단일 반복 만 있으면 오 탐지 확률이 훨씬 높습니다.


1
한 번의 반복으로 모든 패킷과 함께 MAC 주소가 항상 유선으로 전송되므로 오 탐지 확률은 1이됩니다.
Sven

실제로 @SvW이지만이 경우에는 반드시 6 개의 FF 바이트가 접두사로 붙일 필요는 없습니다.
Ale

5

16은 셀 수없는 논리이기 때문에 16으로 계산됩니다. 칩에 주소 일치 논리가 이미 있으므로 MAC 주소를 반복합니다. AMD 백서

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.