무선 채널 모델 비교와 핸드오버 (로밍)

해담·2024년 11월 27일

position 옵션을 통한 Mobility 비활성화

position 옵션을 생성하면 노드의 Mobility가 동작하지 않습니다.

propagationModel.py에서 position(‘x, y, z’) 코드를 작성하면 노드의 Mobility가 생성되지 않고 그 위치에 고정된다. 설령, propagationModel.py에 RandomWayPoint Mobility model이 있더라도 노드가 움직이지 않습니다.

다시 position 옵션을 지워주게 되면 노드 움직임이 되살아나, RandomWayPoint Mobility model이 작동하게 됩니다.




노드 위치 고정시 무선 채널 모델 비교 (logDistance 채널과 friis 채널)

propagationModel.py 파일을 이용하여, sta1, sta2, sta3 위치를 고정시켜 움직이지 못하게 하였습니다.

  • ap1의 위치는 (50,50,0)으로 sta1(30,30,0), sta2(20,20,0), sta3(10,10,0)으로, 위치를 비교할 때 ap1과 가장 가까운 sta은 sta1입니다.

logDistance 채널 사용

ap1에서 멀어질 수록 rssi 신호 감쇠가 심해집니다.
1. py sta1.wintfs[0].rssi :-74 dB
2. py sta2.wintfs[0].rssi :-81 dB
3. py sta3.wintfs[0].rssi : -86 dB

friis 채널 사용

ap1에서 멀어질 수록 rssi 신호 감쇠가 심해집니다.

friis 채널에서 감쇠가 있는 것은 logDistance 채널과 동일하나, 감쇠 값이 덜 심함을 확인할 수 있습니다. 왜냐하면, friis 채널은 자유 공간을 모델링하고 logDistance 채널은 채널 간섭이 있는 실제 공간을 모델링하였기 때문입니다.

  1. py sta1.wintfs[0].rssi :-45 dB
  2. py sta2.wintfs[0].rssi :-48 dB
  3. py sta3.wintfs[0].rssi : -51 dB
    -> friis 채널이 logDistance 채널보다 자유공간(Free Space) 채널로 감쇠로 인한 채널 노이즈가 적은 이상적인 채널임을 확인할 수 있습니다.



노드 위치 변화시 무선 채널 모델 비교 (logDistance 채널과 friis 채널)

logDistance 채널

net.setPropagationModel(model="logDistance", exp=4)

RandomWayPoint mobility 모델 적용이 되어 노드 위치는 시간에 따라 변화하게 되며, 이는 ap1과 각 sta 사이의 거리가 시간에 따라 변화한다는 것을 의미합니다.

py sta1.wintfs[0].rssi: -87 dB

friis 채널

net.setPropagationModel(model="friis", exp=4)

RandomWayPoint mobility 모델 적용이 되어 노드 위치는 시간에 따라 변화하게 되며, 이는 ap1과 각 sta 사이의 거리가 시간에 따라 변화한다는 것을 의미합니다.

py sta1.wintfs[0].rssi: -48dB

friis 채널은 rssi가 -48dB로 logDistance 채널의 rssi -87dB보다 훨씬 더 신호 감쇠가 덜 합니다. 왜냐하면, friis 채널은 자유 공간을 모델링하고 logDistance 채널은 채널 간섭이 있는 실제 공간을 모델링하였기 때문입니다.




노드 이동성에 관련된 예제 샘플 코드 파일

첫 번째 예제

  • 노드 이동에 따른 무선 채널 변화와 토폴로지 변화 체크 가능

    • tutorial #1: position.py -> sudo python position.py

    • 2차원 그래프
      - sta1은 ap1의 전송 반경 안에 위치하고 있으며, sta2는 ap1의 전송 반경 안에 위치하고 있음
      - sta1, sta2, ap1은 고정된 노드

    • 3차원 그래프: net.plotGraph() 함수에 max_z 옵션을 추가

두 번째 예제

  • 노드 이동에 따른 ap 접속 핸드오버 (로밍) 확인 예제: 노드 이동에 따른 무선 채널 변화와 토폴로지 변화
    • tutorial #2: handover.py
    • 토폴로지 변화에 따른 핸드 오버 진행 상황을 실제로 보여주는 예제
    • 토폴로지 변화에서는 노드 이동과 노드 이동에 따른 각 노드의 전송 반경의 포함 여부가 중요함
  • 핸드오버 진행 상황
    • 핸드오버(Handover)는 기기가 하나의 네트워크에서 다른 네트워크로 연결을 옮기는 과정입니다. 집에서 Wi-Fi를 쓰다가 밖으로 나가면, Wi-Fi 신호가 끊기면서 LTE로 바뀌는 것도 핸드오버의 예입니다. 핸드오버 덕분에 이동 중에도 통화, 인터넷, 영상 스트리밍 등이 끊기지 않습니다.

