P4 (язык программирования)
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Парадигма | скомпилированный , зависящий от предметной области , императивный |
---|---|
Разработчик | Фонд открытых сетей |
Впервые появился | 2013 год |
Стабильная версия | версия 1.2.2 [1]
/ май 2021 г |
Лицензия | Апач -стиль |
Расширения имен файлов | .p4 |
Веб-сайт | п4 |
P4 — это язык программирования для управления пакетов плоскостями пересылки в сетевых устройствах, таких как маршрутизаторы и коммутаторы. В отличие от языков общего назначения, таких как C или Python , P4 — это предметно-ориентированный язык с рядом конструкций, оптимизированных для пересылки сетевых данных . P4 распространяется как код с открытым исходным кодом , лицензируемый по разрешению , и поддерживается P4 Project (ранее P4 Language Consortium), некоммерческой организацией, организованной Open Networking Foundation .
История
[ редактировать ]P4 был первоначально описан в документе SIGCOMM CCR 2014 года под названием «Программирование протоколо-независимых пакетных процессоров». [2] — аллитеративное название сокращается до «П4». Первый семинар P4 состоялся в июне 2015 года в Стэнфордском университете . [3] Обновленная спецификация P4, получившая название P4-16, была выпущена в период с 2016 по 2017 год. [4] заменяя P4-14, исходную спецификацию P4.
Дизайн
[ редактировать ]Поскольку язык специально предназначен для приложений пересылки пакетов, список требований или вариантов дизайна несколько специфичен для этих случаев использования. Язык создан для достижения нескольких целей:
Целевая независимость
[ редактировать ]Программы P4 разработаны так, чтобы быть независимыми от реализации: они могут быть скомпилированы для множества различных типов исполнительных машин, таких как процессоры общего назначения, FPGA , системы на кристалле , сетевые процессоры и ASIC. Эти различные типы машин известны как цели P4 , и каждая цель должна быть предоставлена вместе с компилятором , который отображает исходный код P4 в модель переключения цели. Компилятор может быть встроен в целевое устройство, внешнее программное обеспечение или даже в облачную службу. Поскольку многие из первоначальных целей программ P4 использовались для простой коммутации пакетов, очень часто можно услышать использование термина «переключатель P4», хотя «цель P4» более формально правильна.
Независимость протокола
[ редактировать ]P4 спроектирован так, чтобы быть независимым от протокола: язык не имеет встроенной поддержки даже таких распространенных протоколов, как IP, Ethernet, TCP, VxLAN или MPLS . Вместо этого программатор P4 описывает форматы заголовков и имена полей необходимых протоколов в программе, которые, в свою очередь, интерпретируются и обрабатываются скомпилированной программой и целевым устройством.
Реконфигурируемость
[ редактировать ]Независимость протокола и абстрактная языковая модель допускают возможность реконфигурации: цели P4 должны иметь возможность изменять способ обработки пакетов (возможно, несколько раз) после их развертывания. Эта возможность традиционно связана с плоскостями пересылки, построенными на процессорах общего назначения или сетевых процессорах с фиксированными функциями , а не на ASIC . Хотя внутри языка нет ничего, что могло бы помешать конкретной цели оптимизировать определенный набор протоколов, эти оптимизации невидимы для автора языка и в конечном итоге могут снизить гибкость и возможности реконфигурации системы.
Компоненты
[ редактировать ]Программы P4 обычно состоят из следующих компонентов:
Логика синтаксического анализа
[ редактировать ]P4 позволяет указать собственную логику анализа заголовка пакета. [4] включая, помимо прочего, анализ типичных заголовков, используемых в наборе протоколов TCP/IP, и заголовков, специфичных для приложения.
Заголовки
[ редактировать ]Определения заголовков описывают форматы пакетов и предоставляют имена полям внутри пакета. Язык позволяет настраивать имена заголовков и поля произвольной длины, хотя во многих определениях заголовков используются широко известные имена протоколов и ширина полей. Например, определение заголовка Ethernet 802.3 может называться «Ethernet» и состоять из 48-битного поля с именем «dest», за которым следует 48-битное поле «src», за которым следует 16-битное поле «type». Имена в определении заголовка используются позже в программе P4 для ссылки на эти поля.
Парсеры
[ редактировать ]Парсер P4 — это конечный автомат, который обрабатывает входящий поток байтов и извлекает заголовки на основе запрограммированного графа анализа. Простым примером может служить анализатор, который извлекает поля источника, назначения и типа Ethernet, а затем выполняет дальнейшее извлечение на основе значения в поле типа (обычными значениями могут быть ipv4, ipv6 или MPLS).
Обработка с отслеживанием состояния
[ редактировать ]P4 позволяет программисту сохранять состояние в виде регистров, счетчиков и счетчиков. [4]
Общие таблицы действий при совпадении
[ редактировать ]Основным компонентом программы P4 является набор определяемых пользователем таблиц действий по сопоставлению. P4 рассматривает все таблицы действий по совпадению как общие, позволяя пользователю добавлять свои правила действий по сопоставлению через плоскость управления. [4]
Обработка действий по совпадению
[ редактировать ]Фундаментальным для P4 является концепция конвейеров сопоставления действий . Концептуально пересылку сетевых пакетов или кадров можно разбить на серию поисков в таблицах и соответствующих манипуляций с заголовками. В P4 эти манипуляции известны как действия и обычно состоят из таких вещей, как копирование байтовых полей из одного места в другое на основе результатов поиска по изученному состоянию пересылки. P4 адресован только плоскости данных устройства пересылки пакетов. Он не определяет ни плоскость управления, ни какой-либо точный протокол для передачи состояния между плоскостями управления и данных. Вместо этого P4 использует концепцию таблиц для представления состояния плоскости пересылки. Должен быть предусмотрен интерфейс между плоскостью управления и различными таблицами P4, чтобы позволить плоскости управления вводить/изменять состояние в программе. Этот интерфейс обычно называют программным API .
Таблицы
[ редактировать ]Таблицы P4 содержат состояние, используемое для пересылки пакетов. Таблицы состоят из ключей поиска и соответствующего набора действий и их параметров. Тривиальным примером может быть сохранение набора MAC-адресов назначения в качестве ключей поиска, а соответствующее действие может установить выходной порт на устройстве и/или увеличить счетчик. Таблицы и связанные с ними действия почти всегда последовательно связаны друг с другом для реализации полной логики пересылки пакетов, хотя абстрактно можно построить одну таблицу, которая включает всю ключевую информацию поиска и полный набор выходных действий.
Действия
[ редактировать ]Действия в P4 описывают манипуляции с полем пакета и метаданными . В контексте P4 метаданные — это информация о пакете, которая не получена напрямую из анализатора, например, о входном интерфейсе, на который прибыл кадр. Примером действия на английском языке может быть «уменьшение поля TTL IPv4 на единицу» или «копирование MAC-адреса из таблицы выходных портов в заголовок исходящего пакета». [5] P4 определяет как стандартные метаданные, которые должны предоставляться всеми целями, так и метаданные для конкретной цели, которые предоставляются автором конкретных целей.
Поток управления
[ редактировать ]Поток управления в P4 определяет относительную последовательность таблиц и допускает условное выполнение таблиц на основе конструкций if/then/else.
Ссылки
[ редактировать ]- ^ «Язык P4 и связанные с ним характеристики» . Проверено 7 июня 2022 г.
- ^ П. Босхарт; Д. Дейли; Г. Гибб; М. Иззард; Н. МакКаун; Дж. Рексфорд; К. Шлезингер; Д. Талайко; А. Вахдат; Г. Варгезе; Д. Уокер (июль 2014 г.). «P4: Программирование протокольно-независимых пакетных процессоров» . Обзор компьютерных коммуникаций . Проверено 7 апреля 2015 г.
- ^ «1-й семинар P4» . Официальный сайт P4 . 4 июня 2015 г. Проверено 1 августа 2019 г.
- ^ Jump up to: а б с д «Технические характеристики» . Официальный сайт P4 . Проверено 7 июня 2022 г.
- ^ «Списки рассылки P4» . июль 2015 года . Проверено 15 июля 2015 г.