понедельник, 2 мая 2011 г.

Настройка программной Wi-Fi точки доступа по стандартам IEEE 802.11g и IEEE 802.11n

В качестве основного компьютера использую дома неттоп zotac zbox HD22-U. Производительности данного неттопа мне хватает вполне. Электроэнергии потребляет он мало. Тихий. Само собой возникло желание использовать его не только как рабочую станцию, но и как Wi-Fi точку доступа. Собственно вот и вся предыстория.
Прежде чем начинать что либо делать, необходимо выяснить что из себя представляет доступное вам аппаратное обеспечение. Если вы только планируете приобрести - обязательно выясните сертифицировано ли оно для работы в сетях Wi-Fi, и для каких стандартов. К примеру, встроенный в неттоп адаптер AzureWave AW-NE766 в списке сертифицированных Wi-Fi устройств я не нашел. Более того, на сайте AzureWave такого адаптера тоже нет. Перед покупкой адаптера обязательно прочтите всю статью, что бы ориентироваться в параметрах и технологиях стандарта IEEE 802.11n. Дело в том, что устройства стандарта 802.11n могут быть реализованы с разными наборами опций, или же устройства могут соответствовать черновому стандарту 802.11n draft 2.0. Если ваше оборудование не соответствует стандарту IEEE 802.11n, даны рекомендации по настройке точки доступа по предыдущему стандарту IEEE 802.11g.
Перечислим необходимые требования. Драйвер Wi-Fi адаптера должен поддерживать API cfg80211 и уметь работать в режиме точки доступа (Access Point, AP). Ядро должно быть версии не ниже чем 2.6.26, это требование накладывает ПО compat-wireless, которое мы будем собирать самостоятельно. В примерах будет использоваться два wi-fi адаптера: AzureWave AW-NE766 (встроен в неттоп, интерфейс подключения pci-e) и TP-LINK TL-WN822N (подключается по шине USB). Все ниже написанное было выполнено на Fedora 14.

Определение чипсета адаптера и используемого драйвера.
Для определения возможностей адаптера необходимо выяснить какой картой вы обладаете, и какой используете драйвер. Для встроенного адаптера Wi-Fi:

zbox$ lspci -v
...
04:00.0 Network controller: RaLink RT2860
 Subsystem: Device 1a3b:1059
 Flags: bus master, fast devsel, latency 0, IRQ 19
 Memory at febf0000 (32-bit, non-prefetchable) [size=64K]
 Capabilities: [40] Power Management version 3
 Capabilities: [50] MSI: Enable- Count=1/32 Maskable- 64bit+
 Capabilities: [70] Express Endpoint, MSI 00
 Capabilities: [100] Advanced Error Reporting
 Kernel driver in use: rt2800pci
 Kernel modules: rt2800pci

Обратите внимание на строчку где содержится "Network controller", в данном случае у меня адаптер на основе RaLink RT2860, и используемый драйвер - rt2800pci. Для usb адаптера:

zbox$ lsusb
...
Bus 002 Device 003: ID 0cf3:1002 Atheros Communications, Inc. TP-Link TL-WN821N v2 [Atheros AR9001U-(2)NG]

К сожалению в выводе команды не присутствует драйвер устройства. Для того что бы его узнать, можно заглянуть в файл /proc/bus/usb/devices, ищите секцию где будет совпадать номер шины (Bus 002) и номер устройства (Device 003). У меня выглядит так:

T:  Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  3 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS=64 #Cfgs=  1
P:  Vendor=0cf3 ProdID=1002 Rev= 1.06
S:  Manufacturer=ATHER
S:  Product=USB2.0 WLAN
S:  SerialNumber=12345
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
I:* If#= 0 Alt= 0 #EPs= 4 Cls=ff(vend.) Sub=00 Prot=00 Driver=ar9170usb
E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=83(I) Atr=03(Int.) MxPS=  64 Ivl=125us
E:  Ad=04(O) Atr=03(Int.) MxPS=  64 Ivl=125us

Для адаптера TP-LINK в Fedora 14 используется драйвер - ar9170usb.
Выяснив, на каком оборудовании построены Wi-Fi адаптеры, и какие используется драйверы, можно переходить к проверке возможности карточки работать в режиме AP. Проверить можно здесь, в таблице перечислены драйверы и возможности ими поддерживаемые. Как вы заметили, драйвер rt2800pci имеет возможность работать в режиме AP, а вот драйвер ar9170usb - нет. В ядре 2.6.40 он будет удален, и ему на замену есть драйвер carl9170. Драйвер carl9170 входит в состав последних версий cоmpat-wireless, его мы соберем из исходников.
Произведем общую настройку системы для реализации AP, а затем перейдем уже к частностям реализации и планирования развертывания Wi-Fi сети по стандартам 802.11g и 802.11n.

Общее конфигурирование системы
Скачайте последнюю версию compat-wireless, распакуйте ее. Для сборки необходимо установить:

zbox# yum install gcc kernel-devel

Если у вас один Wi-Fi адаптер и не планируется другой, то можно сэкономить время собрав только нужный драйвер, или в противном случае соберите все (т.е. не выполняя пункт выбора драйвера скриптом driver-select):

zbox$ bunzip2 compat-wireless-2.6.tar.bz2
zbox$ tar -xf compat-wireless-2.6.tar
zbox$ cd compat-wireless-2011-04-19
zbox$ ./scripts/driver-select carl9170
zbox$ make
zbox# make install

Настоятельно рекомендуется собрать драйвер из последней версии compat-wireless, даже если тот который стоит в системе уже поддерживает функции AP. Если у вас будут наблюдаться проблемы (дело в том что последняя версия compat-wireless - это версия на переднем крае разработки), то можно собрать последнюю стабильную версию.
Для того что бы иметь возможность использовать драйвер carl9170, нужно скачать для него прошивку и поместить ее в каталог /lib/firmware:

zbox# mv carl9170-1.fw /lib/firmware

Для драйвера rt2800pci, вполне работоспособная прошивка уже должна быть в каталоге с остальными прошивками. Предыдущий драйвер ar9170usb, для адаптера TP-LINK, необходимо поместить в блеклист:

zbox# echo blacklist ar9170usb >> /etc/modprobe.d/blacklist.conf

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

zbox$ lsmod | grep carl9170
carl9170               62533  0 
ath                    12028  1 carl9170
mac80211              211715  4 carl9170,rt2800lib,rt2x00pci,rt2x00lib
cfg80211              117801  4 carl9170,ath,rt2x00lib,mac80211
compat                  5965  4 carl9170,rt2x00lib,mac80211,cfg80211

Теперь можно перейти к настройке wi-fi интерфейса, для простоты я считаю что у меня стоит только один Wi-Fi адаптер, а не два сразу.  Выполните, для того что бы определить как называется интерфейс:

zbox$ iwconfig
...
wlan0     IEEE 802.11bgn  ESSID:off/any
             Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm
             Retry  long limit:7   RTS thr:off   Fragment thr:off
             Power Management:off

Ниже приведена конфигурация сетевого интерфейса wlan0, будьте внимательны и впишите свой MAC адрес. Для сети беспроводных устройств я использую подсеть 192.168.1.32/28, первый ip адрес из этой сети будет адресом wi-fi карты:

zbox$ cat /etc/sysconfig/network-scripts/ifcfg-wlan0
DEVICE=wlan0
HWADDR=74:F1:6D:10:34:19
IPADDR=192.168.1.33
NETMASK=255.255.255.240
ONBOOT=YES
Type=Ethernet
NM_CONTROLLED=no

Применим настройки:

zbox# chkconfig network on
zbox# /etc/init.d/network restart

Параметр NM_CONTROLLED используется для того что бы NetworkManager не пытался управлять wi-fi интерфейсом.
Установим и настроим dnsmasq для раздачи адресов wi-fi клиентам и обслуживания dns запросов от клиентов:

zbox# yum install dnsmasq

dnsmaq умеет регистрировать имена dhcp клиентов в dns. Имя dhcp клиента должно предоставляется самим клиентом при аренде адреса, или dnsmasq берет имя самостоятельно из конфигурационного файла. Существуют некоторые ограничения на имена клиентов накладываемые dnsmasq, имя не должно содержать доменной части или точек. Доменный суффикс допускается только в том случае если он соответствует опции "domain". Конфигурация dnsmasq:

zbox$ grep -v '^#\|^$' /etc/dnsmasq.conf 
domain-needed
bogus-priv
interface=wlan0
bind-interfaces
expand-hosts
domain=#
dhcp-range=192.168.1.34,192.168.1.46,255.255.255.240,12h
conf-dir=/etc/dnsmasq.d

zbox# chkconfig dnsmasq on
zbox# /etc/init.d/dnsmasq start

Некоторые пояснения, по конфигурации dnsmasq:
   domain-needed - не посылать запрос на разрешение имени к вышестоящим DNS серверам если имя простое, т.е. без доменного суффикса;
   bogus-priv - не производить обратное разрешение (reverse lookup) для частных сетей, т.е. если имя не будет найдено в /etc/hosts или в файле аренды DHCP то будет возращено - не найдено;
   interface=wlan0 - интерфейс который прослушивает dnsmasq;
   bind-interfaces - строгое ограничение использовать только указанный интерфейс, полезно особенно если у вас в автозапуске есть так же libvirtd;
   expand-hosts - добавить доменный суффикс к простому имени;
   domain - решетка здесь значит что в качестве доменного суффикса использовать суффикс из первой директивы "search" в /etc/resolve.conf;
   dhcp-range - список адресов для предоставления в аренду, маска и время аренды.
Для того что бы клиенты wi-fi могли выходить за пределы нашей сети нужно включить возможность пересылки пакетов и настроить nat.

zbox# echo 1 > /proc/sys/net/ipv4/ip_forward
zbox# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
zbox# iptables -t nat -A POSTROUTING -s 192.168.1.32/28 -o eth0 -j MASQUERADE

zbox# /etc/init.d/iptables save

Последнее что нам надо установить - hostapd, это даемон реализующий функции точки доступа и сервера аутентификации. Если подробнее то hostapd поддерживает аутентификацию IEEE 802.1X/WPA/WPA2/EAP и содержит RADIUS сервер/клиент. Точно так же как и с compat-wireless его лучше установить из исходных кодов последней стабильной версии. Перед сборкой убедитесь что версия библиотеки libnl соответствует 1.1 или выше:

zbox$ rpm -q libnl
libnl-1.1-14.fc14.i686

Установим необходимое для сборки:

zbox# yum install libnl-devel openssl-devel

Далее:

zbox$ gunzip hostapd-0.7.3.tar.gz
zbox$ tar -xf hostapd-0.7.3.tar
zbox$ cd hostapd-0.7.3/hostapd

Сделаем копию файла настроек по умолчанию, и уберем комментирование с параметров CONFIG_DRIVER_NL80211=y и CONFIG_IEEE80211N=y

zbox$ cp defconfig .config
zbox$ grep -v "^$\|^#" .config
CONFIG_DRIVER_HOSTAP=y
CONFIG_DRIVER_NL80211=y
CONFIG_IAPP=y
CONFIG_RSN_PREAUTH=y
CONFIG_PEERKEY=y
CONFIG_EAP=y
CONFIG_EAP_MD5=y
CONFIG_EAP_TLS=y
CONFIG_EAP_MSCHAPV2=y
CONFIG_EAP_PEAP=y
CONFIG_EAP_GTC=y
CONFIG_EAP_TTLS=y
CONFIG_PKCS12=y
CONFIG_IPV6=y
CONFIG_IEEE80211N=y

