wireless(10Mbps)보다 wired(58Gbps)가 네트워크 성능이 높다.
wired 네트워크 성능 테스트: sudo mn --test iperf -> 58Gbps

wireless 네트워크 성능 테스트: sudo mn --wifi --test iperf -> 10Mbps

마찬가지로 wireless(10.5Mbps)보다 wired(1.2Gbps)가 네트워크 성능이 높다.
wired 네트워크 성능 테스트: sudo mn --switch=user --test iperf -> 1.2Gbps

wireless 네트워크 성능 테스트: sudo mn --wifi --switch=user --test iperf -> 10.5Mbps

OVS의 성능이 User Switch의 성능보다 훨씬 높다.
| wired | wireless | |
|---|---|---|
| OVS | 58Gbps | 10Mbps |
| User Switch | 1.2Gbps | 10.5Mbps |
sudo util/install.sh -3f
MidiEdit GUI를 사용해 네트워크 구성도를 설계하며, AP, Station, Switch, Controller 등의 배치를 설정합니다.

wireless1.mn 파일명으로 저장할 수 있습니다. 또한 wireless.py로 저장하고 파이썬 타입을 선택하면 파이썬 파일로 변환도 가능합니다.

실행은 run 버튼을 이용하여 실행하거나, cli 명령어인 sudo python3 examples/miniedit.py로 실행 가능합니다.




