SDN관련 실습이 잘 안되어서, 다른 할 것을 찾아보던 중에 mininet을 이용해서 네트워크 환경을 시뮬레이션 하는 것에 대해 알게되었어요!
제가 본 블로그는 아래 링크 첨부합니다.
CLick!!
가상 네트워크를 통해 SDN이나 Openflow와 같은 네트워크 환경을 시뮬레이션 할 수 있는 오픈 소스 프로그램입니다.
Mininet은 가상 스위치, 호스트를 사용해 네트워크를 시뮬레이션하는 소프트웨어로 SDN 및 Openflow와 같은 네트워크 프로토콜을 시험하고 개발하는 데 사용된다고 합니다.
Mininet은 python기반으로 작성되었으며, 가상화 기술을 사용해 다중 사용자를 지원하고, 빠르고 쉽게 네트워크를 생성, 시험할 수 있습니다.
Mininet은 학술연구, 프로토타입 및 시스템 테스트, 교육 및 교육용 목적으로 사용됩니다. Mininet은 또한 Openflow 교육 및 SDN 프로토타입 개발 등의 목적으로도 사용됩니다.

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 주소:
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명령어를 통해 잘 연결되는 것을 확인할 수 있다.