Поделиться в Facebook Поделиться ВКонтакте Поделиться в LinkedIn Опубликовать в Twitter

Cтек протоколов TCP/IP

Введение

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

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

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

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

Для ОС QNX Neutrino поставляются три различных конфигурации стека:

  • Стек NetBSD TCP/IP. Поддерживает новейшие спецификации RFC по протоколам UDP, IP, TCP и SCTP. Также поддерживает перенаправление данных (forwarding), широковещание (broadcast), многоадресную передачу (multicast), функцию аппаратной контрольной суммы, сокеты маршрутизации, сокеты доменов Unix, стандарт multilink PPP, протокол PPPoE, протокол CIDR (бесклассовая междоменная маршрутизация), фильтрацию NAT/IP, протокол разрешения адресов ARP, протокол ICMP, протокол IGMP, а также протоколы CIFS, DHCP, AutoIP, DNS, NFS (версию 2 и версию 3 "сервер-клиент"), NTP, RIP, RIPv2 и встраиваемый веб-сервер. Для создания приложений для этого стека используется стандартный программный интерфейс BSD Socket. Также включает в себя оптимизированный код для перенаправления пакетов, позволяющий повысить производительность и эффективность маршрутизации пакетов при работе стека в качестве сетевого шлюза.
  • Расширенный стек NetBSD, включающий протоколы IPsec и IPv6. Включает в себя все возможности стандартного стека, а также функции, предназначенные для работы с новым поколением мобильных и безопасных каналов передачи. Этот стек обеспечивает полную поддержку протоколов IPv6 и IPsec (для IPv4 и IPv6) посредством расширений KAME. Кроме того, обеспечивается поддержка виртуальных частных сетей (VPN) посредством IPsec-туннелей. Этот двухрежимный стек поддерживает одновременно протоколы IPv4 и IPv6, а также имеет поддержку автоконфигурирования в IPv6, что позволяет выполнять конфигурирование устройств в сетевых средах с возможностями plug-and-play. Поддержка IPv6 включает в себя утилиты для этого протокола, а также поддержку протоколов RIP/RIPng для осуществления динамической маршрутизации. Для обеспечения расширенных возможностей протокола IPv6 в дополнение к стандартному программному интерфейсу сокетов предоставляется расширенный программный интерфейс Advanced Socket.

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

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

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

Структура администратора протокола TCP/IP

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

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

Рис. 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 совместимыми между собой.

Обычные демоны и утилиты, которые можно найти в Интернете, легко переносятся в эту среду (или компилируются в ней). Таким образом, для своих приложений можно легко использовать уже существующие программы.

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

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

/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) и имеет следующие возможности:

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

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

Более подробные сведения можно найти в документах «ЗОСРВ «Нейтрино». Описание программы. Часть 1. Справочник по утилитам. КПДА.10964.01 13 01» и «ЗОСРВ «Нейтрино». Описание программы. Часть 2. Справочник по компонентам КСЗ. КПДА.10964.01 13 02».

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

/etc/autoconnect

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

Более подробные сведения о службе автоматической установки соединения можно найти в документах «ЗОСРВ «Нейтрино». Описание программы. Часть 1. Справочник по утилитам. КПДА.10964.01 13 01» и «ЗОСРВ «Нейтрино». Описание программы. Часть 2. Справочник по компонентам КСЗ. КПДА.10964.01 13 02».

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

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

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

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

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

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

Метод CGI

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

Метод SSI

Технология SSI (Server Side Includes , Вставки на стороне сервера) представляет собой разновидность командного языка и позволяет вставлять инструкции в HTML-текст для реализации в нем динамического содержания. Например, благодаря технологии SSI, встраиваемый сервер может:

  • выполнять утилиты в указанных пользователем точках в HTML-документе (т. е. выходные данные этих утилит можно поместить в HTML-документ);
  • вставлять содержание других HTML-файлов в заданные пользователем точки;
  • обрабатывать условные операторы (if, break, goto), что позволяет пользователю определять, какие части HTML-файла могут быть переданы.

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

Метод сервера данных

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

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

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


Задать вопрос on-line Обсудить на форуме Написать электронное письмо