กลับไปหน้าบทความ

อ่าน 2 นาที

P4 (ภาษาโปรแกรม)

P4เป็นภาษาโปรแกรมสำหรับควบคุม การส่งต่อ แพ็กเก็ตในอุปกรณ์เครือข่าย เช่น เราเตอร์และสวิตช์ แตกต่างจากภาษาทั่วไปอย่างCหรือPython P4

P4 (ภาษาโปรแกรม)

(Learn how and when to remove this message)
พี4
กระบวนทัศน์คอมไพล์แล้ว , เฉพาะโดเมน , เชิงคำสั่ง
นักพัฒนามูลนิธิเครือข่ายเปิด
ปรากฏครั้งแรก2013 (2013)
เวอร์ชันเสถียร
เวอร์ชัน 1.2.5 [ 1 ] / ตุลาคม 2024 (2024-10)
ใบอนุญาตสไตล์อะปาเช่
นามสกุลไฟล์.p4
เว็บไซต์p4 .org

P4เป็นภาษาโปรแกรมสำหรับควบคุม การส่งต่อ แพ็กเก็ตในอุปกรณ์เครือข่าย เช่น เราเตอร์และสวิตช์ แตกต่างจากภาษาทั่วไปอย่างCหรือPython P4 เป็นภาษาเฉพาะด้านที่มีโครงสร้างหลายอย่างที่ได้รับการปรับให้เหมาะสมสำหรับการส่งต่อข้อมูลเครือข่าย P4 เผยแพร่ในรูปแบบโอเพนซอร์สได้รับอนุญาตอย่าง เสรี และได้รับการดูแลโดยโครงการ P4 (เดิมชื่อ P4 Language Consortium) ซึ่งเป็นองค์กรไม่แสวงหาผลกำไรที่อยู่ภายใต้การดูแลของOpen Networking Foundation

ประวัติศาสตร์

P4 ได้รับการอธิบายครั้งแรกใน เอกสาร SIGCOMM CCR ปี 2014 ที่มีชื่อว่า “Programming Protocol-Independent Packet Processors” [ 2 ] —ชื่อที่คล้องจองกันย่อเป็น “P4” การประชุมเชิงปฏิบัติการ P4 ครั้งแรกจัดขึ้นในเดือนมิถุนายน 2015 ที่มหาวิทยาลัยสแตนฟอร์ด [ 3 ] ข้อกำหนดที่ได้รับการปรับปรุงของ P4 เรียกว่า P4-16 ได้รับการเผยแพร่ระหว่างปี 2016 และ 2017 [ 4 ]แทนที่ P4-14 ซึ่งเป็นข้อกำหนดดั้งเดิมของ P4

ออกแบบ

เนื่องจากภาษานี้มีเป้าหมายเฉพาะสำหรับแอปพลิเคชันการส่งต่อแพ็กเก็ต รายการข้อกำหนดหรือตัวเลือกการออกแบบจึงค่อนข้างเฉพาะเจาะจงสำหรับกรณีการใช้งานเหล่านั้น ภาษาได้รับการออกแบบมาเพื่อตอบสนองเป้าหมายหลายประการ:

เป้าหมายความเป็นอิสระ

โปรแกรม P4 ถูกออกแบบมาให้เป็นอิสระจากการใช้งาน: สามารถคอมไพล์ได้กับเครื่องประมวลผลหลายประเภท เช่น CPU ทั่วไป, FPGA , ระบบบนชิป (SEO) , โปรเซสเซอร์เครือข่าย และ ASIC เครื่องประเภทต่างๆ เหล่านี้เรียกว่าเป้าหมาย P4และแต่ละเป้าหมายจะต้องมีคอมไพเลอร์ที่แปลงซอร์สโค้ด P4 ไปเป็นโมเดลสวิตช์เป้าหมาย คอมไพเลอร์อาจฝังอยู่ในอุปกรณ์เป้าหมาย ซอฟต์แวร์ที่ทำงานภายนอก หรือแม้แต่บริการคลาวด์ เนื่องจากเป้าหมายเริ่มต้นของโปรแกรม P4 จำนวนมากใช้สำหรับการสลับแพ็กเก็ตอย่างง่าย จึงมักได้ยินคำว่า "สวิตช์ P4" แม้ว่า "เป้าหมาย P4" จะถูกต้องตามหลักการมากกว่าก็ตาม

