Tải bản đầy đủ (.pdf) (23 trang)

Báo Cáo Tìm Hiểu Về Nox Pox Controller Ryu Controller.pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.82 MB, 23 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

Lâm Thiên Phong - 20021567

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>3.5.2: Mơ hình chương trình ứng dựng Ryu ...16 </b>

3.6: Tham chi u API giao th c OpenFlow<b>ếứ</b> ...17

3.6.1: L<b>ớp cơ sở</b> cho b n tin OpenFlow<b>ả</b> ...17

3.6.2: Functions ...18

3.7: K t qu <b>ếả chạ</b>y mô ph ng các module c a ryu<b>ỏủ</b> ...19

Tài li u tham kh<b>ệảo:, ...21 </b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

2

1: SDN Controller

SDN controller là một ứng d ng hoụ ạt động như bộ não của mạng điều khiển mềm, nó hoạt động như một điểm ki m sốt tồn b ể ộ hoạt động c a m ng. ủ ạ

SDN controller là lo i hạ ệ điều hành cho mạng mà m i giao ti p gi a các ng d ng ọ ế ữ ứ ụ và thi t b phế ị ải đi qua. Bộ điều khi n nể ằm giữa các thi t bị m ng một bên và lớp ng ế ạ ứ d ng ụ ở phía bên kia, d ch các yêu c u t lị ầ ừ ớp ứng d ng và quụ ản lý điều khiển lu ng sang ồ các thi t b mế ị ạng (thông qua API hướng nam) và cung c p cho ng d ng SDN ch ấ ứ ụ ế độ xem trừu tượng về logic m ng và nghiạ ệp v (thụ ông qua API hướng b c). Bắ ộ điều khiển SDN xác định các luồng dữ liệu xảy ra trong m t ph ng d ặ ẳ ữ liệu SDN. M i lu ng ỗ ồ qua mạng trước tiên phải được s cho phép ự

c a b ủ ộ điều khi n theo chính sách m ng. Hình 1: ể ạ Kiến trúc c a SDN controllerủ N u b ế ộ điều khi n cho phép m t lu ng, nó s tính tốn m t tuyể ộ ồ ẽ ộ ến đường cho luồng đi và thêm một mục nh p cho lu ng ậ ồ đó trong mỗi switch d c theo ọ đường d n. V i t t c các chẫ ớ ấ ả ức năng phứ ạp c t đượ ổc t ng h p b i b ợ ở ộ điều khi n, các thi t b chuy n m ch ch ể ế ị ể ạ ỉ đơn giản là qu n lý các b ng lu ng ả ả ồ mà các m c nh p ch có th ụ ậ ỉ ể được điền b i b ở ộ điều khi n. ể

Giao ti p gi a bế ữ ộ điều khi n và thi t b chuy n m ch s d ng giao thể ế ị ể ạ ử ụ ức và API được tiêu chu n ẩ hóa. Bộ điều khi n SDN ph c vể ụ ụ như một lo i hạ ệ điều hành cho m ng. T t c các giao ti p giạ ấ ả ế ữa các ng d ng và thi t b phứ ụ ế ị ải đi qua bộ điều khi n. Giao th c OpenFlow k t n i ph n mể ứ ế ố ầ ềm điều khi n v i các thi t b mể ớ ế ị ạng để ph n m m máy ch có th cho các thi t b chuy n m ch biầ ề ủ ể ế ị ể ạ ết nơi g i các gói. 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 đường d n t t nhẫ ố ất cho lưu lượng ứng d ng. B i vì kụ ở ế hoạch điều khi n mể ạng được th c hi n trong ự ệ ph n mầ ềm, lưu lượng m ng có th ạ ể được quản lý năng động hơn và ở ứ m c chi tiết hơn nhiều. 2: Nox/Pox Controller

2.1: Nox Controller

NOX là bộ điều khi n ể OpenFlow đầu tiên, được phát tri n b i Nicira và tr thành m t ngu n m ể ở ở ộ ồ ở vào 2008. Sau đó được mở rộng và hỗ trợ bởi ON, hoạt động phòng thí nghiệm tại Đại học Stanford, UC Berkeley và ICSI.