Соберем hostapd:

zbox$ make
zbox# make install

Стартовый скрипт можно взять из rpm:

zbox$ yumdownloader hostapd
zbox$ rpm2cpio hostapd-0.6.10-2.fc14.i686.rpm | cpio -id
zbox# cp -r ./etc /
zbox# cp -r ./var /

Не забудте сменить путь к исполняемому файлу hostapd в стартовом скрипте, т.е вместо

exec="/usr/sbin/hostapd"

должно

exec="/usr/local/bin/hostapd"

Общая часть закончилась. Прежде чем перейти к непосредственной настройке hostapd, давайте поговорим о планировании и развертывании сети по стандартам 802.11g и 802.11n.

IEEE 802.11g
Стандарт IEEE 802.11g был принят 2003г и характеризуется канальной скоростью 54МБ/с. Реальная пропускная способность составляет около 24МБ/с для TCP соединения при небольшом расстоянии между приемником и передатчиком и при отсутствии помех. Полоса пропускания составляет 83 МГц, а занимаемая полоса частот 2.400ГГц - 2.483ГГц. Весь выделенный диапазон частот делится на 13 каналов, шириной 22МГц. Центральные частоты каналов отстоят друг от друга на 5МГц. Таким образом каждый канал перекрывается как минимум с четырьмя соседними каналами. Во всей полосе частот получается только три взаимно непересекающихся канала 1 (центральная частота 2,412 ГГц), 6 (центральная частота 2,437 ГГц) и 11 (центральная частота 2,462 ГГц) каналы. Как вы уже догадались, в аппаратных точках доступа именно эти каналы стоят по умолчанию. Для того, что бы обеспечить наилучшие условия передачи данных для нашей сети, нужно определить каналы, и мощность излучения соседних точек доступа:

zbox# iw dev wlan0 scan | grep "signal\|channel"
signal: -58.00 dBm
DS Parameter set: channel 1
signal: -78.00 dBm
DS Parameter set: channel 11
signal: -70.00 dBm
DS Parameter set: channel 1
signal: -70.00 dBm
DS Parameter set: channel 6
signal: -72.00 dBm
DS Parameter set: channel 1
signal: -80.00 dBm
DS Parameter set: channel 6
signal: -74.00 dBm
DS Parameter set: channel 11
signal: -80.00 dBm
DS Parameter set: channel 6
signal: -80.00 dBm
DS Parameter set: channel 6

Из полученных данных надо выбрать канал, на котором мощность принимаемого сигнала от соседнего передатчика будет минимально максимальной. Для данного случая на канале 1 работают три передатчика, максимальная мощность сигнала составляет -58.00 дБм. На канале 6 - 4 передатчика, максимальная мощность -70.00дБм. На канале 11 - 2 передатчика, с максимальной мощностью -74 дБм. Получается что минимально максимальная мощность излучения составляет -74 дБм на 11 канале. Для справки, максимальная мощность передатчика разрешенная в Европе составляет 20дБм. Минимальная пороговая величина, при которой возможен прием сигнала для большинства Wi-Fi устройств составляет -80дБм.
Настроим hostapd для работы по стандарту 802.11g:

zbox$ grep -v "^$\|^#" /etc/hostapd/hostapd.conf
ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
rsn_pairwise=CCMP
wpa_passphrase=testtest
driver=nl80211
interface=wlan0
hw_mode=g
channel=11
ssid=zbox-wlan

Это минимальный конфигурационный файл. Основные параметры настройки:
   wpa=2 -использовать только вторую версию набора алгоритмов и протоколов для защиты Wi-Fi сети;
   rsn_pairwise=CCMP - использовать исключительно протокол шифрования CCMP, если не указать то будет использоваться по умолчанию более слабый TKIP;
   wpa_passphrase=testtest - аутентификационный  ключ, естественно он должен быть более сложным чем в примере;
   driver=nl80211 - тип интерфейса драйвера;
   interface=wlan0 - интерфейс на котором будет работать hostapd;
   hw_mode=g - используемый стандарт для передачи данных, может быть: a, b, или g;
   channel=11 - используемый номер канала;
   ssid=zbox-wlan - service set indentifier, идентификатор зоны обслуживания, иначе говоря имя сети.
Запустим hostapd:

zbox# /usr/local/bin/hostapd -d /etc/hostapd/hostapd.conf

Подключимся клиентом к AP и посмотрим канальную скорость подключения:

zbox$ iw dev wlan0 station dump
Station 53:e6:fc:89:ee:d2 (on wlan0)
inactive time: 12453 ms
rx bytes: 337704460
rx packets: 275512
tx bytes: 131794555
tx packets: 207722
tx retries: 11914
tx failed: 62
signal:   -19 dBm
signal avg: -20 dBm
tx bitrate: 54.0 MBit/s

Реальную производительность передачи TCP будем мерить с помощью iperf:

zbox# yum install iperf

На стороне клиента:

zbox# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.1.34 port 5001 connected with 192.168.1.33 port 44898
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.2 sec  24.8 MBytes  20.4 Mbits/sec

На стороне точки доступа:

client# iperf -c 192.168.1.34
------------------------------------------------------------
Client connecting to 192.168.1.34, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.33 port 44898 connected with 192.168.1.34 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.1 sec  24.8 MBytes  20.6 Mbits/sec

Измеренная производительность составила 20.5Мб/с, что является типичным показателем, поскольку клиент и точка доступа находятся в зоне прямой видимости и достаточно близко к друг-другу. Если на пути следования сигнала есть препятствия (стены, окна, деревья или просто много мебели в комнате) или другая сеть на том же канале (соседнем перекрывающемся канале), то реальная скорость передачи будет ниже.
У кого возникнет желание ознакомится со стандартом поближе, тех отсылаю к стандарту IEEE 802.11g-2003 