ความเป็นอิสระของโปรโตคอล

ภาษา P4 ถูกออกแบบมาให้เป็นอิสระจากโปรโตคอล: ภาษาดังกล่าวไม่มีการรองรับโปรโตคอลทั่วไป เช่น IP, Ethernet, TCP, VxLANหรือMPLSโดยตรง แต่โปรแกรมเมอร์ P4 จะอธิบายรูปแบบส่วนหัวและชื่อฟิลด์ของโปรโตคอลที่ต้องการในโปรแกรม ซึ่งจะถูกตีความและประมวลผลโดยโปรแกรมที่คอมไพล์แล้วและอุปกรณ์เป้าหมาย

ความสามารถในการปรับเปลี่ยนโครงสร้าง

ความเป็นอิสระของโปรโตคอลและแบบจำลองภาษาเชิงนามธรรมช่วยให้สามารถกำหนดค่าใหม่ได้ – เป้าหมายของ P4 ควรจะสามารถเปลี่ยนวิธีการประมวลผลแพ็กเก็ต (อาจหลายครั้ง) หลังจากที่ถูกใช้งานแล้ว ความสามารถนี้โดยทั่วไปเกี่ยวข้องกับระนาบการส่งต่อที่สร้างขึ้นบนCPU อเนกประสงค์หรือโปรเซสเซอร์เครือข่ายมากกว่าASIC ที่มีฟังก์ชันคงที่ แม้ว่าภายในภาษาจะไม่มีอะไรป้องกันไม่ให้เป้าหมายที่กำหนดทำการปรับแต่งให้เหมาะสมกับชุดโปรโตคอลบางชุด แต่การปรับแต่งเหล่านี้มองไม่เห็นสำหรับผู้เขียนภาษา และอาจลดความยืดหยุ่นและเป้าหมายในการกำหนดค่าใหม่ของระบบลงในที่สุด

ส่วนประกอบ

โปรแกรม P4 โดยทั่วไปประกอบด้วยส่วนประกอบดังต่อไปนี้:

ตรรกะการแยกวิเคราะห์

P4 อนุญาตให้ระบุตรรกะการแยกวิเคราะห์ส่วนหัวแพ็กเก็ตแบบกำหนดเอง[ 4 ] รวมถึงแต่ไม่จำกัดเพียงการแยกวิเคราะห์ส่วนหัวทั่วไปที่ใช้ในชุดโปรโตคอล TCP/IP และส่วนหัวเฉพาะแอปพลิเคชัน

ส่วนหัว

คำจำกัดความส่วนหัวอธิบายรูปแบบของแพ็กเก็ตและกำหนดชื่อให้กับฟิลด์ภายในแพ็กเก็ต ภาษาดังกล่าวอนุญาตให้กำหนดชื่อส่วนหัวและฟิลด์ที่มีความยาวตามต้องการได้ แม้ว่าคำจำกัดความส่วนหัวจำนวนมากจะใช้ชื่อโปรโตคอลและความกว้างของฟิลด์ที่เป็นที่รู้จักกันอย่างแพร่หลายก็ตาม ตัวอย่างเช่น คำจำกัดความส่วนหัวของ Ethernet 802.3อาจเรียกว่า “Ethernet” และประกอบด้วยฟิลด์ขนาด 48 บิตชื่อ “dest” ตามด้วยฟิลด์ขนาด 48 บิต “src” และตามด้วยฟิลด์ขนาด 16 บิต “type” ชื่อในคำจำกัดความส่วนหัวจะถูกนำไปใช้ในโปรแกรม P4 ในภายหลังเพื่ออ้างอิงถึงฟิลด์เหล่านี้

