Когда мы создаем виртуальный интерфейс 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
сетевым стеком ядра. Операция записи означает отправку пакетов из вашего приложения в сетевой стек ядра.