Ứng dụng ngôn ngữ P4 trong cân bằng tải

42 0 0
Tài liệu đã được kiểm tra trùng lặp
Ứng dụng ngôn ngữ P4 trong cân bằng tải

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương trình cơ bản về chuyển tiếp gói tin và chương trình cân bằng tải với 2 giải thuật round robin và weight round robin. Trong tương lai từ những kết quả đạt được trong đồ án này có thể phát triển tiếp theo một số hướng như sau: • Thực hiện triển khai load balance cho web server. • Kiểm tra tình trạng của server đích có đang hoạt động không. Trong quá trình thực hiện và nghiên cứu đồ án này, sẽ không thể nào tránh được những thiếu sót. Em rất mong nhận được những đóng góp quý báu của các thầy cô để bài nghiên cứu này cang được hoàn thiện một cách tốt hơn.

Trang 1

Ứng dụng ngôn ngữ P4 trong cân bằng tải

Trang 3

Hình 2.8 Chạy p4run để triển khai mạng cơ bản 18

Hình 2.9 Thông báo khi hoàn thành triển khai mạng cơ bản 18

Hình 2.10 Ping thử h1 qua h2 19

Hình 2.11 Bắt gói tin ở hướng đầu vào s1 19

Hình 2.12 Bắt gói tin ở hướng đầu ra s1 20

Hình 2.13 Bắt gói tin ở hướng đầu vào s2 20

Hình 2.14 Bắt gói tin ở hướng đầu ra khỏi s2 21

Hình 3.1 Cấu trúc mạng để triển khai load balance 22

Hình 3.2 Round robin: Chạy p4run để triển khai round robin 28

Hình 3.3 Round robin: Thông báo sau khi hoàn thành triển khai 28

Hình 3.4 Round robin: Mở các host bằng terminal 29

Hình 3.5 Round robin: Gửi gói tin từ host 1 29

Hình 3.6 Round robin: Gói tin nhận được ở host 2 30

Hình 3.7 Round robin: Gói tin được nhận ở host 3 30

Hình 3.8 Round robin: Gói tin được nhận ở host 4 31

Hình 3.9 Round robin: Gói tin được nhận ở host 5 31

Hình 3.10 Weight round robin: Chạy triển khai hệ thống 36

Hình 3.11 Weight round robin: Hoàn thành triển khai hệ thống 36

Hình 3.12 Weight round robin: Gửi gói tin HTTP từ host 1 37

Hình 3.13 Weight round robin: Các host 2 3 4 5 lần lượt được kiểm tra trạng thái 37

Trang 4

CHƯƠNG 1 ĐẶT VẤN ĐỀ

Cân bằng tải là một phương pháp phân phối khối lượng tải trên nhiều máy tính hoặc một cụm máy tính để có thể sử dụng tối ưu các nguồn lực, tối đa hóa thông lượng, giảm thời gian đáp ứng và tránh tình trạng quá tải trên máy chủ

Trong thời đại bùng nổ của công nghệ thông tin hiện nay, mạng máy tính đóng vai trò ngày càng quan trọng hơn trong hoạt động của các doanh nghiệp, tổ chức cũng như các cơ quan nhà nước Thậm chí ở một số đơn vị, chẳng hạn như các công ty hàng không hoặc các ngân hàng lớn, mạng máy tính có thể ví như hệ thần kinh điều khiển hoạt động của toàn doanh nghiệp Sự ngừng hoạt động của mạng máy tính hay sự hoạt động kém hiệu quả của mạng máy tính trong những cơ quan này có thể làm tê liệt các hoạt động chính của đơn vị, và thiệt hại khó có thể lường trước được

Chúng ta đều biết các máy chủ là trái tim của của mạng máy tính, nếu máy chủ mạng hỏng, hoạt động của hệ thống sẽ bị ngưng trệ Điều đáng tiếc là dù các hãng sản xuất đã cố gắng làm mọi cách để nâng cao chất lượng của thiết bị, nhưng những hỏng hóc đối với các thiết bị mạng nói chung và các máy chủ nói riêng là điều không thể tránh khỏi Do vậy, vấn đề đặt ra là cần có một giải pháp để đảm bảo cho hệ thống vẫn hoạt động tốt ngay cả khi có sự cố xảy ra đối với máy chủ mạng Việc lựa chọn một server đơn lẻ có cấu hình cực mạnh để đáp ứng nhu cầu này sẽ kéo theo chi phí đầu tư rất lớn và không giải quyết được các vấn đề đặt ra của các tổ chức Giải pháp hiệu quả được đưa ra là sử dụng một nhóm server cùng thực hiện một chức nǎng dưới sự điều khiển của một công cụ phân phối tải - Giải pháp cân bằng tải Việc chia tải có thể thực hiện bằng nhiều phương cách, hình thức khác nhau, với các công nghệ khác nhau hoặc kết hợp chúng lại

