![](https://habrastorage.org/files/1c0/1a7/9c2/1c01a79c2ce549c0b12ca6fef75d467b.png)
Введение
Думаю, не ошибусь сильно, если у большинства из нас подключение к интернету выглядит следующим образом: есть некоторый довольно скоростной проводной канал до квартиры (сейчас уже и гигабит не редкость), а в квартире его встречает роутер, который раздаёт этот интернет клиентам, выдавая им «чёрный» ip и осуществляя трансляцию адресов.
Довольно часто наблюдается странная ситуация: при скоростном проводе, с роутера раздаётся совсем узенький wifi-канал, не загружающий и половины провода. При этом, хотя формально Wi-Fi, особенно в его ac-версии поддерживает какие-то огромные скорости, при проверке оказывается, что либо Wi-Fi подключается на меньшей скорости, либо подключается, но не выдаёт скорости на практике, либо теряет пакеты, либо всё вместе.
В какой-то момент и я столкнулся с похожей проблемой, и решил настроить свой Wi-Fi по-человечески. На удивление, это заняло примерно в 40 раз дольше, чем я ожидал. Вдобавок, как-то так случилось, что все инструкции по настройке Wi-Fi, которые я находил, сходились к одному из двух видов: в первом предлагали поставить роутер повыше и выпрямить антенну, для чтения второго же мне не хватало честного понимания алгоритмов пространственного мультиплексирования.
Собственно, эта заметка — это попытка заполнить пробел в инструкциях. Я сразу скажу, что задача до конца не решена, несмотря на приличный прогресс, стабильность подключения всё ещё могла бы быть лучше, поэтому я был бы рад услышать комментарии коллег по описанной тематике.
Глава 1:
Итак, постановка задачи
Wifi-роутер, предложенный провайдером, перестал справлять со своими обязанностями: наблюдаются длительные (30 секунд и больше) периоды, когда пинг до точки доступа не проходит, наблюдаются очень длительные (порядка часа) периоды, когда пинг до точки доступа достигает 3500 мс, бывают длительные периоды, когда скорость соединения с точкой доступа не превышает 200 кбит/сек.
Сканирование диапазона с помощью windows-утилиты inSSIDer выдаёт картинку, представленную в начале статьи. В округе наблюдается 44 Wifi SSID в диапазоне 2.4 ГГц и одна сеть в диапазоне 5.2 ГГц.
Инструменты решения
Самосборный компьютер Celeron 430, 2b Ram, SSD, безвентиляторный, две беспроводные сетевые карты на чипе Ralink rt2800pci, Slackware Linux 14.2, Hostapd из Git на сентябрь 2016 года.
Сборка роутера выходит за рамки данной заметки, хотя отмечу, что Celeron 430 хорошо показал себя в безвентиляторном режиме. Отмечу, что текущая конфигурация является последней, но не окончательной. Возможно, улучшения ещё осуществимы.
Решение
На самом деле, решение должно было бы, по хорошему, заключаться в запуске hostapd с минимальным изменениями настроек. Однако, опыт настолько хорошо подтвердил истинность поговорки «гладко было на бумаге, да забыли про овраги», что потребовалось написание этой статьи для систематизации знаний обо всех неочевидных подробностях. Также мне изначально хотелось бы избежать низкоуровневых подробностей для стройности изложения, но выяснилось, что это невозможно.
Глава 2
Немного теории
Частоты
Wi-Fi — это стандарт беспроводных сетей. С точки зрения OSI L2, точка доступа реализует концентратор типа switch, однако чаще всего она также совмещена с коммутатором уровня OSI L3 типа «роутер», что ведёт к изрядной путанице.
Нас же больше всего будет интересовать уровень OSI L1, то есть, собственно, та среда, в которой ходят пакеты.
Wi-Fi — это радиосистема. Как известно, радиосистема состоит из приёмника и передатчика. В Wi-Fi точка доступа и клиентское устройство осуществляют обе роли по очереди.
Wi-Fi-передатчик работает на некоторой частоте. Частоты эти занумерованы, и каждому номеру соответствует некоторая частота. Важно: несмотря на то, что для любого целого числа существует теоретическое соответствие этому числу некоторой частоты, Wi-Fi может работать только в ограниченных диапазонах частот (их три, 2.4 ГГц, 5.2 ГГц, 5.7 ГГц), и только на некоторых из номеров.
Полный список соответствий можно посмотреть в Wikipedia, нам же важно, что при настройке точки доступа, необходимо указать, на каком именно канале будет находиться несущая частота нашего сигнала.
Неочевидная деталь: не все Wi-Fi стандарты поддерживают все частоты.
Wi-Fi-стандартов есть два: a и b. «a» старше и работает в диапазоне 5ГГц, «b» новее и работает в диапазоне 2.4 ГГц. При этом b медленнее (11 mbit вместо 54 mbit, то есть, 1.2 мегабайта в секунду вместо 7 мегабайт в секунду), а диапазон 2.4 ГГц уже и вмещает меньше станций. Почему так — загадка. Вдвойне загадка, почему точек доступа стандарта а практически нет в природе.
![image](https://habrastorage.org/getpro/habr/post_images/218/922/18c/21892218c6b8fcab0c9be0ecf179a48c.png)
(Картинка позаимствована из Википедии.)
![image](https://habrastorage.org/getpro/habr/post_images/9e9/882/719/9e98827199d86ef4baeffaf4ed45f4d4.jpg)
(На самом деле, я немного лукавлю, потому что a поддерживает ещё частотный диапазон 3.7 ГГц. Однако, ни одного устройства, знающего что-нибудь про этот диапазон, мне не доводилось увидеть.)
Подождите, спросите вы, но есть же ещё 802.11g, n, ac — стандарты, и они-то, кажется, как раз должны побивать по скорости несчастные a и b.
Но нет, отвечу я вам. Стандарт g — это запоздалая попытка довести скорость b до скорости a, в диапазоне 2.4 ГГц. Но зачем, вы ответите мне, ты вообще вспоминал про b? Ответ, потому что несмотря на то, что диапазоны обоих b и g называются 2.4, на самом деле они чуть-чуть отличаются, и диапазон b на один канал длиннее.
Стандарты же n и ac вообще не имеют отношения к диапазонам — они регламентируют скорость, и только. Точка стандарта n может быть как «в базе» a (и работать на 5 Ггц), так и «в базе» b и работать на 2.4 ГГц. Про точку стандарта ac я не знаю, потому что не видел.
То есть, когда вы покупаете точку доступа n, нужно очень внимательно посмотреть, в каких диапазонах это n работает.
Важно, что в один момент времени один Wi-Fi чип может работать только в одном диапазоне. Если же ваша точка доступа утверждает, что может работать в двух одновременно, как например, делают бесплатные роутеры от популярных провайдерах Virgin или British Telecom, значит в ней на самом деле два чипа.
Ширина канала
На самом деле, я должен извиниться, потому что ранее сказал, что некий диапазон длиннее другого, не объяснив, что такое «длиннее». Вообще говоря, для передачи сигнала важна не только несущая частота, но и ширина кодированного потока. Ширина — это в какие частоты выше и ниже несущей может залезать имеющийся сигнал. Обычно (и к счастью, в Wi-Fi), каналы симметричные, с центром в несущей.
Так вот в Wi-Fi могут быть каналы шириной 10, 20, 22, 40, 80 и 160 МГц. При этом точек доступа с шириной канала в 10 МГц я никогда не видел.
Так вот, одним из самых удивительных свойств Wi-Fi является то, что несмотря на то, что каналы пронумерованы, они пересекаются. Причём не только с соседями а аж с каналами через 3 от себя. Иными словами, в диапазоне 2.4 ГГц только точки доступа, работающие на каналах 1, 6 и 11 — не пересекаются потоками шириной в 20 МГц. Иными словами, только три точки доступа могут работать рядом так, чтобы не мешать друг другу.
Что же такое точка доступа с каналом шириной 40 МГц? Ответ — а это точка доступа, которая занимает два канала (непересекающихся).
Вопрос: а сколько каналов шириной 80 и 160 МГц вмещается в диапазон 2.4 ГГц?
Ответ:Ни одного.
Вопрос, а на что влияет ширина канала? Точного ответа на этот вопрос я не знаю, проверить не смог.
Я знаю, что если сеть пересекается с другими сетями, стабильность соединения будет хуже. Ширина канала 40 МГц даёт больше пересечений и хуже соединение. Согласно стандарту, если вокруг точки есть работающие другие точки доступа, режим 40 МГц не должен включаться.
Верно ли, что вдвое большая ширина канала вдвое даёт большую пропускную способность?
Вроде бы, да, но проверить невозможно.
Вопрос: Если на моей точке доступа три антенны, верно ли, что она может создавать три пространственных потока и утроить скорость соединения?
Ответ: неизвестно. Может так оказаться, что из трёх антенн, две могут заниматься только отправкой, но не приёмом пакетов. И скорость сигнала будет несимметричная.
Вопрос: Так сколько же мегабит даёт одна антенна?
Ответ: Можно посмотреть вот здесь en.wikipedia.org/wiki/IEEE_802.11n-2009#Data_rates
Список странный и нелинейный.
Очевидно, самый важный параметр — это MCS-индекс, который именно и определяет скорость.
Вопрос: Откуда берутся такие странные скорости?
Ответ: Есть такая вещь как HT Capabilities. Это опциональные фишечки, которые могут чуть-чуть править сигнал. Фишечки бывают как очень полезные: SHORT-GI добавляет чуть-чуть скорости, около 20 мбит, LDPC, RX STBC, TX STBC добавляют стабильности (то есть должны уменьшать пинг и потерю пакетов). Впрочем, ваше железо может запросто их не поддерживать и при этом быть вполне «честным» 802.11n.
Мощность сигнала
Самый простой способ бороться с плохой связью — это вжарить больше мощности в передатчик. В Wi-Fi бывает мощность передачи до 30 dBm.
Глава 3
Решение задачи
Из всего вышеперечисленного винегрета, казалось бы, можно сделать следующий вывод: у вайфая можно реализовать два «режима» функционирования. «Улучшающий скорость» и «улучшающий качество».
Первый, казалось бы, должен говорить: бери самый незанятый канал, ширину канала 40 МГц, антенн побольше (желательно, 4), и добавляй побольше Capabilities.
Второй — убирай всё, кроме базового n-режима, включай мощность побольше, и включай те Capabilities, которые добавляют стабильности.
Вспоминая ещё раз пословицу про овраги, опишем, какие именно неровности местности ждут нас при попытке реализации планов 1 и 2.
Овраг нулевой
Хотя чипсеты семейства Ralink rt2x00 являются самыми популярными чипсетами с поддержкой стандарта n и встречаются как в картах высокого ценового диапазона (Cisco), так и диапазона бюджетного (TRENDNET), и более того, выглядят в lspci совершенно однаково, они могут обладать кардинально разным функционалом, в частности, поддерживать только диапазон 2.4, только диапазон 5ГГц, или поддерживать непонятно чем ограниченные части обеих диапазонов. В чём отличия — загадка. Также загадка, почему карта с тремя антеннами поддерживает только Rx STBC в два потока. И почему они обе не поддерживают LDPC.
Первый овраг
В диапазоне 2.4 есть только три непересекающихся канала. На эту тему мы уже говорил и я не буду повторяться.
Второй овраг
Не все каналы позволяют увеличивать ширину канала до 40 МГц, более того, на какую ширину канала согласится карта, зависит от чипсета карты, производителя карты, загрузки процессора и погоды на Марсе.
Третий, и самый большой овраг
Regulatory domain
Если вам не хватало для счастья того, что сами стандарты Wi-Fi представляют из себя знатный винегрет, то возрадуйтесь тому, что каждая страна мира стремится всякими разными способами Wi-Fi ущемить и ограничить. У нас в Великобритании всё ещё не так плохо, в отличие, скажем, от тех же США, где Wi-Fi спектр зарегулирован до невозможности.
Так вот, регуляторный домен может требовать ограничений на мощность передатчика, на возможность запустить на канале точку доступа, на допустимые технологии модуляции на канале, а также требовать некоторых технологий «умиротворения спектра», таких как DFS (динамический выбор частоты), детекция радара (которая ещё у каждого регдомена своя, скажем, в Америках почти всюду предлагаемая FCC, в Европе другая, ETSI), или auto-bw (я не знаю, что это такое). При этом со многими из них точка доступа не заводится.
Многие регуляторные домены просто запрещают некоторые частоты в принципе.
Задать регуляторный домен можно командой:
iw reg set NAME
Регуляторный домен можно не задавать, но тогда система будет руководствоваться объединением всех ограничений, то есть самым худшим вариантом из возможных.
По счастью, во-первых данные по регуляторным доменам есть в открытом доступе на сайте ядра:
git.kernel.org/cgit/linux/kernel/git/sforshee/wireless-regdb.git/tree/db.txt
И по ним можно искать. В принципе, вероятно, можно пропатчить ядро так, чтобы оно игнорировало регуляторный домен, но это надо пересобирать ядро или как минимум регуляторный демон crda.
По счастью, команда
iw phy info
выводит все возможности нашего устройства, с учётом (!) регуляторного домена. Итак, как же нам поправить состояние нашего Wi-Fi?
Для начала найдём страну, в которой не запрещён 13 канал. Путь хотя бы половина частоты будет пустой. Ну, таких стран довольно много, хотя некоторые, не запрещая его в принципе, однако запрещают на нём или режим высокой скорости n, или вообще создание точки доступа.
Но одного 13 канала нам мало — ведь мы хотим соотношение сигнал-шум побольше, а значит хотим запускать точку с силой сигнала 30. Ищем-ищем в CRDA,
(2402 - 2482 @ 40), (30)
13 канал, ширина 40 МГц, сила сигнала 30. Есть такая страна, Новая Зеландия. Но что это, на частоте 5 ГГц требуется DFS. Вообще, это теоретически, поддерживаемая конфигурация, но почему-то не работает.
Факультативная задачка, выполнимая людьми с повышенными социальными навыками:
Собрать подписи/движение в поддержку ускоренного перелицензирования Wi-Fi-диапазонов в ITU (ну, или хотя бы в вашей стране) в целом в сторону расширения. Это вполне реально, какие-нибудь депутаты (и кандидаты в депутаты), жаждущие политических очков, будут рады вам помочь.
![image](https://habrastorage.org/getpro/habr/post_images/554/617/85b/55461785be3bb64934c1a19cf6d6964b.jpg)
Это овраг номер 4
Точка доступа может не заводиться при наличии DFS, без объяснения причин. Итак, какой же регуляторный домен нам выбрать?
Есть такая! Самая свободная страна в мире, Венесуэла. Её регуляторный домен — VE.
Полные 13 каналов диапазона 2.4, с мощностью 30 dBm, и сравнительно расслабленный 5ГГц диапазон.
Задача со звёздочкой. Если у вас в квартире совсем катастрофа, даже хуже, чем у меня, для вас есть отдельный, бонусный уровень.
Регуляторный домен «JP», Япония, позволяет делать уникальную вещь: запускать точку доступа на мифическом, 14 канале. Правда, только в режиме b. (Помните, я говорил, что между b и g всё-таки есть маленькие отличия?) Поэтому если у вас всё уж совсем плохо, то 14 канал может быть спасением. Но опять же, его физически поддерживает немного что клиентских устройств, что точек доступа. Да и максимальная скорость в 11 Мбит несколько обескураживает.
Копируем /etc/hostapd/hostapd.conf в два файла, hostapd.conf.trendnet24 и hostapd.conf.cisco57
Правим тривиальным образом /etc/rc.d/rc.hostapd, чтобы запускал две копии hostapd.
В первом указываем канал 13. Правда, ширину сигнала указываем 20 МГц (capability 40-INTOLERANT), потому что во-первых, так мы будем теоретически стабильнее, а во-вторых, «законопослушные» точки доступа просто не будут запускаться на 40 МГц из-за того, что забитый диапазон. Ставим capability TX-STBC, RX-STBC12. Плачем, что capabilities LDPC, RX-STBC123 не поддерживаются, а SHORT-GI-40 и SHORT-GI-20 хотя и поддерживаются и чуть-чуть улучшают скорость, но и чуть-чуть понижают стабильность, а значит, их убираем.
Правда, для любителей можно пропатчить hostapd, чтобы появилась опция force_ht40, но в моём случае это бессмысленно.
Если вы находитесь в странной ситуации, когда точки доступа то включаются то выключаются, то для особых гурманов можно пересобрать hostapd с опцией ACS_SURVEY, и тогда точка будет сама сначала сканировать диапазон и выбирать наименее «шумящий» канал. Более того, в теории она даже должна мочь переходить по собственному желанию с одного канала на другой. Мне, правда, эта опция не помогла, увы :-(.
Итак, наши две точки в одном корпусе готовы, запускаем сервис:
/etc/rc.d/rc.hostapd start
Точки успешно стартуют, но…
Но та, что работает на диапазоне 5.7 — не видна с планшета. Что за чертовщина?
Овраг номер 5
Проклятый регуляторный домен работает не только на точке доступа, но и на приёмном устройстве.
В частности, мой Microsoft Surface Pro 3, хотя и сделан для европейского рынка, в принципе не поддерживает диапазон 5.7. Пришлось переключиться в 5.2, но тут хоть завёлся режим 40 Мгц.
Овраг номер 6
Всё завелось. Точки стартовали, 2.4 показывает скорость 130 Мбит (был бы SHORT-GI, было бы 144.4). Почему карта с тремя антеннами поддерживает только 2 пространственных потока — загадка.
Овраг номер 7
Завести-то завелось, а иногда скачет пинг до 200, и всё тут.
А секрет вовсе не в точке доступа прячется. Дело в том, что по правилам Microsoft, драйвера Wi-Fi карты сами должны содержать ПО для поиска сетей и подключения к ним. Всё как в старые-добрые времена, когда 56к-модем должен был иметь при себе звонилку (которую мы все меняли на Shiva, потому что звонилка, идущая в штатной поставке Internet Explorer 3.0 была слишком уж ужасна) или ADSL-модем должен был иметь клиент PPPoE.
Но и о тех, у кого штатной утилиты нет (то есть, о всех на свете!), Microsoft позаботилась, сделав так называемую «автоконфигурацию Wi-Fi». Эта автоконфигурация жизнерадостно плюёт на то, что к сети мы уже подключены, и каждые Х секунд сканирует диапазон. В Windows 10 даже нет кнопки «обновить сети». Работает отлично, пока сетей вокруг две-три. А когда их 44, система замирает и выдаёт несколько секунд пинга 400.
«Автоконфигурацию» можно отключить командой:
netsh wlan set autoconfig enabled=no interface="???????????? ????"
pause
Лично я даже сделал себе на десктопе два батника «включить autoscan» и «выключить autoscan».
Да, прошу обратить внимание, что если у вас русский Windows, то скорее всего сетевой интерфейс будет иметь название на русском языке в кодировке IBM CP866.
Саммари
Я накатал довольно длинную простыню текста, и должен был бы завершить её кратким резюме самых важных вещей:
1. Точка доступа может работать только в одном диапазоне: 2.4 или 5.2 или 5.7. Выбирайте внимательно.
2. Лучший регуляторный домен — это VE.
3. Команды iw phy info, iw reg get покажут вам, что вы можете.
4. 13 канал обычно пустует.
5. ACS_SURVEY, ширина канала 20 МГц, TX-STBC, RX-STBC123 улучшат качество сигнала.
6. 40 МГц, больше антенн, SHORT-GI увеличат скорость.
7. hostapd -dddtK позволяет запустить hostapd в режиме отладки.
8. Для любителей можно пересобрать ядро и CRDA, увеличив мощность сигнала и сняв ограничения регуляторного домена.
9. Автопоиск Wi-Fi в Windows отключается командой netsh wlan set autoconfig enabled=no interface="???????????? ????"
10. Microsoft Surface Pro 3 не поддерживает диапазон 5.7 ГГц.
Послесловие
Я большинство материалов, использованных при написании данного руководства, найдены либо в гугле, либо в манах к iw, hostapd, hostapd_cli.
На самом деле, проблема ТАК И НЕ РЕШИЛАСЬ. Временами пинг всё равно скачет до 400 и стоит на таком уровне, даже для «пустого» диапазона в 5.2 ГГц. Посему:
Ищу в Москве спектроанализатор Wi-Fi диапазона, укомплектованный оператором, с которым можно было бы проверить, в чём вообще проблема, и не заключается ли она в том, что неподалёку находится очень важное и секретное военное учреждение, о котором никто не знает.
Постскриптум
Wi-Fi работает на частотах от 2 ГГц до 60 ГГц (менее распространённые форматы). Это даёт нам длину волны от 150мм до 5мм. (Почему вообще мы меряем радио в частотах, а не в длинах волн? Так же удобнее!) У меня, в целом, возникает мысль, купить обои из металлической сетки в четверть длины волны (1 мм хватит) и сделать клетку Фарадея, чтобы гарантированно изолироваться от соседского Wi-Fi, да и заодно от всего другого радиооборудования, вроде DECT-телефонов, микроволновок и дорожных радаров (24 ГГц). Одна беда — будет блокировать и GSM/UMTS/LTE-телефоны, но можно выделить для них стационарную точку зарядки у окна.
Буду рад ответить на ваши вопросы в комментариях.