netgraph

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

netgraph — модульная сетевая подсистема ядра FreeBSD, основанная на принципе графов. В Netgraph строится граф из узлов различных типов, узел каждого типа имеет некоторое количество входов/выходов (хуков, англ. hooks). Узел netgraph позволяет производить определенные действия над пакетом, проходящим через него. Некоторые Netgraph узлы предоставляют поддержку различных протоколов, инкапсуляций, таких как L2TP, PPTP, PPPoE, PPP, ATM, bluetooth, другие служат для связки модулей и сортировки/маршрутизации между узлами netgraph, например bpf, split.

netgraph также портирован на другие операционные системы: NetBSD[1] и Linux kernel 2.4 и 2.6 от 6WIND[2].

netgraph был разработан и впервые реализован Джулианом Элишером (Julian Elischer) при участии Арчи Коббса (Archie Cobbs) в Whistle Communications, Inc. для роутера Whistle InterJet, работавшего под управлением модифицированной FreeBSD 2.2. В основное дерево FreeBSD netgraph был включен в версии 3.4.

Типы узлов

[править | править код]
Тип Описание
Сетевые интерфейсы, устройства и сокеты
ether Представляет существующий Ethernet-интерфейс, создается автоматически.
gif Представляет существующий gif-интерфейс, создается автоматически.
tty Представляет подключение к терминалу (TTY).
iface Представляет сетевой интерфейс. Для каждого нового узла создается новое устройство ng*. Созданный интерфейс с помощью ifconfig можно настроить как широковещательный или точка-точка.
eiface Представляет Ethernet-интерфейс. Для каждого нового узла создается новое устройство ngeth*. Созданный интерфейс можно настроить с помощью ifconfig.
device Представляет системное устройство. Для каждого нового узла создается новое устройство ngd*, доступное для операций open, close, read и write.
socket Автоматически создаваемый узел, представляет сокет типа NG_CONTROL. Позволяет приложению взаимодействовать с подсистемой netgraph.
ksocket Создает новый BSD-сокет, позволяющий подсистеме netgraph взаимодействовать с другими хостами или службами (антипод socket). Поддерживает только один хук, имя которого в виде семейство/тип/протокол определяет тип создаваемого сокета.
Сетевые протоколы
cisco Инкапсулирует и декапсулирует данные по протоколу Cisco HDLC. Хук downstream должен быть соединен к синхронной линии. Хуки inet, inet6, atalk, и ipx используются для передачи пакетов одноимённых протоколов и, обычно, соединяются с соответствующими типами узлов.
frame_relay Производит инкапсуляцию, декапсуляцию и мультиплексирование данных по протоколу Frame relay. Хук downstream должен быть соединен к синхронной линии. Хуки dlci* могут соединяться с соответствующим каналом DLCI.
gif_demux Инкапсулирует и декапсулирует данные gif-интерфейса. Хук gif должен быть соединен c узлом типа gif, хуки inet, inet6, atalk, ipx, atm, natm и ns соответствуют одноимённым протоколам.
l2tp Реализует инкапсуляцию протокола L2TP в соответствии с RFC 2661.
lmi Поддержка LMI frame relay.
mppc Поддержка сжатия и шифрования MPPC/MPPE.
ppp Мультиплексирование данных PPP.
pppoe Поддержка PPPoE.
pptpgre Реализация GRE над IP по протоколу PPTP в соответствии с RFC 2637.
vlan Мультиплексирование кадров IEEE 802.1Q VLAN
Коммутация
bridge Реализует Ethernet-бридж на одном или нескольких соединениях. Каждое соединение (соответствующее присоединенному хуку) используется для приема и передачи кадров Ethernet, принцип действия аналогичен коммутатору.
hub Предоставляет простейший механизм распределения данных по нескольким соединениям. Принцип действия аналогичен концентратору: данные, принятые с любого хука пересылаются на все остальные хуки.
one2many Предоставляет механизм распределения данных из одного соединения по нескольким. При этом алгоритм распределения либо копирует данные с хука one на все хуки many* (как hub), либо только на один последовательно (каждый пакет отправляется на разные хуки). Данные, приходящие с любого хука many*, копируются на хук one.
tee Предоставляет возможность «подслушивать» обмен данными между двумя узлами. Данные, полученные через хук right копируются на хуки left и right2left, а полученные через left — на right и left2right.
split Делит один двунаправленный поток данных на два однонаправленных.
etf Фильтрует и распределяет данные на основании типа Ethernet-пакета.
Тестирование и отладка
echo Возвращает любые данные и управляющие сообщения отправителю.
hole Отбрасывает все полученные данные и управляющие сообщения.
Другие
atm
async
atmllc
bluetooth
bpf Позволяет осуществлять фильтрацию/сортировку пакетов на основе правил BPF
bt3c
btsocket
fec Агрегирует несколько Ethernet интерфейсом по технологии EtherChannel
h4
hci
ip_input Пакеты передаваемые на этот узел попадают в ip_input операционной системы и далее обрабатываются также как пришедшие с другого узла по сети
l2cap
netflow Реализация протокола Netflow
rfc1490
sppp Реализация PPP соединений для последовательный каналов внутри Netgraph
sscfu
sscop
ubt
UI
uni
vjc Реализация сжатия Якобсона

Примечания

[править | править код]
  1. tech-net: NetBSD port of the freebsd netgraph environment. Дата обращения: 8 сентября 2008. Архивировано 6 октября 2013 года.
  2. 6WIND Архивная копия от 24 декабря 2017 на Wayback Machine, коммерческий закрытый порт