Wake on lan по локальной сети. Пробуждение по сети (Wake-on-LAN) — что это такое и как его включить. Что такое Wake-On-LAN

Прочие модели 11.03.2019
Прочие модели

Посмотрело: 446

Вступление

Эта публикация является первой частью краткого вступления с иллюстрациями в вероятностное программирование , которое является одним из современных прикладных направлений машинного обучения и искусственного интеллекта. Во время написания этой публикации я с радостью обнаружил, что на Хабрахабре совсем недавно уже была , хотя, к сожалению, в русскоговоряющем Интернете пока мало материалов на эту тему.

Я, автор, Юра Перов, занимаюсь вероятностным программированием в течение уже двух лет в рамках своей основной учебно-научной деятельности. Продуктивное знакомство с вероятностным программированием у меня сложилось, когда будучи студентом Института математики и фундаментальной информатики Сибирского федерального университета, я проходил стажировку в Лаборатории компьютерных наук и искусственного интеллекта в Массачусетском технологическом институте под руководством профессора Джошуа Тененбаума и доктора Викаша Мансингхи, а затем продолжилось на Факультете технических наук Оксфордского университета, где на данный момент я являюсь студентом-магистром под руководством профессора Френка Вуда.

Вероятностное программирование я люблю определять как компактный , композиционный способ представления порождающих вероятностных моделей и проведения статистического вывода в них с учетом данных с помощью обобщенных алгоритмов. Хотя вероятностное программирование не вносит много фундаментального нового в теорию машинного обучения, этот подход привлекает своей простотой: «вероятностные порождающие модели в массы!»

«Обычное» программирование

Для знакомства с вероятностным программирование давайте сначала поговорим об «обычном» программировании. В «обычном» программировании основой является алгоритм, обычно детерминированный, который позволяет нам из входных данных получить выходные по четко установленным правилам.

Например, если у нас есть мальчик Вася, и мы знаем где он находится, куда он бросает мяч и каковы внешние условия (например, сила ветра), мы узнаем, какое окно он, к сожалению, разобьет в здании школы. Для этого достаточно симулировать простые законы школьной физики, которые легко можно записать в виде алгоритма.

А теперь вероятностное программирование

Однако часто мы знаем только результат, исход, и мы заинтересованы в том, чтобы узнать то, какие неизвестные значения привели именно к этому результату? Чтобы ответить на этот вопрос с помощью теории математического моделирования создается вероятностная модель, часть параметров которой не определены точно.

Например, в случае с мальчиком Васей, зная то, какое окно он разбил, и имея априорные знания о том, около какого окна он и его друзья обычно играют в футбол, и зная прогноз погоды на этот день, мы хотим узнать апостериорные распределение местоположения мальчика Васи: откуда же он бросал мяч?

Итак, зная выходные данные, мы заинтересованы в том, чтобы узнать наиболее вероятные значения скрытых, неизвестных параметров.

В рамках машинного обучения рассматриваются в том числе порождающие вероятностные модели. В рамках порождающих вероятностных моделей модель описывается как алгоритм, но вместо точных однозначных значений скрытых параметров и некоторых входных параметров мы используем вероятностные распределениях на них.

Существует более 15 языков вероятностного программирования, перечень с кратким описанием каждого из них можно найти . В данной публикации приведен пример кода на вероятностных языках / , который имеют очень схожий синтаксис и которые берут свое начало от вероятностного языка . Church в свою очередь основан на языке «обычного» программирования Lisp и Scheme. Заинтересованному читателю крайне рекомендуется ознакомиться с книгой , являющейся одним из лучших способов начать знакомство с языком «обычного» программирования Scheme.

Пример Байесовской линейной регрессии

Рассмотрим задание простой вероятностной модели Байесовской линейной регрессии на языке вероятностного программирования Venture/Anglican в виде вероятностной программы:

01: 02: 03: 04: 05: 06: 07: 08: 09: 10:
Скрытые искомые параметры - значения коэффициентов t1 и t2 линейной функции x = t1 + t2 * time . У нас есть априорные предположения о данных коэффициентах, а именно мы предполагаем, что они распределены по закону нормального распределения Normal(0, 1) со средним 0 и стандартным отклонением 1. Таким образом, мы определили в первых двух строках вероятностной программы априорную вероятность на скрытые переменные, P(T) . Инструкцию можно рассматривать как определение случайной величины с именем name , принимающей значение вычисляемого выражение (программного кода) expression , которое содержит в себе неопределенность.

