- Sử dụng thuật toán Spanning Tree STP để tránh sự xuất hiện của vòng lặp xảy ra trong hệ thống, các luồng traffic sẽ được đi đến nơi mong muốn như đã được cấu hình từ trước... 1.2 Thiế
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
- -BÁO CÁO CÁ NHÂN
MẠNG THÔNG TIN
Đề tài: Mạng định nghĩa bằng phần mềm - SDN
Giảng viên hướng dẫn: Thầy Nguyễn Tiến Dũng
Nhóm sinh viên thực hiện: Nhóm 7
Trang 2Hà Nội, 12-2021
MỤC LỤC
DANH MỤC HÌNH VẼ 1
CHƯƠNG 1 CÀI ĐẶT MÔI TRƯỜNG VÀ CẤU HÌNH MẠNG SDN 2
1.1 Mô hình mạng 2
1.2 Thiết lập mạng 2
1.3 Cấu hình cấu trúc mạng SDN sử dụng giao thức Spanning Tree Protocol 4
1.4 Tìm hiểu mã nguồn 5
1.4.1 simple_switch_13.py 5
1.4.2 simple_switch_stp_13.py 7
KẾT LUẬN 8
TÀI LIỆU THAM KHẢO 9
Trang 3DANH MỤC HÌNH VẼ
Hình 1 Mô hình mạng SDN 2
Hình 2 Tạo một mạng Mininet topology sử dụng Python 3
Hình 3 Thiết lập mạng SDN trên terminal 3
Hình 4 Kết quả của lệnh pingall trước khi thêm Flow 4
Hình 5 Minh họa một vòng lặp trong mạng SDN 4
Hình 6 Kết quả lệnh pingall sau khi thêm Flow 5
Hình 7 Lệnh khởi tạo RyuApp 6
Hình 8 Hàm add_flow 6
Hình 9 Hàm switch_features_handler 6
Hình 10 Hàm _packet_in_handler 7
Hình 11 Hàm delete_flow 7
Hình 12 Hàm _topology_change_handler 7
Hình 13 Hàm _port_state_change_handler 8
Trang 4CHƯƠNG 1 CÀI ĐẶT MÔI TRƯỜNG VÀ CẤU HÌNH MẠNG
SDN
1.1 Mô hình mạng
Mạng SDN bao gồm 1 bộ điều khiển ,3 switch và 2 host
Hình 1 Mô hình mạng SDN
- Để các Host có thể kết nối được với nhau chúng ta cần AddFlow vào các Flow Table Khi đó giao thức OpenFlow sẽ cho phép truy cập trực tiếp và điều khiển các thiết bị mạng trong hệ thống, các quyết định về các luồng traffic sẽ được quyết định tập trung tại OpenFlow Controller
- Sử dụng Ryu Controller để cấu hình cho hệ thống
- Sử dụng thuật toán Spanning Tree (STP) để tránh sự xuất hiện của vòng lặp
xảy ra trong hệ thống, các luồng traffic sẽ được đi đến nơi mong muốn như đã được cấu hình từ trước
Trang 51.2 Thiết lập mạng
Sử dụng VM Virtual Box để làm máy ảo chạy nền tảng Hệ điều hành Ubuntu
- Cài đặt OpenvSwitch: $ sudo apt install openvswitch-switch
- Cài đặt mininet: $ sudo apt install mininet
- Cài đặt Ryu Controller: $ pip3 install ryu
Tạo ra một mạng Topo mininet bao gồm 3 switch (S1,S2,S3) và 2 host
(h1,h2) Trong đó các switch S1,S2,S3 được liên kết với nhau tạo thành vòng lặp Các
host h1 liên kết với với S1; h2 liên kết với S2 Sử dụng ngôn ngữ lập trình python
Hình 2 Tạo một mạng Mininet topology sử dụng Python
- $ sudo mn custom topo-3s-2h.py topo mytopo controller remote để
tạo mạng SDN
Trang 6Hình 3 Thiết lập mạng SDN trên terminal
- Sử dụng lệnh pingall để kiểm tra trạng thái của các liên kết
Hình 4 Kết quả của lệnh pingall trước khi thêm Flow
Do ban đầu mạng có FlowTable trống, nên kết quả 100% dropped, chưa có
kết nối giữa các host với nhau
1.3 Cấu hình cấu trúc mạng SDN sử dụng giao thức Spanning Tree Protocol
Trong phần này, chúng ta sẽ cấu hình cấu trúc mạng bằng Ryu Controller.
Spanning Tree Protocol (STP) là một giao thức mạng được thiết kế để ngăn
chặn các vòng lặp tại layer 2, cho phép các bridge truyền thông với nhau để phát hiện vòng lặp vật lý trong mạng Vòng lặp xảy ra trong mạng với nhiều nguyên nhân Hầu hết các nguyên nhân thông thường là kết quả của việc cố gắng tính toán để cung cấp khả năng dự phòng, ví dụ một link hoặc switch bị hỏng, các link hoặc switch khác vẫn tiếp tục hoạt động
Trang 7Hình 5 Minh họa một vòng lặp trong mạng SDN
STP chặn một số cổng trên các thiết bị chuyển mạch có liên kết dự phòng để ngăn chặn các cơn bão Broadcast và đảm bảo cấu trúc liên kết không có vòng lặp
Source file:
https://github.com/faucetsdn/ryu/blob/master/ryu/app/simple_switch_13.py https://github.com/Ehsan70/RyuApps/blob/master/simple_switch_stp_13.py
- Thêm Flow vào các FlowTable, ta sử dụng lệnh:
$ ryu-manager ryu.app.simple_switch_13
- Do mô hình mạng SDN đã tạo có cấu trúc vòng lặp, vì vậy ta cần sử dụng
thuật toán Spanning Tree (STP) trong Ryu để cấu hình mạng này
$ ryu-manager ryu.app.simple_switch_stp_13
- Sử dụng lệnh pingall để kiểm tra trạng thái của các liên kết
Hình 6 Kết quả lệnh pingall sau khi thêm Flow
Kết quả: 0% dropped
Trang 8Theo kết quả đầu ra trên, ta có thể xác nhận cấu hình mạng SDN đã thiết lập không bị lặp, các cấu trúc liên kết đã được thực thi tốt
1.4 Tìm hiểu mã nguồn
1.4.1 simple_switch_13.py
- Khởi tạo Ryu app manager, đồng thời định nghĩa cho đối tượng một tập các thuộc tính
Hình 7 Lệnh khởi tạo RyuApp
- Hàm Add_flow: dùng để thêm các Flow vào Flow Table
Hình 8 Hàm add_flow
- switch_features_handler: Xử lý các thuộc tính của các Switch
Hình 9 Hàm switch_features_handler
Trang 9- _packet_in_handler: Xử lý các gói tin đến
Hình 10 Hàm _packet_in_handler
1.4.2 simple_switch_stp_13.py
- delete_flow: xóa các flow ra khỏi Flow table
Hình 11 Hàm delete_flow
- _topology_change_handler: Xử lý các thay đổi của mạng topo
Trang 10Hình 12 Hàm _topology_change_handler
- _port_state_change_handler: Xử lý thay đổi trạng thái của các cổng
Hình 13 Hàm _port_state_change_handler
Trang 11KẾT LUẬN
1 Những kết quả đã đạt được:
- Có những kiến thức tổng quan về mạng SDN, Open vSwitch và Mininet
- Đã biết cách thiết lập và triển khai một mô hình mạng SDN Mininet trên Ubuntu
- Có những kiến thức cơ bản về giao thức STP thông qua việc sử dụng Ryu Controller
2 Những kết quả chưa đạt được:
- Do máy ảo VM hoạt động không ổn định nên vẫn còn những câu lệnh chưa thực hiện được
- Một vài đoạn mã nguồn Python vẫn chưa hiểu rõ chi tiết cách hoạt động
- Mới chỉ tạo mô hình theo mẫu có sẵn, chưa tự tạo mô hình riêng
Với những kết quả chưa thực hiện được, em sẽ cố gắng hoàn thiện trong tuần học tiếp theo
Trang 12TÀI LIỆU THAM KHẢO
[1]https://www.codeproject.com/tips/1063072/build-your-own-sdn-network
[2]https://osrg.github.io/ryu-book/en/html/spanning_tree.html
[3]https://trogiupnhanh.com/stp-la-gi-cong-dung-cua-spanning-tree-protocol/
[4] https://anninhmang.net/tu-hoc-quan-tri-mang/tu-hoc-ccna-security-bai-1-giao-thuc-spanning-tree-protocol/
[5] https://github.com/Ehsan70/RyuApps/blob/master/simple_switch_stp_13.py