uIP (программное обеспечение)
Стабильная версия | 1.0 [1]
/ 27 марта 2013 г |
---|---|
Репозиторий | |
Платформа | встроенные системы |
Тип | TCP/IP стек |
Лицензия | БСД |
uIP — это с открытым исходным кодом, реализация стека сетевых протоколов TCP/IP предназначенная для использования с крошечными 8- и 16-битными микроконтроллерами . Первоначально он был разработан Адамом Данкелсом из группы Networked Embedded Systems Шведского института компьютерных наук , лицензировался по лицензии типа BSD, а в дальнейшем развивался широкой группой разработчиков.
uIP может быть очень полезен во встроенных системах , поскольку требует очень небольшого количества кода и оперативной памяти. Он был портирован на несколько платформ. [2] [3] [4] включая DSP . платформы [5]
В октябре 2008 года Cisco , Atmel и SICS анонсировали полностью совместимое с IPv6 расширение uIP, получившее название uIPv6. [6]
Выполнение
[ редактировать ]uIP принимает множество необычных решений в дизайне, чтобы сократить требуемые ресурсы. Собственный программный интерфейс uIP предназначен для небольших компьютерных систем без операционной системы. Его можно вызывать в цикле по времени, и этот вызов управляет всеми повторными попытками и другим поведением сети. Драйвер оборудования вызывается после вызова uIP. uIP формирует пакет, а затем драйвер отправляет его и, при необходимости, получает ответ.
Программное обеспечение стека IP-протоколов обычно хранит множество копий различных IP-пакетов для передачи, приема и сохраняет копии на случай, если их потребуется отправить повторно. uIP экономно использует память, поскольку использует только один буфер пакетов. Во-первых, он использует буфер пакетов в полудуплексном режиме, поочередно используя его для передачи и приема. Кроме того, когда uIP необходимо повторно передать пакет, он вызывает код приложения таким образом, чтобы запросить воспроизведение предыдущих данных.
Еще одна странность заключается в том, как uIP управляет соединениями. В большинстве реализаций IP имеется одна задача на каждое соединение, и эта задача взаимодействует с задачей на удаленном компьютере на другом конце соединения. В uIP не предполагается многозадачность операционной системы. Соединения хранятся в массиве. При каждом вызове uIP пытается установить соединение, вызывая подпрограмму кода приложения, которое отвечает или отправляет данные. Размер массива подключений — это число, которое можно изменить при перекомпиляции uIP.
uIP полностью совместим с RFC , определяющими TCP , UDP и IP . Он также реализует протокол обязательного обслуживания ICMP .
Версии
[ редактировать ]уИП 0.9 [7] это версия с наименьшей зависимостью от операционных систем, наименьшим использованием ресурсов и единственной версией, которая представляет чистый API цикла событий , но в исходной форме не поддерживает IP версии 6, а только более старый и более распространенный IPv4. Его можно использовать во встроенных системах с очень небольшим количеством ресурсов.
Он поставлялся с набором примеров протоколов более высокого уровня, которые также работают в системе цикла событий, включая HTTP (простой веб-сервер), SMTP (простой протокол передачи почты), FTP (протокол передачи файлов), telnet (эмуляция терминала) . ) и другие. Несмотря на примеры и небольшой размер, uIP 0.9 может быть сложно применить, поскольку он не использует какую-либо форму API сокетов . [8]
uIP — широко используемый код с хорошо известными недостатками. Конструкция сводит к минимуму и разделяет 32-битную арифметику, чтобы ее можно было настроить или оптимизировать для 8- и 16-битных процессоров. Кроме того, 16-битные программные таймеры (распространенные в небольших микроконтроллерах) могут переполняться и вызывать сбои в работе. Это можно исправить с помощью системы таймеров, которая не переполняется (например, таймеры ведут обратный отсчет или используют модульную арифметику ).
Другая проблема заключается в том, что его одиночный буфер пакетов может иметь существенные проблемы с пропускной способностью, поскольку хост ПК обычно задерживает пакет «ACK», ожидая новых пакетов. В медленных реализациях последовательного порта пропускную способность подтверждения можно исправить, изменив uIP так, чтобы каждый пакет отправлялся как два фрагмента половинного пакета. Системы uIP с быстрым Ethernet или Wi-Fi могут модифицировать драйвер оборудования для двойной отправки каждого пакета. [5]
Некоторые компьютеры неправильно реагируют на быструю систему uIP в локальной сети Ethernet, поскольку система uIP может запустить ответный пакет до того, как компьютер будет готов его принять. [ сомнительно – обсудить ] Решение состоит в том, чтобы реже вызывать систему uIP в основном цикле (компьютеры Windows рассчитаны на время отклика около 1 миллисекунды). Типичные реализации uIP имеют фиксированный IP-адрес, что может сделать их непрактичными в реальных сетях, хотя некоторые из них реализовали DHCP . [9] [10]
Более поздние версии uIP, включая эталонную версию uIPv6, интегрированы с Contiki — операционной системой, использующей сопрограммы для совместной многозадачности. Contiki обеспечивает многозадачность, необходимую благодаря упрощенному API сокетов , упрощая использование uIP. Однако эти версии могут быть менее популярными, чем 0.9. Многие примеры встроенного кода их не используют. [11] [12] [13]
См. также
[ редактировать ]- Целевая группа по интернет-инжинирингу
- Список номеров портов TCP и UDP
- lwIP – еще один проект стека TCP/IP (также созданный Данкелсом), но более полнофункциональный и ориентированный на более мощное оборудование.
Ссылки
[ редактировать ]- ^ «Релиз 1.0» . 27 марта 2013 года . Проверено 18 марта 2019 г.
- ^ Метцингер, Зак (25 марта 2008 г.). «УКАЗАНИЕ ПО ПРИМЕНЕНИЮ 4205 — Использование стека uIP для подключения к сети микроконтроллера MAXQ» . Максим Интегрированные Продукты, Inc. Проверено 2 февраля 2015 г.
- ^ «AN057 - Стек TCP/IP uIP V1.0 для eCOG1k и eCOG1X, версия 1.0» (PDF) . ООО "Циан Технолоджи" . 28 января 2008 г. Архивировано из оригинала (PDF) 18 февраля 2012 г. . Проверено 18 февраля 2012 г.
- ^ Кертис, Пол. «UIP Адама Данкеля на Olimex EasyWeb2 и LPC-E2124» . Роули Ассошиэйтс Лимитед . Проверено 2 февраля 2015 г.
- ^ Jump up to: а б Барнетт, Дрю; Масса, Энтони Дж. (1 февраля 2005 г.). «Внутри стека uIP» . Журнал доктора Доббса . Проверено 2 февраля 2015 г.
- ^ «Cisco, Atmel и Шведский институт компьютерных наук (SICS) сотрудничают, чтобы поддержать будущее, в котором любое устройство может быть подключено к Интернету» . Циско . 14 октября 2008 года . Проверено 2 февраля 2015 г.
- ^ Данкелс, Адам. «Тегированные релизы» . Релизы с тегами uIP на GitHub . Проверено 2 февраля 2015 г.
- ↑ См. оригинальный веб-сайт Данкеля выше, о машине обратного пути.
- ^ См. пример кода Code-Red для печатной платы RDB4078, 2012 г. .
- ^ Данкель предоставил пример кода для DHCP.
- ^ Метцингер, выше
- ^ Примеры веб-сайтов FreeRTOS, 2013 г.
- ^ Примеры Code-Red выше.