>시스템 튜토리얼 >리눅스 >SDN 네트워크 시스템의 미니넷

SDN 네트워크 시스템의 미니넷

WBOY
WBOY앞으로
2024-01-13 21:36:34975검색
SDN 및 Mininet 개요

SDN(소프트웨어 정의 네트워크)은 현대 인터넷의 새로운 혁신적인 네트워크 아키텍처입니다. 핵심 기술인 OpenFlow는 네트워크 장비의 제어 평면과 데이터 평면을 분리하여 네트워크 트래픽을 유연하게 제어할 수 있는 좋은 플랫폼을 제공합니다. 네트워크 및 애플리케이션. Mininet은 경량 소프트웨어 정의 네트워크 및 테스트 플랫폼으로, 경량 가상화 기술을 사용하여 단일 시스템을 원하는 커널 시스템과 사용자 코드를 실행하는 완전한 네트워크처럼 보이게 합니다. SDN 네트워크 시스템은 OpenFlow 및 OpenvSwith와 같은 다양한 프로토콜을 지원합니다. Mininet은 또한 동일한 컴퓨터에서 완전한 네트워크 호스트, 링크 및 스위치를 시뮬레이션할 수 있으며 특히 OpenFlow 및 SDN 기술을 사용하는 대화형 개발, 테스트 및 데모를 용이하게 합니다. 이 프로세스 가상화 플랫폼에서 실제 환경으로 코드를 마이그레이션하는 것도 가능합니다.

Mininet에서 구현한 기능
  • OpenFlow 및 OpenvSwitch와 같은 소프트 정의 네트워크 구성 요소 지원
  • 시스템 수준 복원 테스트, 복잡한 토폴로지, 사용자 정의 토폴로지 등을 지원합니다.
  • 여러 사람의 공동 개발을 촉진하기 위한 Python API 제공
  • 우수한 하드웨어 이식성과 높은 확장성
  • 수천개 호스트의 네트워크 구조 지원
Miniet 구현 및 워크플로

Mininet의 설치 방법은 Git 소스 코드와 내장된 설치 스크립트를 통해 비교적 간단합니다. 여기서는 OpenFlow와 같은 모든 Mininet 관련 패키지의 기본 설치를 사용합니다. POX 및 기타 도구는 기본적으로 현재 파일에 저장됩니다.
<br> # git 클론 git://github.com/mininet/mininet<br> # CD 미니넷/util/<br> # ./install.sh -a<br> #ls<br> mininet of-dissector oflops oftest 오픈플로우 pox<br>

네트워크 만들기

그림 1. 간단한 네트워크 예제 다이어그램
SDN 网络系统之 Mininet

Mininet은 사용자 정의 네트워크를 지원하므로 다음은 그림 1과 같은 간단한 네트워크 예입니다. Mininet 네트워크 시스템에 직접 mn 명령을 입력하여 이 시스템에 단일 레이어 토폴로지 네트워크를 생성합니다. 이 시스템에서 두 개의 호스트와 하나의 호스트가 생성됩니다. 기본 스위치이며 컨트롤러와 스위치가 활성화됩니다. 이와 동시에 net 명령을 통해 링크 상태도 확인할 수 있습니다. 먼저 Mininet 시스템에서 웹 서버와 클라이언트를 활성화하는 등의 예를 간략하게 나열합니다.
<br> #mn<br> *** 네트워크 만들기<br> *** 컨트롤러 추가<br> *** 호스트 추가:<br> h1 h2<br> *** 스위치 추가:<br> s1<br> *** 링크 추가:<br> (h1, s1) (h2, s1)<br> ***호스트 구성<br> h1 h2<br> *** 컨트롤러 시작<br> *** 스위치 1개 시작<br> s1<br> *** CLI 시작:<br> 미니넷><br>

웹 서비스 활성화 및 비활성화

Mininet 환경에서는 웹 서버 구축이 쉽습니다. 아래 예시를 보면, Host1에서 웹 서버가 구축되고, 다른 호스트로부터 웹 서버로 HTTP 요청을 받는 것을 볼 수 있습니다.
<br> mininet> h1 python -m SimpleHTTPServer 80 & #호스트 h1에서 웹 서비스 활성화<br> mininet> h2 wget -O - h1 # 호스트 h2에서 h1 웹사이트 콘텐츠 다운로드<br> --2013-11-04 00:05:40-- http://10.0.0.1/<br> 10.0.0.1:80으로 연결 중... 연결되었습니다.<br> HTTP 요청이 전송되었으며 응답을 기다리는 중... 200 OK<br> ......<br> 길이: 760 [text/html<br> <br> <title> /</title>

