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


Traffic Control이란 리눅스에서 트래픽 컨트롤 기능을 제공하는 도구입니다. 사용자로 하여금 네트워크의 Queue와 Queuing 메커니즘을 제어할 수 있도록 도와줍니다.
TC의 Queue는 일반적으로 FIFO를 사용하며, 인터페이스의 패킷 Input과 Output에서 패킷의 송수신 속도와 순서를 결정할 수 있습니다. qdisc(Queueing Discipline)는 TC의 핵심 개념 중 하나로, 네트워크 스택에서 패킷의 큐잉 및 처리 방식을 정의합니다. 이는 단순한 FIFO 큐로 인위적인 패킷 유실, 패킷 지연, 전송 속도 제한 등을 조절할 수 있습니다. qdisc의 종류에는 총 대역폭을 제한하는 TBF, HTB with child class 등이 있습니다.
ip route: 대표 인터페이스를 확인할 수 있습니다. 만약 네트워크 인터페이스가 여러 개 있을 때는, ip route 명령어를 입력하여 default 항목에 있는 인터페이스 ID(dev 뒤에 존재)를 입력할 수 있습니다.

ping -c3 8.8.8.8: 구글(8.8.8.8)로 ping 테스트 시, 평균 rtt time은 39.7ms가 걸립니다.
sudo tc qdisc add dev enp0s3 root netem delay 200ms: 네트워크 인터페이스에 200ms의 지연을 추가하는 명령어입니다. 이처럼 RTT 속도를 200ms로 설정하여 인위적으로 느린 망을 만들었습니다.
인터페이스를 통과하는 Packet이 일정한 확률로 loss가 발생하도록 만드는 기능입니다.
1. ping -c30 8.8.8.8: 현재 네트워크 상태 확인


node와 무선 링크 생성
1. cd mininet-wifi/
2. sudo python examples/miniedit.py
sudo mn --wifi --plot --position: 2차원 노드 view 확인 명령어

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

#!/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)

RSSI(Received Signal Strength Indicator)는 AP 무선 신호를 측정한 것으로, 일반적으로 클라이언트에서 측정함
py sta1.wintfs[0].rssi 명령어 사용
sta1 iw dev sta1-wlan0 scan
py sta1.setPosition('250,250,0') 으로 sta1의 위치를 이동 시킴 -> sta1은 이제 더 이상 ap1과 결속 되어 있지 않다.
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의 전송 범위 밖에 있어서 통신이 단절되었음을 보여줌
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:
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
MANET는 중앙 집중적인 인프라가 없는 동적이고 자율적인 네트워크입니다. 노드가 이동하거나 추가/삭제되더라도 네트워크가 자체적으로 구성되고 유지될 수 있는 특징을 가집니다.




#!/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)
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)