Розробка

Все, що ви хотіли знати про тестування адаптерів Wi-Fi, але боялися запитати

Днями нашої компанії виповнюється 20 років. Останні 15 років з цих 20 ми робимо програми для аналізу Wi-Fi-мереж. Частина цієї роботи – розробка драйверів для Wi-Fi-адаптерів, і в цій статті я розповім, як команда розробників тестує продукти своєї праці, і як процес тестування еволюціонував за ці 15 років разом з еволюцією стандартів і адаптерів. Буде багато картинок (те, що називають «geek porn») і технічних подробиць.

Навіщо взагалі писати спеціальні драйвери?

Коли ви робите софт для аналізу мереж Wi-Fi (а ми робимо програму для інспектування та моделювання мереж і аналізатор пакетів Wi-Fi), вам потрібно якимось чином отримувати (читати, захоплювати, сниффить, ловити… — все це синоніми) пакети Wi-Fi, якими обмінюються найближчі точки доступу і клієнти. Зробити це під Windows можна, лише створивши набір своїх власних драйверів для певних чіпсетів.

Що ж не так із звичайними стандартними драйверами, які робить виробник адаптера? З точки зору звичайного користувача, що з ними все добре. Є лише маленька проблема – ви не можете його використовувати для читання Wi-Fi пакетів в режимі пасивного спостерігача. А без цього ви не можете створити софт для аналізу мереж. Взагалі, це велика тема для окремої статті (і я її напишу в цьому році). Якщо вас цікавить прямо зараз, я розповім коротко в наступному абзаці, а якщо тема програмування вам не близька, просто пропустіть його.

Років десять тому під Windows з’явився новий API для пасивного читання Wi-Fi пакетів, так званий monitor mode. «Сніффить» пакети на Windows можна було завжди, і ніхто не заважає вам запустити Wireshark і бачити пакети, які йдуть через ваш бездротовий адаптер, але проблема в тому, що ви побачите тільки свої пакети і тільки дата-пакети. Вся інша інформація (чужі пакети, пакети типу Beacon, інформація щодо рівня сигналу в пакеті і його дата-рейту, тощо) недоступна. Новий API був покликаний вирішити це питання раз і назавжди. Але не вирішив: його не підтримує нормально майже ні один чіпсет основних вендорів, а сам API застарів ще в момент народження і не розвивається Microsoft. Коротше кажучи, з ним повна катастрофа. І якщо ви натрапили на софт для аналізу мереж Wi-Fi під Windows, продавці якого стверджують, що він підтримує всі або майже будь-які адаптери Wi-Fi і не вимагає заміни драйверів – вам точно впарюють те, що називається по-англійськи snake oil.

Писати спеціальні драйвери для моніторингу Wi-Fi складно, довго і дорого. Кількість компаній, які займаються цим, можна порахувати, використовуючи пальці однієї руки.

Навіщо тестувати зв’язку адаптер-драйвер

Драйвер – це програма для взаємодії з hardware (залізом), специфічна для конкретної hardware. У процесі розробки драйвера програміст повинен переконатися, що драйвер коректно ловить пакети, перемикає частотні канали і діапазони, коректно реагує на hibernate системи, вірно підраховує рівні сигналу, і робить ще безліч речей, без яких неможливо аналізувати Wi-Fi мережу.

Здавалося б, це досить зрозуміла і проста задача: встромив адаптер в комп’ютер, а далі розробляй і тестуй свій драйвер, скільки хочеш. В реальності, є маса нюансів, про які ми і розповімо.

Якою має бути платформа для тестування

Щоб технологічно тестувати драйвери, потрібен якийсь test bed, тобто платформа для роботи з різноманітним залізом, яка повинна відповідати декільком вимогам:

  • Просте відключення одного і підключення іншого адаптера.
  • Можливість підключення до сучасних комп’ютерних інтерфейсів.
  • Низькі перешкоди від електронних компонентів.
  • Мобільність. В процесі тестування потрібно мати можливість переміщати Wi-Fi адаптер, змінюючи орієнтацію його антен в просторі і змінюючи дистанцію до точки доступу (інакше ви не зможете нормально відкалібрувати рівень сигналу).
  • Можливість підключення декількох адаптерів одночасно (для USB).

Крім того, буває украй корисно подивитися, як працює стандартний драйвер, тобто побачити спілкування драйверу адаптера з комп’ютером на рівні шини, але ми залишимо поки що цю тему в стороні.

Археологія та сучасність

Тепер прийшов час розповіді безпосередньо про залізо. Згадаємо минуле, місцями дуже давнє, і обговоримо нове.