Những người xây dựng khung SDN đã tập hợp vào năm 2011 và thành lập Trung tâm nghiên cứu mạng mở (ONRC) và ON. Lab (Open Network Lab) để ậ t p trung, phát tri n, tri n khai và hể ể ỗ trợ các công c và n n t ng SDN ngu n m . Phiên b n NOX có thụ ề ả ồ ở ả ể được định nghĩa là: 1) NOX Classic: Đây là phiên bản đã có sẵn theo GPL từ năm 2009. 2) NOX: "NOX mới." Trước đây là

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

3

một n n tề ảng điều khi n m ng d a trên C ++ và hể ạ ự ỗ trợ ngơn ng l p trình Python. NOX m i chữ ậ ớ ỉ hỗ trợ C ++ v i ít ng d ng mớ ứ ụ ạng hơn, nhưng nó nhanh hơn nhiều và cung cấp cơ sở mã tốt hơn so v i NOX-Classic. ớ

NOX v a là bừ ộ điều khi n nguyên th y v a là khung d a trên thành phể ủ ừ ự ần để phát tri n các ng ể ứ d ng SDN. Nó cung c p các mô-ụ ấ đun hỗ trợ ụ thể cho OpenFlow nhưng đã đượ c c m r ng. Lõi ở ộ NOX cung cấp các phương thức trợ giúp và API để tương tác với các thi t b chuy n m ch ế ị ể ạ OpenFlow, bao g m trình x lý k t n i và x lý s ki n. Các thành ph n b sung t n dồ ử ế ố ử ự ệ ầ ổ ậ ụng API đó có s n, bao g m theo dõi máy chẵ ồ ủ, định tuyến, c u trúc liên k t (LLDP) và giao diấ ế ện Python được tri n khai làm trình bao b c cho thành ph n API. ể ọ ầ

Hình 2: Kiến trúc c a NOX Controllerủ

NOX thường được s d ng trong nghiên c u mử ụ ứ ạng h c thuọ ật để phát tri n các ể ứng dụng SDN như nghiên c u giao th c m ng. M t tác d ng phứ ứ ạ ộ ụ ụ thực s thú v c a vi c s d ng h c thu t r ng rãi ự ị ủ ệ ử ụ ọ ậ ộ c a nó mã có sủ ẵn để mơ ph ng m t switch h c t p và m t switch tồn m ng, có th ỏ ộ ọ ậ ộ ạ ể được s d ng ử ụ làm mã khởi động cho các d án l p trình và th nghi m khác nhau. ự ậ ử ệ

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

4

Một số ứng d ng NOX ph bi n là SANE và Ethane. SANE là m t cách ti p cụ ổ ế ộ ế ận đ đạể i di n cho ệ mạng dưới dạng một hệ thống t p. Ethane là mệ ột ứng d ng nghiên c u cụ ứ ủa Đạ ọi h c Stanford v ề b o m t t p trung, toàn m ng cả ậ ậ ạ ở ấp độ ủ c a danh sách ki m soát truy c p truy n th ng. C ể ậ ề ố ả hai đều chứng minh hi u qu của SDN b ng cách giệ ả ằ ảm đáng kể các dòng mã c n thiầ ết để thực hi n các ệ chức năng này cần nhiều mã hơn đáng kể để thực hi n các chệ ức năng tương tự trong quá kh . Dứ ựa trên thành công này, các nhà nghiên cứu đã chứng minh các ng d ng giứ ụ ống như MPLS trên lõi NOX.

NOX b m t s h n chị ộ ố ạ ế, Để giải quy t nh ng vế ữ ấn đề này, m t n n t ng m i dộ ề ả ớ ựa trên NOX đã ra đời POX, t g i mình là anh chị em c a NOX. Bộ ự ọ ủ điều khi n POX là phiên b n Python thu n túy ể ả ầ của NOX. Nó được biết đến như một bộ điều khi n dòng ch y m , mã ngu n m , chung, ể ả ở ồ ở được vi t bế ằng python. Đó là đổi mới để ả c i thi n hi u su t c a Python NOX g c ệ ệ ấ ủ ố

