http://www.2cpu.co.kr/nas/11196
에서 이어집니다.
이 글에서 다룰 이야기는 WAKE ON PATTERN MATCH 기능 때문에 삽질안 이야기 인데요...
WAKE ON PATTERN MATCH 기능은 WAKE ON LEN 기능의 일부분입니다.
흔히들 꺼진 상태의 PC를 깨울때 사용하는 기능이 매직패킷에 반응하는 WAKE ON MACIG PAKET 이고.
s3, s4 절전 상태에서는 깨울때는 매직패킷도 사용가능하나 좀더 확장된 기능을 사용할 수 있는데 이게 WAKE ON PATTERN MATCH 기능입니다.
간단하게 이야기 하면 네트워크로 누군가 해당 PC에 요구를 하면 컴퓨터가 깨어나야 한다는 거죠.
컴퓨터가 다른 컴퓨터를 내부망에서 찾을때 생기는 과정은 우선 대상이 되는 IP 주소의 맥주소를 요구하는 ARP를 브로드캐스트로 날라고
답변이 돌아오면 해당 맥주소를 향해서 연결을 요구하는 SYN 패킷을 보넵니다.
패턴 매치 기능이 이용하는게 이 ARP나 혹은 SYN 패킷인데요.
내 IP를 대상으로 하는 ARP나 SYN 패킷정보를 NIC에 저장해 두면 NIC가 들어오는 패킷들을 대조해서 저장된 패킷과 일치하는 패킷이 들어오면
컴퓨터를 깨우는 것 입니다.
인터넷에 절전 모드 진입했는데 컴퓨터가 시도 때도 없이 일어나요.. 하는 이야기는 주로 이 기능때문인데요..
ARP 패킷은 네트워크 구성에 따라 사실은 필요 없는데도 막 발생하는 경우가 많아서 그렇습니다.
ARP로 맥 주소 알려 달라고 하고 맥 주소 보네주면....'별 볼일이 있엇던건 아니고 그냥 궁금해서요...' 같은 상황인데요..
그래서 최근의 NIC들은 ARP에 대한 대답은 잠을 자는채로 할 수 있는 기능이 내장되어 있습니다. ARP OFFLOAD라고 하는데요.
잠 자는 채로 ARP에 대한 대답을 보내면 ARP를 떄렷던 대상이 그냥 심심해서 보넨 그런 경우는 컴퓨터가 깨어나지 않아도 되고
실질적인 SYN 신호가 왔을때 비로소 컴퓨터가 깨어남으로서 효율적으로 작동할 수 있는거죠..
뭐 잡설은 여기 까지 하고..
제 경우 문제가 생겼던건 윈도우즈 8.1의 기본 설정이 마음에 안들었는데 어디에도 설정을 바꿀 수 있는 옵션이 없다는 점 이였습니다.
그 부분을 우회하려고 기묘한 트릭을 쓰려고 했엇는데 그러는 사이 윈 10이 나왔고
이런 부분이 좀더 영리해 지지 않았을까 하는 마음에 윈 10을 설치해 보았습니다..
그런데 왠걸... 윈10은 영리해 진 수준이 아니라 오히려 윈 8.1에서 작동하던 기능이 작동을 안해요.
ARP에도 반응을 하지 않고 오직 NETBIOS 이름 퀴리에만 반응 합니다.
이런 부분이 좀더 영리해 지지 않았을까 하는 마음에 윈 10을 설치해 보았습니다..
그런데 왠걸... 윈10은 영리해 진 수준이 아니라 오히려 윈 8.1에서 작동하던 기능이 작동을 안해요.
ARP에도 반응을 하지 않고 오직 NETBIOS 이름 퀴리에만 반응 합니다.
처음에는 드라이버 문제인줄 알았습니다. 윈도우즈 8.1 까지 드라이버 지원을 하다가 윈도우즈 10으로 가면서 구세대 장치에 대한 지원이 축소되어서 아주 기본기능만 구현하고
나머지를 누락한게 아닐까 하는 추측을 했던거죠.
그런데 netbios 이름 퀴리는 된단 말이죠? 그능 자체는 작동합니다. 이게 도대체 어떤 영문인지 한참 검색을 했는데요.
딱히 답을 발견할 수는 없었습니다만 답으로 가는 감음 잡을 수 있엇습니다.
ndis 미니포트 드라이버(nid 장치 드라이버) <-> NDIS.sys <-> ndis 프로토콜 드라이버
이러한 계층 구조를 가지는데 WOL 패턴을 장치 드라이버에 등록 요구하는 부분은 프로토콜 드라이버가 요구하고 미니포트 드라이버가 장치에 기록하게 되는 구조 라고 합니다.
그런데 다행한 점은 MS에서 드라이버 계발자들을 위해서 드라이버 셈플의 소스를 제공하고 있고 이중
필터 드라이버를 이용하면 중간에서 이러한 요구를 모니터링 하고 가로채고 수정할 수가 있다는겁니다.
문제는 제 코딩 능력이 거의 까막눈 수준이라는점이죠.. 여튼 꾸역꾸역 MSDN 보면서 TXT 파일로 로그를 토해 네도록 필터를 수정해서 확인을 했습니다. 결과는
드라이버는 전혀 잘못이 없음. 드라이버가 반환하는 해당 기능에 관련된 속성 값.. 최대 패턴 수 최대 패턴 길이 최대 오프셋 길이 등등은 이전 버전의 윈도우즈에서와 동일함..
그러나 그것을 받은 프로토콜 드라이버는 arp syn 패킷을 등록하지 않고 오직 netbios 이름 퀴리 패턴만 등록하려고 시도함.
이것이였습니다. 가능한 패턴은 7개 였는데 1나만 떨렁 등록된 상황이고요. 하나밖에 등록 하지 않으니. 그냥 그 등록 이밴트가 발생할때 필터 드라이버에서 재가 원하는 IP 두개를 추가 등록하도록 수정 해 주었습니다.
수정하니까 잘 작동하네요.. 192.168.1.30 과 192.168.1.31에 대한 접근에 대해서 양쪽다 반응합니다.
다만 커널에서 돌아가는 프로그램은 아주 이해없이 대충 추가해서 굴려도 되는걸지 약간 미심적긴 하네요.
¾î·µç ÇÊÅ͵å¶óÀ̹ö ±î¼ ARPÆÐŶ¿¡µµ ¹ÝÀÀÇϵµ·Ï À̺¥Æ®¸¦ Ãß°¡ÇØ ÁÖ¼Ì´Ü ¸»¾¸ÀÌÁÒ?
¿©Æ° ÀÏ´Ü ÁÖµÈ ¸ñÀûÀº ÇØ´ç NIC°¡ ¹°°í ÀÖÁö ¾ÊÀº ´Ù¸¥ IP¿¡ ´ëÇÑ ARP¿¡µµ ¹ÝÀÀÇϵµ·Ï ¸¸µå´Â °Í ÀÌ¿´ÁÒ..
ÇØ´ç nic°¡ ¹°°í ÀÖ´Â IP¿¡ ¹ÝÀÀ Çϵµ·Ï ¸¸µå´Â°Ç À©µµ¿ìÁî 8.1·Î ³»·Á°¡¸é µÇ´Â°Í ÀÌ¿´´ø Áö¶ó.
±Ã±ÝÇØÇÏ´ø ¸î°¡Áö ¹®Á¦¿¡´ëÇÑ ÁÁÀº ½Ç¸¶¸®°¡ µÉµíÇÕ´Ï´Ù.
Á¤¸®Çؼ °Á¿¡ ¿Ã·ÁÁּŵµ ÁÁÀ»µíÇÕ´Ï´Ù.
ÀÌ·± ½ÄÀ¸·Î Á¢±ÙÇϱâ Àü¿¡ °Ô½ºÆ® OS¿¡ µû·Î wolÀ» Áö¿øÇÏ´Â Æ÷Æ® Çϳª¸¦ ÇÒ´çÇØ º¸±âµµ ÇÏ°í Çߴµ¥ Àß ¾ÈµÇ´õ¶ó°í¿ä.
À¯È¿ Çß´ø°Ç NAS ³»ºÎ¿¡ NAT ±¸¼ºÀ» Çؼ È£½ºÆ®¿Í °Ô½ºÆ®¸¦ ¿ÜºÎ¿¡¼ °°Àº IP·Î È£ÃâÇϵµ·Ï ¸¸µé¾ú´ø °Í Àε¥.
±×°Ç ¼³Á¤ÀÌ º¹ÀâÇØ Áö°í ¿À¹öÇص嵵 ´Ã°í ÇÒ °Í°°¾Æ¼ ±×¸¸ µÎ¾ú½À´Ï´Ù.
¤Ð¤Ð
½º½º·Î°¡... ´«¾ÕÀÇ ¹®Á¦¸¸ ÇØ°áÇϴµ¥ ½Å°æ ½á¼ ¾Æ¿¹ ±¸Á¶ÀÇ ´ëºÎºÐÀ» ÀÌÇØÇÏÁö ¸øÇÏ°í À־ä..
¸®¼Ò½º¸¦ È¿°úÀûÀ¸·Î »ç¿ëÇϸé¼, Àü·Â¼Òºñ±îÁö ÃÖ¼ÒÈÇÏ°í
¿©·¯ ±â´ÉÀ» ÇÔ²² ±¸ÇöÇÏ´Â ÇÙ½ÉÀÌ ¹Ù·Î °¡»óÈÂÊÀ¸·Î ¾×¼¼½ºÇصµ wake up µÇ´Â±â´ÉÀε¥.
¿¼è¸¦ Áּż °¨»çÇÕ´Ï´Ù ¤Ì¤Ì
¾Ö¸ÅÇÑ ºÎºÐ ¿äûÇϸé Ãß°¡ ÇÏ°Ú½À´Ï´Ù.