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

Ссылки