2.2: Pox Controller 2.2.1: Gi i thi u chung <b>ớệ</b>

POX là phiên b n mả ới hơn, dựa trên Python c a NOX (hoủ ặc NOX trong Python). Ý tưởng đằng sau s phát tri n cự ể ủa nó là đưa NOX trở lại ngu n gồ ốc C ++ c a nó và phát tri n m t n n t ng dủ ể ộ ề ả ựa trên Python riêng bi t (Python 2.7). Nó có API SDN c p cao bao gệ ấ ồm biểu đồ cấu trúc liên k t có ế thể truy v n và h ợ ảo hóa. ấ ỗtr

Những ưu điểm của POX:

POX có giao di n Pythonic OpenFlow ệ

POX có các thành ph n m u có th tái s dầ ẫ ể ử ụng để lựa chọn đường dẫn, khám phá cấu trúc liên k t ế

POX chạy ở ấ ứ đâu và có thể đi kèm với th i gian ch y PyPy không c b t c ờ ạ ần cài đặt để triển khai d dàng ễ

POX đặc biệt nhắm mục tiêu Linux, Mac OS và Windows POX h ỗ trợ các công c GUI và tr c quan hóa giụ ự ống như NOX POX hoạt động t t so v i các ng dố ớ ứ ụng NOX được vi t b ng Python ế ằ

Cả NOX và POX hiện đang giao tiếp với các thi t b chuy n m ch OpenFlow v1.0 và bao g m h ế ị ể ạ ồ ỗ trợ c bi t cho Open vSwitch. đặ ệ

Khơng có GUI chính th c cho POX, m c dù các d án c a bên th ba, ch ng hứ ặ ự ủ ứ ẳ ạn như POXDesk1, tồn tại. Đặc bi t, POXDesk cung c p chệ ấ ức năng cơ bản, ch ng hẳ ạn như trực quan hóa các b ng ả luồng, các s kiự ện được ghi l i và c u trúc liên k t m ng. Giao ti p gi a POXDesk và lõi c a POX ạ ấ ế ạ ế ữ ủ sử d ng API REpresentational State Transfer (REST) có s n vụ ẵ ới b ộ điều khi n ể

2.2.2: Kh i ch y pox <b>ởạ</b>

“pox.py” khởi động POX. Nó lấy một danh sách các tên thành phần trên dòng lệnh, định vị các thành ph n, gầ ọi hàm “launch()” của chúng (n u nó t n tế ồ ại), và sau đó chuyển sang ng thái "up". trạ N u chế ạy “./pox.py”, nó sẽ cố gắng tìm một trình thơng d ch Python 3 thích hị ợp. Đặc bi t, n u có ệ ế một bản sao của PyPy trong thư mục POX chính, nó s s d ng bẽ ử ụ ản sao đó (để tăng hiệu su t tiấ ềm năng lớn). N u khơng, nó s tìm ki m nhế ẽ ế ững th g i là python3 và quay tr l i python. T t nhiên, ứ ọ ở ạ ấ

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

5

cũng có thể gọi trình thơng dịch Python mong muốn theo cách thủ cơng (ví dụ: python3 pox.py). Dịng l nh POX tùy ch n bệ ọ ắt đầu v i các tùy ch n riêng c a POX. Ti p theo là tên c a m t thành ớ ọ ủ ế ủ ộ ph n POX, có thầ ể được theo sau b i các tùy ch n cho thành phở ọ ần đó. Điều này có thể được theo sau b i các thành ph n khác và các tùy ch n c a chúng ở ầ ọ ủ

2.2.3: Các thành ph n c a pox <b>ầủ</b>

Các thành ph n POX vầ ề cơ bản là các mô-đun Python với một vài quy ước dành riêng cho POX. Chúng được tìm kiếm ở mọi nơi mà Python thường nhìn, c ng vộ ới các thư mục pox và ext. Do đó, có th ể làm như sau:

./pox.py forwarding.l2_learning

