Mininet 사용해보기

현서황·2024년 12월 15일

SDN관련 실습이 잘 안되어서, 다른 할 것을 찾아보던 중에 mininet을 이용해서 네트워크 환경을 시뮬레이션 하는 것에 대해 알게되었어요!
제가 본 블로그는 아래 링크 첨부합니다.
CLick!!

mininet이란

가상 네트워크를 통해 SDN이나 Openflow와 같은 네트워크 환경을 시뮬레이션 할 수 있는 오픈 소스 프로그램입니다.
Mininet은 가상 스위치, 호스트를 사용해 네트워크를 시뮬레이션하는 소프트웨어로 SDN 및 Openflow와 같은 네트워크 프로토콜을 시험하고 개발하는 데 사용된다고 합니다.
Mininet은 python기반으로 작성되었으며, 가상화 기술을 사용해 다중 사용자를 지원하고, 빠르고 쉽게 네트워크를 생성, 시험할 수 있습니다.

Mininet은 학술연구, 프로토타입 및 시스템 테스트, 교육 및 교육용 목적으로 사용됩니다. Mininet은 또한 Openflow 교육 및 SDN 프로토타입 개발 등의 목적으로도 사용됩니다.

mininet 사용해 네트워크 토폴로지 생성해보기.


mininet 설치

from mininet.net import Mininet
from mininet.cli import CLI
from mininet.node import Host
from mininet.node import OVSKernelSwitch
from mininet.log import setLogLevel, info

Mininet: 네트워크를 시뮬레이션하는 객체.
CLI: Mininet의 명령어 인터페이스로 사용자가 명령을 입력할 수 있게 함.
Host: 가상 호스트를 생성.
OVSKernelSwitch: Open vSwitch 기반 스위치를 생성.
setLogLevel: 로그 출력 레벨을 설정.

def myTopo():
    net = Mininet( topo=None, autoSetMacs=True, build=False, ipBase='10.0.1.0/24' )

net: Mininet 객체를 생성합니다.
topo=None: 사용자 정의 토폴로지를 사용할 것을 의미합니다.
autoSetMacs=True: 자동으로 MAC 주소를 설정합니다.
build=False: 네트워크는 명시적으로 build() 메서드를 호출할 때까지 빌드되지 않습니다.
ipBase='10.0.1.0/24': 호스트들이 사용할 기본 IP 주소 대역입니다.

h1 = net.addHost( 'h1', cls=Host, defaultRoute=None )
h2 = net.addHost( 'h2', cls=Host, defaultRoute=None )
h3 = net.addHost( 'h3', cls=Host, defaultRoute=None )
s1 = net.addSwitch( 's1', cls=OVSKernelSwitch, failMode='standalone' )

net.addHost: 네트워크에 호스트를 추가합니다.
h1, h2, h3라는 이름의 호스트를 추가.
net.addSwitch: 네트워크에 스위치를 추가합니다.
s1이라는 이름의 스위치를 생성.
failMode='standalone': 스위치가 컨트롤러 없이 독립적으로 동작합니다.

net.addLink(h1, s1)
net.addLink(h2, s1)
net.addLink(h3, s1)

호스트 h1, h2, h3를 스위치 s1과 연결합니다.

h1.setIP(intf="h1-eth0", ip='10.0.1.2/24')
h2.setIP(intf="h2-eth0", ip='10.0.1.3/24')
h3.setIP(intf="h3-eth0", ip='10.0.1.4/24')

각 호스트의 네트워크 인터페이스에 IP 주소를 설정합니다.
인터페이스 이름: h1-eth0, h2-eth0, h3-eth0.
IP 주소:

  • h1: 10.0.1.2/24
  • h2: 10.0.1.3/24
  • h3: 10.0.1.4/24
net.build()
net.start()

build(): 네트워크를 빌드합니다.
start(): 네트워크를 시작합니다.

CLI(net)
net.stop()

CLI(net): Mininet 명령어 인터페이스를 시작합니다. 사용자가 명령을 입력해 네트워크 상태를 확인하거나 테스트할 수 있습니다.
net.stop(): 네트워크를 종료합니다.

if __name__ == '__main__':
    setLogLevel("info")
    myTopo()

setLogLevel("info"): 로그 출력 레벨을 "info"로 설정.
myTopo(): 위에서 정의한 네트워크 토폴로지 함수 실행.


pingall명령어를 통해 잘 연결되는 것을 확인할 수 있다.

profile
노는 게 제일 좋은 뽀로로

0개의 댓글