minzzl

Network Simulator - NS-3 소개, 그리고 설치 방법 본문

논문/QUIC

Network Simulator - NS-3 소개, 그리고 설치 방법

minzzl 2023. 3. 7. 16:24
728x90
반응형

안녕하세용

저는 이제 본격적인 실험을 하려고 하는데요, 이번 실험에서 ns3를 사용해볼까 합니다.

그런데 전.. 이런게 있는지도 몰랐었거든요 ... ^^

그래서 시작 전에 정리를 해볼까합니다 ~!

 

Network Simulator(네트워크 시뮬레이터)

 

실제 동작을 관찰하지 않고, 네트워크의 동작과 영향을 예측하고 분석하기 위한 장치 또는 소프트웨어를 말합니다.

 

NS-3

 

NS-3는 NS-2에 이어 새롭게 개발된, 잘 알려진 무료 오픈 소스 네트워크 시뮬레이터입니다. 

TCP/IP와 같은 유선 네트워크 뿐만 아니라 Wifi, LTE 등 무선 네트워크에 대한 시뮬레이션도 쉽게 수행 할 수 있습니다. 

 

그렇다면 NS-3는 어떻게 동작할까요?

 

아래의 그림은 NS-3의 데이터 흐름에 대한 모델입니다. 

NS-3의 데이터 흐름에 대한 Model

Application에서 Socket API를 사용하는 것과 같이하여 프로토콜 스택에서 패킷을 NetDevice(Hardware Device)를 이용하여 channel을 통해 다른 NetDevice로 보내는 과정을 이용하여 Data를 이동시킵니다. 

 

 

우리는 왜 네트워크 시뮬레이터를 써야하는가

 

우선, 사람들이 많이 사용하기 때문입니다.

상당 수의 네트워크 프로토콜 관련 논문이 NS-3 기반으로 시뮬레이션을 합니다. 이는 신뢰할 수 있는 시뮬레이터로 인정받고 있다는 뜻입니다. 비교 관계에 있는 프로토콜을 시뮬레이션 해야하는 입장에서 최근의 논문들이 NS-3로 시뮬레이션을 합니다.

 

또한 계층적으로 코딩이 가능하기 때문에 현재의 컴퓨터 네트워크 프로토콜의 레이어 아키텍쳐와 잘 맞습니다. 그렇기 때문에 시뮬레이션에 필요한 부분만 확인하고 코딩이 가능합니다. 이러한 개발로 인해 소스 코드가 덜 복잡하여 읽고 이해하는 것을 쉽게 만듭니다.

 

구현이 되어 있는 기능이 많고 개발 생태계가 구축되어 있어서 지원받기 용이합니다. 잘 찾아보면 NS-3 공식 GitHub 에 없는 기능이라도 개인 Github에 있는 경우를 쉽게 발견할 수 있습니다. 

 

사실 특정한 물리적인 네트워크 topology 에 대해서 traffic의 특징을 분석하는 것은 매우 시간적/금전적으로 비효율적입니다. 반면 ns-3 시뮬레이션에서는 link, network, transport, application layer 가 모두 소프트웨어적으로 구현되어있기 때문에 물리적인 topology 없이도 네트워크 traffic의 특성들을 손쉽게 분석할 수 있습니다.

 

Download

 

그럼 NS3를 설치해보겠습니다.

 

우선 저는 ns3.33 버전을 설치했습니다!  

이유는 ... 제가 찾아본 자료들에는 waf 파일로 시뮬레이션을 시작하던데 ... 최근꺼는 아니더라구요 .. 그래서 맘 편히 레퍼런스가 많은 걸로 ^^ (그나마 삽질 덜 하고 싶었음)

 

https://www.nsnam.org/releases/ns-3-33/

 

ns-3.33

a discrete-event network simulator for internet systems

www.nsnam.org

 

그냥 해당 페이지에서 원하는 버전을 다운 받고 압축을 푸시면 됩니다!

 

다운로드 받으시면, tar.bz2 압축파일이 생깁니다. 이를 풀기 위해서 다음과 같은 명령어를 이용하면 압축이 풀립니당

 

tar xvjf ns-allinone-3.33.tar.bz2

 

이제 ns-allinone-3.33 이라는 폴더가 생기셨을겁니다. 

그렇다면 이제 시뮬레이션을 돌려보기 위해 ns-allinone-3.33/ns-3.33 폴더 안에 들어가겠습니다.

 

cd ns-allinone-3.33/ns-3.33

 

시뮬레이션을 돌려보기 전, ns3의 구조를 한번 살펴볼까요?

 