Có th chuyể ển các tùy ch n cho các thành ph n b ng cách chỉ nh các tùy ch n sau tên thành ọ ầ ằ đị ọ phần. Chúng được chuy n n hàm launch() c a mô-ể đế ủ đun tương ứng. Ví d : n u mu n ch y POX ụ ế ố ạ dưới d ng b ạ ộ điều khiển OpenFlow và địa ch ỉ điều khi n ho c cể ặ ổng mà nó s d ng, có th chuyử ụ ể ển chúng dưới dạng tùy chọn cho thành phần openflow.01:

./pox.py openflow.of_01 address=10.1.1.1 port=6634 --

Làm vi c v i POX: The POX Core objệ ớ ect

POX có một đối tượng gọi là "core", đóng vai trị là điểm trung tâm cho phần lớn API của POX. M t sộ ố chức năng mà nó cung cấp ch là các trình bao b c thu n ti n xung quanh ỉ ọ ậ ệ các chức năng khác và một số chức năng là duy nhất. Tuy nhiên, m t trong nhộ ững mục đích chính khác của đối tượng cốt lõi là cung cấp điểm hẹn giữa các thành phần. Thông thường, thay vì s d ng các câu lử ụ ệnh import để ộ m t thành ph n nh p m t thành ph n khác ầ ậ ộ ầ để chúng có th tương tác, các thành phần thay vào đó sẽể tự "đăng ký" trên đối tượng c t ố lõi và các thành ph n khác s truy vầ ẽ ấn đối tượng cốt lõi. M t l i th lộ ợ ế ớn cho phương pháp này là s ph thu c gi a các thành phự ụ ộ ữ ần khơng được mã hóa c ng và các thành ph n khác ứ ầ nhau hi n th cùng m t giao di n có th d dàng thay th cho nhau. ể ị ộ ệ ể ễ ế Nghĩ theo một cách khác, điều này cung cấp một giải pháp thay thế cho không gian tên mô-đun thông thường c a Python, có ph n d s p x p lủ ầ ễ ắ ế ại hơn. Nhiều mô-đun trong POX sẽ muốn truy c p vào ậ đối tượng cốt lõi. Theo quy ước, điều này đang thực hi n b ng cách nhệ ằ ập đối tượng c t lõi ố như sau:

“from pox.core import core”

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

6

Làm vi c v i Addresses: pox.lib.addresses ệ ớ

Địa chỉ IPv4, IPv6 và Ethernet trong POX được đại di n bởi các lớp IPAddr, IPAddr6 và ệ EthAddr c a pox.lib.addresses. Trong m t sủ ộ ố trường hợp, các định dạng địa ch khác có ỉ thể hoạt động (ví dụ: địa chỉ IP ch m-ấ quad), nhưng việc sử ụ d ng các lớp địa chỉ ph i ln ả hoạt động. Ví d : khi làm vi c vụ ệ ới địa chỉ IP:

“from pox.lib.addresses import IPAddr, IPAddr6, EthAddr ip = IPAddr("192.168.1.1")

print str(ip) # Prints "192.168.1.1"

print ip.toUnsignedN() # Convert to network-order unsigned integer 16885952 --print ip.raw # Returns a length-four bytes object (a four byte string, more or less) ip = IPAddr(16885952,networkOrder=True)

print str(ip) # Also prints "192.168.1.1" !” Làm vi c v i packets: pox.lib.packet ệ ớ

Rất nhi u ng dề ứ ụng trong POX tương tác với các gói (ví d có thụ: ể muốn xây d ng các ự gói và g i chúng ra kh switch hoử ỏi ặc có th nh n chúng t m t switch thông qua b n tin ể ậ ừ ộ ả OpenFlow: mono: 'ofp_packet_in'). Để ạo điề t u kiện thuận lợi cho việc này, POX có một thư viện để phân tích cú pháp và xây dựng các gói. Thư viện có h ỗ trợ cho m t s ộ ố loại gói khác nhau. H u h t các gói tin có m t s ầ ế ộ ố loại tiêu đề và m t s ộ ố loại t i tr ng. M t payload ả ọ ộ thường là m t lo i gói tin khác. Ví dụ: trong POX, người ta thường hoộ ạ ạt động v i các gói ớ :mono:'ethernet' thường chứa các gói :mono:'ipv4' (thường chứa các gói :mono:'tcp'...). T t c các lấ ả ớp gói trong POX được tìm thấy trong pox / lib / packet. Theo quy ước, nhập thư viện gói POX dưới dạng:

import pox.lib.packet as pkt Làm vi c v i sockets: ioworker ệ ớ

pox.lib.ioworker ch a API cứ ấp cao để làm vi c v i các ệ ớ ổ cắm không đồng bộ trong POX. G i là fire-and-forget, dử ữ liệu nhận được được đệm và callback được kích ho t khi có s n m t s ạ ẵ ộ ố

Làm vi c v i pcap/libpcap: pxpcap ệ ớ

Thư viện pcap cho Python cung cấp tất cả những điều sau: được duy trì hỗ trợ Windows, Linux và MacOS h ỗ trợ c ả chụp và tiêm có th ể chụp ở m c h p lý, cùng ứ ợ v i viớ ệc đáp ứng các m c tiêu này, pxpcap hi n th các chụ ể ị ức năng liên quan đến pcap và pcap khác, ch ng hẳ ạn như liệt kê giao di n mệ ạng và đọc / ghi các t p dệ ấu vết tcpdump / pcap. Thư mục pxpcap cũng chứa m t vài thành ph n POX ti n ích ộ ầ ệ nh có thỏ ể dùng làm ví dụ n u ế muốn vi t mã c a riêng mình b ng pxpcap. Rõ ràng ế ủ ằ nh t trong s này có thấ ố ể được g i là "pxshark" - nó n m bọ ắ ắt lưu lượng truy c p t ậ ừ một giao di n, m x nó bệ ổ ẻ ằng thư viện gói POX và k t xu t k t qu . Có thế ấ ế ả ể chạy điều này như sau: ./pox.py pox.lib.pxpcap interface=eth0

--Để tìm hi u thêm về các API c a POX có th truy c p: ủ ể ậ doc/html/#pox-apis

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

7

2.2.5: Openflow in POX

Một trong nh ng mữ ục đích chính của vi c s dệ ử ụng POX là để phát tri n các ng dể ứ ụng điều khiển OpenFlow - nghĩa là nơi POX hoạt động như một bộ điều khi n cho bể ộ ch ểuy n m ch OpenFlow ạ (ho c, theo thu t ng thích hặ ậ ữ ợp hơn, đường d n d u OpenFlow). ẫ ữ liệ

Vì POX thường được sử dụng với OpenFlow, nên có một cơ chế tải nhu cầu đặc biệt, thường sẽ phát hi n khi ệ đang cố gắng s d ng OpenFlow và t i lên các thành ph n liên ử ụ ả ầ quan đến OpenFlow v i các giá tr mớ ị ặc định.. N u demand loading không phát hi n ra rế ệ ằng đang cố ắ g ng s d ng nó, ử ụ có th tinh ch nh thành ph n cể ỉ ầ ủa mình để làm rõ r ng (ch c n truy c p core.openflow trong hàm ằ ỉ ầ ậ kh i ch y cở ạ ủa ẽ làm điều đó) hoặ s c ch c n ch nh thành ph n "openflow" u dòng l nh. ỉ ầ ỉ đị ầ ở đầ ệ Một ph n chính cầ ủa API POX OpenFlow là đối tượng "nexus" OpenFlow. Thơng thường, có một đối tượng duy nhất như vậy được đăng ký là core.openflow như một phần của quá trình tải nhu cầu được đề ậ ở c p trên.

Thành ph n POX th c s giao ti p v i các thi t b chuy n m ch OpenFlow là openflow.of_01 (01 ầ ự ự ế ớ ế ị ể ạ đề cập đến thự ếc t là thành ph n này nói giao thức dây OpenFlow 0x01). M t l n nầ ộ ầ ữa, tính năng demand-loading thường s khi n thành phẽ ế ần này được khởi t o v i các giá tr mạ ớ ị ặc định (nghe trên c ng 6633). Tuy nhiên, có th g i nó t ổ ể ọ ự động thay vào đó để thay đổi các tùy ch n ho c n u muọ ặ ế ốn chạy nó nhi u l n (ví dề ầ ụ: để nghe trên TCP và SSL đơn giản hoặc trên nhiều cổng).

Một s ví d v openflow trong pox: ố ụ ề DPIPS in POX

Đặ ảc t OpenFlow chỉ nh r ng mđị ằ ỗi đường dẫn d li u (switchesữ ệ ) có ID đường dẫn d li u hoặc ữ ệ DPID duy nh t, là giá trấ ị 64 bit và được truy n t switch n bề ừ đế ộ điều khi n trong b ng thơng báo ể ằ ofp_switch_features. Nó đưa ra rằng 48 trong số các bit đó được dự định là một địa chỉ Ethernet và 16 bit được "xác định bởi người tri n khai" (trong th c tể ự ế, chúng thường ch b ng khơng). Vì ỉ ằ b n thân b chuy n m ch OpenFlow (ch yả ộ ể ạ ủ ếu) là "minh b ch" với m ng, nên khơng hồn tồn rõ ạ ạ ràng chính xác địa chỉ Ethernet nào được cho là nằm trong các bit đó, nhưng chúng ta có thể giả định đó là một cái gì đó dành riêng cho switch. Vì các đối tượng Kết nối OpenFlow (được thảo luận bên dưới) được gắn với một switch cụ ểth, DPID có sẵn trên đối tượng Kết n i b ng thu c ố ằ ộ tính .dpid. Ngồi ra, địa chỉ Ethernet tương ứng có sẵn bằng cách sử dụng thuộc tính .eth_addr. POX định nghĩa một định dạng DPID cụ thể, được triển khai trong pox.lib.util.dpid_to_str(). Khi được truyền DPID trong trường hợp ph biổ ến là 16 bit "do người triển khai xác định" là 0, k t qu ế ả là m t chu i trông r t giộ ỗ ấ ống địa ch Ethernet ngo i tr thay vì d u hai chỉ ạ ừ ấ ấm phân tách byte (như POX luôn làm cho địa chỉ Ethernet), dấu gạch ngang được sử dụng thay thế.

Giao ti p v i Datapath (Switch) ế ớ

Khi b n tin n t switch, chúng hi n thả đế ừ ể ị trong POX dướ ại d ng s ki n có th vi t trình x lý s ự ệ ể ế ử ự ki n - nói chung có m t lo i s kiệ ộ ạ ự ện tương ứng v i t ng lo bớ ừ ại ản tin mà switch có th g i. ể ử Về cơ bản, có hai cách có th giao ti p vể ế ới đường d n dẫ ữ liệu trong POX: thông qua Connection, K nết ối cho đường d n dẫ ữ liệu cụ thể đó hoặc thơng qua OpenFlow Nexus đang quản lý đường

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

8

d n dẫ ữ liệu đó. Có một đối tượng K t n i cho mế ố ỗi đường d n dẫ ữ liệu được k t n i v i POX và ế ố ớ thường có m t OpenFlow Nexus qu n lý t t c các k t n i. Trong cộ ả ấ ả ế ố ấu hình bình thường, có một mối quan h OpenFlow duy nh t có sệ ấ ẵn dưới d ng core.openflow. Có r t nhi u s ạ ấ ề ự chồng chéo giữa K t n i và Nexus. M t trong hai có th ế ố ộ ể được s dử ụng để gửi b n tin ả đến một switch và h u h t các ầ ế sự kiện được nêu ra trên c ả hai. Đơi khi nó thuậ tiện hơn để sử dụng cái này hay cái kia. n

Openflow Event: Respond to switch

H u h t các s kiầ ế ự ện liên quan đến OpenFlow được nêu ra để ph n h i tr c ti p v i m b n tin ả ồ ự ế ớ ột ả nhận được t mừ ột switch. Theo hướng d n chung, các s kiẫ ự ện liên quan đến OpenFlow có ba thuộc tính sau:

attribute Type description

connection Connection <sup>Connection to the relevant switch (e.g., which sent </sup><sub>message this event corresponds to). </sub>

Dpid Long <sup>Datapath ID of relevant switch (use dpid_to_str() to form</sup> it for display).

