Автор собрал экспериментальную «сеть по лазеру» IP Over Lasers, связав два компьютера через оптическую «линию» на базе лазеров и фототранзисторов, управляемую микроконтроллерами ATtiny85. Он поделился деталями реализации.
Сначала энтузиаст создал на хост-компьютерах виртуальное сетевое устройство (tun), которому присвоил IP-адрес — весь трафик этого интерфейса пересылается в пользовательском пространстве через UART ↔ лазер ↔ фототранзистор и обратно.
В демонстрации работы сети автор использовал ноутбук и одноплатный компьютер Raspberry Pi 5. Он также задействовал два USB-UART-кабеля, по одному ATtiny85 на каждом конце сети, лазер, фототранзистор/фотодиод, а питается система от батареек.
Лазеры направлены друг на друга (каждый светит в фототранзистор на противоположном модуле). Изначально автор пробовал модуляцию на 38 кГц, чтобы отбросить фоновое освещение, но в итоге использовал простую схему с фототранзистором.
ATtiny85 принимает входящие байты с UART с состоянием выхода, которое включает и выключает лазер; показания фототранзистора интерпретируются как битовые значения на выход UART. Логика в упрощённой форме описана так:
вход (приём): если на PB1 = 1 → PB3 = 1 (лазер включён), если PB1 = 0 → PB3 = 0;
выход (передача): если PB4 = 0 (фототранзистор «видит» лазер) → PB0 = 1;
На каждом ПК создан tun-интерфейс (laser0) и ему присваиваются IP-адреса, например:
Computer 1: sudo ip tuntap add mode tun dev laser0 sudo ip addr add 192.168.3.101/24 dev laser0 sudo ip link set dev laser0 up Computer 2: sudo ip tuntap add mode tun dev laser0 sudo ip addr add 192.168.3.100/24 dev laser0 sudo ip link set dev laser0 up
Затем запускается пользовательская утилита relay, которая читает пакеты из tun0, а потом шлёт их по UART. На другом конце сети эта же утилита читает по UART «заголовок» и полезные байты, записывая их в tun0, чтобы ядро «увидело» входящий сетевой пакет.
При использовании консольной программы для Linux minicom автор передавал символы по лазеру на 4800 бод. Для передачи IP-пакетов энтузиаст снизил скорость до 2400 бод. Он отметил, что пинг через этот канал дал очень большие задержки, а SSH-соединение устанавливалось около минуты.
Автор позиционирует свой проект как демонстрационный. Он посоветовал желающим опробовать систему использовать очки для защиты зрения. Исходники проекта опубликованы на GitHub.
Источник: habr.com