Оглавление    

14. Поддержка стека протоколов TCP/IP


Введение

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

IP-протокол способен выполнять множество задач: от простых (например, удаленный доступ) до более сложных (например, передача в реальном времени сводок с фондовых бирж). Многие предприятия начинают использовать в своей работе Всемирную Сеть (которая, как правило, основана на IP-протоколе) для взаимодействия с клиентами, передачи рекламы и других целей. ОС QNX Neutrino отлично подходит для самых разных применений, связанных с глобальной сетью Интернет, начиная от встраиваемых сетевых устройств и заканчивая маршрутизаторами, которые как раз и служат для того, чтобы Интернет мог работать.

С учетом всех этих и многих других требований, для ОС QNX Neutrino был разработан стек протоколов TCP/IP (io-pkt*), который может работать с минимальными ресурсами и использует обычный программный интерфейс BSD.
Конфигурации стека
Для ОС QNX Neutrino поставляются три различных конфигурации стека:

Поддержка IPsec обеспечивает безопасное взаимодействие между узлами или сетями посредством сервиса секретности данных на основе мощных криптографических алгоритмов и средств аутентификации данных. Поддержка IPsec также включает в себя протокол управления ключами IKE (ISAKMP/Oakley), который позволяет устанавливать безопасные связи между узлами.

Необходимо отметить, что стек протоколов QNX TCP/IP является модульным. Например, сетевая файловая система NFS включена в него как отдельный модуль. Благодаря такой модульности, а также компактности модулей, разработчики встраиваемых систем могут легко и быстро создавать небольшие системы с поддержкой протокола TCP/IP.

Структура администратора протокола TCP/IP
Ценной особенностью модуля io-pkt*, как, впрочем, и всех администраторов ресурсов в ОС QNX Neutrino, является его компактность и стандартный интерфейс. Благодаря естественному наследованию приоритетов в механизме межзадачного взаимодействия ОС QNX Neutrino, клиенты обслуживаются с учетом приоритета и в определенном временном порядке, что позволяет естественным образом распределять вычислительные ресурсы.

Рис. 14.1. Модуль io-pkt* и зависимые компоненты

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

Другие компоненты стека протоколов TCP/IP (например, файловая система NFS, snmpd-демон и т. д.) реализуются вне модуля io-pkt-*. Это повышает уровень модульности и отказоустойчивости системы.
Программный интерфейс Socket
Программный интерфейс BSD Socket был очевидным выбором для ОС QNX Neutrino. Socket API является стандартным программным интерфейсом по программированию TCP/IP в мире UNIX. Что касается мира Windows, то в нем существует Winsock API, который создан на основе BSD Socket API и имеет много общего с ним, что делает оба эти API совместимыми между собой.

В приложениях, разрабатываемых с помощью этих программных интерфейсов, могут использоваться все существующие функции, в том числе:

accept()

bind()

bindresvport()

connect()

dn_comp()

dn_expand()

endprotoent()

endservent()

gethostbyaddr()

gethostbyname()

getpeername()

getprotobyname()

getprotobynumber()

getprotoent()

getservbyname()

getservent()

getsockname()

getsockport()

herror()

hstrerror()

htonl()

htons()

h_errlist()

h_errno()

h_nerr()

inet_addr()

inet_aton()

inet_lnaof()

inet_makeaddr()

inet_netof()

inet_network()

inet_ntoa()

ioctl()

listen()

ntohl()

ntohs()

recv()

recvfrom()

res_init()

res_mkquery()

res_query()

res_querydomain()

res_search()

res_send()

select()

send()

sendto()

setprotoent()

setservent()

setsockopt()

shutdown()

socket()


Для получения более подробной информации см. электронный документ «QNX Neutrino Realtime Operation System. Library Reference».

Обычные демоны и утилиты, которые можно найти в Интернете, легко переносятся в эту среду (или компилируются в ней). Таким образом, для своих приложений можно легко использовать уже существующие программы.
Функции работы с базами данных
Функции работы с базами данных были изменены для большего соответствия требованиям встраиваемых систем.
/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) в ОС QNX Neutrino позволяет загружать множество модулей протоколов в виде разделяемых объектов. Это означает, например, что можно загружать несколько экземпляров стека TCP/IP на одном и том же физическом интерфейсе, что позволяет создавать множество виртуальных сетей (VLAN). Можно даже запускать множество независимых экземпляров самого сетевого администратора io-pkt*. Как и все системные компоненты ОС QNX Neutrino, каждый экземпляр модуля io-pkt*, естественно, изолирован в памяти, благодаря особенностям микроядерной архитектуры.
IP-фильтрация и преобразование сетевых адресов (NAT)
Модуль lsm-pf-*.so сетевого администратора io-pkt* предназначен для IP-фильтрации и преобразования сетевых адресов (Network Address Translation, NAT) и является динамически загружаемым модулем стека TCP/IP. Он обеспечивает высокоэффективный межсетевой экран (firewall) и имеет следующие возможности:

Правила IP-фильтрации и преобразования сетевых адресов можно добавлять и удалять динамически в процессе работы системы. Службы регистрации событий также входят в этот комплект утилит для того, чтобы вести журнал работы этого модуля.
Протокол сетевого времени (NTP)
Протокол сетевого времени (Network Time Protocol, NTP) позволяет устанавливать системное время на сетевых устройствах с помощью стандартных серверов времени Интернета. NTP-сервис в ОС QNX Neutrino поддерживает как серверный, так и клиентский режим.

В серверном режиме NTP-сервис в локальной сети синхронизируется со стандартными серверами времени, а затем передает полученную информацию клиентам в локальной сети методом широковещательной или многоадресной рассылки или ожидает соответствующего запроса от клиентов, после чего клиентские NTP-системы синхронизируются с серверной NTP-системой. NTP-служба реализует протокол NTP версии 4, а также совместима с версиями 3, 2 и 1.
Динамическое конфигурирование узлов
В ОС QNX Neutrino поддерживается протокол динамического конфигурирования узла (Dynamic Host Configuration Protocol, DHCP), который используется для получения конфигурационных параметров TCP/IP. Клиент DHCP (dhcp.client) получает конфигурационные параметры от DHCP-сервера и в соответствии с ними конфигурирует узел TCP/IP. Это позволяет пользователю присоединить узел к сети, не задумываясь о значениях необходимых параметров (IP-адрес, шлюз и т. д.). Служба DHCP также позволяет системному администратору управлять присоединением узлов к сети. Для управления этими клиентами также используется DHCP-демон (dhcpd) и агент перенаправления (relay agent) (dhcprelay).

Более подробные сведения об утилитах dhcp.client, dhcpd и dhcprelay можно найти в справочнике по утилитам.
Модуль AutoIP
Модуль lsm-autoip.so был разработан на основе проекта стандарта Zeroconf комитета IETF (Internet Engineering Task Force, Комитет по инженерным вопросам Интернета). Этот модуль загружается сетевым менеджером io-pkt* и предназначен для автоматического конфигурирования IPv4-адреса без помощи сервера (как в случае использования службы DHCP) посредством прямого однорангового взаимодействия. Этот модуль может работать одновременно с модулем dhcp.client, что позволяет получать одновременно как локальный IP-адрес, так и IP-адрес, назначенный службой DHCP.
Протокол PPPoE
В ОС QNX Neutrino поддерживается протокол PPPoE (Point to Point Protocol over Ethernet, Протокол канала связи с непосредственным соединением (точка-точка) через сеть Ethernet), который обычно применяется провайдерами широкополосных сетей. Поддержка PPPoE в ОС QNX Neutrino включает в себя стек io-pkt-*, а также сервис pppoed, который согласовывает сессию по протоколу PPPoE. После установления сессии PPPoE сервис pppd создает PPP-соединение.

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

Дополнительная информация по применению соответствующих программных компонентов содержится в руководстве "Справочник по утилитам".
/etc/autoconnect

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

Более подробные сведения о службе автоматической установки соединения можно найти в руководстве "Справочник по утилитам".

Встраиваемый веб-сервер
Встраиваемый веб-сервер, slinger, в ОС QNX Neutrino очень экономно использует ресурсы памяти и взаимодействует с помощью сокетов TCP/IP (рис. 14.2). Встраиваемый веб-сервер поддерживает интерфейс CGI 1.1, протокол http 1.1 и динамический HTML (посредством команд SSI).


Рис. 14.2. Встраиваемый веб-сервер.

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

Несмотря на свою компактность, встраиваемый веб-сервер QNX обеспечивает достаточную функциональность для поддержки возможности доступа к генерируемым (динамическим) HTML-страницам через CGI или SSI.
Метод CGI
Встраиваемый веб-сервер поддерживает интерфейс CGI 1.1 (Common Gateway Interface, Общий шлюзовой интерфейс), который является удобным средством обработки динамических данных. Недостатком интерфейса CGI является то, что он требователен к ресурсам из-за использования интерпретируемых языков.
Метод SSI
Технология SSI (Server Side Includes , Вставки на стороне сервера) представляет собой разновидность командного языка и позволяет вставлять инструкции в HTML-текст для реализации в нем динамического содержания. Например, благодаря технологии SSI, встраиваемый сервер может:
Следует отметить, что SSI-теги могут взаимодействовать с сервером данных.
Метод сервера данных
Вы также можете обрабатывать динамический HTML с помощью так называемого сервера данных (data server). Сервер данных позволяет множеству потоков совместно использовать данные независимо от того, к каким процессам они относятся. Встраиваемый веб-сервер поддерживает не только технологию SSI, но и возможность взаимодействия с сервером данных.

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

Замечание

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


     Оглавление