mininet-wifi Mobility

해담·2024년 11월 27일

mininet wifi graph

plot은 position 옵션과 함께 할 때 graph로 나타납니다. 즉, position 옵션이 없으면 graph로 노드 position이 나타나지 않습니다.

  • sudo mn --wifi --plot
  • sudo mn --wifi --position --plot



TC (Traffic Control)

Traffic Control이란 리눅스에서 트래픽 컨트롤 기능을 제공하는 도구입니다. 사용자로 하여금 네트워크의 Queue와 Queuing 메커니즘을 제어할 수 있도록 도와줍니다.

TC의 Queue는 일반적으로 FIFO를 사용하며, 인터페이스의 패킷 Input과 Output에서 패킷의 송수신 속도와 순서를 결정할 수 있습니다. qdisc(Queueing Discipline)는 TC의 핵심 개념 중 하나로, 네트워크 스택에서 패킷의 큐잉 및 처리 방식을 정의합니다. 이는 단순한 FIFO 큐로 인위적인 패킷 유실, 패킷 지연, 전송 속도 제한 등을 조절할 수 있습니다. qdisc의 종류에는 총 대역폭을 제한하는 TBF, HTB with child class 등이 있습니다.

TC qdisc 명령어

  • ap1 tc qdisc: mininet-wifi에서 사용할 수 있으며, ap1에서의 qdisc 관련 설정을 확인할 수 있는 명령어입니다.
  • sudo tc -s qdisc ls dev eth0: 이 명령어는 eth0 네트워크 인터페이스에 설정된 qdisc 목록과 그 통계를 출력합니다.

TC를 이용한 Delay Test

  1. ip route: 대표 인터페이스를 확인할 수 있습니다. 만약 네트워크 인터페이스가 여러 개 있을 때는, ip route 명령어를 입력하여 default 항목에 있는 인터페이스 ID(dev 뒤에 존재)를 입력할 수 있습니다.

  2. ping -c3 8.8.8.8: 구글(8.8.8.8)로 ping 테스트 시, 평균 rtt time은 39.7ms가 걸립니다.

  3. sudo tc qdisc add dev enp0s3 root netem delay 200ms: 네트워크 인터페이스에 200ms의 지연을 추가하는 명령어입니다. 이처럼 RTT 속도를 200ms로 설정하여 인위적으로 느린 망을 만들었습니다.

  • netem(Network Emulator): 네트워크 환경을 에뮬레이션(모방)하기 위해 사용
  1. ping -c3 8.8.8.8으로 테스트 시, 평균 rtt time이 241ms로 늘어났습니다.
  2. sudo tc qdisc delete dev enp0s3 root netem delay 200ms: add 부분을 delete로 바꾸어 지연을 제거합니다.

TC를 이용한 Packet Loss Test

인터페이스를 통과하는 Packet이 일정한 확률로 loss가 발생하도록 만드는 기능입니다.
1. ping -c30 8.8.8.8: 현재 네트워크 상태 확인

  • 총 0% packet loss
  • 총 RTT : 29049ms
  • 평균 RTT : 240.5ms
  1. sudo tc qdisc add dev enp0s3 root netem loss 50%: packet loss 50% 설정 후 네트워크 상태를 loss 50% 인가
  • 총 packet loss 50%
  • 총 RTT : 29285ms
  • 평균 RTT : 42.3ms
  1. sudo tc qdisc delete dev enp0s3 root netem loss 50%: add 부분을 delete로 바꾸어 원상복귀합니다.



miniedit.py를 이용한 GUI 생성

node와 무선 링크 생성
1. cd mininet-wifi/
2. sudo python examples/miniedit.py




Graphic을 이용한 노드 이동성 확인

  • sudo mn --wifi --plot --position: 2차원 노드 view 확인 명령어

  • sudo mn --wifi --plot3d --position: 2차원 노드 view 확인 명령어

실제 노드 이동 파이썬 코드 작성

  • position.py 파일 샘플
    • 노드 생성
    • 전파 모델 설정
    • 그래프 시각화
#!/usr/bin/env python

'Setting position of the nodes'

import sys

from mininet.log import setLogLevel, info
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi

def topology(args):

  net = Mininet
  
  // 노드 생성
  // - Access Point (AP)와 Station (STA)를 추가합니다.
  // - position: (x, y, z) 좌표로 노드의 위치를 설정합니다.
  // - h1: 유선 호스트를 추가합니다.
  info("*** Creating nodes\n")
  ap1 = net.addAccessPoint('ap1', ssid='new-ssid', mode='g', channel='1', failMode="standalone", mac='00:00:00:00:00:01', position='50,50,0')
  net.addStation('sta1', mac='00:00:00:00:00:02', ip='10.0.0.1/8', position='30,60,0')
  net.addStation('sta2', mac='00:00:00:00:00:03', ip='10.0.0.2/8', position='70,30,0')
  h1 = net.addHost('h1', ip='10.0.0.3/8')
  
  // 전파 모델 설정
  // - setPropagationModel: Mininet-WiFi에서 무선 통신의 신호 전파 방식을 설정하는 메서드.
  // - exp=4.5: 감쇠 지수 (높을수록 신호 감쇠가 커짐).
  info("*** Configuring propagation model\n")
  net.setPropagationModel(model="logDistance", exp=4.5)
  
  info("*** Configuring nodes\n")
  net.configureNodes()
  info("*** Creating links\n")
  net.addLink(ap1, h1)
  
  // 그래프 시각화
  // - max_x, max_y: 그래프 크기를 설정합니다.
  if '-p' not in args:
    net.plotGraph(max_x=100, max_y=100)
  
  info("*** Starting network\n")
  net.build()
  ap1.start([])
  
  info("*** Running CLI\n")
  CLI(net)
  
  info("*** Stopping network\n")
  net.stop()
  
if __name__ == '__main__':
  setLogLevel('info')
  topology(sys.argv)
  • sudo mn --wifi --position
  • mininet-wifi> ap1 tc qdisc
  • sudo mn --wifi --todo single,3 --position --plot: 실제 노드가 이동하는 명령어입니다.
  • sta1의 위치가 ap1의 전송 범위 안에 있다.



iw와 wmediumd 무선 채널 특징 비교

  • iw: interface of wireless
  • scan 명령어를 통해 sta1의 위치가 ap1의 전송 범위 안에 있음을 확인할 때, 결과의 associated를 통해 확인합니다.



rssi : received signal strength indicator

  • RSSI(Received Signal Strength Indicator)는 AP 무선 신호를 측정한 것으로, 일반적으로 클라이언트에서 측정함

    • 스케일은-100dBm(가장 약함)에서 0dBm(가장 강함)까지 실행되지만 값은 일반적으로-90dBm에서-25dBm 범위임.
    • 스마트폰 같은 무전 수신기에 수신되는 전력이 얼마나 되는지 수치를 말한다고 생각하면 됨.
    • RSSI 지표를 이용하면 간단하게는 신호가 잘 터지는 곳인지 확인할 수 있고, 깊이 들어가면 실내 위치 추적시스템에 사용되기도 함
  • py sta1.wintfs[0].rssi 명령어 사용

    • rssi 값 확인 : -66은 Excellent (훌륭함)임
  • sta1 iw dev sta1-wlan0 scan

    • iw scan 명령어는 update된 rssi 값-66을 나타내지 못함. -> scan 명령어는 정적 데이터
    • py sta1.wintfs[0].rssi 명령어는 update된 rssi 값-66을 나타냄. -> 실시간 RSSI 값을 계산해 제공
  • py sta1.setPosition('250,250,0') 으로 sta1의 위치를 이동 시킴 -> sta1은 이제 더 이상 ap1과 결속 되어 있지 않다.




다양한 명령어 3개로 연결 단절 확인

  • sta1 iw dev sta1-wlan0 scan: BSS 02:00:00:00:03:00(on sta1-wlan0)에 associated라는 정보가 없다. 이유는‘250’,‘250’으로 위치를 이동하여, ap1의 전송반경 내에 있지 않기 때문입니다.

  • sta1 iw dev sta1-wlan0 link: not connect 시 연결되지 않았다는 뜻입니다.

  • py sta1.wintfs[0].rssi: RSSI 값을 확인하기 위한 명령어로, 0이 나온다면 ap1과 연결(결속)되지 않았다는 말입니다.

명령어 공통점

sta1 iw dev sta1-wlan0 link,
sta1 iw dev sta1-wlan0 scan,
py sta1.wintfs[0].rssi
-> sta1의 위치가 ap1의 위치에서 멀어져 있고 ap1의 전송 범위 밖에 있어서 통신이 단절되었음을 보여줌




iw(interface of wireless)와 wmediumd 무선 채널 특징 비교

  • sudo mn --wifi --link=wmediumd--topo single,3 --position --plot: wmediumd 링크 모델은 rssi와 연관됨