Вероятностные языки программирования (имеются в виду конкретно Church, Venture, Anglican), как и Lisp/Scheme, являются функциональными языками программирования, и используют польскую нотацию при записи выражений для вычисления. Это означает, что в выражении вызова функции сначала располагается оператор, а уже только потом аргументы: (+ 1 2) , и вызов функции обрамляется круглыми скобками. На других языках программирования, таких как C++ или Python, это будет эквивалентно коду 1 + 2 .

В вероятностных языках программирования выражение вызова функции принято разделять на три разных вида:


  • Вызов детерминированных процедур (primitive-procedure arg1… argN) , которые при одних и тех же аргументах всегда возвращают одно и то же значение. К таким процедурам, например, относятся арифметические операции.

  • Вызов вероятностных (стохастических) процедур (stochastic-procedure arg1… argN) , которые при каждом вызове генерируют случайным образом элемент из соответствующего распределения. Такой вызов определяет новую случайную величину . Например, вызов вероятностной процедуры (normal 1 10) определяет случайную величину, распределенную по закону нормального распределения Normal(1, sqrt(10)) , и результатом выполнения каждый раз будет какое-то вещественное число.

  • Вызов составных процедур (compound-procedure arg1… argN) , где compound-procedure - введенная пользователем процедура с помощью специального выражения lambda : (lambda (arg1… argN) body) , где body - тело процедуры, состоящее из выражений. В общем случае составная процедура является стохастической (недетерминированной) составной процедурой, так как ее тело может содержать вызовы вероятностных процедур.

Вернемся к исходному коду на языке программирования Venture/Anglican. После первых двух строк мы хотим задать условную вероятность P(X | T) , то есть условную вероятность наблюдаемых переменных x1 , x2 , x3 при заданных значениях скрытых переменных t1 , t2 и параметра time .

Перед вводом непосредственно самих наблюдений с помощью выражения мы определяем общий закон для наблюдаемых переменных xi в рамках нашей модели, а именно мы предполагаем, что данные наблюдаемые случайные величины при заданных t1 , t2 и заданном уровне шума noise распределены по закону нормального распределения Normal(t1 + t2 * time, sqrt(noise)) со средним t1 + t2 * time и стандартным отклонением noise . Данная условная вероятность определена на строках 3 и 4 данной вероятностной программы. noisy_x определена как функция, принимающая параметр time и возвращающая случайное значение, определенное с помощью вычисления выражение и обусловленное значениями случайных величин t1 и t2 и переменной noise . Отметим, что выражение (normal (+ t1 (* t2 time)) noise) содержит в себе неопределенность, поэтому каждый раз при его вычислении мы будем получать в общем случае разное значение.

На строках 5-7 мы непосредственно вводим известные значения x1 = 10.3 , x2 = 11.1 , x3 = 11.9 . Инструкция вида фиксирует наблюдение о том, что случайная величина, принимающая значение согласно выполнению выражения expression , приняла значение value .

Повторим на данном этапе всё, что мы сделали. На строках 1-4 с помощью инструкций вида мы задали непосредственно саму вероятностную модель: P(T) и P(X | T) . На строках 5-7 мы непосредственно задали известные нам значения наблюдаемых случайных величин X с помощью инструкций вида .

На строках 8-9 мы запрашиваем у системы вероятностного программирования апостериорное распределение P(T | X) скрытых случайных величин t1 и t2 . Как уже было сказано, при большом объеме данных и достаточно сложных моделях получить точное аналитическое представление невозможно, поэтому инструкции вида генерируют выборку значений случайных величин из апостериорного распределения P(T | X) или его приближения. Инструкция вида в общем случае генерирует один элемент выборки из значений случайной величины, принимающей значение согласно выполнению выражения expression . Если перед инструкциями вида расположены инструкции вида , то выборка будет из апостериорного распределения (говоря точнее, конечно, из приближения апостериорного распределения), обусловленного перечисленными ранее введенными наблюдениями.

