Да - именно о MACAW я и говорю. В случае скрытых узлов она все же понадежнее, потому wifi и работает со скрытыми узлами. В твоей схеме при передаче от узла 1 к 2 (пусть есть слышимость 1-2 и 2-3, но нет 1-3) ничто не мешает узлу 3 бахнуть передачу RTS в любой момент и испортить этим пакет данных. А в MACAW такое возможно только на начальном этапе, но не во время передачи пакета данных. Хотя исходно я постулировал что на скрытые узлы мы забиваем, я почему-то считал, что MACAW с этой проблемой не борется - но раз борется, это же хорошо.
Количество переключений "прием-передача" или одинаковое, или всего на одну передачу больше. Но зато мы "бесплатно" получаем контроль доставки (с гарантией доставки вопрос отдельный).
А вообще есть еще идея. Решение, известное с древних времен - надо взять младенца и разрубить его пополам
. Протокол у нас любительский? Так добавим ему исследовательских возможностей. Разрешим работу в двух режимах: MACAW и raw. У меня там как раз еще 2 неиспользованных ID пакета осталось - будет RTS-raw и DATA-raw. Безадресные.
Последовательности такие:
MACAW: RTS-CTS-DATA-ACK
raw: RTS-raw DATA-raw
Станция в режиме MACAW умеет понимать raw пакеты. И при приеме RTS-raw ждет пакета DATA-raw и принимает его. А при приеме RTS - отправляет CTS, ну и далее по схеме. А станция в режиме raw - тупая и работает по алгоритму frig. Я думаю, что при добавлении случайных задержек перед передачей система будет работоспособна даже в смешанном режиме (ессно станции raw могут общаться только друг с другом).
Адреса у нас тогда будут формально считаться принадлежностью сетевого уровня. Но канальный MACAW будет их использовать для адресации. Ну и к транспортному TCP добавятся повторы по таймауту. Все это будет закреплено в протоколе как опции, которые каши не просят если их не юзать.
В общем постараюсь сегодня-завтра дописать и дорисовать автоматы состояний для протокола - и вот тогда создам отдельную тему и выложу.