Вместо этого 802.11 пытается избегать коллизий за счет протокола CSMA/CA (CSMA with Collision Avoidance, CSMA с предотвращением коллизий). Концепция данного протокола схожа с концепцией CSMA/CD для Ethernet, где канал прослушивается перед началом отправки, а период молчания после коллизии вычисляется экспоненциально. Однако если у станции есть кадр для пересылки, то она начинает цикл с периода молчания случайной длины (за исключением случаев, когда она давно не использовала канал, и он бездействует). Станция не ожидает коллизий. Число слотов, в течение которых она молчит, выбирается в диапазоне от 0 до, скажем, 15 в случае физического уровня OFDM. Станция дожидается бездействия канала в течение короткого периода времени (называемого DIFS; подробнее о нем ниже) и отсчитывает слоты бездействия, приостанавливая отсчет на время отправки кадров. Свой кадр она отправляет, когда счетчик достигает нуля. Если кадр проходит успешно, то адресат немедленно отправляет обратно короткое подтверждение. Если подтверждение отсутствует, делается вывод, что произошла ошибка — коллизия или иная. В таком случае отправитель удваивает период молчания и повторяет попытку, продолжая экспоненциально наращивать длину паузы (как с Ethernet), пока кадр не будет успешно передан или пока не будет достигнуто максимальное число повторов.
Пример некоторой временной шкалы приводится на рис. 4.22. Станция A отправляет кадр первой. Пока станция A занята отправкой, станции B и C переходят в режим готовности к отправке. Они видят, что канал занят, и дожидаются бездействия канала. Вскоре после получения станцией A подтверждения канал переходит в режим бездействия. Однако вместо того чтобы сразу же отправлять кадры (что привело бы к коллизии), станции B и C начинают свои периоды молчания. Станция C выбирает короткий период молчания, поэтому ей удается отправить данные первой. Станция B приостанавливает обратный отсчет, когда видит, что канал занят станцией C, и возобновляет только после получения станцией C подтверждения. Вскоре период молчания станции B завершается, и она также отправляет кадр.
По сравнению с Ethernet, здесь два основных отличия. Во-первых, раннее начало периодов молчания помогает избегать коллизий. Это важное преимущество, так как коллизии обходятся дорого, ведь даже если столкновение происходит, кадр все равно отправляется целиком. Во-вторых, для того чтобы станции могли «догадываться» о коллизиях, которые распознать невозможно, применяется схема с подтверждениями.
Такой режим работы называется DCF (Distributed Coordination Function, распределенная координация). Все станции действуют независимо, централизованный контроль не осуществляется. Стандарт также включает необязательный режим PCF (Point Coordination Function, сосредоточенная координация), в котором всей деятельностью в ячейке управляет точка доступа — как базовая станция сотовой сети.
Однако PCF на практике не применяется, потому что невозможно запретить станциям из соседней сети передавать конкурирующий трафик.
Рис. 4.22. Отправка кадра с протоколом CSMA/CA
Вторая проблема заключается в том, что области передачи разных станций не обязательно совпадают. В кабельной сети система спроектирована таким образом, чтобы все станции могли слышать друг друга. Сложности передачи радиосигналов не позволяют обеспечить такое постоянство для беспроводных станций. Следовательно, возможно возникновение ситуаций, таких как проблема скрытой станции — мы уже упоминали о ней ранее, а сейчас приводим еще и иллюстрацию на рис. 4.23, а. Поскольку не все станции могут слышать друг друга, передача, идущая в одной части ячейки, может быть просто не воспринята станцией, находящейся в другой ее части. В приведенном на рисунке примере станция С передает данные станции В. Если станция А прослушает канал, она не обнаружит ничего подозрительного и сделает ложный вывод о том, что она имеет право начать передачу станции В. Это решение приводит к коллизии.
Кроме того, есть и обратная проблема, показанная на рис. 4.23, б. Здесь В хочет отправить данные для станции С и прослушивает канал. Услышав, что в нем уже осуществляется какая-то передача, станция В делает опять-таки ложный вывод о том, что передача для С сейчас невозможна. Между тем, станция А — источник сигнала, который смутил станцию В, — может, на самом деле, осуществлять передачу для станции D (на рисунке не показана). Таким образом, теряется возможность передать информацию.
Для того чтобы разрешить непонимание относительно того, какая станция будет отправлять данные, в стандарте 802.11 прослушивание канала определяется на физическом и виртуальном уровнях. При физическом прослушивании среда просто проверяется на наличие сигнала. Виртуальное прослушивание заключается в том, что каждая станция ведет логический журнал использования канала, отслеживая NAV (Network Allocation Vector, вектор распределения сети). Каждый кадр содержит поле NAV, которое сообщает, как долго последовательность, включающая данный кадр, будет передаваться. Станции, услышавшие этот кадр, понимают, что канал будет занят в течение периода, указанного в NAV, даже если физический сигнал в канале отсутствует. Например, NAV для кадров данных включает также время, необходимое для отправки подтверждения. Все станции, услышавшие этот кадр данных, воздерживаются от пересылки данных в течение периода отправки подтверждения, независимо от того, слышали ли они его в канале.