#!/usr/bin/python
from mininet.node import Controller, OVSKernelSwitch, Node
from mininet.log import setLogLevel, info
from mn
_
wifi.net import Mininet
wifi
_
from mn
_
wifi.node import Station, OVSKernelAP
from mn
_
wifi.cli import CLI
from mn
_
wifi.link import wmediumd
from mn
_
wifi.wmediumdConnector import interference
from subprocess import call
def myNetwork():
net = Mininet
_
wifi(topo=None,
build=False,
link=wmediumd,
wmediumd
mode=interference,
_
ipBase='10.0.0.0/8')
info( '*** Adding controller\n' )
c0 = net.addController(name='c0'
,
controller=Controller,
protocol='tcp'
,
port=6653)
info( '*** Add switches/APs\n')
ap1 = net.addAccessPoint('ap1'
, cls=OVSKernelAP, ssid='ap1'
,
channel='1'
, mode='g'
, position='249.0,305.0,0')
ap2 = net.addAccessPoint('ap2'
, cls=OVSKernelAP, ssid='ap2'
,
channel='1'
, mode='g'
, position='559.0,318.0,0')
r2 = net.addHost('r2'
, cls=Node, ip='0.0.0.0')
r2.cmd('sysctl -w net.ipv4.ip_
forward=1')
s3 = net.addSwitch('s3'
, cls=OVSKernelSwitch)
info( '*** Add hosts/stations\n')
sta1 = net.addStation('sta1'
, ip='10.0.0.1'
,
position='126.0,448.0,0')
sta2 = net.addStation('sta2'
, ip='10.0.0.2'
,
position='267.0,448.0,0')
sta3 = net.addStation('sta3'
, ip='10.0.0.3'
,
position='504.0,443.0,0')
sta4 = net.addStation('sta4'
, ip='10.0.0.4'
,
position='623.0,436.0,0')
info("*** Configuring Propagation Model\n")
net.setPropagationModel(model="logDistance"
, exp=3)
info("*** Configuring wifi nodes\n")
net.configureWifiNodes()
info( '*** Add links\n')
net.addLink(s3, ap1)
net.addLink(s3, ap2)
net.addLink(ap1, sta1)
net.addLink(ap1, sta2)
net.addLink(ap2, sta3)
net.addLink(ap2, sta4)
net.plotGraph(max
x=1000, max
_
_y=1000)
info( '*** Starting network\n')
net.build()
info( '*** Starting controllers\n')
for controller in net.controllers:
controller.start()
info( '*** Starting switches/APs\n')
net.get('ap1').start([])
net.get('ap2').start([])
net.get('s3').start([c0])
info( '*** Post configure nodes\n')
CLI(net)
net.stop()
if
name
== '
main
__
__
__
__
setLogLevel( 'info' )
myNetwork()
네트워크 초기화
컨트롤러 및 네트워크 장치 추가
호스트 및 스테이션 추가
무선 네트워크 설정
링크 추가
네트워크 시뮬레이션 실행
Docker는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 쉽게 생각하면 Vmware나 VirtualBox에서 사용하는 것처럼 하나 OS에 다른 OS를 올려서 사용하게 해주는 것을 의미합니다.
Docket는 기존의 가상화 툴보다 더 가볍고 빠릅니다. 그 이유는 도커는 기존의 가상화 툴 처럼 추가적인 OS를 설치해서 가상화 하지 않고 프로세스를 격리하는 방식으로 동작하기 때문입니다.
도커의 가장 중요한 개념은 Image와 Container입니다.
sudo docker stop <컨테이너ID>: 컨테이너 중지
sudo docker rm <컨테이너이름>: 컨테이너 삭제
sudo docker search floodlight: floodlight라는 이름으로 검색했을 때, pierrecdn/floodlight라는 이미지가 나옴 -> 이 이미지가 Floodlight SDN OpenFlow Controller라는 소프트웨어를 실행하는 데 사용된다는 걸 확인
sudo docker pull: pierrecdn/floodlight 명령어로 pierrecdn/floodlight 도커 이미지 갖고 오기 (docker hub에 있는 이미지를 받아서 build까지 수행) -> Floodlight SDN OpenFlow Controller 소프트웨어를 쉽게 실행하기 위함
sudo docker images: 현재 내 컴퓨터에 어떤 이미지들이 있는지 확인 -> Image는 build 후 메모리에 올라가고 run 명령어를 통해 컨테이너로 동작
sudo docker run-d -p 6653:6653 -p 8080 --name=floodlight pierrecdn/floodlight
sudo docker ps -a: 컨테이너 확인 (현재 실행되고 있는 컨테이너는 sudo docker ps 명령어)
브라우저(파이어폭스)에 http://localhost:32768/ui/index.html를 입력하면 웹 서버 사이트 기반 SDN Floodlight 제어기 (Controller) 가 컨테이너로 실행됨
웹 서버 기반 SDN Floodlight 제어기 (Controller)만 있음
sudo mn --controller=remote,ip=127.0.0.1,port=6653 --switch ovsk,protocols=OpenFlow13: sudo mn 명령어로 기본 네트워크 토폴로지 만들기 (하나의 제어기와 두 개의 호스트) -> 웹 기반 네트워크 토폴로지 제어기 (Controller)는 한 개 Switches (1)와 두 개 호스트 Host(2)로 구성됨
Floodlight Controller Status를 Dashboard 정보로 보여 줌
스위치 세부 정보
두 개 호스트 Mac 주소
Topology
1. OVS(Open Virtual Switch)와 UserSwitch의 네트워크 성능 비교로 올바른 것은 무엇인가요?
OVS는 유선 및 무선 성능에서 모두 UserSwitch보다 우수하다.
2. MiniEdit 실행 중 ModuleNotFoundError: No module named 'packaging' 에러가 발생할 경우 해결 방법은 무엇인가요?
sudo apt install python3-packaging 실행
3. MiniEdit GUI를 사용하여 무선 네트워크를 구성할 때 필요한 주요 구성 요소 3가지를 기술하시오.
4. MiniEdit에서 생성된 네트워크 토폴로지를 Python 파일로 변환하려면 어떤 파일로 저장해야 하나요? 또한 변환된 Python 파일의 기본 구조를 설명하시오.
5. Floodlight SDN Controller의 역할과 Docker를 이용한 설치 방법을 설명하시오.
6. Floodlight 컨트롤러를 실행한 뒤, 브라우저에서 컨트롤러 UI를 확인하려면 어떤 URL을 입력해야 하나요?
http://localhost:32768/ui/index.html -> Floodlight 컨트롤러는 Docker 컨테이너에서 실행되며, 로컬 호스트에서 웹 UI를 제공합니다.
7. Floodlight SDN 컨트롤러를 중지하려면 어떤 명령어를 사용해야 하나요? 컨테이너를 제거하려면 어떤 명령어를 사용해야 하나요?
8. MiniEdit를 사용하여 AP(ap1)와 Station(sta1)을 연결하려면 어떤 명령어를 사용해야 하나요?
net.addLink(ap1, sta1)
9. Docker를 사용한 가상화의 주요 장점과 Floodlight 컨트롤러에 Docker를 사용하는 이유를 설명하시오.
10. MiniEdit에서 AP(ap1)와 Station(sta1) 간 무선 링크를 활성화한 뒤, ping 명령어로 연결 상태를 확인하는 명령어를 작성하시오.
sta1 ping sta3 -> ping 명령어는 두 노드 간 연결 상태를 테스트하는 데 사용됩니다. MiniEdit에서 링크 업/다운 상태를 확인할 때 유용합니다.