sns 무선 채널 모델 비교

해담·2024년 11월 27일
post-thumbnail

노드 이동에 따른 무선 채널 및 토폴로지 변화

세 번째 예제

  • 노드 이동성에 따른 네트워크 토폴로지 변화
    • 무선 채널과의 연관성
    • 노드 이동 확인
    • tutorial #3: mobility.py
# mobility.py
#!/usr/bin/env python

'Setting the position of nodes and providing mobility'
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")
  h1 = net.addHost('h1', mac='00:00:00:00:00:01', ip='10.0.0.1/8')
  sta1 = net.addStation('sta1', mac='00:00:00:00:00:02', ip='10.0.0.2/8')
  sta2 = net.addStation('sta2', mac='00:00:00:00:00:03', ip='10.0.0.3/8')
  ap1 = net.addAccessPoint('ap1', ssid='new-ssid', mode='g', channel='1', position='45,40,0')
  c1 = net.addController('c1')
  
  info("*** Configuring propagation model\n")
  net.setPropagationModel(model="logDistance", exp=4.5)
  
  info("*** Configuring nodes\n")
  net.configureNodes()
  
  info("*** Associating and Creating links\n")
  net.addLink(ap1, h1)
  
  if '-p' not in args:
    net.plotGraph(max_x=120, max_y=120)
  
  if '-c' in args:
    sta1.coord = ['40.0,30.0,0.0', '31.0,10.0,0.0', '31.0,30.0,0.0']
    sta2.coord = ['40.0,40.0,0.0','55.0,31.0,0.0','55.0,81.0,0.0']
  
  net.startMobility(time=0, mob_rep=1, reverse=False)
  
  p1, p2, p3, p4 = {}, {}, {}, {}
  
  if '-c' not in args:
    p1 = {'position': '40.0,30.0,0.0'} # sta1 시작점
    p2 = {'position': '40.0,40.0,0.0'} # sta2 시작점
    p3 = {'position': '31.0,10.0,0.0'} # sta1 종점
    p4 = {'position': '55.0,31.0,0.0'} # sta2 종점

  net.mobility(sta1,'start', time=1, **p1) # sta1 시작점
  net.mobility(sta2,'start', time=2, **p2) # sta2 시작점
  net.mobility(sta1,'stop', time=12, **p3) # sta1 종점
  net.mobility(sta2,'stop', time=22, **p4) # sta2 종점
  net.stopMobility(time=23)
  
  # net.mobility(sta1, 'start', time=1, position='20,30,0')
  # net.mobility(sta1, 'stop', time=80, position='80,30,0')
  
  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)

링크 분석: 5개의 링크에 대한 해석

이동 시작전/후 토폴로지

이동 시작전 토폴로지 이동 완료후 토폴로지

ping 테스트

  • sta1 ping -c3 sta2: sta1은 ap1의 전송 반경 안에 있으며, sta2도 ap2의 반경안에 위치함으로 sta1의 ping 메시지는 ap1을 거쳐서 sta2에 전송됨
  • sta2 노드 이동

    • sta2 종점을 (55.31)에서 (100, 40)으로 변경해서 이동 종료시 ap1의 전송 반경 밖으로 벗어나도록 함

    • sta2는 종점에서 ap1의 변경안에 속하지 못하고 있음. 따라서 sat1은 sta2에 접속할 수 없음

      • sta1 ping -c3 sta3로 확인
  • sta3 노드 추가

    • net.addStation() 명령어 사용으로 sta3 노드 추가

    • sta3 초기 시작점 p3=(31, 10) 과 종점 p6=(60,70)

    • 이동 확인: sta2가 ap1의 전송 반경 내에 있으면, ping 가능하지만, 전송 반경 밖에 있으면, ping 불가능함

    • 이동 완료 후 ping 테스트

      • sta1 ping -c3 sta3 로 연결 확인

      • sta1 ping -c3 sta2 로 연결 단절 확인

네 번째 예제

  • 노드 이동에 따른 무선 채널 변화와 토폴로지 변화
    • Mininet-WiFi Tutorial : Multiple access points
      이 튜토리얼에서는 세 개의 액세스 포인트가 있는 선형 토폴로지를 생성하며, 여기서 하나의 스테이션이 있습니다
      는 각 액세스 포인트에 연결되어 있습니다. 기본 미니넷은 이미 알아야 한다는 점을 기억하세요
      미니넷 명령어 라인을 사용하여 토폴로지를 만드는 방법을 이해하는 명령어입니다.
      Minnet-Wifi를 실행하고 세 개의 액세스 포인트가 있는 선형 토폴로지를 만듭니다: sudo mn --wifi --topo linear,3

명령어의 출력을 통해 네트워크가 어떻게 설정되어 있는지, 어떤 것을 확인할 수 있습니다
스테이션은 액세스 포인트와 연결됩니다.
Creating network
Adding controller
*** Adding hosts and stations:
sta1 sta2 sta3

*** Adding switches and access point(s):
ap1 ap2 ap3

*** Adding links and associating station(s):
(ap2, ap1) (ap3, ap2) (sta1, ap1) (sta2, ap2) (sta3, ap3)

  • sudo mn --wifi --topo linear,3 로 네트워크 형성

  • net 명령어 사용

  • scan 명령어 사용

  • link 명령어 사용으로 ssid_ap1에 연결됨 확인

  • disconnect 명령어로 ssid_ap1 에 연결된 sta1-wlan0을 단절함

  • sta1-wlan0을 connect 명령어를 사용해서 ssid_ap2에 연결 -> link 명령어로 sta1-wlan0이 ssid_ap2 에 연결 확인




거리와 rssi 관계 (Distance versus Received Signal)

  • wmediumd_interference.py 파일에서 거리가 멀어지면 rssi 값이 더 낮아지는
    현상 파악

    • 거리가 멀어지면 rssi 값이 -79로 더 떨어짐. (기존 -63)
  1. 이동 전 distance 확인

  2. sta1 이동

  3. 이동 후 distance 확인




거리와 bps (bits per seconds) 관계 (bitrate 변경)

  • wmediumd_interference.py 파일에서 sta1과 sta2 사이의 현재 bitrate
  1. bitrate 수정

  2. 최대 bitrate를 9로 수정해서 9가 최대 bitrate가 됨

  3. 최대 bitrate를 6으로 한정함




노드 이동에 따른 변화 확인 명령어: scan

  • handover bgscan.py

  • 생성 토폴로지

  • 코드 내용

#!/usr/bin/env python

""" Handover example supported by bgscan (Background scanning) and wmediumd.

ieee 802.11r can be enabled adding the parameters below:

ieee80211r='yes'
mobility_domain='a1b2'

e.g. ap1 = net.addAccessPoint('ap1', ..., ieee80211r='yes',
mobility_domain='a1b2', ...)

Consider https://w1.fi/cgit/hostap/plain/wpa_supplicant/wpa_supplicant.conf
for more information about bgscan"""

import sys

from mininet.node import Controller
from mininet.log import setLogLevel, info
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi
from mn_wifi.link import wmediumd
from mn_wifi.wmediumdConnector import interference

def topology(args):
  "Create a network."
  net = Mininet_wifi(controller=Controller, link=wmediumd, wmediumd_mode=interference)
  
  info("*** Creating nodes\n")
  net.addStation('sta1', position='15,20,0', bgscan_threshold=-60, s_inverval=5, l_interval=10, bgscan_module="simple")
  
  ap1 = net.addAccessPoint('ap1', mac='00:00:00:00:00:01', ssid="handover", mode="g", channel="1", passwd='123456789a', encrypt='wpa2', position='10,30,0', datapath='user')
  ap2 = net.addAccessPoint('ap2', mac='00:00:00:00:00:02', ssid="handover", mode="g", channel="6", passwd='123456789a', encrypt='wpa2', position='60,30,0', datapath='user')
  ap3 = net.addAccessPoint('ap3', mac='00:00:00:00:00:03', ssid="handover", mode="g", channel="1", passwd='123456789a', encrypt='wpa2', position='120,100,0', datapath='user')
  c1 = net.addController('c1')
  
  info("*** Configuring Propagation Model\n")
  net.setPropagationModel(model="logDistance", exp=3.5)
  
  info("*** Configuring nodes\n")
  net.configureNodes()
  
  info("*** Creating links\n")
  net.addLink(ap1, ap2)
  net.addLink(ap2, ap3)
  
  if '-p' not in args:
    net.plotGraph(min_x=-100, min_y=-100, max_x=200, max_y=200)
    
  info("*** Starting network\n")
  net.build()
  c1.start()
  ap1.start([c1])
  ap2.start([c1])
  ap3.start([c1])
  
  info("*** Running CLI\n")
  CLI(net)
  
  info("*** Stopping network\n")
  net.stop()
  
if __name__=='__main__':
  setLogLevel('info')
  topology(sys.argv)
  • xterm sta1 사용

    • wpa_cli
      • wpa_cli를 실행하면 그림과 같이 표시되며 사용하는 무선랜 인터페이스가 sta1-wlan0 임을 확인할 수 있다.
      • 우분투(리눅스) 머신에서의 Wi-Fi 기반의 무선통신은 wpa_supplicant라는 프로그램이 담당한다.
      • 일반적으로 우분투의 네트워크 매니저를 통해 AP를 검색하거나 접속을 시도할 수 있는데, 실제 네트워크 매니저의 하부에서 wpa_supplicant가 동작한다.
      • 이 wpa_supplicant를 터미널 상에서 제어하기 위해서는 wpa_cli(command line interface)를 이용한다.
  • sta1 iwconfig 명령어 사용으로 사용 무선 랜 확인

  • sta1이 sta1-wlan0 무선랜을 사용하여 연결할 수 있는 모든 ap들을 scanning

    • sta1 iw dev sta1-wlan0 scan 사용 전 wpa_cli 명령어 프로세스 중지

    • sta1 iw dev sta1-wlan0 scan 명령어 사용으로 사용 가능한 ap 리스트 확보

      • ap1의 전송 반경안에 sta1 위치함
      • ap2의 전송 반경안에 sta1 위치함
      • ap3의 전송 반경밖에 sta1 위치함으로 접속 가능한 ap는 ap1과 ap2임
    • sta1 이동시 접속 가능한 ap 확보

      • 사용 명령어 : py sta1.setPosition

      • py sta1.moveNodeT o(‘150,120,0’) : moveNodeT o 명령어는 없음

      • py sta1.setPosition(‘150,120,0’)

    • sta1 이동시 접속 가능한 ap 스캔

      • sta1 iw dev sta1-wlan0 scan
      • ap3에 접속한 sta1



거리에 따른 처리량 변화 (Distance versus Throughput)

  • 처리량 (네트워크 출력 또는 Throughput)

    • 어떤 시간동안 네트워크의 한 포인트에서 다른 포인트로 데이터를 전송하는 능력
    • 포인트 사이의 링크를 통해 전송되는 데이터의 속도를 결정함
    • iperf 명령어를 통해 측정 가능함
    • 두 포인트 간의 거리는 Throughput과 bandwidth에 영향을 끼침
    • Throughput은 네트워크에서 초당 실제로 처리되는 패킷의 양을 나타내는 실용(치)적인 지표이다.
    • 반면 Bandwidth (대역폭)은 네트워크에서 잠재적으로 동시에 전송될 수 있는 데이터의 최대치를 나타낸다.
  • 대상 코드 파일 : position.py

  • 위치 확인

  • 거리 확인

  • 토폴로지 확인

  • iperf sta1 sta2 명령어: bandwidth 측정 -> bandwidth는 Throughput 을 결정함

  • 노드 이동

    • sta1 위치 이동 : 30,60 → 40, 90
    • sta2 위치 이동 : 70,30 → 60, 10
  • 거리 변동 확인

    • distance sta1 sta2 : 50 → 82.46
    • distance sta1 ap1 : 22.36 → 41.23
    • distance sta2 ap1 : 28.28 → 41.23
  • 거리 변동 후 토폴로지 확인

  • iperf sta1 sta2 명령어

    • bandwidth 측정 -> bandwidth는 Throughput 을 결정함
    • 8.4 → 6.3 으로 대역폭이 줄어듦: 거리의 멀어짐에 따라 Throughput에 직접적인 영향을 미치는 대역폭이 줄어듦



속도 변화에 따른 Mobility Model

  • mobilityModel.py

    • randomDirection mobility 모델을 사용함
  • graph 에서 stop으로 노드 이동을 정지시키고 start로 노드 이동을 진행함

  • sta1의 속도를 10 → 30으로 증가해서 mobility (이동성) 확인

    • max_v=10 → max_v=30 을 변경
#!/usr/bin/env python

'Setting the position of Nodes and providing mobility using mobility 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', mac='00:00:00:00:00:02', ip='10.0.0.2/8', min_x=10, max_x=30, min_y=50, max_y=70, min_v=5, max_v=10)
  net.addStation('sta2', mac='00:00:00:00:00:03', ip='10.0.0.3/8', min_x=60, max_x=70, min_y=10, max_y=20, min
_v=1, max_v=5)

if '-m' in args:
  ap1 = net.addAccessPoint('ap1', wlans=2, ssid='ssid1,ssid2', mode='g', channel='1', failMode="standalone", position='50,50,0')

else:
  ap1 = net.addAccessPoint('ap1', ssid='new-ssid', mode='g', channel='1', failMode="standalone", position='50,50,0')
  
  info("*** Configuring nodes\n")
  net.configureNodes()
  
  if '-p' not in args:
    net.plotGraph()
    
  net.setMobilityModel(time=0, model='RandomDirection', max_x=100, max_y=100, seed=20)
    
  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)



Mobility 이동성

  • ap2의 이동 위치와 sta1의 최종 목적지 위치 변경

    • mobility.py
  • 토폴로지

  • ap2의 위치와 sta1의 최종 목적지가 다르게 만들어 보기

    • ap2 : position='80,30,0'
    • sta1 : position='80,80,0'
  • ap2의 위치와 sta1의 최종 목적지가 같음




Quiz

1. Log Distance 채널 모델에서 RSSI 감쇠가 Friis 채널 모델보다 더 큰 이유는 무엇인가요?
fiis는 자유공간을 모방하여 노이즈가 적은 이상적인 네트워크 환경이며, Log distance는 실제 네트워크 환경을 모방하였기 때문입니다.

2. STA가 AP로 핸드오버를 수행하는 데 영향을 미치는 주요 요인은 무엇인가요?
STA와 AP 간의 거리 및 RSSI 값

3. Mininet-WiFi에서 handover.py를 실행하여 STA가 AP 간 핸드오버를 수행하는 과정에서 CLI 명령어로 AP와의 연결 상태를 확인하는 방법을 작성하시오.
sta1 iw dev sta1-wlan0 link

5. RSSI 값이 핸드오버 및 네트워크 성능에 미치는 영향을 설명하시오.
RSSI가 특정 임계값 이하로 떨어지면 STA는 다른 AP로 핸드오버를 수행함.

6. STA(sta1)를 AP1에서 AP2로 이동하면서 핸드오버를 시뮬레이션하는 Python 명령어를 작성하시오.
net.mobility(sta1, 'start', time=1, position='20,30,0')
net.mobility(sta1, 'stop', time=20, position='80,30,0')

7. Friis 채널 모델을 적용하고 STA와 AP 간의 RSSI 값을 확인하는 명령어를 작성하시오.
net.setPropagationModel(model="friis")
py sta1.wintfs[0].rssi

8. STA(sta1)가 AP1의 전송 반경을 벗어나 AP2로 핸드오버를 수행하는 중간 상태는 무엇인가요?
STA가 AP1과 AP2에 모두 연결됨.

9. Mininet-WiFi에서 핸드오버를 실험할 때, AP 배치와 STA 이동 경로가 네트워크 성능에 미치는 영향을 설명하시오.
AP의 전송 반경이 겹치지 않으면 핸드오버 지연 및 연결 손실 발생 가능. 겹침 구역에서 핸드오버가 원활히 수행됨.
직선 이동 경로는 최적의 AP 선택 가능성을 높임​.

10. Mininet-WiFi에서 AP1과 AP2 간 링크를 설정한 뒤, 연결 속도와 지연 시간을 각각 25Mbps, 50ms로 설정하는 명령어를 작성하시오.
net.addLink(ap1, ap2, bw=25, delay='50ms')
bw(bandwidth): 대역폭

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

0개의 댓글