nspubuntu18@nspubuntu18-ThinkPad-X1-Carbon-Gen-8:~/mininet-wifi$ sudo mn --wifi --topo single,3 --link=wmediumd --position --plot
*** Adding stations:
sta1 sta2 sta3
*** Adding access points:
ap1
*** Configuring nodes...
*** Connecting to wmediumd server /var/run/wmediumd.sock
*** Creating network
*** Adding controller
*** Adding hosts:
*** Adding switches:
*** Adding links:
(sta1, ap1) (sta2, ap1) (sta3, ap1)
*** Starting controller(s)
c0
*** Starting L2 nodes
ap1 ...
*** Starting CLI:
  • sta1 iw dev sta1-wlan0 scan: associated는 ap1과 연결되어 있음을 보여줍니다.

link=iw 무선 채널 모델과 link=wmediumd 무선 채널 모델 비교

  • link=wmediumd를 사용하면, rssi=-67을 실시간으로 보여줍니다.
  • link=iw를 사용하면 실시간 rssi=-67을 보여주지 못하고 계속 이전 rssi=-36를 보여줍니다.
  • iw scan 명령어: link=wmediumd 무선 채널에도 사용 가능합니다.
mininet-wifi> sta1 iw dev sta1-wlan0 scan
BSS 02:00:00:00:03:00(on sta1-wlan0) -- associated
last seen: 255944.567s [boottime]
TSF: 1699773899888013 usec (19673d, 07:24:59)
freq: 2412
beacon interval: 100 TUs
capability: ESS ShortSlotTime (0x0401)
signal: -67.00 dBm
last seen: 0 ms ago
Information elements from Probe Response frame:
SSID: my-ssid
Supported rates: 1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0
DS Parameter set: channel 1
ERP: Barker
Preamble
Mode
_
_
Extended supported rates: 24.0 36.0 48.0 54.0
Supported operating classes:
* current operating class: 81
Extended capabilities:
* Extended Channel Switching
* SSID List
* Operating Mode Notification
  • py sta1.setPosition('250,250,0'): ‘250’, ‘250’으로 위치를 이동하여, ap1의 전송반경 밖으로 sta1이 이동합니다.
  • iw scan 명령어 link=wmediumd 무선 채널 모델 사용하면, sta1이 ap1의 전송 반경 범위를 벗어나게 되면, BSS 02:00:00:00:03:00(on sta1-wlan0) -- associated 정보 등이 나타나지 않게 됩니다.
  • wmediumd 무선 채널 모델은 애드혹 네트워크에 많이 사용됩니다.
  • iw link 명령어: link=wmediumd 무선 채널: sta1 iw dev sta1-wlan0 link
  • py sta1.wintfs[0].rssi 명령어 : link=wmediumd 무선 채널 -> 0으로 나타남



Topology 컨트롤 예제 (wmediumd 무선 채널 모델은 애드혹 네트워크에 많이 사용됨)

Mobile Ad hoc Network

MANET는 중앙 집중적인 인프라가 없는 동적이고 자율적인 네트워크입니다. 노드가 이동하거나 추가/삭제되더라도 네트워크가 자체적으로 구성되고 유지될 수 있는 특징을 가집니다.

이동 Ad Hoc 네트워크와 인프라스트럭처 네트워크

  • 이동 Ad Hoc 네트워크는 독립적으로 동작하며, 고정된 인프라 없이 노드 간 직접 연결로 통신이 이루어집니다. 각 노드가 라우터 및 호스트 역할을 수행하며, 다른 노드 간 데이터 전송을 지원합니다. (ex. 자연재해, 군사작전, 임시 네트워크)
  • 인프라스트럭처 네트워크는 고정된 중앙 기지국 또는 라우터가 네트워크를 관리합니다. 노드는 해당 인프라를 통해 통신하며, 전체 네트워크가 중앙 관리 하에 유지됩니다. (ex. Wi-Fi 네트워크, 셀룰러 네트워크)

이동 Ad Hoc 네트워크의 존재 형태

  • 독립적으로 존재하는 경우는 완전히 분산된 구조로, 모든 노드가 서로 직접 통신합니다. (ex. 블루투스 기기 연결)
  • 기반망과 연동되는 경우는 게이트웨이를 포함합니다. 애드 혹 방식과 인프라 기반 통신 방식이 혼합된 형태입니다. (ex. 차량 네트워크에서 이동 차량과 고정된 신호등 간 통신)