Рис. 4.23. Проблема: а — скрытой станции; б — засвеченной станции
Необязательный механизм RTS/CTS с помощью NAV запрещает станциям отправлять кадры одновременно со скрытыми станциями. Пример показан на рис. 4.24. В этом примере станция A хочет передать данные станции B. Станция C находится в зоне действия (то есть слышит) А, а также, возможно, в зоне действия В, но это не имеет значения. Станция D входит в зону действия B, но не входит в зону действия А.
Протокол начинает работать тогда, когда А решает, что ей необходимо послать данные В. А посылает станции В кадр RTS, запрашивая разрешение на передачу. Если В может принять данные, она отсылает обратно подтверждение о том, что канал чист — кадр CTS. После приема CTS А отправляет кадр и запускает таймер ACK. В случае корректного приема В генерирует кадр ACK, завершающий передачу. Если интервал времени таймера на станции A истекает прежде, чем получен ACK, то считается, что произошла коллизия, и весь алгоритм работы протокола повторяется с самого начала после периода молчания.
Теперь рассмотрим этот же процесс с точки зрения станций C и D. C находится в зоне действия А, поэтому она также принимает кадр RTS и понимает, что скоро по каналу будут передаваться какие-то данные. Исходя из информации, содержащейся в RTS, станция С может предположить, сколько времени займет передача последовательности, включая конечный ACK. Поэтому, чтобы не мешать другим, она воздерживается от передачи данных, пока обмен не будет завершен. Для этого она обновляет свою запись NAV, указывая, что канал занят, как показано на рис. 4.24. Станция D не слышит RTS, зато слышит CTS и также выставляет NAV Обратите внимание: сигналы NAV не передаются, а являются лишь внутренними напоминаниями станций о том, что нужно хранить молчание в течение определенного промежутка времени.
Рис. 4.24. Использование прослушивания виртуального канала в протоколе CSMA/CA
Однако, несмотря на теоретическую привлекательность модели RTS/CTS, это один из тех методов, практическая реализация которых провалилась. Есть несколько причин, почему она используется так редко. Она не рассчитана на короткие кадры (которые отправляются вместо RTS) и на присутствие точек доступа (которые, по определению, должны быть слышны всем). В других ситуациях она также замедляет работу. RTS/CTS в стандарте 802.11 немного отличается от протокола MACA, с которым мы познакомились в разделе 4.2, потому что каждый, кто получает RTS или CTS, сохраняет молчание в течение какого-то промежутка, для того чтобы подтверждение ACK сумело пройти по каналу без коллизий. По причине этого проблема засвеченной станции не решается, как при использовании протокола MACA, устраняется только проблема скрытых станций. Чаще всего скрытых станций совсем немного, и CSMA/ CA и так помогает им. Эта технология замедляет станции, которым по какой-либо причине не удается успешно передать данные, для того чтобы повысить вероятность удачной пересылки.