Tuy nhiên vẫn có những nhược điểm khi sử dụng các phương pháp hiện tại, ví dụ như chia tải bằng phần mềm cài trên các máy chủ sẽ bị hạn chế về mặt mở rộng, phức tạp khi triển khai…chia tải nhờ proxy thì có nhược điểm lớn nhất là có tính ổn định kém, hiệu năng thấp, dễ mắc lỗi… Trong khi đó, tất cả các yêu cầu về hiệu năng cao, ổn định, mở rộng tốt, tăng tốc tốt và bảo mật là rất quan trọng đối với các hoạt động của ngân hàng, chứng khoán và các nhà cung cấp dịch vụ GP sẵn có của các hãng chỉ đáp ứng được một phần trong các yêu cầu trên như Module CSS của Cisco, ISA của Microsoft, hay Netscaler của Citrix)

Trang 5

CHƯƠNG 2 LÝ THUYẾT LIÊN QUAN 2.1 Giới thiệu về mạng SDN

Hiện nay nhu cầu về ứng dụng của các người dùng cuối đang ngày càng gia tăng, kéo theo đó là nhu cầu khác nhau của người dùng về mạng kết nối Mô hình mạng cần phải đáp ứng việc thay đổi nhanh chóng các thông số về trễ, băng thông, định tuyến, bảo mật… theo các yêu cầu của các ứng dụng Một mạng có thể lập trình sẽ đáp ứng được yêu cầu trên, mở ra nhiều cánh cửa mới tới các ứng dụng

Tổ chức phi lợi nhuận ONF (Open Networking Foundation), được thành lập bởi các công ty Deutsche Telekom, Facebook, Google, Microsoft, Verizon, và Yahoo! đã định nghĩa công nghệ SDN như là giải pháp để cung cấp một mạng như vậy SDN là một kiến trúc linh hoạt, dễ quản lý, hiệu suất cao và thích nghi tốt, khiến công nghệ này lý tưởng cho các ứng dụng đòi hỏi băng thông cao và cần sự linh hoạt hiện nay Trong SDN, phần điều khiển mạng được tách ra khỏi phần chuyển tiếp và có thể cho phép lập trình trực tiếp được

2.2 Kiến trúc của mạng SDN

Kiến trúc của SDN [1] gồm 3 lớp riêng biệt: lớp ứng dụng, lớp điều khiển, và lớp cơ sở hạ tầng (lớp chuyển tiếp)

Hình 2.1 Kiến trúc 3 lớp mô hình mạng SDN

Trang 6

Lớp ứng dụng

Là các ứng dụng được doanh nghiệp triển khai trên mạng, được kết nối tới lớp điều khiển thông qua các API, cung cấp khả năng cho phép lớp ứng dụng lập trình lại (cấu hình lại) mạng (điều chỉnh các tham số trễ, băng thông, định tuyến, …) thông qua lớp điều khiển

Lớp ứng dụng cung cấp các giao diện có khả năng lập trình mở, cho phép các nhà cung cấp dịch vụ điện toán đám mây cung cấp các dịch vụ đám mây công cộng tự động cho các doanh nghiệp Các tổ chức, doanh nghiệp có thể tạo ra một “đám mây ảo” cô lập, thông qua hạ tầng cơ sở đám mây công cộng, kiểm soát hoàn toàn các dịch vụ và các ứng dụng cho người sử dụng

Lớp điều khiển

Lớp điều khiển là nơi tập trung các bộ điều khiển thực hiện việc điều khiển cấu hình mạng theo các yêu cầu từ lớp ứng dụng Bộ điều khiển trong mạng định nghĩa bằng phần mềm SDN là bộ não của toàn bộ hoạt động trong mạng Đây là ứng dụng hoạt động như điểm kiểm soát chiến lược trong mạng SDN, quản lý kiểm soát lưu lượng tới các Switch / router 'bên dưới' (thông qua API) và lớp ứng dụng 'ở trên' để triển khai mạng thông minh Để truyền thông và điều khiển lớp cơ sở hạ tầng, lớp điều khiển sử dụng các cơ chế như OpenFlow, ONOS, ForCES, PCEP, NETCONF, SNMP hoặc thông qua các cơ chế riêng biệt

