802.11 - спецификация протокола уровня 2 (и 1). Он был спроектирован таким образом, который позволяет протоколам более высокого уровня рассматривать его как сеть Ethernet. Адресация и поведение в целом одинаковы. Поэтому для протокола уровня 3 вам вообще не нужно беспокоиться о 802.11, и вы должны писать свой код так, как будто вы ожидаете, что он будет работать в сети Ethernet.
Чтобы это заработало, вам сначала нужно подключиться к какой-либо беспроводной сети (что в принципе соответствует подключению провода к карте Ethernet). Здесь вы можете выбрать специальную (также известную как IBSS) или инфраструктурную (также известную как BSS) сеть (или PBSS после утверждения 802.11ad;).
Работа карт без какой-либо связи с сетью (просто выплевывание пакетов в эфир) не очень хорошая идея по нескольким причинам. Самое главное, что это очень зависит от оборудования и ненадежен. Вы все еще можете сделать это, используя интерфейс RF mon (режим монитора AKA) с одной стороны и внедрение пакетов (используя заголовок радиоленты) с другой, но я не рекомендую этого. Даже если у вас есть набор одинаковых карт, вы, скорее всего, столкнетесь с трудностями объяснения и случайным поведением в какой-то момент. Сетевые адаптеры 802.11 просто не предназначены для такого рода операций и поддерживают различное монтирование состояния внутри встроенного программного обеспечения (читайте о картах FullMAC и SoftMAC). Даже карты SoftMAC существенно различаются. Например, теоретически в режиме мониторинга, как вы сказали, карта не должна подтверждать получение пакетов. Однако существуют карты, которые в любом случае будут подтверждать получение кадра, потому что они основывают свое решение исключительно на том факте, что указанный кадр адресован им. Некоторые карты могут даже попытаться ACK всех кадров, которые они видят. То же самое произойдет и с ретрансляциями: некоторые карты будут отправлять введенный пакет только один раз (вот как это должно работать). В других сетевых картах повторные передачи обрабатываются аппаратным обеспечением (и встроенным программным обеспечением), и драйвер не может отключить его, поэтому вы получите автоматическую повторную передачу даже с введенными данными.
Придерживаясь уровня 3 и используя существующие режимы (например, ad hoc), вы получите все необходимые возможности и многое другое (QoS и т. Д.). Кадр Ethernet, который вы отправляете интерфейсу, будет «переведен» ядром в формат 802.11 с отображением QoS и т. Д.
Если вы хотите узнать о поведении MAC в различных режимах, вам придется либо прочитать код mac80211 , либо сам стандарт 802.11. http://linuxwireless.org Вики может помочь вам с несколькими вещами, но хакеры ядра обычно заняты написанием документации, отличной от комментариев в коде;)
Сама реализация протокола L3 также может выполняться как в режиме ядра, так и в режиме пользователя (с использованием необработанных сокетов). Как обычно, ядро будет сложнее, но мощнее.