일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Bidirectional Associative Memory
- 나르왈프레오
- 동아리
- Neural Network
- BAM
- 파이썬
- 신경회로망
- 고려대학교
- Python
- 인공지능
- 물걸레자동세척로봇청소기
- Google App Engine
- 패턴 인식
- 갤럭시탭S8울트라
- 구글 앱 엔진
- 물걸레로봇청소기추천
- 멤버십
- 삼성소프트웨어멤버십
- 신경망
- 빅데이터
- 증강현실
- 삼성전자 소프트웨어멤버십 SSM
- 가상화
- 삼성
- 패턴인식
- hopfield network
- 하이퍼바이저
- Friendship
- SSM
- NarwalFreo
- Today
- Total
정보공간_1
[2기 강북 강정인] NS-3 네트워크 시뮬레이터 소개 본문
ns-3은 잘 알려진 무료 오픈 소스 네트워크 시뮬레이터이다. 현재 많은 연구, 교육 기관에서 이 ns-3을 이용하여 네트워크 시뮬레이션을 수행하고 있다. ns-3을 이용하여, TCP/IP와 같은 유선 네트워크뿐만 아니라 Wi-Fi, WiMax, LTE 등 무선 네트워크에 대한 시뮬레이션도 쉽게 수행할 수 있다. 본 문서에서는, 이 ns-3 시뮬레이터의 공식 튜토리얼 문서에 기반하여, 그 사용법을 간략히 설명하도록 한다.
ns-3은 C++로 짜여있으며, 리눅스 기반으로 동작한다. 따라서, ns-3을 설치하기 위해서는 우선 리눅스 환경을 세팅하는 것으로 시작한다. 본 문서에서는 Ubuntu 12 에서 ns-3을 운용한다. 리눅스환경이 준비되면, ns-3의 의존 라이브러리들을 설치하도록 한다. 설치 목록은 http://www.nsnam.org/wiki/index.php/Installation 의 Prerequisites-Ubuntu/Debian 항목을 참조하도록 한다. Goo, g++, python, mercurial, bzr 등 라이브러리를 모두 설치하면, ns-3압축파일을 공식 사이트로부터 다운받아 압축을 해제하도록 한다.
터미널에서 다음 명령어를 이용하면 쉽다.
Cd mkdir ns315 cd ns315 wget https://www.nsnam.org/release/ns-allinone-3.15.tar.bz2 tar xjf ns-allinone-3.15.tar.bz2 |
그 다음, ns-allinone-3.15 디렉터리에서 다음과 같은 명령어를 입력하여 ns-3을 빌드하도록 한다.
./build.py --enable-examples --enable-tests
|
다음과 같은 메시지가 뜬다면 빌드가 성공적으로 완료된 것이다.
다음은 ns-3이 올바르게 실행 가능한지 테스트를 수행할 차례이다.
ns-3.15 디렉터리에서, ./test.py –c core 명령을 입력하여 테스트를 수행한다. 에러가 나지 않는지 확인하도록 하며, 만약 테스트에 실패한다면 ns-3의 의존 라이브러리들을 제대로 설치 하였는지 다시 확인하도록 한다.
테스트가 완료되면, ns-3에서 기본적으로 제공하는 hello-simulator 스크립트를 다음과 같은 명령어를 이용하여 실행시켜보도록 하자.
./waf –run hello-simulator
|
Waf (http://code.google.com/p/waf/) 는 어플리케이션 설정, 컴파일, 설치 등을 자동으로 수행하기 위한 파이선기반의 프레임워크이다. 자세한 사용법은 링크를 참조하도록 한다. 위의 명령어대로 hello-simulator을 실행하면, 터미널에 Hello Simulator라는 문자가 출력될 것이다.
여기까지 성공적으로 수행하였다면, ns-3을 운용하기 위한 기본적인 환경 설정을 끝냈다고 할 수 있다. 그럼, 본격적으로 ns-3을 운용하기 위해 우선 방금 실행한 hello-simulator의 소스코드를 살펴보자. 코드는 ns3설치폴더의 ns-3.15/examples/tutorial/hello-simulator.cc 파일이다. (*글 작성 도중 ns-3을 재설치하여 설치 경로가 변경됨)
코드를 보면, 익숙한 c++ 기반으로 이루어져 있음을 확인할 수 있다. 우선 ns-3의 라이브러리를 불러오고, ns-3네임스페이스에 있는 api들을 이용하여 시뮬레이션을 수행한다. 위의 hello-simulator 에서는 단순히 ns-3라이브러리의 로그 함수 (NS_LOG_UNCOND)만을 이용하여 문자열을 출력한다.
소스코드의 “hello simulator” 부분을 다음과 같이 임의로 수정한 뒤, 다시 터미널에서 waf --run 명령을 이용하여 실행해보자. Waf는 변동된 소스코드를 확인하고, 이를 다시 자동으로 빌드한 뒤 바뀐 코드로 프로그램을 실행시킨다.
이제, 실제 네트워크 노드 시뮬레이션 예제를 살펴보기로 하자. /ns-3.15/examples/tutorial 폴더의 first.cc를 편집기를 사용해서 열면, 다음과 같은 코드를 확인할 수 있다.
이 코드에서는, 두 개의 노드를 생성하여 IPv4 주소를 각각 할당한 뒤, UDP패킷을 주고받는 시뮬레이션을 수행한다.
코드의 순서는 다음과 같다.
1) NodeContainer.Create(2) 를 통해 네트워크 노드를 두개 생성한다.
2) DataRate가 5Mbps, Delay가 2ms인 point to point 연결을 정의한다. (PointToPointHelper)
3) 생성한 node에 네트워크디바이스를 설치한다 (NetDeviceContainer). Device는 실제 PC의 유선랜카드에 해당한다.
4) 각 노드에 인터넷스택을 설치하고, IPv4주소를 할당하도록 한다. 10.1.1.0 을 베이스 주소로 설정하였으므로, 두 노드에는 각각 10.1.1.1, 10.1.1.2 이 할당되게 된다.
5) 그 다음, udp echo server과 udp client server을 정의하여 두 노드에 각각 할당한다. 10.1.1.1 노드에는 echoclient.install(nodes.get(0)) 으로 클라이언트를, 10.1.1.2노드에는 echserver.install(nodes.get(1)) 으로 서버를 설치한다.
6) UDP Echo server는 자신에게 들어오는 모든 UDP 패킷을 해당 패킷을 보낸 Client로 반송하는 동작을 수행한다. Echo client는 선언시 지정한 echoserver의 주소와 포트로 패킷을 전송한다.
7) 마지막으로, Simulator.run 을 통해 시뮬레이션을 수행하도록 한다.
waf로 위 코드를 실행하면, 다음과 같은 결과를 출력한다. 코드대로 client-server간에 패킷이 오가는 것을 확인할 수 있다.
Ns-3에서는 오고가는 패킷에 대해 pcap형태로 로그를 남기는 기능을 제공한다. 위의 예제에서는, 선언한 PointToPoint 연결에서 pcap 기록을 남기는 코드를 다음과 같이 추가하면 된다.
pointToPoint.EnablePcapAll(“pcap파일명”)
보다 많은 패킷 로그를 확인하기 위해, 위first.cc 코드의 echoclient 설정 부분을 다음과 같이 변경해보도록 하자.
코드를 수정하고 다시 실행시키면, echo client 에서 0.5초 간격으로 echo client에게 udp 패킷을 5번 전송한 것을 확인할 수 있다.
이때, ns-3.15 폴더에는 first-0-0.pcap, first-1-0.pcap 이 생성되게 된다. 이는 설정된 두 노드에서 각각 주고받은 패킷을 캡쳐한 것이다.
인터넷 트래픽 모니터링 도구인 Wireshark를 통해 pcap파일을 열면, 코드로써 설계한 트래픽이 실제 트래픽 처럼 시뮬레이션 된 것을 확인할 수 있다.
본 문서에서는 간단한 예제를 통해 ns-3에 대해 소개하였다. Ns-3은 이와 같은 기본적인 유선 네트워크뿐만 아니라, 무선랜, 3G, LTE 등 많은 종류의 상황에 대해 시뮬레이션을 할 수 있으며, 시뮬레이션 결과에 대한 그래프 출력 등 여러 부가 기능을 제공한다. Ns-3의 가장 강력한 점은 모든 모듈에 대한 코드가 공개되어 수정할 수 있다는 점이다. 즉, 현재 구현되어 있는 모듈에서 새로운 네트워크 알고리즘, 기법을 적용하여 그 효율성을 시뮬레이션으로써 증명할 수 있다. 이는, ns-3이 차세대 네트워크 개발에 있어 핵심적인 역할을 하도록 한다.
Ns-3과 관련된 더 많은 정보는 ns-3 공식홈페이지에 상세하게 문서화 되어 있다. (http://www.nsnam.org/documentation/) 향후 여러 이유로 ns-3을 사용하게 되는 경우, API Doxygen, reference manual등을 참고하면 보다 쉽게 원하는 네트워크를 설계할 수 있을 것이다.
'IT 놀이터 > Elite Member Tech & Talk' 카테고리의 다른 글
[2기 부산 이환승]The Dynamic Stylesheet Language - LESS (0) | 2012.11.15 |
---|---|
[2기 대전 김형순] 예술과 공학의 장벽은 우리 마음속에만 존재한다 (0) | 2012.10.31 |
[2기 수원 이상웅] Network Load Balancing (이론 및 설치) (0) | 2012.10.29 |
[2기 전주 박준형] OpenMP 반복루프, 작업의 병렬처리 (0) | 2012.10.29 |
[2기 신촌 김태호] 이클립스로 안드로이드 시스템 앱 빌드하기 (0) | 2012.10.28 |