Сетевой стек TCP/IP

Архитектура стека протоколов TCP/IP, библиотека сокетов и сетевые службы

Введение
Конфигурации стека
Структура сетевого TCP/IP стека
API BSD-сокетов
Функции работы с базами данных
Множественные стеки протоколов
IP-фильтрация и преобразование сетевых адресов (NAT)
Протокол сетевого времени (NTP)
Динамическое конфигурирование узлов
Модуль AutoIP
Протокол PPPoE
Скрипт /etc/autoconnect
Минималистичный встраиваемый web-сервер
Поддержка CGI
Поддержка SSI

Введение

В данном разделе речь пойдет об IP-сетях, основанных на одноименном протоколе (англ. Internet Protocol). IP-протокол и связанные с ним инструменты по своей сути являются промышленным стандартом построения сетей.

С учетом этих и многих других требований разработан сетевой стек протоколов TCP/IP ( io-pkt-*) для ЗОСРВ «Нейтрино». Он нацелен на функционирование в системах с минимальным набором ресурсов, но предоставляет стандартизованные сетевые программные интерфейсы (BSD).

Конфигурации стека

Для ЗОСРВ «Нейтрино» поставляются следующие конфигурации сетевого стека:

Стек NetBSD TCP/IP
Поддерживает новейшие спецификации RFC по протоколам UDP, IP и TCP, перенаправление данных (forwarding), широковещание (broadcast), многоадресную передачу (multicast), функцию аппаратной контрольной суммы, сокеты маршрутизации, сокеты доменов Unix, стандарт multilink PPP, протокол PPPoE, протокол CIDR (бесклассовая междоменная маршрутизация), фильтрацию NAT/IP, протокол разрешения адресов ARP, ICMP, IGMP, а также протоколы CIFS, DHCP, AutoIP, DNS, NFS (версию 2 и версию 3 сервера и клиента), NTP, RIP, RIPv2 и встраиваемый web-сервер.

Для создания приложений для этого стека используется стандартный программный интерфейс BSD-сокетов. Стек также включает поддержку оптимизированных процедур перенаправления пакетов между сетевыми интерфейсами, позволяющий повысить производительность и эффективность маршрутизации пакетов при работе стека в качестве шлюза.
Расширенный стек NetBSD, включающий протоколы IPsec и IPv6
Включает в себя все возможности стандартного стека, а также функции, предназначенные для работы с новыми форматами передачи и адресации. Этот стек обеспечивает полную поддержку протоколов IPv6 и IPsec (для IPv4 и IPv6) посредством расширений KAME. Кроме того, обеспечивается поддержка виртуальных частных сетей (VPN) посредством IPsec-туннелей.

Стек поддерживает два режима функционирования одновременно ( IPv4 и IPv6), а также имеет поддержку автоконфигурирования в IPv6, что позволяет выполнять конфигурирование устройств в сетевых средах с возможностями plug-and-play. Поддержка IPv6 включает в себя утилиты для этого протокола, а также поддержку протоколов RIP/RIPng для осуществления динамической маршрутизации. Для обеспечения расширенных возможностей протокола IPv6 в дополнение к стандартному программному интерфейсу сокетов предоставляется набор соответствующих программных расширений.

Поддержка IPsec обеспечивает безопасное взаимодействие между узлами или сетями посредством обеспечения конфиденциальности данных с помощью мощных криптографических алгоритмов и средств аутентификации. Поддержка IPsec также включает в себя протокол управления ключами IKE (ISAKMP/Oakley), который позволяет устанавливать безопасные ассоциации узлов.
Защищенный сетевой стек io-pkt-*-ksz
Защищенные экземпляры сетевого стека существуют для любой из предыдущих конфигураций. В своем имени они содержат постфикс -ksz и включают дополнительные средства защиты информации (СЗИ).

Необходимо отдельно отметить, что сетевой стек является модульным. Благодаря этому обеспечивается компактность и конфигурируемость стека, позволяя применять его как во встраиваемых решениях, так и в высокопроизводительных.

Структура сетевого TCP/IP стека

Особенностью менеджера io-pkt-* является его компактность и стандартный интерфейс взаимодействия с внешними процессами (клиентами). Благодаря интегрированному в архитектуру IPC механизму наследования приоритетов, клиенты обслуживаются с учетом приоритетов и с учетом длительности ожидания, что позволяет распределять вычислительные ресурсы в режиме реального времени.

14_1.png
Рисунок 1. Сетевой стек io-pkt-* и его компоненты

