Когда мы создаем виртуальный интерфейс tun, мы используем read
и write
для чтения и записи пакетов из / в сетевой стек. У меня вопрос, когда мы используем .read
, мы действительно читаем исходящие пакеты (пакеты, которые создаются компьютерными приложениями для отправки в другую сеть) или входящие пакеты (пакеты, которые поступают на машину)?
Интерфейс tun / tap - это способ передачи пакетов между вашим приложением и сетевым стеком ядра.
Создайте интерфейс крана:
ip tuntap add dev tun101 mode tun
ip link set up dev tun101
ip a add 192.0.2.1/24 dev tun101
Пингуем какой-нибудь адрес из подсети, назначенной интерфейсу tun101.
ping 192.0.2.2
Что случилось?
read
функция и получает пакет эхо-запроса icmp в соответствующий буфер памяти.write
функция.Операция чтения в вашем приложении означает чтение пакетов, которые были отправлены в соответствующий tun
интерфейс сетевым стеком ядра. Операция записи означает отправку пакетов из вашего приложения в сетевой стек ядра.