ตัวแยกวิเคราะห์

ตัวแยกวิเคราะห์ P4 เป็นเครื่องสถานะจำกัดที่ตรวจสอบสตรีมไบต์ขาเข้าและแยกส่วนหัวตามกราฟการแยกวิเคราะห์ที่ตั้งโปรแกรมไว้ ตัวอย่างง่ายๆ คือ ตัวแยกวิเคราะห์ที่แยกฟิลด์แหล่งที่มาและปลายทางของอีเธอร์เน็ตและฟิลด์ประเภท จากนั้นทำการแยกข้อมูลเพิ่มเติมตามค่าในฟิลด์ประเภท (ค่าทั่วไปอาจเป็น ipv4, ipv6 หรือ MPLS)

การประมวลผลสถานะ

P4 อนุญาตให้โปรแกรมเมอร์รักษาสถานะในรูปแบบของรีจิสเตอร์ ตัวนับ และมิเตอร์[ 4 ]

ตารางการดำเนินการจับคู่ทั่วไป

องค์ประกอบหลักของโปรแกรม P4 คือชุดตารางการดำเนินการจับคู่ที่ผู้ใช้กำหนด P4 ถือว่าตารางการดำเนินการจับคู่ทั้งหมดเป็นแบบทั่วไป โดยปล่อยให้ผู้ใช้เพิ่มกฎการดำเนินการจับคู่ของตนเองผ่านทางระนาบควบคุม[ 4 ]

การประมวลผลการจับคู่-การกระทำ

หัวใจสำคัญของ P4 คือแนวคิดของไปป์ ไลน์การจับคู่และ การดำเนินการ (match-action pipelines ) ในเชิงแนวคิด การส่งต่อแพ็กเก็ตหรือเฟรมเครือข่ายสามารถแบ่งออกเป็นชุดของการค้นหาในตารางและการจัดการส่วนหัวที่เกี่ยวข้อง ใน P4 การจัดการเหล่านี้เรียกว่าการดำเนินการ (actions)และโดยทั่วไปประกอบด้วยสิ่งต่างๆ เช่น การคัดลอกฟิลด์ไบต์จากตำแหน่งหนึ่งไปยังอีกตำแหน่งหนึ่งโดยอิงจากผลลัพธ์การค้นหาในสถานะการส่งต่อที่เรียนรู้มา P4 กล่าวถึงเฉพาะระนาบข้อมูล (data plane) ของอุปกรณ์ส่งต่อแพ็กเก็ตเท่านั้น ไม่ได้ระบุระนาบควบคุม (control plane) หรือโปรโตคอลที่แน่นอนสำหรับการสื่อสารสถานะระหว่างระนาบควบคุมและระนาบข้อมูล แต่ P4 ใช้แนวคิดของตารางเพื่อแสดงสถานะของระนาบการส่งต่อ อินเทอร์เฟซระหว่างระนาบควบคุมและตาราง P4 ต่างๆ จะต้องมีให้เพื่ออนุญาตให้ระนาบควบคุมแทรก/แก้ไขสถานะในโปรแกรม อินเทอร์เฟซนี้โดยทั่วไปเรียกว่าAPI ของโปรแกรม

ตาราง

ตาราง P4 ประกอบด้วยสถานะที่ใช้ในการส่งต่อแพ็กเก็ต ตารางประกอบด้วยคีย์ค้นหาและชุดการกระทำและพารามิเตอร์ที่เกี่ยวข้อง ตัวอย่างง่ายๆ อาจเป็นการจัดเก็บชุดที่อยู่ MAC ปลายทางเป็นคีย์ค้นหา และการกระทำที่เกี่ยวข้องอาจเป็นการตั้งค่าพอร์ตเอาต์พุตบนอุปกรณ์ และ/หรือเพิ่มค่าตัวนับ ตารางและการกระทำที่เกี่ยวข้องมักจะเชื่อมต่อกันเป็นลำดับเพื่อสร้างตรรกะการส่งต่อแพ็กเก็ตอย่างสมบูรณ์ แม้ว่าในทางนามธรรมแล้ว เป็นไปได้ที่จะสร้างตารางเดียวที่รวมข้อมูลคีย์ค้นหาทั้งหมดและชุดการกระทำเอาต์พุตทั้งหมดไว้ด้วยกัน