PPP реализован как часть io-pkt-*. По этой причине копирование пакетов в памяти не требуется. Такой подход позволяет реализовать высокопроизводительные PPPoE соединения.

Другие компоненты стека (файловая система NFS, демон snmpd и т.д.) реализованы вне процесса io-pkt-*. Это повышает уровень модульности и отказоустойчивости системы.

API BSD-сокетов

Основой программного интерфейса сетевого стека являются BSD-сокеты. Их API является стандартом UNIX-подобных систем. В приложениях, разрабатываемых с помощью этих интерфейсов, могут использоваться следующие функции (и многие другие):


Note: Дополнительные сведения представлены в описании сетевой библиотеки.

Использование стандартизованного API позволяет достаточно легко портировать сетевые сервисы и утилиты из других ОС. Таким образом, можно использовать и обширные возможности Open Source решений.

Функции работы с базами данных

Функции работы с базами данных были изменены для большего соответствия требованиям встраиваемых систем.

/etc/resolv.conf
Посредством функции confstr() можно использовать конфигурационные строки для переопределения данных, которые обычно содержатся в файле /etc/resolv.conf. Также для этих целей можно использовать переменную окружения RESCONF. И тот и другой метод позволяет использовать сервер имен без файла /etc/resolv.conf. Это влияет на функцию преобразования имен gethostbyname() и другие функции разрешения адресов.
/etc/protocols
Функции getprotobyname() и getprotobynumber() были изменены, чтобы включить небольшое число встроенных протоколов, в том числе IP, ICNP, UDP и TCP. Для многих приложений это означает, что файл /etc/protocols не требуется.
/etc/services
Функция getservbyname() была изменена, чтобы включать небольшое число встроенных служб, в том числе ftp, telnet, smtp, domain, nntp, netbios-ns, netbios-ssn, sunrpc и nfsd. Для многих приложений это означает, что файл /etc/services не требуется.

Множественные стеки протоколов

Менеджер сетевого стека io-pkt в ЗОСРВ «Нейтрино» позволяет загружать множество модулей протоколов в виде разделяемых объектов. Это означает, например, что можно запускать несколько экземпляров стека TCP/IP на одном и том же физическом интерфейсе, что позволяет создавать множество виртуальных сетей (VLAN). Можно даже запускать множество независимых экземпляров менеджера io-pkt-*. Как и все процессы в системе, каждый экземпляр стека полагается на механизмы защиты памяти и изолирован от других экземпляров.

IP-фильтрация и преобразование сетевых адресов (NAT)

Модули lsm-pf-v4.so, lsm-pf-v6.so, lsm-pf-v4-ksz.so, lsm-pf-v6-ksz.so сетевого стека io-pkt-* предназначены для фильтрации IP-пакетов и преобразования сетевых адресов (англ. Network Address Translation, NAT) и являются динамически загружаемыми модулями сетевого стека. Они также обеспечивают функции межсетевого экранирования (англ. firewall) и имеет следующие возможности:

Группирование правил
Позволяет применять разные наборы правил к разным пакетам.
Фильтрация с отслеживанием состояний (stateful filtering)
Вспомогательная возможность, которая позволяет не применять правила фильтрации к пакетам, относящимся к ранее авторизованному соединению.
Преобразование сетевых адресов (NAT)
Отображение нескольких внутренних адресов во внешний IP-адрес, что позволяет нескольким внутренним системам использовать один общий публичный IP-адрес.
Прокси-службы
Позволяют применять NAT-преобразование для ftp, netbios и H.323.
Переадресация портов
Служит для перенаправления входящего трафика на внутренний сервер или группу (пул) серверов.

Правила IP-фильтрации и преобразования сетевых адресов (NAT) можно добавлять и удалять динамически в процессе работы системы. Службы логирования событий также входят в этот комплект утилит для того, чтобы вести журнал работы этих модулей.

Протокол сетевого времени (NTP)

Протокол сетевого времени (Network Time Protocol, NTP) позволяет синхронизировать системное время на сетевых устройствах с серверами времени. NTP-сервис поддерживает как серверный, так и клиентский режим.

В серверном режиме NTP-сервис в локальной сети синхронизируется со стандартными серверами времени, а затем передает полученную информацию клиентам в локальной сети методом широковещательной или многоадресной рассылки или ожидает соответствующего запроса от клиентов. После этого клиентские NTP-системы синхронизируются с NTP-сервером. NTP-сервис реализует протокол версии 4, сохраняя совместимость с версиями 3, 2 и 1.

Динамическое конфигурирование узлов