Отметим, что в завершении мы можем также предсказать значение функции x(time) в другой точке, например, при time = 4.0 . Под предсказанием в данном случае понимается генерация выборки из апостериорного распределения новой случайной величины при значениях скрытых случайных величин t1 , t2 и параметре time = 4.0 .

Для генерации выборки из апостериорного распределения P(T | X) в языке программирования Venture в качестве основного используется алгоритм Метрополиса-Гастингса, который относится к методам Монте-Карло по схеме Марковских цепей. Под обобщенным выводом в данном случае понимается то, что алгоритм может быть применен к любым вероятностным программам, написанным на данном вероятностном языке программирования.

В видео, прикрепленном ниже, можно посмотреть на происходящий статистический вывод в данной модели.

В самом начале у нас нет данных, поэтому мы видим априорное распределение прямых. Добавляя точку за точкой (таким образом, элементы данных), мы видим элементы выборки из апостериорного распределения.

На этом мы закончим первую часть данного вступления в вероятностное программирование.

Материалы

Ниже я приведу рекомендуемые ссылки для тех, кто хочет прямо сейчас узнать больше о вероятностном программировании:

Недавно я задумался, что полезно иметь возможность удаленно включать мой домашний компьютер, чтобы, например, забрать важный документ, успешно забытый дома. Любой человек грамотный в hardware делах скажет, что изобретать ничего не надо - есть функция Wake-On-LAN , именно о практическом применении оной я и расскажу в данной статье. Технически, для того чтобы компьютер «проснулся» необходимо выполнение необходимого условия, а вот какого – разберемся далее.

Требования

Для того чтобы полноценно воспользоваться функцией удаленного включения необходимо:

Материнская плата, поддерживающая WoL (Wake-On-LAN );

Блок питания стандарта ATX;

Сетевая карта или модем, поддерживающие управление электропитанием;

Компьютер, выключенный в режиме Soft-OFF (именно в этот режим он переходит через пуск, после нажатия кнопки включения на корпусе/клавиатуре, выключения всеми возможными программными средствами).

Основная часть, реалии и фантастика

При анализе всего материала я пришел к выводу, что удобно будет разделить способы включения компьютера на три категории, и уже по ним вести повествование. Итак, условно разделим все способы на:

Проводные;

Удаленные;

Беспроводные.

Почему в данной статье будет место фантастике, а также, почему я расположил разделы именно так, станет понятно чуть позже.

Раздел 1. Скучный. Проводные способы включения

Во-первых , к проводным способам включения, конечно же, относятся включение с помощью клавиатуры и мышки. Оба способа скучные, легко включаются в BIOS ’е, в разделе Power, и мало востребованные, ну если только системный блок стоит неудобно и до кнопки включения тянуться далеко.

Второй вариант , который я отнес к этому разделу – включение по сети, т.е. чистый Wake-On-LAN без дополнительных заморочек.

Конкретно в этом случае необходимо наличие сетевого адаптера (если сетевая карта дискретная и вставлена в слот PCI версии ниже 2.2 то необходимо соединить ее с материнской платой трехконтактным WoL проводком), ну и наличие самой сети.

Примечание : для состояния сна и гибернации иногда доступны еще два способа пробуждения: WakeUP on PING/ARP – пробуждение при обращении к вашему ПК по сети, и WakeUP on Link Change – пробуждение при смене статуса сети (включилась/выключилась).

Процесс настройки WoL начинается с включения ее в BIOS’е, все там же – в закладке Power.

Также на просторах интернета советуют проверить состояние чекбокса на закладке Управление электропитания для сетевого адаптера. Панель управления > Оборудование и звук > Диспетчер устройств > Выбираем из списка ваш сетевой адаптер > Свойства > Управление электропитанием > Поставить галку на «Разрешить устройству вывод компьютера из ждущего режима ».

Еще я советую проверить состояние параметра Wake-On-Lan на вкладке «Дополнительно » (если она вообще доступна) для вашего сетевого адаптера.

Теперь для включения компьютера по сети все готово, осталась лишь последняя деталь – узнать MAC адрес вашего сетевого адаптера. Его узнать можно многими способами. Самый простой (для Windows): Пуск > Выполнить > cmd > getmac

Однако, если у вас несколько сетевых устройств в системе, то более удобной может оказаться команда ipconfig /all Она выводит полную информацию по всем сетевым адаптерам, вам надо будет найти требуемый и списать «физический» MAC адрес.

Теперь все что необходимо – послать специальный пакет по сети, который включит компьютер. В Unix системах это можно сделать из консоли, для операционных систем Windows существуют специальные приложения. Вот некоторые из них:

- Magic Packet

- Wake On Lan

- WOL

Найти такие приложения не составляет никакого труда, поэтому я не стану уделять этому много внимания. Единственное что могу добавить – программа WOL поддерживает работу из командной строки, т.е. можно создать ярлык вида: , который будет отправлять пакеты с указанными MAC адресами.

Раздел 2. Интересный и полезный. Удаленные способы включения


Самым простым и понятным способом удаленного пробуждения ПК – является включение от звонка на модем. Для этого потребуется: модем поддерживающий функцию Wake-On-Ring и активация одноименного пункта в BIOS’е вашей материнской платы.

Причем важно понимать, что если модем внешний, то необходимо активировать пункт «Pwr Up On External Modem Act », а если внутренний - то пункт «Wake On Lan or PCI Modem ».

В данном случае компьютер будет включаться каждый раз, когда зазвонит телефон – удобно, если у вас есть свободная линия, на которую никто не будет звонить. Минус только в том, что модем может срабатывать от помех или набора номера на параллельном телефоне, а значит, может случиться ложное включение ПК.

Но это не самый интересный способ – куда более полезным может быть включение компьютера из любого места, где есть доступ в Интернет.

Что потребуется:

ПК с настроенным Wake-On-LAN;

Роутер или модем (внешний модем, работающий в режиме Router), поддерживающий постоянное Интернет соединение;

Статический «белый» IP адрес или аккаунт на DynDNS.

Чтобы объяснить что зачем я опишу свою конфигурацию. Интернет приходит по ADSL на Wi-Fi роутер, откуда раздается на все необходимые устройства. Поскольку IP адрес мне назначается динамически, мне пришлось зарегистрировать аккаунт на DynDNS.com чтобы иметь возможность в любой момент времени найти свой роутер во внешней сети (узнать текущий IP адрес).

Теперь о настройках, чтобы пакет прошел через роутер – необходимо пробросить 7 и 9 порт на адрес широковещательных рассылок, поскольку в выключенном состоянии сетевому адаптеру ПК не присваивается IP адрес. Например, ваш ПК и роутер (и остальные устройства, если есть) находятся в подсети 192.168.0.*** то необходимо пробросить 7 и 9 порт (я пробросил только 9) на адрес 192.168.0.255 . Но и тут возникают сложности – как правило, в настройках модемов нельзя указать этот адрес. Есть два выхода:

1. Обмануть систему проверки вводимых данных в Web конфигураторе модема. Для этого надо отключить JavaScript в браузере и сохранить необходимый адрес. В Opera: при попытке сохранить адрес с 255 на конце, Опера показала окошко ошибки, внизу там есть чекбокс «Отключить выполнение сценариев для этой страницы» - ставите галку и сохраняете нужное значение. На моем LinkSys WAG-200 это сработало. Данный способ также хорош тем, что достаточно 1 раз пробросить порт таким образом чтобы включать любой компьютер в домашней подсети из WAN.

2. Создать статическую ARP запись в ARP таблице маршрутизатора или модема. Это делается для того, чтобы модем/роутер мог определить по MAC адресу ваш компьютер. Т.е. у модема должна быть жесткая связь между MAC адресом и IP адресом компьютера, и тогда пакет дойдет до адресата (в динамическом режиме ARP запись не хранится, если хост выключен). Тогда пробрасывать порт необходимо на IP адрес компьютера.

После того как проблема доставки волшебного пакета решена, остается только запомнить/записать MAC адрес компьютера который нам надо включить и…

В принципе, можно воспользоваться утилитами, описанными в 1 разделе, но может случиться и так что их не окажется под рукой – не беда, запрос на включение можно отправить с адреса wakeonlan.ru ! Также на этом сайте можно настроить отправку WoL пакета по расписанию, что может оказаться полезным в некоторых случаях.

Итак вот он 21 век, для того чтобы включить компьютер достаточно зайти на страничку и сделать пару кликов. Также существуют программы для сотовых телефонов и коммуникаторов, позволяющие отправить WoL пакет через GPRS .

Что касается ложных включений – чтобы компьютер включился, необходимо точно знать MAC адрес и адрес назначения (куда посылать пакет). В общем, за весь тестовый период у меня не было случаев ложного включения компьютера. На мой взгляд, именно эта возможность включить компьютер, находясь где угодно с доступом в интернет, является наиболее полезной в наше время.

Раздел 3. Фантастика. Беспроводные способы включения

Самый простой способ беспроводного включения ПК – это включение при помощи комплекта удаленного управления компьютером. Проще говоря это пульт, позволяющий управлять многими функциями находясь на некотором расстоянии от компьютера. Например, у меня в комплекте с материнской платой шел такой наборчик.

IR-приемник вставляется в USB и принимает сигналы от небольшого пульта, на котором и есть заветная кнопочка включения. У меня все прекрасно включается с пульта. Для того чтобы все работало по такой схеме, нужно в BIOS’е была активировать возможность включения от устройств USB.

Также необходимо чтобы на устройства USB при выключенном ПК подавалось питание. Последнее, как правило, переключается джамперами на самой материнской плате. Подробнее об этом можно почитать в инструкции к материнской плате.

Существуют и другие комплекты, которые продаются отдельно, у них также есть возможность включать компьютер с пульта. Также большинство TV тюнеров умеют дистанционно включать компьютер. С практической же стороны от такого способа мало пользы, т.к. расстояние до компьютера строго ограничено, а в случае с IR комплектами, необходима и прямая видимость между пультом и приемником.

Также, к беспроводным способам включения относится Wake-On-LAN через Wi-Fi. К сожалению, тут не все так замечательно – большинство сетевых Wi-Fi адапт е ров не поддерживает WoL. В интернете встречаются описания беспроводных адаптеров поддерживающих WoL, обычно они имеют более высокую цену по сравнению с остальными адаптерами. Мне так и не удалось протестировать WoL через Wi-Fi в домашних условиях, поскольку сетевые адаптеры встроенные и в материнскую плату ПК, и в ноутбуке не поддерживают эту функцию. Видимо эта функция найдет более широкое распространение среди Wi-Fi адаптеров в будущем.

Следующее что пришло мне в голову – включение компьютера через Bluetooth-адаптер . Технически это такой же сетевой адаптер, который так же имеет MAC адрес, а значит вполне можно реализовать WoL функцию. Однако я не нашел никакой информации о реализация данного метода на практике. В целом, и целесообразность данного метода вызывает большие сомнения – Bluetooth адаптеры также имеют весьма ограниченный радиус действия. Причем в эту же категорию я бы отнес комплекты беспроводных клавиатур и мышек (некоторые также работают через Bluetooth).

Ну и самая невероятная идея, пришедшая мне в голову – включение через USB 3G модем , при посылке SMS или вызова на сим карту, стоящую в этом модеме. Опять же технически для реализации подобной функции надо чтобы питание поступало на шину USB при выключенном ПК, а модем в это время находился в рабочем состоянии и поддерживал данную функцию.

В целом, получается, что включить компьютер можно практически от любого из устройств, главное – найти способ как достичь цели и чтобы эта функция поддерживалась самим устройством. Впрочем, это уже совсем фантастика…

Итог

Совсем недавно я задался этим вопросом: как иметь доступ к данным на домашнем компьютере и не держать его все время включенным, и нашел решение этой задачи. Меня удивило то, что все необходимое есть под рукой, а данная функция традиционно считается бесполезной в большинстве случаев. Когда я разбирался с данным вопросом, пришлось почитать много информации, и я обнаружил что на западных форумах вопрос обсуждается куда чаще чем на наших.

Также не стоит забывать, что все перечисленные методы могут не только включать компьютер, но и выводить из спящего режима и режима гибернации. В результате я открыл для себя очень удобную фишку, и надеюсь, что данная статья поможет кому то в решении повседневных задач, и вопросов касающихся функции Wake-On-LAN.




Рекомендуем почитать

Наверх