디렉토리 목록
  • .bash_history
  • .wireshark/
  • install-mininet-vm.sh
  • 미니넷/
  • -해부/
  • offlos/
  • 가장/
  • 오픈플로우/
  • 두창/

  • 0K 100% 1.65M=0초
    2013-11-04 00:05:40 (1.65MB/s) - stdout [760/760]

    에 기록됨

    mininet> h1 kill %python # 웹 프로세스 종료
    10.0.0.2 - - [2013년 11월 4일 00:05:40] "GET / HTTP/1.1" 200 -
    bash: 23행: kill: python: 모호한 작업 사양
    핑 테스트

    Mininet 시스템에서는 두 호스트 간의 상호 연결 테스트가 구현됩니다.
    <br> 미니넷> h1 ping -c4 h2<br> PING 10.0.0.2 (10.0.0.2) 56(84)바이트의 데이터입니다.<br> 10.0.0.2에서 64바이트: icmp_req=1 ttl=64 시간=1.55 ms<br> 10.0.0.2에서 64바이트: icmp_req=2 ttl=64 time=0.094 ms<br> 10.0.0.2에서 64바이트: icmp_req=3 ttl=64 time=0.075 ms<br> 10.0.0.2에서 64바이트: icmp_req=4 ttl=64 time=0.071 ms

    --- 10.0.0.2 핑 통계 ---
    4개 패킷 전송, 4개 수신, 패킷 손실 0%, 시간 3006ms
    rtt 최소/평균/최대/mdev = 0.071/0.448/1.553/0.638ms
    노드 및 링크 보기
    <br> 미니넷>노드<br> 사용 가능한 노드는 다음과 같습니다:<br> c0 h1 h2 s1<br> 미니넷>넷<br> h1 h1-eth0:s1-eth1<br> h2 h2-eth0:s1-eth2<br> s1 lo: s1-eth1:h1-eth0 s1-eth2:h2-eth0<br> c0<br>

    사용자 정의 토폴로지

    Mininet은 mininet/custom 디렉토리에 예제가 제공됩니다. mytopo가 topo-2sw-2host.py 파일에 정의된 경우 --topo 옵션을 통해 이 토폴로지의 사용을 지정할 수 있습니다.
    그림 2. 사용자 정의 토폴로지 예
    SDN 网络系统之 Mininet Mininet은 매개변수화된 토폴로지도 지원하므로 Python 코드를 통해 유연한 토폴로지를 생성할 수 있으며, 전달된 사용자 정의 매개변수에 따라 구성할 수도 있고 여러 환경에서 재사용할 수도 있습니다. 코드의 일반적인 구조와 의미는 다음과 같습니다. .

    #!/usr/bin/python<br>

    mininet.topo에서 Topo 가져오기

    mininet.net에서 Mininet 가져오기
    mininet.util에서 dumpNodeConnections를 가져옵니다
    mininet.log에서 setLogLevel을 가져옵니다

    class 싱글스위치Topo(Topo):

    def __init__(self, n=2, **opts):
    Topo.__init__(self, **opts)
    switch = self.addSwitch('s1') # 토폴로지에 스위치 추가
    범위(n)의 h에 대해:
    호스트 = self.addHost('h%s' % (h + 1)) # 토폴로지에 호스트 추가
    self.addLink(host, switch) #양방향 연결 토폴로지 추가

    def simpleTest():

    topo = 싱글스위치Topo(n=4)
    net = Mininet(topo) #네트워크를 생성하고 관리하는 메인 클래스
    net.start() #토폴로지 네트워크 시작
    "호스트 연결 덤프 중"을 인쇄하세요
    dumpNodeConnections(net.hosts) #파일 연결 덤프
    "네트워크 연결 테스트 중"을 인쇄하세요
    net.pingAll() #모든 노드가 서로 상호 연결을 테스트합니다
    net.stop() #네트워크를 중지하세요

    if __name__ == '__main__':

    setLogLevel('info') #Mininet 기본 출력 레벨을 설정합니다. info를 설정하면 유용한 정보가 제공됩니다
    간단한테스트()

    매개변수화된 토폴로지 확인

    # 파이썬 테스트-single.py<br> *** 네트워크 만들기<br> *** 컨트롤러 추가<br> *** 호스트 추가:<br> h1 h2 h3 h4<br> *** 스위치 추가:<br> s1<br> *** 링크 추가:<br> (h1, s1) (h2, s1) (h3, s1) (h4, s1)<br> ***호스트 구성<br> h1 h2 h3 h4<br> *** 컨트롤러 시작<br> *** 스위치 1개 시작<br> s1<br> 호스트 연결 덤프<br> h1 h1-eth0:s1-eth1<br> h2 h2-eth0:s1-eth2<br> h3 h3-eth0:s1-eth3<br> h4 h4-eth0:s1-eth4<br> 네트워크 연결 테스트<br> *** 핑: 핑 도달 가능성 테스트<br> h1 -> h2 h3 h4<br> h2 -> h1 h3 h4<br> h3 -> h1 h2 h4<br> h4 -> h1 h2 h3<br> *** 결과: 0% 감소(12/12 수신)<br>

    네임스페이스 네임스페이스 일반적으로 호스트 인터페이스는 독립적인 네임스페이스를 가지며 제어 노드와 스위칭 노드는 모두 루트 네임스페이스에 있습니다. 모든 노드가 자체 네임스페이스를 가지도록 하려면 --innamespace 매개변수를 추가해야 합니다. 즉, 다음을 실행해야 합니다.

    mn --innamespace
    # mn --innamespace --사용자 전환<br> *** 네트워크 만들기<br> *** 컨트롤러 추가<br> *** 호스트 추가:<br> h1 h2<br> *** 스위치 추가:<br> s1<br> *** 링크 추가:<br> (h1, s1) (h2, s1)<br> c0 <br> s1 *** 제어 네트워크 테스트<br> s1 -> c0<br> c0 -> s1<br> *** 결과: 0% 하락(2/2 수신)<br>

    *** 호스트 구성

    h1 h2
    *** 컨트롤러 시작
    *** 스위치 1개 시작
    s1
    *** CLI 시작:

    미니넷 공통운영

    표 1. 미니넷 공통 명령어

    위 내용은 SDN 네트워크 시스템의 미니넷의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 linuxprobe.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제