#wifi #low-level #power-saving
#Wi-Fi #низкоуровневый #энергосбережение
Вопрос:
Я пишу драйвер довольно низкого уровня для беспроводной карты, и хотя большая часть спецификации довольно проста, я еще не обдумал ни одного вопроса:
Если моя станция находится в режиме энергосбережения, а ее приемник выключен на длительный период (скажем, на 10 секунд) между кадрами DTIM, а точка доступа тем временем перезагружается, поэтому моя связь потеряна, как я могу это обнаружить?
Я знаю, что наиболее распространенным случаем будет то, что синхронизация будет потеряна настолько основательно, что я пропущу несколько маяков и просто вернусь к поиску точки доступа впоследствии, но если по какой-то счастливой случайности я увижу маяки, есть ли какой-нибудь способ узнать, что это новый «экземпляр» той же точки доступа?
Я могу придумать
- короткое (er) поле времени — однако я считаю, что точкам доступа разрешено сокращать информацию о времени, если трафик не ожидает
- временная метка точки доступа неожиданно меняется.
- поле «количество маяков для следующего DTIM» неожиданно меняется.
Будучи перфекционистом, я хотел бы знать, существует ли полностью надежный способ определить, что точка доступа была перезагружена, а не просто собирать подсказки.
Комментарии:
1. Действительно классная проблема. Я бы поспорил на ферму, что большинство производителей придерживаются вашего «наиболее распространенного случая». Вы, вероятно, не можете сказать, но я бы хотел знать, на кого вы работаете, чтобы я мог покупать ваши продукты! Удачи в получении ответа!
2. Кроме того, я бы не придавал слишком большого значения решению, которое отдает приоритет строгому соблюдению стандарта, или аналогично тому, которое извлекает выгоду из тенденций в том, как производители игнорируют стандарт. Работая в этой области раньше, удивительно, сколько углов производители сокращают, чтобы сэкономить несколько долларов на продукте в термоусадочной упаковке.
Ответ №1:
Я бы посоветовал вам посмотреть на TSF в принятых кадрах маяка, и если он слишком сильно отличается от ожидаемого TSF, вы отправляете фрейм с нулевыми данными в точку доступа. Если точка доступа была перезагружена, она должна ответить фреймом деаутентификации с указанием причины «Фрейм класса 2 получен от неаутентифицированного персонала».
Ответ №2:
У меня нет никаких знаний о беспроводных картах на этом уровне, но я бы выбрал практический маршрут и проанализировал связь с точкой доступа, непосредственно ведущую к отключению, для шаблона, который соответствует типичной последовательности отключения; например, «больше нет трафика, внезапная потеря синхронизации DTIM, а затем объявление точки доступа».
Навскидку: может быть, заглянуть в код обнаружения и анализа точек доступа Kismet, чтобы найти пару идей. Готов поспорить, что кто-то еще сталкивался с этой проблемой раньше.
Приветствия!
Комментарии:
1. Проблема заключается в том, что станция находится в режиме энергосбережения, поэтому она не может видеть шаблон, она просыпается прямо перед кадром DTIM, получает кадр и любой широковещательный трафик и снова переходит в спящий режим. Где-то посередине необходимо решить, по-прежнему ли точка доступа знает о существовании станции, повторно связать, если нет, и в идеале хранить молчание, если это так. Итак, в основном это сводится к «просмотру этого кадра DTIM, я думаю, что потерял свою ассоциацию».
2. Я не думаю, что возможно определить, каким будет будущее, по одному кадру DTIM. Я предполагаю, что вам нужно вести историю из N количества кадров или вести статистику приема этих кадров, чтобы угадать, перезагрузилась ли точка доступа. Цепочка Маркова может быть полезна для статистики здесь.
3. Все, что я получил бы от этого, было бы значением вероятности, хотя на самом деле маловероятно, что точка доступа перезагрузится таким образом, который позволит мне по-прежнему получать маяки. Речь идет об устранении последних сомнений. 🙂