O fp <sup>ofp_header </sup><sub>subclass </sub> <sup>OpenFlow message object that caused this ev</sup><sub>See </sub><sub>OpenFlow Messages</sub><sub> for info on these objects </sub>

B n tin openflow ả

B n tin OpenFlow là cách các thi t b chuy n m ch OpenFlow giao ti p v i bả ế ị ể ạ ế ớ ộ điều khi n. Các ể b n tin ả được định nghĩa trong Đặc tả OpenFlow. Có nhiều phiên bản của đặc điểm kỹ thu t; POX ậ hi n h trệ ỗ ợ OpenFlow phiên b n 1.0.0 (phiên b n giao th c dây 0x01). POX ch a các l p và h ng ả ả ứ ứ ớ ằ số tương ứng với các phần tử của giao thức OpenFlow và chúng được định nghĩa trong tệp pox / openflow / libopenflow_01.py (01 đề ập đế c n phiên bản giao thức dây). Đối với hầu h t các ph n, ế ầ các tên giống như trong đặc điểm k thu t. Trong mỹ ậ ột vài trường h p, POX có nh ng cái tên mà ợ ữ chúng tơi nghĩ là tốt hơn. Ngồi ra, POX định nghĩa một số lớp không tương ứng với các cấu trúc c ụ thể trong đặc t ả (đặc t không mô t các c u trúc ch là mả ả ấ ỉ ột tiêu đề OpenFlow đơn giản ch ỉ được phân bi t b i thu c tính lo i tin nh n - POX làm vi c). ệ ở ộ ạ ắ ệ

Match Structure

OpenFlow xác định cấu trúc đối sánh - ofp_match - cho phép xác định m t t p hộ ậ ợp các tiêu đề cho các gói để kh p v i nhau. có th xây d ng k t qu phù h p t ớ ớ ể ự ế ả ợ ừ đầu ho c s dặ ử ụng phương thức xuất để ạ t o m t k t hợp d a trên gói hi n có. C u trúc trộ ế ự ệ ấ ận đấu được xác định trong pox / openflow / libopenflow_01.py trong l p ofp_match. Các thu c tính c a nó có ngu n g c t các thành viên ớ ộ ủ ồ ố ừ được liệt kê trong đặc tả OpenFlow:

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

9

Attribute Meaning

in_port Switch port number the packet arrived on dl_src Ethernet source address

dl_dst Ethernet destination address dl_vlan VLAN ID

dl_vlan_pcp VLAN priority

dl_type Ethertype / length (e.g. 0x0800 = IPv4) nw_tos IP TOS/DS bits

nw_proto IP protocol (e.g., 6 = TCP) or lower 8 bits of ARP opco nw_src IP source address

nw_dst IP destination address tp_src TCP/UDP source port tp_dst TCP/UDP destination port

Openflow Action

Hành động OpenFlow được áp dụng cho các gói phù hợp với quy tắc được cài đặ ại đườt t ng dẫn d ữ liệu. Các đoạn mã được tìm thấy ở đây có thể được tìm th y trong libopenflow_01.py trong pox ấ / openflow.

Để có th có nhi u thơng tin v POX ho c đầy đủể ề ề ặ các thành phần, tính năng và các câu lệnh của POX, truy c p: ậ

2.2.6: M t s hình nh ch y POX th c t <b>ộ ốảạự ế</b>

Ta t o 1 topology gạ ồm 1 controller , 2 switches và 4 hosts. (như hình bên dưới)

Đầu tiên, ping các host với nhau ( khi chưa kích hoạt controller) sử ụ d ng lệnh pingall. Ta thấy t ỉ lệ các packets drop là 100%

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

10

Sau đó ta thử bắt các gói tin bằng Wireshark, ta thấy wireshark khơng bắt được gói tin nào. Tiếp theo, Ta ping các host với nhau s d ng lử ụ ệnh pingall nhưng lần này đã kích hoạt Pox controller b ng lằ ệnh “python3 pox.py forwarding.l2_learning” và s dử ụng Wireshark để ắ b t các gói tin.

</div>

×