2003

Ми почали займатися софтом для Wi-Fi у 2003 році (до цього ми робили софт тільки для дротяних мереж). Початок нульових був часом, коли Wi-Fi тільки-тільки починав свій шлях. Перший з родини стандартів, 802.11, був прийнятий ще в 1997 році. За ним пішли 802.11 b і 802.11 а в 1999 році, але в маси технологія пішла значно пізніше. Більшість ноутбуків продавалися без вбудованого Wi-Fi, але до них можна було самостійно придбати адаптери: зовнішні, що підключаються до порту CardBus (PCMCIA) для ноутбуків, або внутрішні стандарту PCI. Невелика частина high-end ноутбуків продавалася і з вбудованими адаптерами miniPCI.

Нашим першим кроком була підтримка CardBus-адаптерів 802.11 b. То були благословенні часи: майже всі такі адаптери були на чіпсеті Prism компанії Intersil, сорс-код драйвера був доступний безкоштовно для всіх після підписання NDA, а максимальна швидкість передачі даних на фізичному рівні становила 11 Mbps, тобто реально можна було передавати дані зі швидкістю не більше 1 мегабайта в секунду в ідеальних умовах.

Wi-Fi-адаптер CardBus з зовнішніми антенами

Треба сказати, що адаптери непогано працювали, мали хорошу чутливість, особливо якщо була можливість підключення зовнішніх антен. З платформою для тестування було теж все дуже просто і безальтернативно: майже всі ноутбуки мали один або два порти CardBus.


Ви ще пам’ятаєте цих мамонтів по 3-4 кілограми?

Все, що нам залишалося – вставити адаптер в такий зовнішній порт.


Адаптер CardBus і відповідний слот стародавньої машини

2007

На зміну далеко не мініатюрним CardBus-адаптерам приходить більш витончений стандарт ExpressCard на шині PCI Express. На ринку з’являються 34-міліметрові ExpressCard-адаптери Wi-Fi, причому вже 802.11 g, 802.11 a. Швидкості зростають, застосовуються нові схеми модуляції.


Wi-Fi-адаптери ExpressCard

ExpressCard, як і CardBus, цілком зручний для тестування. Карти легко змінювати, ноутбуки, мобільні, на ринку немає недоліку в моделях з портами ExpressCard.

Десктопи теж не стоять на місці, в 2007 прийнятий стандарт PCI Express 2.0, так що всередині десктопів вже часто з’являються PCIe-адаптери з зовнішніми антенами. Їх тестувати не так зручно (зняти кришку корпуса, замінити PCIe-адаптер, повернути все на місце).

2010

Ми починаємо підтримку Wi-Fi-адаптерів USB 2.0. Це дуже зручний форм-фактор як для тестування, так і для використання кінцевими користувачами. Все, що потрібно – порт USB, або кілька портів, якщо ви використовуєте кілька адаптерів.

На арену виходить легендарний адаптер Proxim ORiNOCO 8494 стандарту 802.11 n, заснований на чіпсеті виробництва Atheros Communications, тоді ще не поглиненої Qualcomm. Цей адаптер використовували всі професійні програми для Wi-Fi site surveys. У нього відмінна чутливість.


Легендарний USB-адаптер Proxim ORiNOCO 8494

Можливість підключити відразу кілька адаптерів – великий плюс, це прискорює час сканування каналів, якщо мова йде про програми для site survey, і дозволяє, наприклад, аналізувати поведінку клієнтів при роумінгу, якщо мова йде про пакетних аналізаторах.

Тим не менш, не варто забувати, що типовий USB-адаптер Wi-Fi споживає від 200 до 300 mA, і якщо ви використовуєте пасивний USB-хаб, встромивши в нього три адаптера, то ви легко можете вийти за граничні USB 2.0 500 mA.


Вимірювач PortaPow для визначення споживаного адаптером струму

Радіочастотних перешкод від хабів USB 2.0 практично немає, і, крім питання про споживаному струмі, єдине, про що вам треба подбати – це розташування портів на хабі. Порти повинні бути розташовані так, щоб сусідні порти можна було вставити адаптери одночасно (якщо порти розташовані занадто близько, вставити адаптери просто не вийде).

Наступною проблемою в 2010 році для нас стала поява адаптерів MiniPCIe, які прийшли на зміну MiniPCI в ноутбуках. Почали ми з того, що розбирали ноутбуки, щоб протестувати новий адаптер. Яка це була біль – розповідати, певно, не треба. Заміна адаптера в ноутбуці – це тривалий і нудний процес, причому можна натрапити на багато підводних каменів. По-перше, якщо в «рідному» адаптері ноутбука стояв адаптер з двома антенами, а нам хотілося протестувати модель з трьома антенами, нормального рішення не було. По-друге, частина виробників ноутбуків займається відвертим шкідництвом, жорстко прошиваючи в BIOS ті моделі адаптерів, які ноутбук підтримує. І якщо новий адаптер не потрапляє в такий white list, то він просто не розпізнається. По-третє, вам може просто не пощастити, і ви що-небудь зламаєте всередині.

В якийсь момент нам довелося використовувати десктопи з платою-перехідником PCIe <-> MiniPCIe. Але це рішення не було ідеальним: мобільність пристрою все ж важлива. Ідеальне рішення знайшлося у тайванських хлопців з фірми Bplus Technology, які, серед великого асортименту дуже цікавих налагоджувальних рішень, пропонували ось таку прекрасну плату:


Плата для тестування з роз’ємом MiniPCIe, що підключається через адаптер ExpressCard

Ця плата стала просто порятунком на багато років. Test bed вийшов чудовим: адаптери можна змінювати в два рахунки, збережена мобільність, перешкод немає, а сама плата коштує зовсім недорого. Все що потрібно – ноутбук зі слотом ExpressCard, але в ті роки це не було проблемою.


Плата в підключеному стані, адаптер ExpressCard вставлений в ноутбук

2013

До 2013 року Wi-Fi повністю завоював світ. Всі ноутбуки поголовно оснащені інтегрованими модулями Wi-Fi, і ці модулі, на хвилі загальної мініатюризації, починають випускатися в новому форм-факторі, M. 2 (він же NGFF). Карти M. 2 менше звичних MiniPCIe і мають інший роз’єм.


Плата з роз’ємом MiniPCIe, модуль MiniPCIe, модуль M. 2

Дуже хочеться продовжити використання нашого прекрасного комплекту для тестування, і Bplus Technologies знову приходить на допомогу. Вони випускають перехідник MiniPCIe <-> M. 2, і ми легко робимо ось такий товстий бутерброд:


«Бутерброд» з плати MiniPCIe, перехідника MiniPCIe <-> M. 2, Wi-Fi-адаптера M. 2 і підключені до нього omni-антени

Ноутбуків з ExpressCard на ринку вже майже не залишається, але у нас є запас таких старих машин, хоча вже зрозуміло, що скоро доведеться шукати нове рішення. Але про це нижче.

2014

У грудні 2013 року ратифікований стандарт 802.11 ac, і в 2014 році на ринку з’являється багато адаптерів 802.11 ac, причому вже USB 3.0. Навіщо адаптерам USB 3.0? Тому що швидкості шини 2.0 вже не вистачає. Трьохпотокові (3 spatial streams) адаптери 802.11 n могли забезпечувати максимальну швидкість 450 Mbps на фізичному рівні, а ось адаптери 802.11 ac вже можуть давати 867 Mbps (два потоку, ширина каналу 80 MHz) або 1300 Mbps (три потоку, ширина каналу 80 MHz) і навіть в теорії 2340 Mbps (три потоку, ширина каналу 160 MHz, тільки таких немає в природі).

Єдина проблема з USB 3.0 полягає в тому, що пристрої USB 3.0 (кабелі, коннектори, схемотехніка) здатні генерувати досить потужний широкосмуговий радіочастотний шум, який робить адаптери набагато менш чутливими, оскільки знижується відношення сигнал/шум. У відсутність хорошого екранування, цей ефект можна легко спостерігати. Скріншот, наведений нижче, зроблений з допомогою TamoGraph Site Survey і аналізатора спектра Wi-Spy. На скріншоті показана типова картина роботи декількох мереж в діапазоні 2.4 GHz (амплітуди вгорі і так званий waterfall view внизу). Видно, що поріг шуму знаходиться приблизно на рівні -95 dBm.


Перешкоди від USB-хаба відсутні

Тепер спробуємо наблизити Wi-Spy до хабу або зовнішнього диска USB 3.0. Картина радикально змінюється:


Потужні перешкоди від USB-хаба

Поряд з хабом спостерігається дуже пристойний шум, приблизно на рівні -77 dBm. Якщо врахувати, що мінімальне відношення сигнал/шум, при якому Wi-Fi ще якось може працювати, становить близько 4 dB, то при такій картинці адаптер не зможе з’єднатися з мережею, якщо сигнал від точки доступу буде нижче -73 dBm. Щоб обійти цю проблему, варто спробувати різні хаби або використовувати додаткові USB-кабелі, видаляють адаптер від джерел RF-шуму.

Ви запитаєте, як же за таких перешкодах живуть адаптери USB 3.0? Вони живуть дуже цікавим життям. Взяти, приміром, адаптери на чіпсеті Realtek: коли адаптер не асоційований, він працює в режимі USB 2.0, скануючи канали і знаходячи довколишні мережі. Коли адаптер підключається до мережі, то спеціальний системний сервіс Windows переинициализирует пристрій, переводячи його в режим USB 3.0. У цьому режимі адаптер залишається до тих пір, поки він не диссоціюється, після чого він знову повертається в режим USB 2.0. Ось такі божевільні танці.

2018

Час йде вперед, і якщо з тестуванням USB-адаптерів ніяких нових проблем не з’являється (роз’єми USB Type-C не в рахунок, копійчаний перехідник вирішує проблему), то щодо MiniPCIe і M. 2 назріває криза. Жити далі зі старої зв’язкою «ноутбук зі слотом ExpressCard + плата MiniPCIe з інтерфейсом ExpressCard» стає нестерпно. По-перше, старі ноутбуки вже не тягнуть Windows 10. По-друге, вони можуть померти в будь-який момент, залишивши нас біля розбитого корита, оскільки шукати на блошиному ринку стародавні ноутбуки на заміну зовсім не хочеться.

Треба знайти нове рішення. Мобільний, бажано і під Windows і під macOS, з сучасним інтерфейсом для підключення. Природно, з можливістю Direct Memory Access-DMA). Найпростіше – вставити плату-перехідник PCIe <-> MiniPCIe в десктоп, але тоді на мобільності треба поставити хрест. Тягати на собі десктоп по офісу дуже корисно для здоров’я, але не дуже продуктивно. Крім того, ми взагалі зараз йдемо від десктопів в бік ноутбуків і Intel NUC; десктопи в значній мірі втратили сенс в останні роки.

Отже, що нам залишається? Звичайно ж не USB, тому що, на жаль, не можна зробити місток PCIe <-> USB. Тоді Thunderbolt: він є в нових ноутбуках і NUC’ах, і він повинен зробити можливим місток PCIe <-> Thunderbolt. Добре, напрямок пошуку – якийсь девайс для підключення адаптера PCIe через Thunderbolt.

Шукаємо, шукаємо і знаходимо красеня: Startech Thunderbolt 3 PCIe Expansion Chassis. Природно, його розробникам навіть в самих буйних фантазіях не могла прийти в голову думка, що хтось захоче вкласти в це шасі карту Wi-Fi. На сайті, власне, описані всі ті фантазії, які відвідали розробників: «The Thunderbolt 3 PCIe chassis makes it easy to expand your system with the capabilities you need to work at peak productivity. You can add many types of PCI Express cards, such as a PCIe USB 3.1/3.0/2.0 and USB-C, SSD, network, eSATA, FireWire or video capture cards». Теоретично, Wi-Fi повинен злетіти. Практично… ну ви знаєте як буває практично. Якщо у компонента є хоч найменший шанс не заробити за будь-якої причини (драйвер, firmware, мікросхеми), то він обов’язково не запрацює.

Ми написали в саппорт. Саппорт, зрозуміло, був абсолютно не готовий до питання по Wi-Fi. Сказали, що пробували Ethernet-адаптери, але Wi-Fi – ніколи. Ну що ж, спробуємо за них. Посилка приїжджає швидко, і нам залишається тільки зняти зовнішній корпус і вставити PCIe-плату з перехідником на M. 2.


Нутрощі Startech TB31PCIEX16

В перехідник треба вставити адаптер Wi-Fi і прикрутити його. Далі підключаємо до плати антени (через мікроскопічні коннектори, без лупи не впоратися), прикручуємо антени до скоби PCIe-плати, щоб вивести їх назовні, та підключаємо весь юніт до живлення і Thunderbolt-порту ноутбука.


Startech TB31PCIEX16 в зібраному вигляді

І воно запрацювало. Не відразу, звичайно, такі залізяки зазвичай відразу не здаються. Довелося оновити прошивку контролера Thunderbolt на комп’ютері. Але потім все пішло як по маслу.

Майбутнє

Ми уважно стежимо за розвитком індустрії. Наступний інтерфейс на підході – M. 2 CNVio, який використовується, наприклад, в самих нових адаптерах Intel 9560. Наступний Wi-Fi стандарт – 802.11 ax. Будемо вирішувати проблеми по мірі надходження.

Related Articles

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Close