Netgraph

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку


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

Netgraph також портований на інші операційні системи: NetBSD[1] і Ядро Linux 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 [Архівовано 28 серпня 2013 у Wayback Machine.].
lmi Підтримка LMI frame relay.
mppc Підтримка стиснення і шифрування MPPC/MPPE.
ppp Мультиплексування даних PPP.
pppoe Подтримка PPPoE.
pptpgre Реалізація GRE над IP за протоколом PPTP до відповідності з RFC 2637 [Архівовано 8 липня 2013 у Wayback Machine.].
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/. Архів оригіналу за 6 жовтня 2013. Процитовано 10 липня 2013.
  2. 6WIND [Архівовано 24 грудня 2017 у Wayback Machine.], комерційний закритий порт.

Посилання

[ред. | ред. код]