P4(프로그래밍 언어)
P4 (programming language)![]() |
패러다임 | 컴파일된, 도메인별, 필수 |
---|---|
개발자 | P4 언어 컨소시엄 |
첫 등장 | 2013; | 전(
안정적 해제 | 버전[1] 1.2 / 2019년 10월 23일; 전 |
면허증 | 아파치 스타일 |
파일 이름 확장명 | .p4 |
웹사이트 | p4 |
P4는 라우터나 스위치와 같은 네트워킹 장치에서 패킷 포워딩 평면을 제어하기 위한 프로그래밍 언어다.C나 Python과 같은 범용 언어와 대조적으로, P4는 네트워크 데이터 포워딩에 최적화되어 있는 다수의 구문을 가진 도메인별 언어다.P4는 오픈소스, 허용면허 코드로 배포되며, 오픈네트워킹재단이 주최하는 비영리단체인 P4언어컨소시엄이 유지한다.
역사
P4는 원래 "Programming Protocol-Independent Packet Processors"[2]라는 제목의 2014 SIGCOMM CCR 논문에서 설명되었는데, 상호 참조 이름은 "P4"로 약칭된다.첫 번째 P4 워크숍은 2015년 6월 스탠퍼드대에서 열렸다.[3]P4-16이라고 불리는 P4의 업데이트된 사양은 2016년에서 2017년 사이에 공개되어 [4]P4의 원래 사양인 P4-14를 대체하였다.
디자인
언어가 패킷 포워딩 애플리케이션을 특별히 대상으로 하기 때문에, 요건이나 설계 선택의 목록은 그러한 사용 사례에 다소 이례적이다.이 언어는 다음과 같은 몇 가지 목표를 충족하도록 설계된다.
대상독립성
P4 프로그램은 범용 CPU, FPGA, 시스템 온칩, 네트워크 프로세서, ASIC와 같은 다양한 유형의 실행 기계에 대해 컴파일할 수 있는 구현에 독립적으로 설계되어 있다.이러한 서로 다른 유형의 기계는 P4 표적이라고 알려져 있으며, 각 표적은 P4 소스 코드를 대상 스위치 모델로 매핑하는 컴파일러와 함께 제공되어야 한다.컴파일러는 대상 장치, 외부에서 실행되는 소프트웨어 또는 클라우드 서비스에 내장될 수 있다.P4 프로그램의 초기 목표들 중 많은 수가 단순한 패킷 교환에 사용되었기 때문에, 비록 "P4 대상"이 더 공식적으로는 맞지만, "P4 스위치"라는 용어를 사용하는 것은 매우 흔한 일이다.
프로토콜 독립성
P4는 프로토콜에 독립적이 되도록 설계되었다. 이 언어는 IP, 이더넷, TCP, VxLAN 또는 MPLS와 같은 일반적인 프로토콜에 대한 기본적인 지원도 없다.대신, P4 프로그래머는 컴파일된 프로그램과 대상 장치에 의해 차례로 해석되고 처리되는 프로그램에 필요한 프로토콜의 헤더 형식과 필드 이름을 설명한다.
재구성 가능성
재구성 가능성을 허용하는 프로토콜 독립성과 추상 언어 모델 P4 대상은 패킷을 배포한 후(아마도 여러 번) 패킷을 처리하는 방식을 변경할 수 있어야 한다.이 기능은 전통적으로 고정 함수 ASIC가 아닌 범용 CPU나 네트워크 프로세서에 구축된 포워딩 평면과 연관된다.언어 내에서 특정 프로토콜 집합에 따라 지정된 대상이 최적화하는 것을 막을 수 있는 것은 없지만, 이러한 최적화는 언어 작성자에게 보이지 않으며 궁극적으로 시스템의 유연성과 재구성성 목표를 감소시킬 수 있다.
구성 요소들
P4 프로그램에는 일반적으로 다음과 같은 구성 요소가 있다.
파싱 논리학
P4는 TCP/IP 프로토콜 제품군과 애플리케이션별 헤더에서 사용되는 일반적인 헤더의 구문 분석을 포함하되 이에 국한되지 않는 사용자[4] 정의 패킷 헤더의 구문 분석을 허용한다.
머리글
헤더 정의는 패킷 형식을 설명하고 패킷 내의 필드에 대한 이름을 제공한다.많은 헤더 정의가 널리 알려진 프로토콜 이름과 필드 너비를 사용하지만, 언어는 임의 길이의 사용자 정의된 헤더 이름과 필드를 허용한다.예를 들어 802.3이더넷 헤더 정의는 "이더넷"이라고 불릴 수 있으며 48비트 "src" 필드와 16비트 "유형" 필드로 구성된다.헤더 정의의 이름은 이러한 필드를 참조하기 위해 P4 프로그램의 후반부에서 사용된다.
파서스
P4 파서는 들어오는 바이트 스트림을 걷고 프로그래밍된 파스 그래프를 기반으로 헤더를 추출하는 유한 상태 기계다.간단한 예로는 이더넷 소스 및 대상 필드 및 유형 필드를 추출한 다음 유형 필드의 값을 기반으로 추가 추출을 수행하는 파서가 있을 수 있다(공통 값은 ipv4, ipv6 또는 MPLS일 수 있음).
상태 저장 처리
P4는 프로그래머가 레지스터, 카운터, 미터 등의 형태로 상태를 유지할 수 있도록 한다.[4]
일반 일치 작업 테이블
P4 프로그램의 주요 구성요소는 사용자 정의 일치 작업 테이블의 집합이다.P4는 모든 매치 액션 테이블을 일반으로 취급하여 사용자가 제어면을 통해 매치 액션 규칙을 추가하도록 한다.[4]
매치액션처리
P4의 기본은 매치액션 파이프라인의 개념이다.개념적으로 포워딩 네트워크 패킷이나 프레임을 일련의 테이블 조회와 해당 헤더 조작으로 세분화할 수 있다.P4에서 이러한 조작은 동작으로 알려져 있으며 일반적으로 학습된 전달 상태에 대한 조회 결과에 기초하여 바이트 필드를 한 위치에서 다른 위치로 복사하는 것과 같은 것으로 구성된다.P4는 패킷 포워딩 장치의 데이터 평면만 다룬다.제어면과 데이터면 사이의 상태 통신을 위한 제어면이나 정확한 프로토콜은 명시하지 않는다.대신 P4는 표의 개념을 사용하여 포워딩 평면 상태를 나타낸다.제어면과 다양한 P4 테이블 사이의 인터페이스가 제공되어 제어면이 프로그램에서 상태를 주입/수정할 수 있어야 한다.이 인터페이스를 일반적으로 프로그램 API라고 부른다.
테이블
P4 테이블에는 패킷 포워딩에 사용되는 상태가 포함되어 있다.테이블은 룩업 키와 해당 작업 세트 및 해당 파라미터로 구성된다.사소한 예로 대상 MAC 주소 집합을 조회 키로 저장하는 것이 있을 수 있으며, 해당 동작은 장치에 출력 포트를 설정하거나 카운터를 증가시킬 수 있다.추상적으로 모든 룩업 키 정보와 전체 출력 동작 세트를 포함하는 단일 테이블을 구축할 수 있지만, 테이블과 테이블과 관련 동작은 전체 패킷 포워딩 논리를 실현하기 위해 거의 항상 순서대로 체인으로 묶여 있다.
행동들
P4의 동작은 패킷 필드 및 메타데이터 조작을 설명한다.P4 컨텍스트에서 메타데이터는 프레임이 도착한 입력 인터페이스와 같이 파서에서 직접 파생되지 않은 패킷에 관한 정보다.예제 동작에 대한 영어 설명은 "IPv4 TTL 필드를 하나씩 감소" 또는 "출력 포트 테이블에서 송신 패킷 헤더로 MAC 주소를 복사"가 될 수 있다.[5] P4는 모든 대상이 제공해야 하는 표준 메타데이터와 특정 대상의 작성자가 제공하는 대상별 메타데이터를 모두 정의한다.
제어 흐름
P4의 제어 흐름은 테이블의 상대적 순서를 결정하며, if/then/else 구성에 기초한 테이블의 조건부 실행을 허용한다.
참조
- ^ "P4 Language and Related Specifications". Retrieved 2 December 2019.
- ^ P. Bosshart; D. Daly; G. Gibb; M. Izzard; N. McKeown; J. Rexford; C. Schlesinger; D. Talayco; A. Vahdat; G. Varghese; D. Walker (July 2014). "P4: Programming Protocol-Independent Packet Processors". Computer Communication Review. Retrieved 7 April 2015.
- ^ "1st P4 Workshop". P4 Official Website. Retrieved 1 August 2019.
- ^ a b c d "P4-16 Specification". P4 Official Website. Retrieved 23 October 2019.
- ^ "P4 Mailing Lists". July 2015. Retrieved 15 July 2015.