이동 Ad Hoc 라우팅 프로토콜의 분류

  • Table-Driven/Proactive 라우팅 프로토콜은 모든 노드가 사전에 전체 네트워크의 경로 정보를 유지하며, 지속적으로 경로 정보를 업데이트합니다. 라우팅 테이블을 사용하여 각 목적지까지의 경로를 미리 저장하고, 토폴로지가 변하면 즉시 테이블을 갱신합니다.
  • On-Demand-Driven/Reactive 라우팅 프로토콜은 필요할 때만 경로를 생성하는 방식입니다. 노드가 특정 목적지로 데이터를 전송하려 할 때, 경로 요청을 브로드캐스트하여 경로를 설정합니다. 경로가 사용되지 않을 경우 삭제합니다.
  • Hybrid 라우팅 프로토콜은 Proactive와 Reactive 방식을 결합하여, 네트워크의 특정 영역은 Proactive로 관리하고, 나머지 영역은 Reactive 방식으로 관리합니다. 일반적으로 네트워크를 Zone으로 나누어 관리하며, 영역 내에서는 Proactive로, 영역 간에는 Reactive로 동작합니다.

이동 Ad Hoc 네트워크 응용

  • Satellite Interface는 위성 통신 시스템과 지상 네트워크 시스템을 연결하는 방식이나 기술을 의미합니다. 전쟁 지역에서는 물리적 인프라가 파괴되거나 통신이 차단되는 경우가 많아 전세계 어디서나 연결 가능하고, 지상에서 발생할 수 있는 장애에 영향을 받지 않는 Satellite Interface를 이용합니다.
  • Sensor Network는 센서들이 서로 연결되어 데이터를 수집하고 이를 처리하거나 전송하는 네트워크입니다. 환경 모니터링, 사람들의 위치 추적 등에 사용됩니다.



Propagation Model

  • 자유 공간 (Free Space)
    • 자유 공간은, 공간의 물리적/수학적 모델화를 위한 기초 개념
    • 흡수, 반사, 굴절 등과 같이 매질 방해요소가 없는 공간
    • 때론, 물질 없는 공간(space that is free of matter)
    • 한편, 자유 공간과, 진공,우주를 같은 개념으로 보나, 진공은, 주위 대기압 보다 압력이 낮고 극소량 먼지 만 있는 곳을 주로 지칭. 또한, 지구 밖 우주를 자유공간으로 간주하나, 우주 먼지도 3개 분자/㎥ 정도가 있다함
  • 자유공간 경로손실(Free Space Propagation Loss, FSPL)이란?
    • 송수신 양단 등방성 안테나 간에 구성된 통신 링크 상에서의 송수신 전력의 감소
    • 자유공간 가시거리(Line Of Sight, LOS) 상에서 단지 두 안테나 간의 거리 만에 의해 발생되는 손실
    • 즉, 송수신간 거리 만에 따른 전파 세기의 감쇠 (한 점에서 3차원 공간 상으로 퍼지며 진행하므로 발생하는 손실)
  • 자유공간 수신 전력
    • 후리스 공식에 의함 (거리의 제곱에 반비례, 파장의 제곱에 비례)
    • 자유공간 경로 손실
    • 모델
  • log distance loss model: 로그 거리 경로 손실 모델(log distance loss model)은 건물 내부 또는 인구 밀도가 높은 지역에서 장거리에 걸쳐 신호가 마주치는 경로 손실을 예측하는 무선 전파 모델

node mobility

  • propagationModel.py에 node mobility code 구현
  • sudo python examples/propagationModel.py
  • Mobility Model
    • RandomWalk
    • TruncatedLevyWalk
    • RandomDirection
    • RandomWayPoint
    • GaussMarkov
    • ReferencePoint
    • TimeVariantCommunity
  • Mobility 변경 방법: net.setMobilityModel(time=0, model='RandomDirection', max_x=100, max_y=100, seed=20)
  • Random Walk: sta1 = net.addStation(..., min_x=10, max_x=20, min_y=10, max_y=20, constantDistance=1, constantVelocity=1)
  • RandomWayPoint
    • 이동성 관리에서 랜덤 웨이포인트 모델은 모바일 사용자의 이동에 대한 랜덤 모델이며, 시간에 따라 위치, 속도 및 가속도가 어떻게 변하는지를 보여줌
    • 이동성 모델은 새로운 네트워크 프로토콜을 평가할 때 시뮬레이션 목적으로 사용됨.
    • 랜덤 웨이포인트 모델은 Johnson과 Maltz가 처음 제안함. 단순성과 폭넓은 가용성으로 인해 모바일 임시 네트워크(MANET) 라우팅 프로토콜을 평가하는 데 가장 널리 사용되는 이동성 모델 중 하나임
  • 무작위로 목적지와 속도(최소 속도 또는 최대 속도)를 선택함
    • 초기 지점은 (x1, y1)임. 특정 방향으로 이동합니다.
    • (x2, y2)에 도달하면 다시 방향을 변경해야 함.
    • 초기 지점에서 (x2, y2)까지의 각도와 (x2, y2)에서 (x3, y3)까지의 각도가 다르기 때문입니다. 속도도 다를 수 있습니다.
    • 처음에는 10m/초로 이동하고 두 번째 각도에서는 5m/초로 이동했다고 말할 수 있습니다.
    • 따라서 특정 시간, 즉 일시 정지 시간, 예를 들어 xm/초 동안 해당 시간 동안 멈춘 다음 추가 프로세스를 위해 재개됩니다.
    • 이것이 최종 목적지, 즉 (x9, y9)에 도착할 때까지 작동하는 방식입니다.
    • MN은 시뮬레이션 영역 주변에 무작위로 분포됩니다. 또한 이웃 MN은 전송 범위 내에 있습니다. 이웃 비율의 높은 변동성은 성능에 영향을 미칩니다.