IEEE 802.11n
Стандарт IEEE 802.11n был принят 2009г. Стандарт поддерживает работу в двух диапазонах, относящихся к стандартам 802.11g - 2.4ГГц (2,4ГГц - 2,4835ГГц, полоса пропускания 83МГц) и  802.11a - 5ГГц (5.150ГГц - 5.350ГГц, 5.725ГГц - 5.825ГГц, полоса пропускания 300МГц). Следует отметить, что в диапазоне частот относящихся к 802.11a доступны 12 непересекающихся каналов. Это примерные характеристики используемых диапазонов частот, для устройств имеющихся в свободном доступе (внимательно смотрите на диапазон 5ГГц, на разных устройствах полоса пропускания может быть разной). Для России недавно вышел приказ, регламентирующий использование Wi-Fi оборудования, где полоса частот для стандарта 802.11n несколько другая.
Основные особенности стандарта:
   Объединение каналов (Channel Bonding) - объединение двух 20МГц каналов в один 40МГц может привести к удвоению пропускной способности. Однако, учитывая что в диапазоне 2.4ГГц всего 3 непересекающихся канала, использовать каналы по 40МГц рекомендуется только в диапазоне 5ГГц;
   Сосуществование каналов шириной 20/40МГц (20/40 MHz Channels and Coexistence) - при подключении клиент и АР обмениваются информацией (HT Information and Capabilities Elements), которая включает в себя ширину канала, номер первичного канала, и смещение вторичного канала шириной 40МГц. Для мирного сосуществования, точка доступа стандарта 802.11n должна переходить на другой канал или переключится на использование канала шириной в 20МГц, если другая точка доступа начинает передачу в одной из половин канала 40МГц первой АР.
   MIMO (multiple input multiple output) и SP (spatial multiplexing) - повышение пропускной способности за счет передачи сигнала по нескольким частотам (пространственным потокам, spatial streams) и последующего приема с объединением в один поток данных. Это возможно при использовании на один поток собственной антенны и тракта приема/передачи на каждой стороне. Каждый поток данных распостраняется по своему пути (к примеру возможно не прямое прохождение сигнала от приемника к передатчику а с использованием отражения). В зависимости от пути распостранения сигнала, потоки могут приходить на приемник с разным уровнем мощности сигнала и разной задержкой. Принято пользоватся обозначением "MxN", где M - число потоков на передачу, а N - число потоков на прием. При использовании конфигурации 4x4 потока MIMO канальная скорость составит 600МБ/с;
   Space-Time Block Coding (STBC) - блочное пространственно-временное кодирование, улучшает надежность приема данных, за счет передачи дублирующихся данных по разным пространственным потокам с разным кодированием;
   SGI (Short Guard Interval) - задержка между передаваемыми символами для предотвращения интерференции передающегося сигнала. Стандартное значение составляет 800нс, короткое составляет 400нс. Использование SGI может увеличить пропускную способность на 10%.
По сравнению с предыдущими стандартами, стандарт 802.11n имеет несколько значимых отличий на канальном уровне, использование которых может удвоить пропускную способность:
   Агрегирование пакетов (Packet Aggregation) - несколько TCP пакетов могут быть объеденены в один фрейм канального уровня, уменьшая тем самым накладные расходы;
   Блочное подтверждение (Block Acknowledgements) - доставка нескольких пакетов может быть подтверждена на канальном уровне как один блок, уменьшая тем самым количество посланных фреймов подтверждения.
Как было уже упомянуто, при подключении клиента к AP производится согласование параметров подключения. Наборы параметров подключения индексированны, и выражаются простым числом MCS (Modulation and Coding Scheme) - индекс модуляции и схемы кодирования. Посмотреть таблицу можно здесь. Каждая строка таблицы состоит из индекса MCS которому в соответствие поставлены параметры текущего соединения, основные из них:
   Number of spatial streams - количество пространственных потоков;
   Modulation - тип модуляции потока;
   Coding rate - эффективность кодирования, т.е. отношение полезных данных к общему количеству кода;
   Data Rate - значения скорости передачи данных в Мб/с, при разном значении задержки защитного интервала (GI = 800ns или GI = 400ns).
Значение индекса MCS от 0 до 31 определяют тип модуляции и схемы кодирования, которые будут использоваться одновременно для всех потоков. Значение индекса с 32 по 77 описывают смешанные комбинации модуляций потоков.
Стандарт 802.11n регламентирует три типа работы точки доступа:
   High Throughput (HT) или Greenfield Mode - режим с высокой пропускной способностью, в котором могут работать только клиенты поддерживающие стандарт 802.11n;
   Non-HT (Legacy) Mode - наследуемый режим, все фреймы отправленные точкой доступа оформлены по старой спецификации стандартов 802.11b/g. Ширина канала может быть только 20 МГц.
   HT Mixed Mode - смешанный режим, при котором используются преимущества режима с высокой пропускной способностью вместе с механизмом реализующим возможность работать со старыми клиентами. Как минус - для клиентов 802.11n пропускная способность ниже чем в HT режиме. Механизм совместной работы заключается в том, что на канальном уровне устройства 802.11n передают фрейм с преамбулой старого формата, следующей за преамбулой формата 802.11n. Преамбула старого формата позволяет клиентам протоколов 802.11b/g передавать и принимать данные от точки доступа.
