Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 60 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
60
Dung lượng
2,41 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ _ Hoàng Tuấn Hùng CÂNBẰNGTẢITRONG MẠNG TRUNGTÂMDỮ LIỆU SDNSỬDỤNGOPENDAYLIGHTCONTROLLER KHĨA LUẬN TỚT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ kỹ thuật điện tử, truyền thông HÀ NỘI – 2019 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CƠNG NGHỆ Hồng Tuấn Hùng CÂNBẰNGTẢITRONG MẠNG TRUNGTÂMDỮ LIỆU SDNSỬDỤNGOPENDAYLIGHTCONTROLLER KHĨA LUẬN TỚT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ kỹ thuật điện tử, truyền thông Cán hướng dẫn: PGS TS Nguyễn Nam Hồng HÀ NỢI – 2019 LỜI CAM ĐOAN Trong trình làm đồ án đọc tham khảo nhiều tàiliệu khác từ giáo trình, sách tham khảo nhiều báo uy tín đăng tải ngồi nước Tơi xin cam đoan tơi viết hồn tồn thống, chân thực Những kết đo đạc mô đạt khóa luận khơng chép từ tàiliệu hình thức Những kết tơi nghiên cứu, tích lũy q trình làm khóa luận Tơi xin hồn tồn chịu trách nhiệm có dấu hiệu chép kết từ tàiliệu khác Hà Nội, ngày … tháng … năm 2019 Sinh viên Hoàng Tuấn Hùng i LỜI CẢM ƠN Tôi muốn dành lời cảm ơn đặc biệt đến người thầy giám sát mình, PGS.TS Nguyễn Nam Hồng chia sẻ kiến thức chun mơn thầy lĩnh vực giúp đỡ, hỗ trợ liên tục thầy trình thực khóa luận Cảm ơn thầy, khơng giúp đỡ mà tin tưởng hướng dẫn tận tình thầy trình sửa đổi, hồn thiện khóa luận Tơi muốn bày tỏ kính trọng lời cảm ơn với Tiến sĩ Lâm Sinh Công, thông qua ý tưởng, đề xuất lời khuyên thầy cải thiện nghiên cứu Tôi xin chân thành cảm ơn tất thầy cô, bạn bè Trường Đại học Công nghệ nói chung khoa Điện tử - Viễn thơng nói riêng, góp phần làm cho khoảng thời gian học tập giảng đường thực khóa luận trở thành trải nghiệm vô đáng nhớ thú vị Cuối cùng, cảm ơn gia đình tơi, người khơng ngừng ủng hộ khuyến khích tơi suốt q trình học tập Tơi xin chân thành cảm ơn! Hà Nội, ngày … tháng … năm 2019 Sinh viên Hoàng Tuấn Hùng ii MỤC LỤC LỜI CAM ĐOAN i LỜI CẢM ƠN ii DANH MỤC BẢNG vi DANH MỤC HÌNH ẢNH vii DANH MỤC TỪ VIẾT TẮT viii TÓM TẮT 1 CHƯƠNG GIỚI THIỆU 1.1 Lời mở đầu 1.2 Vấn đề đặt 1.3 Đề xuất giải pháp 1.4 Phương pháp luận 1.5 Mục đích khóa luận 1.6 Outlines CHƯƠNG TỔNG QUAN VỀ SDN VÀ LOAD BALANCING 2.1 Giới thiệu 2.2 Hạn chế mạng truyền thống 2.3 Software-Defined Networking (SDN) 2.3.1 Kiến trúc SDN 2.3.2 Lợi công nghệ SDN 2.3.3 Các ứng dụngSDN 2.4 Giao thức OpenFlow 2.4.1 Lợi ích SDN sở OpenFlow 10 2.4.2 Ứng dụng OpenFlow 11 2.5 Cântảitrọngmạng (Network load balancing) 12 2.5.1 Lập lịch Round Robin 12 2.5.2 Cách tiếp cận thời gian phụ thuộc 12 2.5.3 Phương pháp sửdụng thuật toán băm (Hashing) 12 iii 2.5.4 Định tuyến lưu lượng theo tham số liên quan đến QoS 13 2.6 Kết nối liên mạng 13 2.6.1 Mơ hình liên kết mạng fat-tree 13 2.7 Thuật toán Dijkstra 14 2.8 Thuật toán cântải động mạngSDN 15 2.8.1 Flow 15 2.8.2 Flows Collection 16 2.8.3 Path 16 2.8.4 Paths Collection 16 2.9 Các nghiên cứu khoa học liên quan 17 CHƯƠNG 18 PHƯƠNG PHÁP LUẬN 18 3.1 Giới thiệu 18 3.2 Mơ tả thuật tốn 18 3.3 Tiến trình thực cài đặt thử nghiệm 19 3.4 Công cụ phần mềm 20 3.4.1 Mininet 20 3.4.2 Dự án OpenDaylight (ODL) 21 3.4.3 iPerf 21 3.4.4 Ngơn ngữ lập trình: Python 22 CHƯƠNG 23 KẾT QUẢ THỬ NGHIỆM VÀ ĐÁNH GIÁ HIỆU SUẤT 23 4.1 Giới thiệu 23 4.2 Network Topology 23 4.3 Các bước mô 23 4.4 Kịch test 27 4.4.1 Kịch 1: Đo lường hiệu suất mạng thực cântải lớp Aggregation 27 4.4.2 Kịch 2: Đo lường hiệu suất mạng thực cântải có tham gia lớp Core 32 iv 4.4.3 Nhận xét 36 KẾT LUẬN VÀ ĐỊNH HƯỚNG NGHIÊN CỨU TRONG TƯƠNG LAI 37 TÀI LIỆU THAM KHẢO: 38 PHỤ LỤC 40 v DANH MỤC BẢNGBảng 1: Các tham số điều khiển OpenDaylight: 24 BảngBảng tổng hợp kết kịch 31 BảngBảng tổng hợp kết kịch 34 vi DANH MỤC HÌNH ẢNH Chương 2: Hình 2.1 Mơ hình mạngSDN Hình 2.2 Kiến trúc SDN Hình 2.3 Cấu trúc thiết bị sửdụng OpenFlow 10 Hình 2.4 Mơ hình mạng fat-tree 14 Chương 3: Hình 3.1 Flow Chart thuật toán cântải 18 Hình 3.2 Cài đặt thử nghiệm 20 Hình 3.3 Kiến trúc OpenDaylight 21 Hình 3.4 Cơng cụ đo băng thông iPert 22 Chương 4: Hình 4.1 Mơ hình mạng cho thử nghiệm 23 Hình 4.2 Chạy chương trình dựng Topo mạng 24 Hình 4.3 Giao diện hiển thị ODL controller 25 Hình 4.4 Thống kê tham số node 25 Hình 4.5 API request 26 Hình 4.6 Chạy chương trình cântải 26 Hình 4.7 Đường gói trước cântải 27 Hình 4.8 Đường gói sau chạy chương trình cântải 29 Hình 4.9 Ping từ h1 tới h3 trước cântải 29 Hình 4.10 Ping từ h1 tới h4 trước cântải 30 Hình 4.11 Ping từ h1 tới h4 sau cântải 30 Hình 4.12 So sánh kết thông lượng kịch 31 Hình 4.13 So sánh tham số QoS kịch 32 Hình 4.14 Sơ đồ minh họa cho kịch 32 Hình 4.15 Ping từ h1 tới h7 trước cântải 33 Hình 4.16 Ping từ h1 tới h8 trước cântải 33 Hình 4.17 Ping từ h1 tới h8 sau cântải 34 Hình 4.18 So sánh kết thông lượng kịch 35 Hình 4.19 So sánh tham số QoS kịch 35 vii DANH MỤC TỪ VIẾT TẮT ACL Access Control List Danh sách kiểm soát truy cập API Application Program Interface Giao diện lập trình ứng dụng CAPEX Capital Expenditure CPU Central Processing Unit Chi phí đầu tư Khối xử lý trungtâm FSM HPC Finite State Machine High-Performance Computing Máy trạng thái hữu hạn Điện toán hiệu suất cao ICMP IP Internet Control Message Protocol Internet Protocol Giao thức tin kiểm soát Internet Giao thực Internet IPv4 IPv6 Internet Protocol version Internet Protocol version Giao thức Internet version Giao thức Internet version Giao thức định tuyến nội IGP IT LAN Intermediate System to Intermediate System Information Technology Local Area Network LLB Link Load Balancing Cântải liên kết MAC MPLS NE ODL Media Access Control Multi-Protocol Label Switching Network Elements OpenDaylight Kiểm soát phương tiện truy cập Chuyển mạch nhãn đa giao thức Thành phần mạng bên Dự án mã nguồn mở OpenDaylight ONF OPEX OS OSPF Open Networking Foundation Operational Expenditure Operating System Open Shortest Path First Tổ chức mở ONF Chi phí vận hành Hệ điều hành Giao thức định tuyến đường ngắn QoE QoS SDN TCP Quality Of Experience Quality Of Service Software Defined Networking Transmission Control Protocol Chất lượng trải nghiệm Chất lượng dịch vụ Mạng điều khiển phần mềm Giao thức truyền liệu tin cậy TCP UDP User Datagram Protocol Giao thức phi kết nối UDP IS-IS Công nghệ thông tin Mạng cục viii 4.4.3 Nhận xét Chương trình cântải giúp tăng thơng lượng mạng hai kịch Nó cho thấy hiệu suất tuyệt vời thực cho phân đoạn nhỏ (lớp mơ hình fattree), mạng phát triển lớn Switch lõi tham gia định tuyến, gói jitter tăng (hiện tượng xảy lưu lượng qua nhiều Switch) Trước áp dụng thuật toán cân tải, ta quan sát lưu lượng host nguồn, host host đích Mặc dù có sẵn nhiều đường mơ hình mơ cấu trúc liên kết fat-tree, luồng lưu lượng từ chuyển mạch SW1 sang chuyển mạch SW2 sửdụng đường dẫn qua s1-eth3 thay sửdụng đường dẫn thứ hai có chi phí (s1-eth4) Do đó, vài liên kết chịu tải nặng tắc nghẽn phần lớn liên kết khả dụng chưa sửdụng mức dẫn đến tải lưu lượng khơng cân Chương trình tự động thu thập liệu thống kê liên kết từ yêu cầu API REST theo liên kết có sẵn, tốc độ truyền host chuyển mạch Nó tìm thấy đường dẫn ngắn với chi phí tải cập nhật vào bảng chuyển tiếp với quy tắc luồng Trong trình mơ phỏng, thuật tốn cântải đẩy luồng qua giao diện s1-eh4 để tới host liên kết s1-eh3 chịu mức độ tảisửdụng cao Do đó, thuật tốn cântải thay đường dẫn cũ đường dẫn thay tốt với chi phí liên kết tối thiểu chia sẻ lưu lượng đồng đường dẫn ngắn khác Kết mô cho thấy thuật tốn cântải xử lý chuyển tiếp gói tốt hơn, thuật toán cântải cho phép độ trễ thấp cách giảm thời gian khứ hồi, thông lượng cao cách tăng băng thông liên kết có sẵn gói tin thấp Khóa luận thuật toán cântải động đề xuất nâng cao chất lượng trải nghiệm người dùng cuối cho phép sửdụng tối ưu sở hạ tầng bên 36 KẾT LUẬN VÀ ĐỊNH HƯỚNG NGHIÊN CỨU TRONG TƯƠNG LAI Mạngtrungtâmliệu (DCN) mạng trục dịch vụ Internet Giờ đây, với xuất tảng SDN công nghệ NFV đơn giản hóa đáng kể cải thiện quản lý DCN Hiệu suất mạngtrungtâmliệu phụ thuộc vào việc sửdụngtài nguyên mạng cách phù hợp kịp thời cho dịch vụ người dùng cuối Việc quản lý tải truyền thống sửdụng DCN gặp phải tượng số liên kết gặp chịu tải liên kết lại khơng sửdụng mức Các kỹ thuật quản lý lưu lượng mạngtrungtâmliệu dựa SDN cung cấp quản lý lưu lượng tối ưu Khóa luận thực triển khai thuật toán cântải động để phân phối hiệu luồng lưu lượng mơ hình mạng fat-tree thông qua nhiều đường dẫn khác cặp host nguồn-đích Các tham số liệu quan đến hiệu suất mạng kiểm tra trước sau chạy thuật toán cântải Việc thử nghiệm tập trung vào số tham số QoS thơng lượng, độ trễ gói hai máy chủ mơ hình mạng fattree, tính tốn chi phí liên kết với xem xét mức độ ưu tiên luồng Khi tắc nghẽn xảy ra, thay đường dẫn cũ tuyến đường tốt với chi phí liên kết tối thiểu khoảng cách ngắn Chương trình liên tục chạy để cập nhật thay đổi mạng, cải thiện hiệu suất cântải với độ trễ giảm băng thông tăng cách linh hoạt với thay đổi Kết phân tích đánh giá cho thấy hiệu suất mạng tăng lên sau chạy chương trình thuật tốn cân tải, thuật tốn tăng thông lượng cải thiện hiệu suất sửdụngmạng Tuy nhiên, mạng lớn, tỷ lệ gói jitter tăng lên Về hướng nghiên cứu tương lai, đề xuất phát triển thuật toán sau: - Nghiên cứu hoạt động chương trình cântải động điều khiển SDN phổ biến khác, Tungsten fabric, Floodlight, Beacon, NOX/POX, so sánh kết - Nghiên cứu đánh giá hiệu suất thuật toán cấu trúc liên kết mạng khác cấu trúc fat-tree, với quy mô mạng khác Để có đánh giá, kiểm tra, khắc phục hạn chế thuật toán - Cuối mở rộng thuật toán sang mạng truyền thống, mạng lai có chuyển mạch OpenFlow chuyển mạch thông thường 37 TÀI LIỆU THAM KHẢO: [1] D Kreutz, F M V Ramos, P E Verissimo, C E Rothenberg, S Azodolmolky, and S Uhlig, “Software-defined networking: A comprehensive survey,” Proc IEEE, vol 103, no 1, pp 14–76, 2015 [2] A A Neghabi, N J Navimipour, M Hosseinzadeh, and A Rezaee, “Load balancing mechanisms in the software defined networks : a systematic and comprehensive review of the literature,” vol 3536, no c, 2018 [3] T D Nadeau and K Gray, T.D Nadeau and Ken Gray, “Centralized and distributed Control and Data Plane” in Software Defined Networks, Sebastopol: O’REILLY, 2013 [4] IPknowledge, “Traditional vs Software Defined Networking,” 2014 [5] W Braun and M Menth, “Software-Defined Networking Using OpenFlow: Protocols, Applications and Architectural Design Choices,” Futur Internet, vol 6, no 2, pp 302–336, 2014 [6] R Kumar Singh, N S Chaudhari, and K Saxena, “Load Balancing in IP/MPLS Networks: A Survey,” Commun Netw., vol 04, no 02, pp 151–156, 2012 [7] W Yahya, A Basuki, and J.-R Jiang, “The extended dijkstra’s-based load balancing for OpenFlow network,” Int J Electr Comput Eng., vol 5, no 2, pp 289–296, 2015 [8] O Engineering and C Bhubaneswar, “Fault Tolerance in Interconnection Networka Survey Laxminath Tripathy , Devashree Tripathy and C R Tripathy Central Electronics Engineering Research Institute ( CEERI ) Pilani , India Sambalpur University , Sambalpur , Odisha , India,” vol 11, no 2, pp 198–214, 2015 [9] Y H Lo, Y Zhang, Y Chen, H L Fu, and W S Wong, “The Global Packing Number of a Fat-Tree Network,” IEEE Trans Inf Theory, vol 63, no 8, pp 5327– 5335, 2017 [10] X Yuan, W Nienaber, Z Duan, and R Melhem, “Oblivious routing in fat-tree based system area networks with uncertain traffic demands,” IEEE/ACM Trans Netw., vol 17, no 5, pp 1439–1452, 2009 [11] M Yan, “DIJKSTRA ’ S ALGORITHM.” [12] Y Zhou, L Ruan, L Xiao, and R Liu, “A Method for Load Balancing based on Software-Defined Network,” vol 45, no Cca, pp 43–48, 2015 [13] S Patil, “Load Balancing Approach for Finding Best Path in SDN,” Proc Int Conf Inven Res Comput Appl ICIRCA 2018, no Icirca, pp 612–616, 2018 [14] T Huang, “Path Computation Enhancement in SDN Networks,” 2015 [15] S Badotra and J Singh, “OpenDaylight as a controller for Software Defined 38 Networking,” Int J Adv Res Comput Sci., vol 8, no 5, p 7, 2017 [16] T O F Contents, “Iperf Bandwidth Performance.” [17] G Van Rossum, “An introduction to Python for UNIX/C programmers,” Proc NLUUG najaarsconferentie, pp 1–8, 1993 39 PHỤ LỤC A Mơ hình mạng Mininet #!/usr/bin/python from mininet.node import CPULimitedHost, Host, Node from mininet.node import OVSKernelSwitch from mininet.topo import Topo class fatTreeTopo(Topo): "Fat Tree Topology" def init (self): "Create Fat tree Topology" Topo. init (self) #Add h7 = h8 = h1 = h2 = h4 = h3 = h5 = h6 = hosts self.addHost('h7', self.addHost('h8', self.addHost('h1', self.addHost('h2', self.addHost('h4', self.addHost('h3', self.addHost('h5', self.addHost('h6', cls=Host, cls=Host, cls=Host, cls=Host, cls=Host, cls=Host, cls=Host, cls=Host, ip='10.0.0.7', ip='10.0.0.8', ip='10.0.0.1', ip='10.0.0.2', ip='10.0.0.4', ip='10.0.0.3', ip='10.0.0.5', ip='10.0.0.6', #Add switches s10 = self.addSwitch('s10', cls=OVSKernelSwitch) s3 = self.addSwitch('s3', cls=OVSKernelSwitch) s17 = self.addSwitch('s17', cls=OVSKernelSwitch) s4 = self.addSwitch('s4', cls=OVSKernelSwitch) s18 = self.addSwitch('s18', cls=OVSKernelSwitch) s1 = self.addSwitch('s1', cls=OVSKernelSwitch) s11 = self.addSwitch('s11', cls=OVSKernelSwitch) s21 = self.addSwitch('s21', cls=OVSKernelSwitch) s22 = self.addSwitch('s22', cls=OVSKernelSwitch) s2 = self.addSwitch('s2', cls=OVSKernelSwitch) #Add links self.addLink(h1, s1) self.addLink(h2, s1) 40 defaultRoute=None) defaultRoute=None) defaultRoute=None) defaultRoute=None) defaultRoute=None) defaultRoute=None) defaultRoute=None) defaultRoute=None) self.addLink(h3, s2) self.addLink(h4, s2) self.addLink(h5, s3) self.addLink(h6, s3) self.addLink(h7, s4) self.addLink(h8, s4) self.addLink(s1, s21) self.addLink(s21, s2) self.addLink(s1, s10) self.addLink(s2, s10) self.addLink(s3, s11) self.addLink(s4, s22) self.addLink(s11, s4) self.addLink(s3, s22) self.addLink(s21, s17) self.addLink(s11, s17) self.addLink(s10, s18) self.addLink(s22, s18) topos = { 'mytopo': (lambda: fatTreeTopo() ) } 41 B Chương trình cântải #!/usr/bin/env python import requests from requests.auth import HTTPBasicAuth import json import unicodedata from subprocess import Popen, PIPE import time import networkx as nx from sys import exit # Method To Get REST Data In JSON Format def getResponse(url,choice): response = requests.get(url, auth=HTTPBasicAuth('admin', 'admin')) if(response.ok): jData = json.loads(response.content) if(choice=="topology"): topologyInformation(jData) elif(choice=="statistics"): getStats(jData) else: response.raise_for_status() def topologyInformation(data): global switch global deviceMAC global deviceIP global hostPorts global linkPorts global G global cost for i in data["network-topology"]["topology"]: for j in i["node"]: # Device MAC and IP 42 if "host-tracker-service:addresses" in j: for k in j["host-tracker-service:addresses"]: ip = k["ip"].encode('ascii','ignore') mac = k["mac"].encode('ascii','ignore') deviceMAC[ip] = mac deviceIP[mac] = ip # Device Switch Connection and Port if "host-tracker-service:attachment-points" in j: for k in j["host-tracker-service:attachmentpoints"]: mac = k["correspondingtp"].encode('ascii','ignore') mac = mac.split(":",1)[1] ip = deviceIP[mac] temp = k["tpid"].encode('ascii','ignore') switchID = temp.split(":") port = switchID[2] hostPorts[ip] = port switchID = switchID[0] + ":" + switchID[1] switch[ip] = switchID # Link Port Mapping for i in data["network-topology"]["topology"]: for j in i["link"]: if "host" not in j['link-id']: src = j["linkid"].encode('ascii','ignore').split(":") srcPort = src[2] dst = j["destination"]["desttp"].encode('ascii','ignore').split(":") dstPort = dst[2] srcToDst = src[1] + "::" + dst[1] linkPorts[srcToDst] = srcPort + "::" + dstPort G.add_edge((int)(src[1]),(int)(dst[1])) def getStats(data): 43 print "\nCost Computation \n" global cost txRate = for i in data["node-connector"]: tx = int(i["opendaylight-port-statistics:flow-capablenode-connector-statistics"]["packets"]["transmitted"]) rx = int(i["opendaylight-port-statistics:flow-capablenode-connector-statistics"]["packets"]["received"]) txRate = tx + rx #print txRate time.sleep(2) response = requests.get(stats, auth=HTTPBasicAuth('admin', 'admin')) tempJSON = "" if(response.ok): tempJSON = json.loads(response.content) for i in tempJSON["node-connector"]: tx = int(i["opendaylight-port-statistics:flow-capablenode-connector-statistics"]["packets"]["transmitted"]) rx = int(i["opendaylight-port-statistics:flow-capablenode-connector-statistics"]["packets"]["received"]) cost = cost + tx + rx - txRate #cost = cost + txRate #print cost def systemCommand(cmd): terminalProcess = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=True) terminalOutput, stderr = terminalProcess.communicate() print "\n*** Flow Pushed\n" def pushFlowRules(bestPath): 44 bestPath = bestPath.split("::") for currentNode in range(0, len(bestPath)-1): if (currentNode==0): inport = hostPorts[h2] srcNode = bestPath[currentNode] dstNode = bestPath[currentNode+1] outport = linkPorts[srcNode + "::" + dstNode] outport = outport[0] else: prevNode = bestPath[currentNode-1] #print prevNode srcNode = bestPath[currentNode] #print srcNode dstNode = bestPath[currentNode+1] inport = linkPorts[prevNode + "::" + srcNode] inport = inport.split("::")[1] outport = linkPorts[srcNode + "::" + dstNode] outport = outport.split("::")[0] xmlSrcToDst = '\'32767 Load Balance 1' + str(inport) +'10.0.0.1/3210.0.0.4/3220481000' + str(outport) +'\'' xmlDstToSrc = '\'32767 Load Balance 2' + str(outport) +'10.0.0.4/3210.0.0.1/3220482000' + str(inport) +'\'' flowURL = "http://127.0.0.1:8181/restconf/config/opendaylightinventory:nodes/node/openflow:"+ bestPath[currentNode] +"/table/0/flow/1" command = 'curl user "admin":"admin" -H "Accept: application/xml" -H "Content-type: application/xml" -X PUT ' + flowURL + ' -d ' + xmlSrcToDst systemCommand(command) flowURL = "http://127.0.0.1:8181/restconf/config/opendaylightinventory:nodes/node/openflow:"+ bestPath[currentNode] +"/table/0/flow/2" command = 'curl user "admin":"admin" -H "Accept: application/xml" -H "Content-type: application/xml" -X PUT ' + flowURL + ' -d ' + xmlDstToSrc systemCommand(command) srcNode = bestPath[-1] prevNode = bestPath[-2] inport = linkPorts[prevNode + "::" + srcNode] inport = inport.split("::")[1] outport = hostPorts[h1] xmlSrcToDst = '\'32767 Load Balance 1' + str(inport) +'10.0.0.1/3210.0.0.4/3220481000' + str(outport) +'\'' 46 xmlDstToSrc = '\'32767 Load Balance 2' + str(outport) +'10.0.0.4/3210.0.0.1/3220482000' + str(inport) +'\'' flowURL = "http://127.0.0.1:8181/restconf/config/opendaylightinventory:nodes/node/openflow:"+ bestPath[-1] +"/table/0/flow/1" command = 'curl user \"admin\":\"admin\" -H \"Accept: application/xml\" -H \"Content-type: application/xml\" -X PUT ' + flowURL + ' -d ' + xmlSrcToDst systemCommand(command) flowURL = "http://127.0.0.1:8181/restconf/config/opendaylightinventory:nodes/node/openflow:"+ bestPath[-1] +"/table/0/flow/2" command = 'curl user "admin":"admin" -H "Accept: application/xml" -H "Content-type: application/xml" -X PUT ' + flowURL + ' -d ' + xmlDstToSrc systemCommand(command) # Main # Stores H1 and H2 from user global h1,h2,h3 h1 = "" h2 = "" print "Enter Host 1" h1 = int(input()) print "\nEnter Host 2" 47 h2 = int(input()) print "\nEnter Host (H2's Neighbour)" h3 = int(input()) h1 = "10.0.0." + str(h1) h2 = "10.0.0." + str(h2) h3 = "10.0.0." + str(h3) flag = True while flag: #Creating Graph G = nx.Graph() # Stores Info About H3 And H4's Switch switch = {} # MAC of Hosts i.e IP:MAC deviceMAC = {} # IP of Hosts i.e MAC:IP deviceIP = {} # Stores Switch Links To H3 and H4's Switch switchLinks = {} # Stores Host Switch Ports hostPorts = {} # Stores Switch To Switch Path path = {} # Stores Link Ports linkPorts = {} # Stores Final Link Rates finalLinkTX = {} # Store Port Key For Finding Link Rates portKey = "" # Statistics global stats stats = "" 48 # Stores Link Cost global cost cost = try: # Device Info (Switch To Which The Device Is Connected & The MAC Address Of Each Device) topology = "http://127.0.0.1:8181/restconf/operational/networktopology:network-topology" getResponse(topology,"topology") # Print Device:MAC Info print "\nDevice IP & MAC\n" print deviceMAC # Print Switch:Device Mapping print "\nSwitch:Device Mapping\n" print switch # Print Host:Port Mapping print "\nHost:Port Mapping To Switch\n" print hostPorts # Print Switch:Switch Port:Port Mapping print "\nSwitch:Switch Port:Port Mapping\n" print linkPorts # Paths print "\nAll Paths\n" #for path in nx.all_simple_paths(G, source=2, target=1): #print(path) for path in nx.all_shortest_paths(G, source=int(switch[h2].split(":",1)[1]), target=int(switch[h1].split(":",1)[1]), weight=None): print path # Cost Computation tmp = "" 49 for currentPath in nx.all_shortest_paths(G, source=int(switch[h2].split(":",1)[1]), target=int(switch[h1].split(":",1)[1]), weight=None): for node in range(0,len(currentPath)-1): tmp = tmp + str(currentPath[node]) + "::" key = str(currentPath[node])+ "::" + str(currentPath[node+1]) port = linkPorts[key] port = port.split(":",1)[0] port = int(port) stats = "http://localhost:8181/restconf/operational/opendaylightinventory:nodes/node/openflow:"+str(currentPath[node])+"/nodeconnector/openflow:"+str(currentPath[node])+":"+str(port) getResponse(stats,"statistics") tmp = tmp + str(currentPath[len(currentPath)-1]) tmp = tmp.strip("::") finalLinkTX[tmp] = cost cost = tmp = "" print "\nFinal Link Cost\n" print finalLinkTX shortestPath = min(finalLinkTX, key=finalLinkTX.get) print "\n\nShortest Path: ",shortestPath pushFlowRules(shortestPath) time.sleep(60) except KeyboardInterrupt: break exit 50 ... QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ Hoàng Tuấn Hùng CÂN BẰNG TẢI TRONG MẠNG TRUNG TÂM DỮ LIỆU SDN SỬ DỤNG OPENDAYLIGHT CONTROLLER KHÓA LUẬN TỚT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành:... Defined Neworking (SDN) xuất cách tiếp cận Khóa luận tơi đề xuất triển khai thuật tốn cân tải động cho mạng trung tâm liệu dựa tảng SDN, để khắc phục vấn đề tồn mạng trung tâm liệu Việc kiểm tra... trung tâm liệu Cấu trúc liên kết mạng chế chuyển mạch/định tuyến ảnh hưởng đáng kể đến hiệu suất độ trễ Ngày nay, mơ hình mạng fat-tree cấu trúc liên kết sử dụng rộng rãi cho mạng trung tâm liệu