세 번째 예제

  • handover_sckim.py 예제 코드를 통한 토폴로지 이해하기

    • tutorial #3: handover_sckim.py
  • 코드 분석

    • ap1의 고정 위치 (20,30,0)와 ap2의 고정 위치 (80, 30,0) 확인
    • ap1과 ap2의 전송 반경은 30m
      • ap1 = net.addAccessPoint('ap1', ssid='ssid-ap1', mode='g', channel='1', position='20,30,0' , range=30)
      • ap2 = net.addAccessPoint('ap2', ssid='ssid-ap2', mode='g', channel='6', position='80,30,0', range=30)
    • sta1의 전송 반경은 20m
      • ap1과 ap2의 전송 반경보다 sta1의 전송 반경이 작음
      • sta1 = net.addStation('sta1', mac='00:00:00:00:00:02',ip='10.0.0.2/8', range=20)
      • sta1은 position=' ‘ 옵션을 가지지 않아야 이동할 수 있음. 따라서 sta1은 position=' ‘ 옵션없이 이동함
    • net.addLink(ap1, sta1, bw=25, delay='25ms')
      • ap1과 sta1 사이 무선 링크가 생성되어 서로 연결됨.
      • ap1 무선은 자신 주변으로 360도로 자신의 전송 반경 안에서 서비스 지원가능하나, ap1 송신자와 sta1 수신자가 associated(결합체결) 과정을 거쳐야 무선 링크가 생성됨.
      • 즉, 예를 들면, 공유기(ap1)에 sta1이 아이디외 비번을 입력하는 인증 과정을 거치면 무선 연결이 완료됨. 이 과정을 IEEE 802.11 RFC에서는 associated라고 함
      • associated 인증 과정을 거치지 않으면, sta1은 ap1의 전송 반경 360도 안에 있으나, ap1의 서비스를 받지 못하는 상태로 링크가 없는 상태
      • net.addLink(ap2, sta1, bw=10, delay='70ms')
        • ap2와 sta1 사이 무선 링크가 생성되어 서로 연결됨
        • 처음 시작시에는 ap1과 sta1 사이 무선 링크가 생성되어 있고, ap2와 sta1 사이 무선 링크는 핸드 오버 과정에서 생성됨
        • ap들 사이에서 sta1의 정보 전달을 통해 sta1을 ap2로 전달해 줌
      • net.addLink(ap1, s1, bw=25, delay='25ms'): ap1과 s1 사이 연결
      • net.addLink(ap2, s2, bw=10, delay='70ms'): ap2와 s1 사이 연결
      • net.addLink(s1, h1, bw=60): s1과 h1 사이 연결
      • net.addLink(s2, h1, bw=60): s2 와 h1 사이 연결
    • net.plotGraph(max_x=100, max_y=100)
      • plotGraph으로 sta1, ap1, ap2 그리고 전송 반경, sta1의 이동을 표현? 포함?함
      • net.startMobility(time=0): sta1 이동은 time=0에서 시작을 준비함
      • net.mobility(sta1, 'start', time=1, position='20,30,0'): sta1 이동 시작 (start) 은 time=1에서 시작하며, 시작 위치는 position='20,30,0’임
      • net.mobility(sta1, 'stop', time=80, position='80,30,0')
        • sta1 이동 종료 (stop) 은 time=80에서 종료하며, 종료 위치는 position='80,30,0’임
        • sta1은 time=1, 시작 위치 position='20,30,0’에서 이동을 시작 (start) 해서 time=80,종료 위치 position='80,30,0에서 이동을 종료해야 함
        • 즉 79초 사이에 60m를 이동해야 함
        • 속도는 거리/시간 임으로 60m/79sec = 0.76 m/sec로 1초에 0.76m 이동하는 이동체임
      • net.stopMobility(time=181): 모든 노드의 이동은 time=181에서는 종료되어야 함
# handover_sckim.py
#!/usr/bin/env python

"""Example for Handover"""
import sys #sckim
import time
from mininet.node import Controller
from mininet.log import setLogLevel, info
from mn_wifi.cli import CLI
from mn_wifi.net import Mininet_wifi

def topology():
  "Create a network."
  net = Mininet_wifi(controller=Controller)
  info("*** Creating nodes\n")
  sta1 = net.addStation('sta1', mac='00:00:00:00:00:02', ip='10.0.0.2/8', range=20)
  ap1 = net.addAccessPoint('ap1', ssid='ssid-ap1', mode='g', channel='1', position='20,30,0', range=30)
  ap2 = net.addAccessPoint('ap2', ssid='ssid-ap2', mode='g', channel='6', position='80,30,0', range=30)
  s1 = net.addSwitch('s1')
  s2 = net.addSwitch('s2')
  h1 = net.addHost('h1', ip='10.0.0.3/8')
  c1 = net.addController('c1')
  
  net.setPropagationModel(model="logDistance", exp=5)
  
  info("*** Configuring wifi nodes\n")
  net.configureWifiNodes()
  
  info("*** Creating links\n")
  net.addLink(ap1, sta1, bw=25, delay='25ms')
  net.addLink(ap2, sta1, bw=10, delay='70ms')
  net.addLink(ap1, s1, bw=25, delay='25ms')
  net.addLink(ap2, s2, bw=10, delay='70ms')
  net.addLink(s1, h1, bw=60)
  net.addLink(s2, h1, bw=60)
  
  net.plotGraph(max_x=100, max_y=100)
  net.startMobility(time=0)
  net.mobility(sta1,'start', time=1, position='20,30,0')
  net.mobility(sta1,'stop', time=80, position='80,30,0')
  net.stopMobility(time=181)
  
  info("*** Starting network\n")
  net.build()
  c1.start()
  ap1.start([c1])
  ap2.start([c1])
  s1.start([c1])
  
  info("*** Running CLI\n")
  CLI(net)
  
  info("*** Stopping network\n")
  net.stop()

if __name__== 'main':
  setLogLevel('info')
  topology()



노드 이동성에 따른 네트워크 토폴로지 변화

  • 무선 채널과의 연관성 고려



네트워크 토폴로지

  • h1 서버는 ap1을 통해서 접속할 수도 있고, ap2를 통해서 접속할 수도 있습니다.
  • ap1과 ap2의 역할은 sta1이 h1과 통신할 수 있도록 해주는 역할입니다.
  • ap1과 ap2, sta1의 구조
    • s1과 s2는 각각 ap1과 ap2에 연결된다.
    • h1은 클라우드상에 위치하는 s1괴 s2를 통해 접속되는 호스트 서버이다.
      net.addLink(ap1, sta1, bw=25, delay='25ms')
      net.addLink(ap2, sta1, bw=10, delay='70ms')
      net.addLink(ap1, s1, bw=25, delay='25ms')
      net.addLink(ap2, s2, bw=10, delay='70ms')
      net.addLink(s1, h1, bw=60)
      net.addLink(s2, h1, bw=60)

mininet 명령어를 이용한 토폴로지 구조 이해

  • h1: 10.0.0.3: server의 역할을 하는 호스트

  • sta1: 10.0.0.2: 클라이언트의 역할을 하는 sta1

  • xterm sta1 h1

  • [서버측 성능] h1 server 역할에 대한 iperf 성능 점검

    • h1 server는 5001 포트를 listening port로 사용
    • iperf -s -i 1
  • [클라이언트] 10.0.0.2로 지정된 sta1이 10.0.0.3으로 지정된 h1 서버 호스트에
    접속함
    • iperf로 bw 점검
    • 10.0.0.2로 지정된 sta1의 port 번호는 40784임
    • iperf -c 10.0.0.3 -t 100 -i 1



Quiz

1. Friis 채널 모델과 Log Distance 채널 모델의 주요 차이점은 무엇인가요?
friis는 자유공간을 모방하여 노이즈가 적은 이상적인 네트워크 환경입니다. 그에 반해 Log Distance는 실제 네트워크 환경을 모방하여 fiis보다 신호 감쇠(rssi)가 심합니다.

2. 노드가 이동하지 않도록 고정하려면 어떤 Python 코드를 사용해야 하나요?
sta1.setPosition('x,y,z')

3. Log Distance 채널 모델과 Friis 채널 모델을 비교하여 RSSI 감쇠 차이를 설명하시오.
friis는 자유공간을 모방하여 노이즈가 적은 이상적인 네트워크 환경입니다. 그에 반해 Log Distance는 실제 네트워크 환경을 모방하여 fiis보다 신호 감쇠(rssi)가 심합니다.

4. Mininet-WiFi에서 핸드오버(handover)를 테스트하려면 어떤 예제 파일을 사용해야 하나요? 실행 명령어를 포함하여 작성하시오.
sudo python handover.py

5. 핸드오버가 발생하는 과정을 설명하고, AP 전송 반경과 노드의 이동 경로가 핸드오버에 미치는 영향을 논하시오.
1. 노드가 AP1의 전송 반경에서 시작하여 AP2로 이동.
2. 중간 단계에서 두 AP의 전송 반경에 모두 포함.
3. AP1 전송 반경을 벗어나면 AP2로 연결 변경.
전송 반경이 좁으면 핸드오버 빈도가 증가하여 네트워크 지연 발생 가능.

6. AP(ap1)의 전송 반경을 30m로 설정하고, STA(sta1)의 전송 반경을 20m로 설정하는 명령어를 작성하시오.
ap1 = net.addAccessPoint('ap1', ssid='ssid-ap1', range=30)
sta1 = net.addStation('sta1', range=20)

7. 핸드오버 시 AP1에서 AP2로 이동하는 STA(sta1)의 시작 및 종료 위치를 설정하는 명령어를 작성하시오.
net.mobility(sta1, 'start', time=1, position='20,30,0')
net.mobility(sta1, 'stop', time=80, position='80,30,0')

8. Mininet-WiFi에서 핸드오버를 시뮬레이션할 때 사용되는 이동 모델은 무엇인가요?
RandomWayPoint

9. Friis 채널 모델을 사용하는 네트워크에서 STA(sta1)의 RSSI 값을 확인하는 Python 명령어를 작성하시오.
py sta1.wintfs[0].rssi

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

0개의 댓글