Как вы уже поняли, реальная пропускная способность стандарта 802.11n сильно зависит не только от количества каналов MIMO и ширины канала, но и от реализаций дополнительных возможностей стандарта. В большинстве случаев от конфигурации MIMO 2x2 можно ожидать скорость передачи TCP трафика около 100Мб/с.
Пожалуй закончим с теорией, и перейдем к практике. Если у вас возникнут затруднения, вот на всякий случай ссылка на стандарт IEEE 802.11n. Для настройки hostapd для работы по стандарту 802.11n необходимо посмотреть какие опции стандарта поддерживают устройства.
Для AzureWave AW-NE766 (вывод команды приведен не полностью):

zbox$ iw list
Wiphy phy0
        Band 1:
                Capabilities: 0x272
                        HT20/HT40
                        Static SM Power Save
                        RX Greenfield
                        RX HT20 SGI
                        RX HT40 SGI
                        RX STBC 2-streams
                        Max AMSDU length: 3839 bytes
                        No DSSS/CCK HT40
                Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
                Minimum RX AMPDU time spacing: 2 usec (0x04)
                HT RX MCS rate indexes supported: 0-15, 32
                TX unequal modulation not supported
                HT TX Max spatial streams: 1
                HT TX MCS rate indexes supported may differ
                Frequencies:
                        * 2412 MHz [1] (20.0 dBm)
                        * 2417 MHz [2] (20.0 dBm)
                        * 2422 MHz [3] (20.0 dBm)
                        * 2427 MHz [4] (20.0 dBm)
                        * 2432 MHz [5] (20.0 dBm)
                        * 2437 MHz [6] (20.0 dBm)
                        * 2442 MHz [7] (20.0 dBm)
                        * 2447 MHz [8] (20.0 dBm)
                        * 2452 MHz [9] (20.0 dBm)
                        * 2457 MHz [10] (20.0 dBm)
                        * 2462 MHz [11] (20.0 dBm)
                        * 2467 MHz [12] (20.0 dBm) (passive scanning, no IBSS)
                        * 2472 MHz [13] (20.0 dBm) (passive scanning, no IBSS)
                        * 2484 MHz [14] (20.0 dBm) (passive scanning, no IBSS)
                Bitrates (non-HT):
                        * 1.0 Mbps
                        * 2.0 Mbps (short preamble supported)
                        * 5.5 Mbps (short preamble supported)
                        * 11.0 Mbps (short preamble supported)
                        * 6.0 Mbps
                        * 9.0 Mbps
                        * 12.0 Mbps
                        * 18.0 Mbps
                        * 24.0 Mbps
                        * 36.0 Mbps
                        * 48.0 Mbps
                        * 54.0 Mbps
        max # scan SSIDs: 4
        max scan IEs length: 2257 bytes
        Coverage class: 0 (up to 0m)
        Available Antennas: TX 0 RX 0
        Supported interface modes:
                 * IBSS
                 * managed
                 * AP
                 * AP/VLAN
                 * WDS
                 * monitor
                 * mesh point
...

Что важного можно узнать из данных? Адаптер поддерживает каналы шириной в 20МГц и 40МГц (HT20/HT40). При обоих каналах поддерживается короткий защитный интервал (RX HT20 SGI и RX HT40 SGI). Адаптер может принимать два пространственных потока (RX STBC 2-streams) а передавать только один (HT TX Max spatial streams: 1). Поддерживаемый адаптером диапазон частот - 2.4Ггц.  Итого можно сделать заключение что формула MIMO - 2x1, максимальная скорость приема - 300МБ/с а передачи 150МБ/с.
Давайте теперь взглянем на второй адаптер:

zbox$ iw list
Wiphy phy0
        Band 1:
                Capabilities: 0x184e
                        HT20/HT40
                        SM Power Save disabled
                        RX HT40 SGI
                        No RX STBC
                        Max AMSDU length: 7935 bytes
                        DSSS/CCK HT40
                Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
                Minimum RX AMPDU time spacing: 8 usec (0x06)
                HT TX/RX MCS rate indexes supported: 0-15, 32
                Frequencies:
                        * 2412 MHz [1] (20.0 dBm)
                        * 2417 MHz [2] (20.0 dBm)
                        * 2422 MHz [3] (20.0 dBm)
                        * 2427 MHz [4] (20.0 dBm)
                        * 2432 MHz [5] (20.0 dBm)
                        * 2437 MHz [6] (20.0 dBm)
                        * 2442 MHz [7] (20.0 dBm)
                        * 2447 MHz [8] (20.0 dBm)
                        * 2452 MHz [9] (20.0 dBm)
                        * 2457 MHz [10] (20.0 dBm)
                        * 2462 MHz [11] (20.0 dBm)
                        * 2467 MHz [12] (20.0 dBm)
                        * 2472 MHz [13] (20.0 dBm)
                        * 2484 MHz [14] (disabled)
                Bitrates (non-HT):
                        * 1.0 Mbps
                        * 2.0 Mbps (short preamble supported)
                        * 5.5 Mbps (short preamble supported)
                        * 11.0 Mbps (short preamble supported)
                        * 6.0 Mbps
                        * 9.0 Mbps
                        * 12.0 Mbps
                        * 18.0 Mbps
                        * 24.0 Mbps
                        * 36.0 Mbps
                        * 48.0 Mbps
                        * 54.0 Mbps
        max # scan SSIDs: 4
        max scan IEs length: 2257 bytes
        Coverage class: 0 (up to 0m)
        Available Antennas: TX 0 RX 0
        Supported interface modes:
                 * IBSS
                 * managed
                 * AP
                 * AP/VLAN
                 * monitor
                 * P2P-client
                 * P2P-GO
...