#!/usr/bin/env python

'This example show how to configure Propagation Models'

import sys

from mininet.log import setLogLevel, info
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi

def topology(args):
  "Create a network."
  net = Mininet_wifi()
  
  info("*** Creating nodes\n")
  net.addStation('sta1', antennaHeight='1', antennaGain='5')
  net.addStation('sta2', antennaHeight='1', antennaGain='5')
  ap1 = net.addAccessPoint('ap1', ssid='new-ssid', model='DI524', mode='g', channel='1', position='50,50,0')
  c1 = net.addController('c1')
  
  info("*** Configuring propagation model\n")
  net.setPropagationModel(model="logDistance", exp=4)
  
  info("*** Configuring nodes\n")
  net.configureNodes()
  
  if '-p' not in args:
    net.plotGraph(max_x=100, max_y=100)
    
  net.setMobilityModel(time=0, model='RandomWayPoint', max_x=100, max_y=100, min_v=0.5, max_v=0.5, seed=20)
  
  info("*** Starting network\n")
  net.build()
  c1.start()
  ap1.start([c1])
  
  info("*** Running CLI\n")
  CLI(net)
  
  info("*** Stopping network\n")
  net.stop()

if __name__=='__main__':
  setLogLevel('info')
  topology(sys.argv)

node mobility에 따른 rssi의 변화

  • py sta1.wintfs[0].rssi
  • sta1이 이동하므로 ap1과의 거리에 변경됨으로 rssi값이 변경된다.
  • sta2가 이동하므로 ap1과의 거리에 변경됨으로 rssi값이 변경된다.



Quiz

1. 그래프 상에서 노드의 위치를 표시하며 2차원 뷰를 생성하는 명령어는 무엇인가요?
sudo mn --wifi --plot --position

2. TC(Traffic Control) 명령어를 통해 네트워크 패킷 손실률을 50%로 설정하려면 어떤 명령어를 사용해야 하나요?
sudo tc qdisc add dev enp0s3 root netem loss 50%

3. Mininet-WiFi에서 노드의 3차원 위치를 확인하려면 어떤 명령어를 사용해야 하나요?
sudo mn wifi --plot3d --postion

4. TC(Traffic Control)를 사용하여 네트워크 지연을 200ms로 설정하는 명령어를 작성하시오.
sudo tc qdisc add dev enp0s3 root netem delay 200ms

5. RSSI(Received Signal Strength Indicator)가 무선 네트워크에서 중요한 이유를 설명하고, RSSI가 이동성과 어떤 관계를 가지는지 논하시오.
신호 세기를 측정하여 네트워크 연결 품질 평가 가능.
노드가 AP와 멀어질수록 RSSI 값이 낮아짐.

6. Python 코드를 사용하여 Station(sta1)의 위치를 (250, 250, 0)으로 이동시키는 명령어를 작성하시오.
py sta1.setPostion('250,250,0')

7. wmediumd 채널 모델을 사용하여 토폴로지를 생성하고, sta1과 AP(ap1)의 링크 상태를 확인하려면 어떤 명령어를 사용해야 하나요?
sudo mn --wifi --link=wmediumd --topo linear, 4 --position --plot
sta1 iw dev sta1-wlan0 link

8. Mobility Model 중 노드가 랜덤하게 이동 방향을 설정하고 일정 시간 멈추었다가 이동하는 모델은 무엇인가요?
RandomWayPoint

9. wmediumd와 iw 채널 모델의 차이점을 설명하시오.
wmdiumd는 rssi 값을 실시간으로 가져오는 반면, iw는 최신 rssi값을 반영하지 않습니다.

10. Mininet-WiFi에서 RandomDirection 이동 모델을 설정하려면 어떤 명령어를 사용해야 하나요?
net.setMobilityModel(time=0, model='RandomDirection', max_x=100, max_y=100, seed=20)

profile
해담이를먹여살리기위한..

0개의 댓글