여기서 waf 라고 적힌 폴더는 시뮬레이션 빌드, 시뮬레이션 실행 등을 위해 사용하는 프로그램이 들어있습니다. 따라서 다음과 같이 입력하면 시뮬레이션을 실행 시키게 됩니다.

 

(구조를 살펴보기 위해 제시한 예시 이므로 따라 치지는 마세요..! 오류가 뜰거에요)

./waf --run

 

그리고 scratch 폴더는 c++ 로 작성된 시나리오 파일이 포함되어 있는 폴더입니다.

따라서 위에서 처럼 시뮬레이션을 실행 시키게 되면 scratch 폴더 안에 있는 시나리오 파일을 찾게 됩니다. 따라서 시뮬레이션을 돌려 보고 싶은 시나리오가 있으면 c++로 시나리오를 작성하여 scratch 폴더 안에 넣어주면 됩니다.

 

또한 src 폴더에는 ns-3에 사용되는 PHY, LINK, NETWORK, TRANSMISSION, APPLICATION 레이어가 c++로 구현되어 있습니다.

 

들어있는 모듈들을 보면 wifi, lte, point-to-point 등의 PHY 레이어부터 네트워크 시각화를 위한 netanim 까지 많은 모듈들이 c++로 구현되어 있습니다. ns-3에서 제공하는 모듈 이외의 추가가 필요한 네트워크 프로토콜이라던가 통신 채널의 경우, src 폴더에 포함시킴으로써 시뮬레이션을 해보고 결과를 얻어 보실 수 있습니다.

 

제가 앞서 시뮬레이션을 돌려보고 싶은 시나리오가 있으면 scratch 폴더 안에 넣어주면 된다고 말씀드렸습니다.

넣으셨다면,(혹 아직 없더라도 괜찮아요! 기본 파일이 들어가 있으니 ..)

 

ns-allinone-3.33/ns-3.33 위치에서 ./waf 명령어를 사용하여 시뮬레이션을 실행 시켜주면 됩니다.

그런데 ns3 설치 후 ./waf 명령어를 사용하면, 아래와 같은 error 가 발생합니다.

 

 

그렇기 때문에,  다음과 같이 입력해주어야합니다..

 

./waf configure

 

여기까지 하셨나용?

 

ㅎㅎ

 

뭐가 촤라락 뜨죠 ....?

 

 

그런데 도중에 보면 not found 가 많이 발생합니다.

 

이를 해결해주어야합니다!

여기서, 모든 not found를 해결해주어야하는 것은 아니라, 자신의 상황에 따라 적절히.. 해결해주면 됩니당

어디 부터 어디까지 해결해주어야하는지 모르겠다면.. 그냥 아래의 것들을 따라 순서대로 입력해주세용

 

  •  python module 'gi.repository.GooCanvas' 
sudo apt install gir1.2-goocanvas-2.0 python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython3

 

  • castxml
sudo apt-get update -y

sudo apt-get install -y castxml

 

 

  • pygxccml
pip install pygccxml

 

  • libdpdk
sudo apt-get update -y

sudo apt-get install -y libdpdk-dev

 

  • pygraphviz
sudo apt-get install graphviz graphviz-dev

pip install pygraphviz

 

  • gi.repository.GooCanvas
sudo apt-get install -y gir1.2-goocanvas

 

 

sudo apt update

 

  • valgrind
sudo apt-get update -y

sudo apt-get install -y valgrind

 

  • GSL
sudo apt-get install libgsl-dev

 

  • doxygen
sudo apt-get update
sudo apt-get install doxygen

 

+ 나중에 그래프 찍을 때 필요한 것도 여기서 같이 설치해 줍시당

 

sudo apt-get update
sudo apt-get install gnuplot

 

아마 여기까지 해주었으면 문제없이 build가 될 것입니다!

 

./waf build

 

build 가 완료되었다면, 이제 실행시켜보겠습니다!

 

./waf --run hello-simulator

 

 

다음과 같이 Hello Simulator 라고 출력되었다면 정상적으로 실행된 것입니다!

 

 

... 혹시 ...

다음과 같은 에러가 뜨셨다면 ...

cc1plus: all warnings being treated as errors

 

다음과 같이 입력해주신 후 다시 실행해주시면 됩니당

CXXFLAGS="-Wall -g -O0" ./waf configure

 

 

* 다음의 글을 참고하여 작성하였습니다.

https://parksjin01.github.io/ns3/NS3INTRO/

https://pypi.org/project/pygccxml/

https://riptutorial.com/gnuplot/example/11275/installation-or-setup#:~:text=Windows,the%20installer%20from%20gnuplot%20site.&text=On%20the%20setup%20window%20select,anywhere%20on%20the%20command%20line.

https://engineerpenguin.tistory.com/57

https://engineeringcode.tistory.com/75

728x90
반응형