Адаптер TP-LINK TL-WN822N поддерживает каналы шириной в 20МГц и 40МГц. На приеме для канала шириной 40МГц поддерживается короткий защитный интервал. Поддерживаемый адаптером диапазон частот - 2.4Ггц. К сожалению нет ни слова о количестве пространственных потоков.
Проведем два варианта реализации AP. При первом будем использовать адаптер AzureWave для точки доступа, а адаптер TP-LINK для клиента.
Посмотрите в директории, где вы собирали hostapd, конфигурационный файл hostapd.conf. Еще точнее, на раздел о настройке 802.11n, выберите опции которые поддерживаются вашим адаптером. В конфигурацию hostapd, для адаптера AzureWave добавим следующие строки для включения 802.11n:

zbox# cat /etc/hostapd/hostapd.conf
...
wmm_enabled=1
ieee80211n=1
ht_capab=[HT40-][GF][SHORT-GI-20][SHORT-GI-40][RX-STBC12]

здесь:
   wmm_enabled=1 - включить технологию WMM (WiFi Multimedia), она обеспечивает приоритезацию мультимедиа трафика (голос, звук, видео);
   ieee80211n=1 - включить поддержку стандарта 802.11n;
   ht_capab=[HT40-][GF][SHORT-GI-20][SHORT-GI-40][RX-STBC12] - перечень поддерживаемых опций:
   [HT40-] - поддержка канала шириной 20МГц и 40МГц, при этом второй канал MIMO будет использован с меньшим номером канала;
   [GF] - поддержка "чистого" HT режима;
   [SHORT-GI-20] и [SHORT-GI-40] - поддержка короткого защитного интервала:
   [RX-STBC12] - поддержка приема одного или двух каналов с кодированием STBC.
Запустите hostapd, подключитесь клиентом к AP. Так как в качестве клиента выступает другой PC с адаптером TP-LINK, имеющий другие наборы опций, давайте посмотрим параметры подключения, на AP:

zbox# /usr/local/bin/hostapd -d /etc/hostapd/hostapd.conf

zbox# iw dev wlan0 station dump
Station 54:e6:fc:87:ee:d2 (on wlan0)
inactive time: 12034 ms
rx bytes: 129559951
rx packets: 84569
tx bytes: 3637506
tx packets: 42322
tx retries: 3001
tx failed: 15
signal:   -25 dBm
signal avg: -28 dBm
tx bitrate: 150.0 MBit/s MCS 7 40Mhz short GI

На стороне клиента:

client# iw dev wlan0 station dump
Station 74:f0:6d:10:94:19 (on wlan0)
inactive time: 0 ms
rx bytes: 4040140
rx packets: 46952
tx bytes: 129558725
tx packets: 84526
tx retries: 199
tx failed: 0
signal:   -24 dBm
signal avg: -19 dBm
tx bitrate: 300.0 MBit/s MCS 15 40Mhz short GI

Параметры соединения подтверждают характеристики MIMO 2x1 адаптера AzureWave, адаптер TP-LINK продемонстрировал что он поддерживает конфигурацию потоков 2х2 и поддерживает короткий защитный интервал. Протестируем реальную скорость передачи TCP трафика:

zbox# iperf -s 
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.1.33 port 5001 connected with 192.168.1.34 port 39309
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.1 sec   117 MBytes  96.9 Mbits/sec

client# iperf -c 192.168.1.33
------------------------------------------------------------
Client connecting to 192.168.1.33, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.34 port 39309 connected with 192.168.1.33 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   117 MBytes  97.6 Mbits/sec

В обратном направлении:

zbox# iperf -c 192.168.1.34
------------------------------------------------------------
Client connecting to 192.168.1.34, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 192.168.1.33 port 47558 connected with 192.168.1.34 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  75.1 MBytes  62.9 Mbits/sec

client# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 192.168.1.34 port 5001 connected with 192.168.1.33 port 47559
[ ID] Interval       Transfer     Bandwidth
[  4]  0.0-10.1 sec  76.9 MBytes  64.1 Mbits/sec

Достигнутая скорость передачи от AP к клиенту - 63Мб/с, а от клиента к AP составила 97Мб/с. Учитывая конфигурацию потоков для точки доступа (2x1) это очень неплохой результат.
Второй вариант точки доступа, адаптер точки доступа TP-LINK, адаптер клиента - AzureWave. Как вы уже поняли, при этом варианте осталось по сути все прежнее, изменились лишь скорости от клиента к точке доступа и наоборот. Я не буду приводить результаты измерений, приведу только изменения в конфигурационном файле hostapd.conf

zbox# cat /etc/hostapd/hostapd.conf
...
wmm_enabled=1
ieee80211n=1
ht_capab=[HT40-][SHORT-GI-40]

После того как вы провели все тесты не забудьте настроить службу hostapd в автозапуск:

zbox# chkconfig --add /etc/init.d/hostapd
zbox# chkconfig hostapd on
zbox# /etc/init.d/hostapd start

Перейдем к решению проблем. Почему если отношение сигнал/шум хорошее, а скорость передачи низкая? Для понимания механизма передачи данных в Wi-Fi сетях надо ознакомится с обработкой коллизий.

Механизм обработки коллизий.
В беспроводных сетях стандарта IEEE 802.11 для обнаружения коллизий используется механизм CSMA/CA (Carrier Sense Multiple Access With Collision Avoidance) - множественный доступ с контролем несущей и избежанием коллизий. В Wi-Fi сети передача данных осуществляется в полудуплексном режиме, все участники передают и принимают на одном канале. Таким образом, для избежания коллизий передача осуществляется только тогда, когда отправитель уверен в том что канал свободен. Каждый фрейм должен быть подтвержден, если подтверждения не было - то считается что произошла коллизия и фрейм передается через некоторое время повторно. Ситуация осложняется тем что может быть ситуация "скрытого узла", когда два клиента подключены к одной точке доступа, но при этом не знают о существовании друг-друга (сигнал от одного клиента не доходит до другого, но достигает AP). Для устранения проблемы применяется следующий алгоритм: клиент перед передачей данных посылает AP пакет RTS (Ready-to-send), который содержит значение времени занятия канала. Точка доступа отвечает CTS (Clear-to-send). Все другие участники сети получив пакет CTS должены воздержатся от передачи данных на заданное время. Подведу итог, каждый передатчик, использующий тот же канал что и ваше оборудование, может серьезно снизить скорость передачи данных. Если ваше оборудование использует 2x2 потока MIMO, то для осуществления приема/передачи используется почти весь диапазон 2.4ГГц. Естественно все соседние точки доступа будут оказывать негативное влияние на скорость передачи. Если вы обратите внимание, при старте hostapd выдает список узлов, которые находятся в одной полосе частот:

Received scan results (7 BSSes)
40 MHz affected channel range: [2417,2467] MHz
Neighboring BSS: 70:71:bc:24:c1:fe freq=2437 pri=0 sec=0
Neighboring BSS: 94:0c:6d:ee:11:b8 freq=2437 pri=0 sec=0
Neighboring BSS: 00:1e:8c:d9:e6:89 freq=2437 pri=0 sec=0
Neighboring BSS: 00:16:e3:8d:74:5a freq=2462 pri=0 sec=0
Neighboring BSS: 00:1f:c6:61:87:34 freq=2462 pri=0 sec=0
Completing interface initialization

Вывод тут один, высокоскоростные беспроводные сети нужно строить в диапазоне 5ГГц. 

19 комментариев:

  1. НиАсилил за первой 10-ок раз :D
    Шучу, катит! Зачёт!

    ОтветитьУдалить
  2. было бы неплохо под конец статьи привести список используемой литературы (ссылки, ...)

    ОтветитьУдалить
  3. ссылок много и большинство из них не очень интересны, я их не собирал. Могу сказать только что приведенные ссылки в статье (стандарты и wireless.kernel.org) - самые ценные из них. Так же много интересной информации можно найти из форумов http://www.spinics.net/lists/linux-wireless и http://rt2x00.serialmonkey.com. Большое спасибо мантейнерам Christian Lamparter и Ivo van Doorn

    ОтветитьУдалить
  4. отличнейшая статья, теперь наконецто понял почему точка работает не на полную мощь, мега спасибо)

    ОтветитьУдалить
  5. Да, я тоже много узнал пока писал статью :))

    ОтветитьУдалить
  6. Автор, спасибо за статью. Документации и так не много, а тут и подробно, и на великом и могучем русском языке.

    ОтветитьУдалить
  7. Хорошая статья, спасибо. Конфигурация почти как у меня, всё сделал, а не заводится...

    ОтветитьУдалить
  8. Планшет, которым я пытаюсь "сконнектиться" пишет:"Obtaining IP address..." и у него не получается.
    В messages вижу такие строки:
    kernel: [ 152.729066] Intel AES-NI instructions are not detected.
    kernel: [ 152.753254] padlock: VIA PadLock not detected.
    hostapd: wlan0: STA 58:67:1a:17:db:04 RADIUS: starting accounting session 4E2D986E-00000000
    hostapd: wlan0: STA 58:67:1a:17:db:04 WPA: pairwise key handshake completed (RSN)
    hostapd: wlan0: STA 58:67:1a:17:db:04 IEEE 802.11: authenticated
    hostapd: wlan0: STA 58:67:1a:17:db:04 IEEE 802.11: associated (aid 1)
    hostapd: wlan0: STA 58:67:1a:17:db:04 RADIUS: starting accounting session 4E2D986E-00000001
    hostapd: wlan0: STA 58:67:1a:17:db:04 WPA: pairwise key handshake completed (RSN)
    hostapd: wlan0: STA 58:67:1a:17:db:04 WPA: group key handshake completed (RSN)
    Смущает что нет ничего от dnsmasq. Есть ли у Вас?

    ОтветитьУдалить
  9. dnsmasq должен писать в /var/log/messages. Попробуйте запустить его в шелле в фореграунде ( т.е. с ключем "-k") и посмотритье что будет писать.

    ОтветитьУдалить
  10. Прочитал вашу статью. Много узнал полезного. На мой взгляд, одна из лучших статей для wifi под linux.
    Но вот есть проблема. Точка не хочет обслуживать нормально в режиме 802.11n виндовых клиентов (пробовал и хр, и 7, менял драйвера, оборудование... результат отрицательный). Ненормальность проявляется в потере пинга (то есть, то нет). При этом hostapd не регистрирует разрыва в подключении (складывается ощущение, что дело в винде). Адрес клиент получает, канальная скорость 150 Мбит. Заметил такую особенность, первые 3-5 пингов идут нормально, дальше начинаются проблемы.
    В режиме 802.11g - все ок, как часы.
    Клиенты unix-подобных ОС (linux, android, free) работают с точкой идеально в режиме 802.11n (скорость высокая, пинг не теряется).

    вот конфиг hostapd:
    wmm_enabled=1
    ieee80211n=1
    ht_capab=[HT40+][SHORT-GI-20][SHORT-GI-40][RX-STBC12]

    Точка TP-Link WN822N V2, OS Ubuntu 11.10, драйвер ath9k_htc из последнего compat-wireless

    В общем, нужен совет.

    ОтветитьУдалить
  11. Я бы попробовал "поиграть" с опциями ht_capab. Может посмотреть другой драйвер для wi-fi карточки под windows.

    ОтветитьУдалить
  12. Пробовал ht_capab выставлять по всякому. Тот же результат. Разных карт wifi перепробовал штук 5 наверно (от разных производителей, с поддержкой n, без нее). Складывается ощущение, что механизм винды как-то не корректно обрабатывает инфу от hostapd. Причем, еще раз повторюсь, это наблюдается только при включении поддержки 802.11n.
    До этого я брал карточку TP-Link TL-WN951. Мучил ее, наверно, недели две :) Потом наткнулся вот на эту тему http://forum.ubuntu.ru/index.php?topic=165195.0 расстроился ((( В итоге эта карта работает у меня как AP в режиме g.
    Решил вот теперь вернуться снова к этому вопросу и найти точно такую же карту, как у вас в статье (очень уж хочется быстрый и не глючный wifi дома :)). Нашел! Но вот кто же знал, что ваша TP-Link первой ревизии http://wikidevi.com/wiki/TP-LINK_TL-WN822N_v1 , а у меня второй :) http://wikidevi.com/wiki/TP-LINK_TL-WN822N_v2
    Кстати, вы не пробовали конектиться виндовым клиентом к AP, когда использовалась карта TP-Link?
    Видимо жизнь меня ничему не учит... Один раз обжегся с tp-link, мало оказалось... решил еще раз попробовать :) правда 14 дней еще не прошло с момента покупки... если за следующие пару дней не разберусь, пойду сдаваться :)

    ОтветитьУдалить
  13. Не знаю что подсказать, видимо тут будет нелишним посмотреть на траффик wireshark'ом на стороне клиента. Клиенты windows у меня работали по протоколу n, хотя замеры скорости я с ними не проводил.

    ОтветитьУдалить
  14. Спасибо, это лучшая статья рунета по этой теме.
    Раскрыто все самое важное.
    У себя запустил на 150мбит, TP-Link 722NC -> Note + AR9285.

    Чистыми до 10-12МБ.
    Хотя еще настраивать и настраивать, но главное что работает.

    ОтветитьУдалить
  15. Спасибо за статью, завёл точку доступа с полпинка (gentoo 3.2.1+Ralink 2860@rt2800pci:)

    ОтветитьУдалить
  16. Здравствуйте,

    Меня зовут Григории, хотел попросить вашего совета.

    Нашел ваш блог насчет HOSTAPD в интернете.

    У меня есть ноутбоок, на котором есть LAN (eth0) и WiFi (wlan0) карта.

    LAN (eth0) карта подключен к модему (Internet WAN) - 01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express

    WiFi (wlan0) карту хочу использовать как точку доступа WiFi - Bus 001 Device 005: ID 0db0:6877 Micro Star International RT2573

    Установил CentOS 6.3

    Обновил - yum update

    Модем 192.168.1.254 подключен к eth0 (LAN)

    Интернет на Centos работает и через eth0 и через wlan0 (дрaивера в порядке).



    [root@localhost gregory]# ifconfig

    eth0 Link encap:Ethernet HWaddr 00:03:0D:B2:47:3C

    inet addr:192.168.1.80 Bcast:192.168.1.255 Mask:255.255.255.0

    inet6 addr: fe80::203:dff:feb2:473c/64 Scope:Link

    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

    RX packets:565550 errors:0 dropped:0 overruns:0 frame:0

    TX packets:185140 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:1000

    RX bytes:822560148 (784.4 MiB) TX bytes:13596034 (12.9 MiB)

    Interrupt:26 Base address:0xe000



    lo Link encap:Local Loopback

    inet addr:127.0.0.1 Mask:255.0.0.0

    inet6 addr: ::1/128 Scope:Host

    UP LOOPBACK RUNNING MTU:16436 Metric:1

    RX packets:8 errors:0 dropped:0 overruns:0 frame:0

    TX packets:8 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:0

    RX bytes:480 (480.0 b) TX bytes:480 (480.0 b)



    wlan0 Link encap:Ethernet HWaddr 00:21:85:B7:92:24

    UP BROADCAST MULTICAST MTU:1500 Metric:1

    RX packets:0 errors:0 dropped:0 overruns:0 frame:0

    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:1000

    RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)



    [root@localhost gregory]#





    1. какие настройки должны быть в /etc/sysconfig/network-scripts (ifcfg-)


    [root@localhost gregory]# ls /etc/sysconfig/network-scripts/
    ifcfg-lo ifdown-post ifup-bnep ifup-post net.hotplug
    ifdown ifdown-ppp ifup-eth ifup-ppp network-functions
    ifdown-bnep ifdown-routes ifup-ippp ifup-routes network-functions-ipv6
    ifdown-eth ifdown-sit ifup-ipv6 ifup-sit
    ifdown-ippp ifdown-tunnel ifup-isdn ifup-tunnel
    ifdown-ipv6 ifup ifup-plip ifup-wireless
    ifdown-isdn ifup-aliases ifup-plusb init.ipv6-global
    [root@localhost gregory]#


    3. что надо отключить включить – Network Manager

    3. надо установить DHCP или только dnsmasq

    4. что прописать в IPTABLES


    [root@localhost gregory]# cat /etc/sysconfig/iptables
    # Firewall configuration written by system-config-firewall
    # Manual customization of this file is not recommended.
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
    -A INPUT -m state --state NEW -p tcp --dport 23 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT
    [root@localhost gregory]#


    5. IPFORWARDING

    6. HOSTAPD настройки

    7. как сделать, чтоб при перезагрузке компьютера все стартовало

    Заранее благодарю

    Григорий

    ОтветитьУдалить
  17. Добрый день, Григорий!

    Centos 6 и Fedora 14 достаточно близки к друг-другу, что бы произвести настройку по шагам, как написано в статье.

    ОтветитьУдалить
  18. Добрый день. Имею TP-LINK TL-WN7200ND и системник на Ubuntu server 13.04. Сделал всё как написано в статье, всё начало работать. Осталась одна проблема: периодически падает мощность принимаемого сигнала у клиентов (с пяти палок до нуля). Причём данная проблема наблюдается и при близком расстоянии от точки до клиента в зоне прямой видимости. Подскажите пожалуйста, в чём может быть дело.

    ОтветитьУдалить