P4 (язык программирования)


Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

P4 - это язык программирования для управления плоскостями пересылки пакетов в сетевых устройствах, таких как маршрутизаторы и коммутаторы. В отличие от языков общего назначения, таких как C или Python , P4 - это предметно-ориентированный язык с рядом конструкций, оптимизированных для пересылки сетевых данных . P4 распространяется как открытый исходный код , разрешительно лицензированный код, и поддерживается Консорциумом P4 Language Consortium, некоммерческой организацией, размещенной на базе Open Networking Foundation .

История

Первоначально P4 был описан в документе SIGCOMM CCR 2014 года под названием «Программирование протокольно-независимых пакетных процессоров» [2] - аллитеративное название сокращается до «P4». Первый семинар 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.

использованная литература

  1. ^ «Язык P4 и соответствующие спецификации» . Дата обращения 2 декабря 2019 .
  2. ^ П. Босхарт; Д. Дэйли; Г. Гибб; М. Иззард; Н. Маккеун; Дж. Рексфорд; К. Шлезингер; Д. Талайко; А. Вахдат; Г. Варгезе; Д. Уокер (июль 2014 г.). «P4: Программирование независимых от протокола пакетных процессоров» . Обзор компьютерных коммуникаций . Проверено 7 апреля 2015 года .
  3. ^ "1-я мастерская P4" . Официальный сайт P4 . Проверено 1 августа 2019 .
  4. ^ a b c d «Спецификация P4-16» . Официальный сайт P4 . Проверено 23 октября 2019 года .
  5. ^ "Списки рассылки P4" . Июль 2015 . Проверено 15 июля 2015 года .

внешние ссылки

  • Официальный веб-сайт
Получено с https://en.wikipedia.org/w/index.php?title=P4_(programming_language)&oldid=1054194061 "