В ЗОСРВ «Нейтрино» поддерживается протокол динамического конфигурирования узлов (Dynamic Host Configuration Protocol, DHCP), который используется для получения конфигурационных параметров TCP/IP. Клиент DHCP ( dhcp.client) получает конфигурационные параметры от DHCP-сервера и в соответствии с ними конфигурирует узел. Это позволяет пользователю присоединить узел к сети, не задумываясь о необходимых параметрах: IP-адрес, шлюз и т.д. Сервис DHCP позволяет системному администратору управлять присоединением узлов к сети. Для управления этими клиентами используется DHCP-демон и агент перенаправления (relay agent).

Более подробные сведения см. в описании dhcp.client, dhcpd и dhcprelay.

Модуль AutoIP

Модуль lsm-autoip.so был разработан на основе проекта стандарта Zeroconf комитета IETF (Internet Engineering Task Force, Комитет по инженерным вопросам Интернета). Он загружается сетевым менеджером io-pkt-* и предназначен для автоматического конфигурирования IPv4-адреса без помощи сервера (как в случае использования службы DHCP) посредством прямого однорангового взаимодействия. Этот модуль может работать одновременно с dhcp.client, что позволяет получать одновременно как локальный IP-адрес, так и адрес, назначенный службой DHCP.

Протокол PPPoE

Сетевой стек поддерживает протокол PPPoE (Point to Point Protocol over Ethernet, Протокол канала связи с непосредственным соединением (точка-точка) через сеть Ethernet), который обычно применяется провайдерами широкополосных сетей. Поддержка PPPoE включает в себя стек io-pkt-*, а также сервис pppoed, который согласовывает сессию по протоколу PPPoE. После установления сессии PPPoE сервис pppd создает PPP-соединение.

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

Дополнительная информация доступна на страницах описания:

io-pkt
Сетевой менеджер.
pppoed
Демон, согласовывающий сессию PPPoE.
phlip
Утилита в графической оболочке Photon, предназначенная для конфигурирования коммутируемых и TCP/IP-соединений.

Скрипт /etc/autoconnect

Служба автоматической установки соединения позволяет соединяться с интернет-провайдером при запуске TCP/IP-приложений. Например, необходимо установить коммутируемое соединение с Интернетом. При запуске web-браузера происходит небольшая пауза, во время которой автоматически выполняется скрипт /etc/autoconnect для соединения с заданным провайдером. После начала PPP-сессии браузер продолжает свою работу.

Минималистичный встраиваемый web-сервер

Встраиваемый web-сервер, slinger, в ЗОСРВ «Нейтрино» является крайне минималистичным, очень экономно использует ресурсы памяти и реализован с помощью сетевых сокетов. Встраиваемый web-сервер поддерживает:

Структура и взаимодействие компонентов web-сервера:

14_2.png
Рисунок 2. Структура встраиваемого web-сервера

Несмотря на свою компактность, встраиваемый web-сервер ЗОСРВ «Нейтрино» обеспечивает достаточную функциональность для поддержки возможности доступа к генерируемым (динамическим) HTML-страницам через CGI или SSI.

Поддержка CGI

Встраиваемый web-сервер поддерживает интерфейс CGI 1.1 (Common Gateway Interface, Общий шлюзовой интерфейс), который является удобным средством обработки динамических данных. Недостатком интерфейса CGI является то, что он требователен к ресурсам из-за использования интерпретируемых языков.

Поддержка SSI

Интерфейс SSI (Server Side Includes, вставки на стороне сервера) представляет собой расширение синтаксиса HTML и позволяет вставлять инструкции для организации динамического контента. Благодаря SSI встраиваемый сервер может, например:

Следует отметить, что SSI-теги могут взаимодействовать с сервером данных.

Серверы данных для SSI

Вы также можете обрабатывать динамический HTML с помощью так называемого сервера данных (data server). Сервер данных позволяет потокам внешнего приложения предоставлять данные для вывода их на web-страницы. Встраиваемый web-сервер расширяет SSI поддержкой серверов данных.

Таким образом может быть создан процесс приложения, обновляющий на сервере данных информацию о состоянии оборудования, в то время как встраиваемый web-сервер эту информацию передает клиенту независимым и надежным образом.


Note: Возможно написать простой менеджер ввода/вывода для передачи динамически меняющихся данных. Необходимо отметить, что этот подход не ограничивается только встраиваемым web-сервером, менеджер ввода/вывода может обрабатывать только выходные данные, не изменяя их самих.




Предыдущий раздел: перейти