Архитектура стека протоколов TCP/IP, библиотека сокетов и сетевые службы
В данном разделе речь пойдет об IP-сетях, основанных на одноименном протоколе (англ. Internet Protocol). IP-протокол и связанные с ним инструменты по своей сути являются промышленным стандартом построения сетей.
С учетом этих и многих других требований разработан сетевой стек протоколов TCP/IP ( io-pkt-*) для ЗОСРВ «Нейтрино». Он нацелен на функционирование в системах с минимальным набором ресурсов, но предоставляет стандартизованные сетевые программные интерфейсы (BSD).
Для ЗОСРВ «Нейтрино» поставляются следующие конфигурации сетевого стека:
Необходимо отдельно отметить, что сетевой стек является модульным. Благодаря этому обеспечивается компактность и конфигурируемость стека, позволяя применять его как во встраиваемых решениях, так и в высокопроизводительных.
Особенностью менеджера io-pkt-* является его компактность и стандартный интерфейс взаимодействия с внешними процессами (клиентами). Благодаря интегрированному в архитектуру IPC механизму наследования приоритетов, клиенты обслуживаются с учетом приоритетов и с учетом длительности ожидания, что позволяет распределять вычислительные ресурсы в режиме реального времени.
PPP реализован как часть io-pkt-*. По этой причине копирование пакетов в памяти не требуется. Такой подход позволяет реализовать высокопроизводительные PPPoE соединения.
Другие компоненты стека (файловая система NFS, демон snmpd и т.д.) реализованы вне процесса io-pkt-*. Это повышает уровень модульности и отказоустойчивости системы.
Основой программного интерфейса сетевого стека являются BSD-сокеты. Их API является стандартом UNIX-подобных систем. В приложениях, разрабатываемых с помощью этих интерфейсов, могут использоваться следующие функции (и многие другие):
Использование стандартизованного API позволяет достаточно легко портировать сетевые сервисы и утилиты из других ОС. Таким образом, можно использовать и обширные возможности Open Source решений.
Функции работы с базами данных были изменены для большего соответствия требованиям встраиваемых систем.
/etc/resolv.conf
. Также для этих целей можно использовать переменную окружения RESCONF. И тот и другой метод позволяет использовать сервер имен без файла /etc/resolv.conf
. Это влияет на функцию преобразования имен gethostbyname() и другие функции разрешения адресов. /etc/protocols
не требуется. /etc/services
не требуется.
Менеджер сетевого стека io-pkt в ЗОСРВ «Нейтрино» позволяет загружать множество модулей протоколов в виде разделяемых объектов. Это означает, например, что можно запускать несколько экземпляров стека TCP/IP на одном и том же физическом интерфейсе, что позволяет создавать множество виртуальных сетей (VLAN). Можно даже запускать множество независимых экземпляров менеджера io-pkt-*. Как и все процессы в системе, каждый экземпляр стека полагается на механизмы защиты памяти и изолирован от других экземпляров.
Модули 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) и имеет следующие возможности:
Правила IP-фильтрации и преобразования сетевых адресов (NAT) можно добавлять и удалять динамически в процессе работы системы. Службы логирования событий также входят в этот комплект утилит для того, чтобы вести журнал работы этих модулей.
Протокол сетевого времени (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.
Модуль lsm-autoip.so был разработан на основе проекта стандарта Zeroconf комитета IETF (Internet Engineering Task Force, Комитет по инженерным вопросам Интернета). Он загружается сетевым менеджером io-pkt-* и предназначен для автоматического конфигурирования IPv4-адреса без помощи сервера (как в случае использования службы DHCP) посредством прямого однорангового взаимодействия. Этот модуль может работать одновременно с dhcp.client, что позволяет получать одновременно как локальный IP-адрес, так и адрес, назначенный службой DHCP.
Сетевой стек поддерживает протокол PPPoE (Point to Point Protocol over Ethernet, Протокол канала связи с непосредственным соединением (точка-точка) через сеть Ethernet), который обычно применяется провайдерами широкополосных сетей. Поддержка PPPoE включает в себя стек io-pkt-*, а также сервис pppoed, который согласовывает сессию по протоколу PPPoE. После установления сессии PPPoE сервис pppd создает PPP-соединение.
При использовании протокола PPPoE не нужно задавать какие-либо конфигурационные параметры, так как соответствующие модули автоматически получают необходимые настройки у провайдера и выполняют настройку оборудования.
Дополнительная информация доступна на страницах описания:
Служба автоматической установки соединения позволяет соединяться с интернет-провайдером при запуске TCP/IP-приложений. Например, необходимо установить коммутируемое соединение с Интернетом. При запуске web-браузера происходит небольшая пауза, во время которой автоматически выполняется скрипт /etc/autoconnect для соединения с заданным провайдером. После начала PPP-сессии браузер продолжает свою работу.
Встраиваемый web-сервер, slinger, в ЗОСРВ «Нейтрино» является крайне минималистичным, очень экономно использует ресурсы памяти и реализован с помощью сетевых сокетов. Встраиваемый web-сервер поддерживает:
Структура и взаимодействие компонентов web-сервера:
Несмотря на свою компактность, встраиваемый web-сервер ЗОСРВ «Нейтрино» обеспечивает достаточную функциональность для поддержки возможности доступа к генерируемым (динамическим) HTML-страницам через CGI или SSI.
Встраиваемый web-сервер поддерживает интерфейс CGI 1.1 (Common Gateway Interface, Общий шлюзовой интерфейс), который является удобным средством обработки динамических данных. Недостатком интерфейса CGI является то, что он требователен к ресурсам из-за использования интерпретируемых языков.
Интерфейс SSI (Server Side Includes, вставки на стороне сервера) представляет собой расширение синтаксиса HTML и позволяет вставлять инструкции для организации динамического контента. Благодаря SSI встраиваемый сервер может, например:
Следует отметить, что SSI-теги могут взаимодействовать с сервером данных.
Серверы данных для SSI
Вы также можете обрабатывать динамический HTML с помощью так называемого сервера данных (data server). Сервер данных позволяет потокам внешнего приложения предоставлять данные для вывода их на web-страницы. Встраиваемый web-сервер расширяет SSI поддержкой серверов данных.
Таким образом может быть создан процесс приложения, обновляющий на сервере данных информацию о состоянии оборудования, в то время как встраиваемый web-сервер эту информацию передает клиенту независимым и надежным образом.
![]() | Возможно написать простой менеджер ввода/вывода для передачи динамически меняющихся данных. Необходимо отметить, что этот подход не ограничивается только встраиваемым web-сервером, менеджер ввода/вывода может обрабатывать только выходные данные, не изменяя их самих. |
Предыдущий раздел: перейти