Внутрішня структура мережевої підсистеми FreeBSD

Тема 3. Мережева підсистема FreeBSD

Література

1. Полное руководство по FreeBSD - попытка создания более читабельного, "книгоподобного" учебника, описывающего операционную систему FreeBSD. Предназначена для тех, кто является новичком как во FreeBSD, так и в UNIX. На данный момент находится в разработке.


 

Як відомо, для вирішення складних завдань використовується універсальний прийом - декомпозиція, тобто розбиття однієї складної задачі на декілька простих. Наприклад, для опису взаємодії між вузлами в мережі використовується семирівнева модель OSI, яка розбиває весь складний процес обміну даними на більш прості підзадачі. Кожна являє собою окремий рівень виконує певну йому функцію. Тому взаємодія комп'ютера з мережею теж краще представити у вигляді декількох рівнів, а точніше, у вигляді трирівневої мережевої моделі, в якій розрізняють фізичний рівень, рівень протоколів і черги, які об'єднують їх (див. рис. 3.1). Кожен з них має свої характеристики і настройки, і хоча вони відносно незалежні між собою, неправильне налаштування одного з них може призвести до некоректної роботи всієї моделі. Наприклад, неправильна робота фізичної частини призведе до того, що при сильному трафіку система буде "затоплена" перериваннями, або невірно налаштований TCP/IP може стати причиною низької продуктивності протоколу. І хоча при цьому будуть ідеально налаштовані інші 2 рівня, мережева підсистема по раніше не буде працювати на повну силу.

Рисунок 3.1 – Структура мережі

 

Як і в моделі OSI, в мережевій моделі ОС, кожен рівень виконує свою функцію. Так, фізичний рівень займається тим, що приймає і відправляти пакети в мережу, а також піклується про розміщення їх у буферах мережевої карти. Для цього рівня необхідно провести настроювання буферів мережного адаптера і задати спосіб обробки подій від нього (з переривання, відкладене переривання, режим опитування).

Потім слід рівень черг, де відбувається розміщення пакетів в черзі на прийом і відправку. Цей рівень виконують транспортну роль, доставляючи пакети з стека протоколів TCP/IP у фізичну частину і навпаки. І хоча настройка тут тривіальна, проте, при передачі даних на великі відстані доведеться трохи подумати. І останній, найвищий – це рівень протоколів, на якому розташовується стек TCP/IP. Зокрема, IP протокол мережевого рівня, що відповідає за доставку пакета від одного хоста до іншого. Тут відбувається обробка всіх TCP/IP пакетів. У процесі обробки вирішується подальша доля пакета. Якщо вузол виконує роль маршрутизатора і прийшов пакет не призначається йому, то, швидше за все, пакет буде переправлений далі в мережу (або відкинутий, залежно від правил маршрутизації), минаючи протоколи більш високих рівнів (TCP, UDP). Але, якщо вузол є кінцевим одержувачем, то пакет буде переданий вище по стеку на транспортний рівень, де піддасться подальшій обробці. І хоча в стеку TCP/IP транспортну роль виконують 2 протоколи, TCP і UDP, у цій статті описується робота тільки TCP протоколу, так як UDP не потребує якої б то не було налаштуванні. До того ж, він рідко де застосовується для надійної передачі даних на великій швидкості, одним з небагатьох прикладів є файлова система NFS. В основному, всі веб, файл і FTP сервера використовують TCP в якості транспортного протоколу, від правильності роботи якого залежить дуже багато. Зазвичай настройка TCP зводиться до того, щоб задати правильні значення буферів, невірний розмір яких може стати причиною вичерпання ресурсів на вузлі або, що менш критично, низької продуктивності протоколу. До того ж, в TCP присутня безліч різних алгоритмів, які обтяжують його, і часто в їх використанні немає необхідності, так що їх відключення лише врятує пару тисяч тактів на процесорі.

Можна помітити, що налаштування всіх трьох рівнів потрібно далеко не завжди, все залежить від того, якого роду трафік обробляється на вузлі. Умовно, за рівнем взаємодії з вузлом, весь трафік у мережі можна розділити на 2 категорії – власний і маршрутний (рис. 3.2).

Рисунок 3.2 – Модель взаємодії мережевого стека при власному трафіку (а), при маршрутному (б)

Власна трафік належить усім 3-м рівнями мережевої моделі, так як він породжується самим верхнім рівнем, а відправляється самим нижнім (рис. 3.2а). Відбувається це таким чином:

- додаток генерує деякі дані і відправляє їх в стек TCP/IP;

- в модулі протоколу TCP/IP дані формуються у пакети, які надходять в чергу на відправлення;

- з черги на відправку пакети надходять на мережевий інтерфейс, з якого йдуть прямо в мережу.

При прийомі дані рухаються за цією ж схемою, тільки у зворотному напрямку - від мережевого інтерфейсу до додатка.

Для маршрутного трафіку схема (рис. 3.2б) виглядають дещо інакше:

- після отримання пакету мережевою картою, він надходить в чергу на обробку;

- потім, пакет потрапляє в модуль IP протоколу, де і визначається його подальший маршрут;

- відразу після цього пакет переходить в чергу на відправлення і на необхідний мережевий інтерфейс.

Як видно, при обробці маршрутного трафіку в основному беруть участь тільки 2 нижніх рівня, до TCP пакети просто не доходить. Тому при налаштуванні вузла слід враховувати, з яким видом трафіку буде вестися робота. Якщо вузол виконує роль маршрутизатора, то в налаштуванні рівня протоколу немає необхідності, адже TCP так і не буде задіяний, але якщо вузол служить файл-або веб-сервером, вузлом в кластері або просто домашньої машиною, то для коректної роботи необхідно буде правильно налаштувати всі 3 рівня мережевої моделі. А для цього необхідно розуміти роботу кожного рівня більш детально.