Một bộ điều khiển (Controller là một ứng dụng quản lý kiểm soát dòng lưu lượng trong môi trường mạng Bộ điều khiển SDN thực hiện việc cấu hình, giám sát các phần tử mạng qua giao thức OpenFlow

Bộ điều khiển SDN phục vụ giống như một hệ điều hành (OS) cho mạng Tất cả thông tin liên lạc giữa các ứng dụng và các thiết bị phải đi qua bộ điều khiển Bộ điều khiển sử dụng giao thức OpenFlow để cấu hình các thiết bị mạng và chọn con đường tốt nhất cho gói tin Cùng với chức năng chính của nó, nó có thể tiếp tục được mở rộng để thực hiện thêm nhiệm vụ quan trọng như định tuyến và truy cập mạng Bộ điều khiển còn có vai trò cung cấp API để có thể xây dựng các ứng dụng cho hệ thống mạng, và thu nhận thông tin từ hệ thống mạng vật lý, điều khiển hệ thống mạng vật lý

OpenFlow là một giao thức sử dụng các API (giao diện lập trình ứng dụng – application programming interfaces) để cấu hình các thiết bị chuyển mạch trong một mạng lưới

Hình 1.8 cho thấy chức năng cơ bản của bộ điều khiển (Control plane) đó là việc điều khiển lưu lượng, thiết lập đường đi, các chính sách cho toàn bộ các bộ chuyển mạch (Switch) ở lớp dữ liệu (Data Plane)

Trang 7

Hình 2.2 Bộ điều khiển SDN

Lớp cơ sở hạ tầng

Là các thiết bị mạng thực tế (vật lý hay ảo hóa) thực hiện việc chuyển tiếp gói tin theo sự điều khiển của lớp điểu khiển Một thiết bị mạng có thể hoạt động theo sự điều khiển của nhiều bộ điều khiển khác nhau, điều này giúp tăng cường khả năng ảo hóa của mạng

2.3 Trung tâm dữ liệu mạng SDN

Một trung tâm dữ liệu là một kho lưu trữ tập trung, hoặc là vật lý hay ảo, và sử dụng nhiều tổ chức các máy chủ và các thiết bị mạng mà xử lý yêu cầu và liên kết nối đến máy chủ khác trong mạng hoặc mạng Internet công cộng Các yêu cầu thực hiện một loạt trung tâm dữ liệu phục vụ từ nội dung trang web, email, tính toán phân phối cho nhiều ứng dụng dựa trên đám mây

SDN [2] đã thu hút nhiều nhà khai thác trung tâm dữ liệu đối với nó, và Google đã triển khai cách tiếp cận SDN thành một trong những xương sống của nó Các SDN triển khai mạng đã hoạt động tại Google, và đã cung cấp các lợi ích bao gồm cả việc sử dụng các nguồn lực cao hơn, xử lý thất bại nhanh hơn và nâng cấp nhanh hơn Tuy nhiên, những thách thức của nó bao gồm bộ điều khiển lỗi, chương trình dòng chảy (Open Flow) và cắt các phần tử mạng cho một điều khiển phân tán Tương tự như vậy NEC cũng đã triển khai thành công phương pháp tiếp cận SDN trong trung tâm dữ liệu và mạng đường trục tại nhà máy phần mềm riêng của mình

2.4 Ngôn ngữ P4

2.4.1 Giới thiệu ngôn ngữ P4

P4 là một ngôn ngữ để diễn đạt cách các gói được xử lý bởi mặt phẳng dữ liệu của phần tử chuyển tiếp có thể lập trình được chẳng hạn như bộ chuyển đổi phần cứng hoặc phần mềm, thẻ giao diện mạng, bộ định tuyến hoặc mạng thiết bị Nhiều mục tiêu thực hiện cả mặt phẳng điều khiển và mặt phẳng dữ liệu P4 được thiết kế để chỉ định chức năng mặt phẳng dữ liệu của mục tiêu Các chương trình P4 cũng xác định một phần giao diện mà mặt phẳng điều khiển và mặt phẳng dữ liệu giao tiếp, nhưng P4 không thể được sử dụng để mô tả chức năng mặt phẳng

Trang 8

điều khiển của mục tiêu Trong phần còn lại của tài liệu này, khi chúng ta nói về P4 là "lập trình mục tiêu", nghĩa là "lập trình mặt phẳng dữ liệu của mục tiêu"

Hình 2.3 Switch truyền thống với switch được lập trình bằng P4

Là một ví dụ cụ thể về mục tiêu, hình trên minh họa sự khác biệt giữa switch chức năng cố định truyền thống và switch lập trình P4 Trong một switch truyền thống, nhà sản xuất định nghĩa chức năng mặt phẳng dữ liệu Mặt phẳng điều khiển kiểm soát mặt phẳng dữ liệu bằng cách quản lý các mục nhập trong bảng (ví dụ: bảng định tuyến), định cấu hình các đối tượng chuyên biệt (ví dụ: mét) và bằng cách xử lý gói điều khiển (ví dụ: gói giao thức định tuyến) hoặc các sự kiện không đồng bộ, chẳng hạn như thay đổi trạng thái liên kết hoặc thông báo học tập

Switch lập trình P4 khác với switch truyền thống ở hai điểm cơ bản:

• Chức năng của mặt phẳng dữ liệu không được cố định trước mà được xác định bởi chương trình P4 Mặt phằng dữ liệu được định cấu hình tại thời điểm khởi tạo để triển khai chức năng được mô tả bởi chương trình P4 (được hiển thị bằng mũi tên dài màu đỏ) và không có kiến thức tích hợp về các giao thức mạng hiện có

• Mặt phẳng điều khiển giao tiếp với mặt phẳng dữ liệu bằng cách sử dụng các kênh giống như trong một thiết bị chức năng cố định, nhưng tập hợp các bảng và các đối tượng khác trong mặt phẳng dữ liệu không còn cố định nữa, vì chúng được xác định bởi một chương trình P4 Trình biên dịch P4 tạo API mà mặt phẳng điều khiển sử dụng để giao tiếp với mặt phẳng dữ liệu [3]

Do đó, P4 có thể được cho là độc lập với giao thức, nhưng nó cho phép các lập trình viên thể hiện một tập hợp phong phú của giao thức và các hành vi mặt phẳng dữ liệu khác

Các phần tóm tắt cốt lõi được cung cấp bởi ngôn ngữ P4 là [4]:

Trang 9

• Header types mô tả định dạng (tập hợp các trường và kích thước của chúng) của mỗi tiêu đề trong một gói

• Parsers mô tả các chuỗi tiêu đề được phép trong các gói đã nhận, cách xác định các chuỗi tiêu đề đó cũng như các tiêu đề và trường để trích xuất từ các gói

• Tables liên kết các khóa do người dùng xác định với các hành động Tables P4 khái quát các bảng chuyển đổi truyền thống; chúng có thể được sử dụng để triển khai các bảng định tuyến, bảng tra cứu luồng, danh sách kiểm soát truy cập và các các loại bảng do người dùng xác định, bao gồm các quyết định nhiều biến phức tạp

• Actions là các đoạn mã mô tả cách thao tác các trường tiêu đề gói và siêu dữ liệu Các hành động có thể bao gồm dữ liệu, được cung cấp bởi mặt phẳng điều khiển trong thời gian chạy

• Match-action đơn vị thực hiện chuỗi hoạt động sau:

o Xây dựng khóa tra cứu từ các trường gói hoặc siêu dữ liệu được tính toán

o Thực hiện tra cứu bảng bằng khóa đã xây dựng, chọn một hành động (bao gồm cả dữ liệu được liên kết) để thực thi

o Cuối cùng, thực hiện hành động đã chọn

• Control luồng diễn đạt một chương trình mệnh lệnh mô tả quá trình xử lý gói trên một mục tiêu, bao gồm trình tự phụ thuộc dữ liệu của các lệnh gọi đơn vị hành động đối sánh Deparsing (gói tin lại) cũng có thể được thực hiện bằng cách sử dụng một luồng điều khiển

• Extern objects là các cấu trúc dành riêng cho kiến trúc có thể được điều khiển bởi các chương trình P4 thông qua các API được xác định rõ, nhưng có hành vi bên trong là khó có dây (ví dụ: đơn vị tổng kiểm tra) và do đó không thể lập trình bằng P4

• User-defined metadata: cấu trúc dữ liệu do người dùng xác định được liên kết với mỗi gói

• Intrinsic metadata: siêu dữ liệu được cung cấp bởi kiến trúc được liên kết với mỗi gói - ví dụ: cổng đầu vào nơi một gói đã được nhận

Hình 2.4 Lập trình mục tiêu với P4

Trang 10

Hình trên cho thấy quy trình làm việc của công cụ điển hình khi lập trình mục tiêu bằng P4

Các nhà sản xuất mục tiêu cung cấp khung triển khai phần cứng hoặc phần mềm, định nghĩa kiến trúc và trình biên dịch P4 cho mục tiêu đó Lập trình viên P4 viết chương trình cho một kiến trúc cụ thể, xác định một tập hợp các thành phần có thể lập trình P4 trên mục tiêu cũng như bên ngoài của chúng các giao diện mặt phẳng dữ liệu

Việc biên dịch một bộ chương trình P4 tạo ra hai hiện vật:

• Một cấu hình mặt phẳng dữ liệu thực hiện logic chuyển tiếp được mô tả trong chương trình đầu vào

• Một API để quản lý trạng thái của các đối tượng trên mặt phẳng dữ liệu từ mặt phẳng điều khiển

P4 là ngôn ngữ dành riêng cho miền được thiết kế để có thể triển khai trên nhiều mục tiêu bao gồm thẻ giao diện mạng có thể lập trình, FPGA, chuyển mạch phần mềm và ASIC phần cứng Như vậy, ngôn ngữ bị hạn chế đối với các cấu trúc có thể được triển khai hiệu quả trên tất cả các nền tảng này

Giả sử chi phí cố định cho các hoạt động tra cứu bảng và tương tác với các đối tượng bên ngoài, tất cả các chương trình P4 (tức là trình phân tích cú pháp và điều khiển) thực hiện một số lượng không đổi các hoạt động cho mỗi byte của đầu vào đã nhận và phân tích gói tin Mặc dù trình phân tích cú pháp có thể chứa các vòng lặp, miễn là một số tiêu đề được trích xuất trên mỗi chu kỳ, gói tin tự cung cấp một ràng buộc về tổng số thực thi của trình phân tích cú pháp Nói cách khác, theo những giả định này, độ phức tạp tính toán của chương trình P4 là tuyến tính trong tổng kích thước của tất cả các tiêu đề và không bao giờ phụ thuộc vào kích thước của trạng thái được tích lũy trong khi xử lý dữ liệu (ví dụ: số luồng hoặc tổng số gói được xử lý) Những đảm bảo này là cần thiết (nhưng không đủ) để cho phép xử lý gói nhanh trên nhiều mục tiêu

2.4.2 Mô hình kiến trúc

Kiến trúc P4 xác định các khối lập trình P4 (ví dụ: parser, ingress control flow, egress control flow, deparser, v.v.) và các giao diện mặt phẳng dữ liệu của chúng

Kiến trúc P4 có thể được coi như một hợp đồng giữa chương trình và mục tiêu [2, 3] Do đó mỗi nhà sản xuất phải cung cấp cả trình biên dịch P4 cũng như định nghĩa kiến trúc đi kèm cho mục tiêu của họ (Chúng tôi hy vọng rằng các trình biên dịch P4 có thể chia sẻ một giao diện người dùng chung để xử lý tất cả kiến trúc) Định nghĩa kiến trúc không phải để lộ toàn bộ bề mặt có thể lập trình của bình diện dữ liệu — một nhà sản xuất thậm chí có thể chọn cung cấp nhiều định nghĩa cho cùng một thiết bị phần cứng, mỗi định nghĩa có các khả năng khác nhau (ví dụ: có hoặc không hỗ trợ đa hướng)

Trang 11

Hình 2.5 P4 program interfaces

Hình trên minh họa các giao diện mặt phẳng dữ liệu giữa các khối lập trình P4 Nó cho thấy một mục tiêu có hai khối có thể lập trình (# 1 và # 2) Mỗi khối được lập trình thông qua một phân đoạn riêng biệt của mã P4 Mục tiêu giao tiếp với chương trình P4 thông qua một tập hợp các thanh ghi điều khiển hoặc các tín hiệu Đầu vào các điều khiển cung cấp thông tin cho các chương trình P4 (ví dụ: cổng đầu vào mà một gói được nhận từ đó), trong khi các điều khiển đầu ra có thể được ghi bởi các chương trình P4 để tác động đến hành vi mục tiêu (ví dụ: đầu ra cổng nơi một gói tin phải được chuyển hướng) Các thanh ghi / tín hiệu điều khiển được biểu diễn trong P4 dưới dạng nội tại metadata Các chương trình P4 cũng có thể lưu trữ và thao tác dữ liệu liên quan đến mỗi gói do người dùng xác định metadata

Hành vi của chương trình P4 có thể được mô tả đầy đủ dưới dạng các phép biến đổi ánh xạ vectơ của bit thành vectơ của bit Để thực sự xử lý một gói tin, mô hình kiến trúc diễn giải các bit chương trình P4 ghi vào siêu dữ liệu nội tại Ví dụ, để khiến một gói tin được chuyển tiếp trên một cổng đầu ra cụ thể, chương trình P4 có thể cần ghi chỉ số của cổng đầu ra vào một điều khiển chuyên dụng Đăng ký Tương tự như vậy, để khiến một gói tin bị loại bỏ, một chương trình P4 có thể cần đặt một bit "thả" vào một thanh ghi điều khiển chuyên dụng khác Lưu ý rằng chi tiết về cách diễn giải siêu dữ liệu nội tại là kiến trúc cụ thể

Hình 2.6 Chương trình P4 gọi các dịch vụ của một đối tượng chức năng cố định

Các chương trình P4 có thể gọi các dịch vụ được thực hiện bởi các đối tượng và chức năng bên ngoài được cung cấp bởi ngành kiến trúc Hình trên mô tả một chương trình P4 gọi các dịch vụ của tính toán tổng kiểm tra tích hợp đơn vị trên một mục tiêu Việc triển khai đơn vị tổng kiểm tra không được chỉ định trong P4,

Trang 12

nhưng giao diện của nó thì có Nói chung, giao diện cho một đối tượng bên ngoài mô tả từng hoạt động mà nó cung cấp, cũng như tham số và kiểu trả về của chúng Nói chung, các chương trình P4 không được mong đợi là có thể di động qua các kiến trúc khác nhau Ví dụ: thực thi chương trình P4 phát các gói bằng cách ghi vào thanh ghi điều khiển tùy chỉnh sẽ không hoạt động chính xác trên mục tiêu không có thanh ghi điều khiển Tuy nhiên, các chương trình P4 được viết cho một kiến trúc nhất định phải có tính di động trên tất cả các mục tiêu triển khai trung thực mô hình, miễn là có đủ tài nguyên

2.4.2.1 Giao diện mặt phẳng dữ liệu

Để mô tả một khối chức năng có thể được lập trình trong P4, kiến trúc bao gồm một khai báo kiểu xác định các giao diện giữa khối và các thành phần khác trong kiến trúc Đối với ví dụ, kiến trúc có thể chứa một khai báo như sau:

control MatchActionPipe<H>(in bit<4> inputPort, inout H parsedHeaders,

out bit<4> outputPort);

Khai báo kiểu này mô tả một khối có tên MatchActionPipe có thể được lập trình bằng cách sử dụng chuỗi lệnh gọi đơn vị hành động đối sánh phụ thuộc dữ liệu và các cấu trúc mệnh lệnh khác (được biểu thị bằng từ khóa điều khiển) Giao diện giữa khối MatchActionPipe và các thành phần khác của kiến trúc có thể được đọc từ khai báo này:

• Tham số đầu tiên là một giá trị 4 bit có tên inputPort Hướng trong chỉ ra rằng tham số này là đầu vào không thể sửa đổi

• Tham số thứ hai là một đối tượng kiểu H có tên là parsedHeaders, trong đó H là một biến kiểu đại diện cho các tiêu đề sẽ được lập trình viên P4 định nghĩa sau này Hướng inout chỉ ra rằng tham số này vừa là đầu vào vừa là đầu ra

• Tham số thứ ba là một giá trị 4 bit có tên là outputPort Hướng ra ngoài chỉ ra rằng tham số này là đầu ra có giá trị không được xác định ban đầu nhưng có thể được sửa đổi

2.4.3 Các thành phần của ngôn ngữ P4

P416 là một ngôn ngữ được nhập tĩnh Các chương trình không vượt qua trình kiểm tra kiểu được coi là không hợp lệ và bị trình biên dịch từ chối P4 cung cấp một số kiểu cơ sở cũng như toán tử kiểu xây dựng các kiểu dẫn xuất Một số giá trị có thể được chuyển đổi thành một kiểu khác bằng cách sử dụng phôi Tuy nhiên, để làm cho ý định của người dùng rõ ràng, chỉ được phép sử dụng ẩn trong một số trường hợp và phạm vi các phép có sẵn bị hạn chế có chủ ý

2.4.3.1 Các kiểu cơ sở

P4 hỗ trợ các loại cơ sở tích hợp sau:

Trang 13

• Kiểu void: không có giá trị và chỉ có thể được sử dụng trong một số trường hợp hạn chế

• Kiểu error: được sử dụng để truyền đạt lỗi theo cách không phụ thuộc vào đích, do trình biên dịch quản lý

• Kiểu match_kind: được sử dụng để mô tả việc triển khai tra cứu bảng

• Kiểu bool: đại diện cho các giá trị boolean

• Chuỗi bit có chiều rộng cố định, được biểu thị bằng bit<>

• Các số nguyên có dấu có chiều rộng cố định được biểu diễn bằng int<>

• Chuỗi bit có chiều rộng được tính toán động với chiều rộng tối đa cố định varbit<>

baseType : BOOL | ERROR | BIT

| BIT '<' INTEGER '>' | INT '<' INTEGER '>' | VARBIT '<' INTEGER '>' ;

2.4.3.2 Các kiểu nguồn gốc • enum

• header

• header stacks • struct

• header_union • tuple

• type specialization • extern

• parser • control • package

Các kiểu header, header_union, enum, struct, extern, parser, control và package chỉ có thể được sử dụng trong khai báo kiểu, nơi chúng giới thiệu tên mới cho kiểu Sau đó, loại có thể được đề cập đến bằng cách sử dụng số nhận dạng này

Các kiểu khác không thể được khai báo, nhưng được trình biên dịch tổng hợp bên trong để đại diện cho kiểu cấu trúc ngôn ngữ nhất định Ví dụ, người lập trình không thể khai báo một biến có kiểu “set”, nhưng có thể viết

Trang 14

một biểu thức có giá trị đánh giá kiểu set Những kiểu này được sử dụng trong quá trình kiểm tra kiểu

typeDeclaration

: derivedTypeDeclaration | typedefDeclaration | parserTypeDeclaration ';' | controlTypeDeclaration ';' | packageTypeDeclaration ';' ;

derivedTypeDeclaration : headerTypeDeclaration | headerUnionDeclaration | structTypeDeclaration | headerUnionDeclaration | enumDeclaration

; typeRef : baseType | typeName | specializedType | headerStackType | tupleType

;

prefixedType : TYPE

| dotPrefix TYPE ;

typeName

: prefixedType ;

Trang 15

| TYPEDEF derivedTypeDeclaration name ';' | annotations TYPEDEF typeRef name ';'

| annotations TYPEDEF derivedTypeDeclaration name ';' ;

typedef bit<32> u32;

typedef struct Point { int<32> x; int<32> y; } Pt; typedef Empty_h[32] HeaderStack;

Hai kiểu được coi là từ đồng nghĩa và tất cả các thao tác có thể được thực hiện bằng kiểu gốc cũng có thể được thực hiện bằng kiểu mới được tạo

2.4.1.2 Headers

Định nghĩa tiêu đề mô tả các định dạng packet Định nghĩa tiêu đề mô tả các định dạng gói và cung cấp tên cho các field trong packet Ngôn ngữ cho phép tùy chỉnh tên header với độ dài tùy ý, mặc dù nhiều định nghĩa header biết bởi protocol names và fields widths Ví dụ: Định nghĩa của 802.3 Ethernet header có thể gọi là "Ethernet" và có field 48bit tên là “dest” theo sau là 1 trường 48 bit "src" sau nữa là 16 bit "type" Các tên trong định nghĩa header này được sử dụng sau này trong chương trình P4 để tham chiếu các field này

header ethernet_t { bit dstAddr; bit srcAddr; bit etherType; }

2.4.1.3 Parsers

P4 parser là một máy trạng thái (pasestate machine) hữu hạn chạy luồng byte đến và trích xuất các header dựa trên biểu đồ phân tích cú pháp được lập trình Ví dụ: phân tích cú pháp trích xuất nguồn Ethernet và đích và loại field Sau đó thực hiện trích xuất dựa trên giá trị trong loại field (các giá trị phổ biến có thể là ipv4, ipv6 hoặc MPLS)

parser ParserImpl (packet_in packet, out headers hdr,

inout metadata meta,

inout standard_metadata_t standard_metadata) {

const bit ETHERTYPE_IPV4 = 16w0x0800;

Trang 16

state start {

transition parse_ethernet; }

state parse_ethernet {

packet.extract(hdr.ethernet);

transition select(hdr.ethernet.etherType) { ETHERTYPE_IPV4: parse ipv4; default: accept;

} }

table mac_da { key = {

meta.fwd_metadata.l2ptr: exact; }

actions = {

set_bd_dmac_intf; my_drop; }

default_action = my_drop; }

2.4.1.5 Actions

Các action trong P4 mô tả các thao tác cho packet và metadata Trong ngữ cảnh P4, metadata là thông tin về một packet không được lấy trực tiếp từ chương trình phân tích cú pháp, chẳng hạn như đầu vào interface

Trang 17

mà frame được mang đến Mô tả bằng tiếng Anh của một hành động ví dụ có thể là “decrement the IPv4 TTL field by one” (giảm field IPv4 TTL 1 bước) hay là “copy the MAC address from the output port table into the outgoing packet header.” (sao chép địa chỉ MAC từ bảng cổng output vào packet header) P4 xác định cả metadata tiêu chuẩn phải được cung cấp bởi tất cả các target cũng như metadata dành riêng cho target do tác giả của các mục tiêu cụ thể cung cấp

action rewrite_mac (bit smac) {

hdr.ethernet.srcAddr = smac; }

table send_frame { key = {

meta.fwd_metadata.out_bd: exact; }

actions = {

rewrite_mac; my_drop; } default_action = my_drop; }

apply {

send_frame.apply(); }

2.4.1.6 Control Flow

Luồng điều khiển trong P4 xác định trình tự tương đối của các bảng và cho phép thực thi các bảng dựa trên cấu trúc if / then / else

2.4.2 Chương trình cơ bản

Chương trình mô triển khai trên cấu trúc liên kết mạng cơ bản như sau

Hình 2.7 Cấu trúc liên kết mạng cơ bản

Simple switch sẽ thực hiện các chức năng sau:

• Phân tích các tiêu đề Ethernet và IPv4 từ gói tin

Trang 18

• Tìm điểm đến trong bảng định tuyến IPv4 • Cập nhật địa chỉ MAC nguồn và đích

• Giảm thời gian tồn tại (TTL) trong tiêu đề IP • Thiết lập cổng ra thích hợp cho gói tin

• Đóng gói tiều đề trở lại gói tin

Mô tả liên kết trong mạng:

"links": [["h1", "s1", {"delay":"20ms", "bw": 20, "queue_length": 100, "weight":5}], ["h2", "s2"], ["s1", "s2"], ["h3", "s3"], ["s1", "s3"]]

Mô tả các host trong cấu trúc liên kết mạng:

"hosts": { "h1": { }, "h2": { }, "h3": { }

}

Mô tả các switch:

"switches": { "s1": { 28

"cli_input": "s1-commands.txt", "program": "forwarding.p4" },

"s2": {

"cli_input": "s2-commands.txt", "program": "forwarding.p4" },

"s3": {

"cli_input": "s3-commands.txt", "program": "forwarding.p4" }

}

Thêm các file tệp quy tắc cho các switch forward từ ipv4 về địa chỉ vật lý

File tệp quy tắc cho switch s1:

table_set_default ipv4_lpm drop

table_add ipv4_lpm ipv4_forward 10.0.1.1/32 => 00:00:0a:00:01:01 1 table_add ipv4_lpm ipv4_forward 10.0.2.2/32 => 00:00:00:02:01:00 2 table_add ipv4_lpm ipv4_forward 10.0.3.0/24 => 00:00:00:03:01:00 3

File tệp quy tắc cho switch s2:

Trang 19

table_set_default ipv4_lpm drop

table_add ipv4_lpm ipv4_forward 10.0.1.1/32 => 00:00:00:01:02:00 2 table_add ipv4_lpm ipv4_forward 10.0.2.2/32 => 00:00:0a:00:02:02 1 table_add ipv4_lpm ipv4_forward 10.0.3.0/24 => 00:00:00:01:02:00 2

File tệp quy tắc cho switch s3:

table_set_default ipv4_lpm drop

table_add ipv4_lpm ipv4_forward 10.0.1.0/24 => 00:00:00:01:03:00 3 table_add ipv4_lpm ipv4_forward 10.0.2.0/24 => 00:00:00:01:03:00 3 table_add ipv4_lpm ipv4_forward 10.0.3.3/32 => 00:00:0a:00:03:03 1 table_add ipv4_lpm ipv4_forward 10.0.3.4/32 => 00:00:0a:00:03:04 2

bit<13> fragOffset; bit<8> ttl;

bit<8> protocol;

bit<16> hdrChecksum; ip4Addr_t srcAddr; ip4Addr_t dstAddr; }

• Kiến trúc của các header struct headers {

Trang 20

ethernet_t ethernet; ipv4_t ipv4;

actions = { ipv4_forward; drop;

NoAction; }

size = 1024;

default_action = NoAction(); }

• Cập nhật địa chỉ MAC nguồn và đích

action ipv4_forward(macAddr_t dstAddr, egressSpec_t port) { hdr.ethernet.srcAddr = hdr.ethernet.dstAddr;

hdr.ethernet.dstAddr = dstAddr; }

• Giảm thời gian tồn tại

action ipv4_forward(macAddr_t dstAddr, egressSpec_t port) { hdr.ipv4.ttl = hdr.ipv4.ttl -1;

• Đóng tiêu đề vào gói tin

control MyDeparser(packet_out packet, in headers hdr) { apply {

packet.emit(hdr.ethernet); packet.emit(hdr.ipv4);

Trang 21

} }

Triển khai chương trình P4

Chạy p4run để triển khai hệ thống mạng

Hình 2.8 Chạy p4run để triển khai mạng cơ bản

Hình 2.9 Thông báo khi hoàn thành triển khai mạng cơ bản

Ngày đăng: 16/05/2024, 14:12

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan