본문 바로가기

컴퓨터 네트워크 프로토콜/NS-3(Network Simulator 3)14

728x90
반응형
Chat-GPT에게 NS-3에 대해서 물어보았다. 질문 1 NS-3가 뭐야? 답변 1 NS-3는 네트워크 시뮬레이터(Network Simulator)로, 무선 및 유선 네트워크를 모델링하고 시뮬레이션하는 데 사용되는 오픈 소스 시스템입니다. NS-3는 C++로 작성되었으며, 무선 및 유선 네트워크, 인터넷 프로토콜, 라우팅 알고리즘, TCP/IP 프로토콜 등 다양한 네트워크 기술을 모델링할 수 있습니다. 이를 통해 다양한 네트워크 시나리오를 시뮬레이션하고, 이를 바탕으로 네트워크의 동작과 성능을 평가할 수 있습니다. NS-3는 무료로 사용할 수 있으며, 오픈 소스로 개발되고 있기 때문에 다양한 사용자들이 개발에 참여할 수 있습니다. 또한, NS-3는 Python 바인딩을 제공하여, Python을 사용하는 사용자들도 쉽게 NS-3를 사용할 수 있습니다. .. 2023. 2. 23.
컴퓨터 네트워크 연구자가 시뮬레이터로 NS-3를 써야하는 이유 필자는 NS-3를 왜 썼는가? 연구실에서 생활할 때 신입생으로부터 많이 받았던 질문 중 하나로 'NS-3를 왜 추천하시는거에요?'가 있었다. 그 당시에 내가 생각하던 NS-3를 써야하는 이유로 적당히 답을 했었던 기억이 난다. 나또한 석사과정 신입생일 때 '컴퓨터 네트워크 시뮬레이터로 NS-2와 NS-3 중에 뭘 쓰는게 좋을까요?'라고 선배에게 물어봤었다. 내가 석사과정 신입생일 때 대부분의 선배들은 NS-2 기반으로 연구를 했었고 몇명의 입학년도가 가까운 선배들만 NS-3를 쓰고 있었다. 선배들로부터 받은 각종 연구 자료들은 NS-2와 NS-3가 혼재되어 있었는데 나는 이 중에 어떤 것에 집중할 지를 고민을 했었다. 고민한 결과 나는 다음과 같은 이유로 NS-3를 주로 썼다. NS-3는 2011년부터 .. 2022. 2. 24.
이클립스로 NS-3 개발하기(1/3) - 이클립스 설치 통합개발환경(Integrated Development Environment, IDE)로 개발하는 것은 생산성을 대폭 향상 시켜준다. 통합개발환경은 버튼 한번으로 빌드와 실행이 가능하고 자동완성 기능 등 다양한 생산성 향상을 위한 도구가 통합되어 있기에 이 시대를 살아가는 개발자들은 다 통합개발환경을 활용하여 개발하고 있다고 볼 수 있다. 마찬가지로 NS-3도 여러 통합개발환경을 통해 개발이 가능하다. 이번 글에서는 개인과 기관 모두 사용료가 무료인 이클립스(Eclipse)를 활용한 NS-3 개발환경 구축을 소개한다. 개발환경 Ubuntu 18.04 OpenJDK 8 Eclipse 2018-09 R 이클립스는 JVM(Java Virtual Machine, 자바가상머신)에서 실행가능하므로 우분투(Ubuntu.. 2020. 12. 7.
NS-3에 LoRaWAN 모듈을 설치하고 실행해보자 LoRaWAN은 LoRa Alliance에서 2015년에 1.0을 공개하여 현재까지 활발히 활용되고 있는 저전력 광역 통신망(Low-Power Wide-Area Network, LPWAN) 기술 중 하나이다 [1]. 최근에 나는 LoRaWAN 기반의 IoT(Internet of Things) 응용을 개발하기 전에 통신 실험을 할 필요가 있어서 이 모듈을 활용해서 실험에 활용하려고 한다. 이 NS-3 모듈은 이탈리아 파도바 대학교의 SIGNET 연구실의 학생 중 한 명이 석사학위 논문을 작성하기 위해 개발하였으며 현재는 Github에 공개되어 있다 [2]. 구동환경 CPU : i7-4790K 운영체제 : 우분투 18.04 x64(윈도우 10 x64 기반 VMWARE 가상환경) Github에 공개되어 있는 .. 2020. 11. 29.
NS-3를 우분투에 설치하고 실행하자 최근에 실험해보고자 하는 주제가 생겨서 하는 김에 신 버전 NS-3를 설치하다가 설치 방법을 정리하게 되었다. 네트워크 프로토콜 시뮬레이터로 강력한 툴인 NS-3는 우분투(Ubuntu)에서 설치 및 실행이 가능하다. 이번 설치에는 VMWARE로 가상머신을 하나 생성하여 우분투 18.04를 설치한 다음 거기에다가 신 버전 NS-3를 설치했다. 구동환경 CPU : i7-4790K 운영체제 : 우분투 18.04 x64(윈도우 10 x64 기반 VMWARE 가상환경) 의존성 패키지 설치 NS-3를 설치하기 전에 설치해야하는 것들이 있다. 다음 명령어를 터미널에 입력하여 설치한다. sudo apt install gcc sudo apt install g++ NS-3 다운로드 NS-3 공식 홈페이지(www.nsnam.. 2020. 11. 27.
NS-3.32 업데이트 정보 네트워크 시뮬레이터 NS-3의 3.32 버전이 출시되었습니다. Wi-Fi 관련 기능이 보충되었고 여러 혼잡 제어 기능과 각종 버그들이 수정되었습니다. 변화된 점 Wi-Fi 802.11ax가 6 GHz 대역을 지원합니다. Wi-Fi 모델에서 RIFS(Reduced Interframe Space) 기능이 삭제되었습니다. NS-3의 Emulation에 Netmap과 DPDK(Data Plane Development Kit) 기능이 추가되었습니다. TCP에서 동적 페이싱이 추가되었습니다. TcpLinuxReno 혼잡 제어가 추가되었습니다. RFC 8033에 있는 PIE queue disc model이 추가되었습니다. FqCoDel 및 CoDel queue disc에 L4S 모드가 추가되었습니다. STL Pair.. 2020. 11. 9.
NS-3에서 UAN 프레임워크로 IPv4 수중 시뮬레이션을 하는 방법 본 글은 2016년 10월 11일 17시 31분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. NS-3에서 UAN 프레임워크로 IPv4 수중 시뮬레이션을 하는 것이 가능한 지 조사해보았다. UAN 프레임워크로 생성된 노드는 기본적으로 0-255의 한 바이트(unit8_t) 주소를 부여 받는다. 즉 기본적으론 IPv4를 지원하지 않는다. 이를 해결하기 위한 방법으로 두 가지가 있는데 하나는 적응계층(adaptation layer)을 두는 것과 다른 하나는 NS-3에 구현되어 있는 IPv4 관련 클래스를 수정해서 UAN 프레임워크의 주소를 관리하도록 만드는 것이다. 관련 링크 1 : https://groups.google.com/forum/#!msg/ns-3-users/ag2CoKE.. 2020. 10. 14.
NS-3 로그의 종류와 로그를 터미널에 출력하는 법 본 글은 2016년 10월 14일 12시 56분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. NS-3는 각종 정보를 저장하고 확인하기 위한 로그를 지원한다. 이런 로그 정보는 파일로 저장 될 수도 있고 터미널에서 실시간으로 확인할 수도 있다. 로그의 종류는 아래와 같다. 종류 의미 LOG_LEVEL_ERROR 오류가 발생 했음을 의미하는 로그 LOG_LEVEL_WARN 경고용 로그 LOG_LEVEL_DEBUG 디버깅용 로그 LOG_LEVEL_INFO 각종 정보를 알려주는 로그 LOG_LEVEL_FUNCTION 함수 추적(tracing)을 위한 로그. LOG_LEVEL_LOGIC 함수안에서 추적흐름제어(control flow tracing)을 위한 로그 LOG_LEVEL_ALL .. 2020. 10. 14.
NS-3 UAN 모듈에 IPv6를 올리다가 생긴 PacketSocketHelper 중복 사용 문제 본 글은 2016년 12월 5일 20시 12분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. UAN(Underwater Acoustic Networks) 모듈에 IPv6를 올려서 예제를 만드는 도중에 발생한 오류이다. IPv6나 IPv4를 노드(Node)에 올리다가 생기는 문제는 주로 PacketSocketHelper의 중복 사용 문제이다. InternetStackHelper가 PacketSocketHelper를 이미 쓰고 있기 때문에 나타나는 현상이라서 소스를 잘 살펴서 PacketSocketHelper가 중복 사용되는 부분만 지워주면 된다. 에러 메시지는 다음과 같다. Object::AggregateObject(): Multiple aggregation of objects o.. 2020. 10. 13.
NS-3에 적합한 통합개발환경(IDE)은 무엇일까? 본 글은 2017년 6월 15일 22시 24분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. NS-3에 적합한 IDE를 검토한 이유 본격적으로 내가 네트워크 시뮬레이터를 사용해야하는 상황이 도래했다. 내가 소속되어 있는 연구실은 주로 NS-2와 NS-3를 네트워크 시뮬레이터로 사용하고 있으며 새롭게 네트워크 시뮬레이션을 익히는 자에게는 NS-3 사용을 권장하고 있다. 사실 나의 경우 작년에는 NS-3를 해도 gedit이나 Geany 같은 텍스트 에디터와 터미널 창으로 꾸역꾸역 버텨왔는데 이 경우 코드 추적, 자동완성 등의 기능을 사용하지 못 해서 생산성이 극단적으로 좋지 않았다. 안드로이드나 윈도우 개발을 주로하던 나에게는 이런 말도 안 되는 생산성으로 결과를 만들어 내니 꽤나 .. 2020. 10. 13.
NS-3에서 데이터형을 변환 하는 법 본 글은 2017년 10월 27일 11시 28분에 썼던 글이며 블로그 자료 이전으로 날짜와 일부 내용이 갱신되었습니다. 한 날 NS-3 모듈을 개발하는 도중 클래스 형변환을 할 필요가 있었다. NS-3에서는 스마트 포인터를 사용하고 있기에 dynamic_cast(expression), static_cast(expression)를 사용하면 된다 싶었는데 NS-3에서는 이게 안 된다. 찾아보니까 NS-3에는 비슷한 동작을 하는 다른 것이 있었다. DynamicCast(expression)이라는 것인데 dynamic_cast 처럼 동일한 역할을 하는 것 같다. 사용법은 다음과 같다. class NetDevice{}; class WifiNetDevice : public NetDevice{}; . . . // 현.. 2020. 10. 11.
NS-3에서 수중 통신 시뮬레이션하는 방법 조사 본 글은 2017년 12월 14일 21시 07분에 썼던 글이며 블로그 자료 이전으로 날짜만 갱신된 글입니다. 우리 연구실에 6년 동안 진행하는 수중 센서 네트워크 연구 프로젝트가 들어오면서 나의 연구 주제에 수중도 추가되었다. 어차피 기존에 익혀두었던 지식을 토대로 수중환경의 특징을 고려해서 연구하면 되니 시간이 충분하다면 주제를 바꾸는 건 큰 문제가 없기에 전환하였다. 우리 연구실은 2007년부터 수중 네트워크 연구를 했었기에 관련 연구 경험이 있는 편이었다고 한다. 지금까지는 시뮬레이터를 주로 NS-2를 썼다고 한다. 이번에 연구 기간이 긴 프로젝트가 생긴 김에 현재 가장 활발히 사용되는 NS-3에서 수중 시뮬레이션이 가능한 지 조사해보았다. 1. UAN(Underwater Acoustic Netwo.. 2020. 5. 19.
NS-3에서 프로토콜 모듈을 추가해보자 본 글은 2017년 12월 15일 07시 48분에 썼던 글이며 블로그 자료 이전으로 날짜만 갱신된 글입니다. NS-3을 이용해 시뮬레이션을 하기 위하여 NS-3에 없는 기존에 있던 모듈을 나의 NS-3에 추가해야 하는 경우가 있다. 일단 NS-3 시뮬레이터가 이미 빌드되어 있다고 가정하고 설명한다. 먼저 추가하고자 하는 모듈을 ns-3.x/src 폴더에 넣는다. 나는 aqua-sim-ng 모듈을 다운 받았다. 이렇게 모듈을 src 폴더에 넣어준 후 다음의 명령어를 입력한다. $ ./waf configure --enable-examples --enable-tests $ ./waf build 그러면 위와 같은 로그들이 쭈욱 나타난다. 정상적으로 모듈 빌드와 테스트가 완료되었는 지를 확인하고 다음의 명령어를 .. 2019. 4. 14.
NS-3(Network Simulator 3) 소개 본 글은 2016년 8월 8일 21시 34분에 썼던 글이며 블로그 자료 이전으로 날짜만 갱신된 글입니다. NS-3 개요 NS-3(Network Simulator 3, http://www.nsnam.org/) 시뮬레이터는 2006년에 오픈소스 프로젝트로 시작된 무료 네트워크 시뮬레이션 프로그램이다. NS-3는 discrete-event 기반 네트워크 시뮬레이터로써 주로 연구 및 교육용으로 사용한다. NS-3는 독립 이벤트 시뮬레이터로 패킷레벨의 시뮬레이션이 가능하며 계층구조, 유선 및 무선 네트워크를 지원한다. NS-3 특징 NS-3는 FreeBSD와 Linux, SunOS, Solaris, Windows(Cygwin) 플랫폼을 지원하며 C++로 작성되었다. NS-3는 현재도 활발히 사용 되는 NS-2와 .. 2019. 3. 25.