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, коммерческий закрытый порт