การกระทำ

การกระทำใน P4 อธิบายถึงการจัดการฟิลด์แพ็กเก็ตและเมตาเดตาในบริบทของ P4 เมตาเดตาคือข้อมูลเกี่ยวกับแพ็กเก็ตที่ไม่ได้มาจากตัวแยกวิเคราะห์โดยตรง เช่น อินเทอร์เฟซขาเข้าที่เฟรมมาถึง คำอธิบายภาษาอังกฤษของการกระทำตัวอย่างอาจเป็น "ลดฟิลด์ IPv4 TTLลงหนึ่ง" หรือ "คัดลอกที่อยู่ MAC จากตารางพอร์ตเอาต์พุตไปยังส่วนหัวแพ็กเก็ตขาออก" [ 5 ] P4 กำหนดทั้งเมตาเดตามาตรฐานที่ต้องจัดเตรียมโดยเป้าหมายทั้งหมด รวมถึงเมตาเดตาเฉพาะเป้าหมาย ซึ่งจัดเตรียมโดยผู้เขียนเป้าหมายเฉพาะ

การควบคุมการไหล

การควบคุมการไหลของโปรแกรมใน P4 จะกำหนดลำดับสัมพัทธ์ของตารางต่างๆ และอนุญาตให้มีการเรียกใช้ตารางแบบมีเงื่อนไขโดยใช้โครงสร้าง if/then/else

  • เว็บไซต์อย่างเป็นทางการ
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=P4_(programming_language)&oldid=1345047890 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ P4 (ภาษาโปรแกรม)

P4เป็นภาษาโปรแกรมสำหรับควบคุม การส่งต่อ แพ็กเก็ตในอุปกรณ์เครือข่าย เช่น เราเตอร์และสวิตช์ แตกต่างจากภาษาทั่วไปอย่างCหรือPython P4

ประวัติศาสตร์

P4 ได้รับการอธิบายครั้งแรกใน เอกสาร SIGCOMM CCR ปี 2014 ที่มีชื่อว่า “Programming Protocol-Independent Packet Processors” [ 2 ] —ชื่อที่คล้องจองกันย่อเป็น “P4” การประชุมเชิงปฏิบัติการ P4 ครั้งแรกจัดขึ้นในเดือนมิถุนายน 2015 ที่ มหาวิทยาลัยสแตนฟอร์ด [ 3 ]...

ออกแบบ

เนื่องจากภาษานี้มีเป้าหมายเฉพาะสำหรับแอปพลิเคชันการส่งต่อแพ็กเก็ต รายการข้อกำหนดหรือตัวเลือกการออกแบบจึงค่อนข้างเฉพาะเจาะจงสำหรับกรณีการใช้งานเหล่านั้น ภาษาได้รับการออกแบบมาเพื่อตอบสนองเป้าหมายหลายประการ:

เป้าหมายความเป็นอิสระ

โปรแกรม P4 ถูกออกแบบมาให้เป็นอิสระจากการใช้งาน: สามารถคอมไพล์ได้กับเครื่องประมวลผลหลายประเภท เช่น CPU ทั่วไป, FPGA , ระบบบนชิป (SEO) , โปรเซสเซอร์เครือข่าย และ ASIC เครื่องประเภทต่างๆ เหล่านี้เรียกว่า เป้าหมาย P4 และแต่ละเป้าหมายจะต้องมีคอม ไพเลอร์...