NS-3 Tutorial, Manual, Testing Documents 2011 년 2 월 경북대학교통신프로토콜연구실 최상일 (overcycos@gmail.com) 요약 Ns-3는 ns-2와같은 Network simulator이지만 ns-2와는완전히다르다. 이런차이로 ns-2에서동작되는 simulation이 ns-3에서는동작하지않을수도있지만, ns-3의경우 C++ 을사용함으로써객체지향적성격을가지게되었고 ns-2에서는구현되지못했던여러부분들을구현해낼수있게되었다. 본문서에서는 ns-3를접하는사용자들을위해 nsnam [1] 에서제공하는세가지문서 (Tutorial, Manual, Testing) 를통해알수있는바를간략하게기술하고있다. 목 차 1. 서론... 2 2. NS-3 TUTORIAL 문서... 2 3. NS-3 MANUAL 문서... 4 3.1 CORE... 4 3.2 NODE AND NETDEVICES... 5 3.3 EMULATION... 5 3.4 SOCKETS APIS... 6 4. NS-3 TESTING AND VALIDATION 문서... 6 5. 결론... 7 참고문헌... 7 1
1. 서론 Ns-3는 C++ 과 Python으로구현된문서이며, C++ 언어를사용함에따라객체지향의성격을가진다. Ns-3는기존의 ns-2와는다른형태를가지기때문에처음접하는사용자는 Simulation 제작에어려움을가질수도있다. 이를위해이문서에서는 nsnam [1] 에서제공하는 Tutorial, Manual, Testing 문서의내용에대해간략히기술하도록한다. 2. Ns-3 Tutorial 문서 Ns-3는 Otcl과 C++ 로구현된 ns-2와는달리 Python과 C++ 로구현되어있으며 ns-2의후속버전이아닌새로운 simulator로서제작이되었기때문에기존에 ns-2에서사용되었던모든모델을지원하지는못하지만 ns-2에서지원되지않았던 Multiple interface, IP addressing 등을지원할수있다. Ns-3 의 resource 는 http://www.nsnam.org [1] 에서다운받을수있다. Ns-3 는 Linux 혹은 Linux-like 환경에서만동작이가능하며 C++, Python 등몇가지패키지를설치해놓아야한다. 필요한패키지는위의웹페이지에서확인할수있다. 개념적으로 ns-3에는 Node, Application, Channel, NetDevice, Helper가있다. 빈 Node에특정기능을가진 application을넣어특별한 node를만들고, NIC의역할을하는 NetDevice를 Node 에붙여준다. 그리고통신에사용될 Channel을생성해각 NetDevice에연결하면노드간에패킷전송이가능하게된다. 마지막으로 Helper는각개념의생성시필요한복잡한내부설정에관련된코드를묶어놓은것으로사용자는이 Helper를사용함으로써위의개념들을간단한몇줄의코드로생성및설정을할수있다. Ns-3의 sample코드중하나인 firse.cc(point-to-point link, 두노드사이에서단일패킷되풀이 ) 를통해위의개념들을살펴보겠다. 코드 1. node, channel, device 생성및설정 2
NodeContainer 를이용해 Node 를생성하고, PointToPointHelper 를이용해 Channel 을생성하 며채널의값을설정한다. 그리고 NetdeviceContainer 로 NetDevice 를생성하고 Install 멤버 함수를통해 node 와 Netdevice 를연결. 코드 2. Internet stack 생성및설정 InternetStackHelper 를이용하여 internet stack 을생성하고, node 를 stack 에넣는다. 코드 3. Address 생성및설정 Ipv4AddressHelper 를이용해 Ipv4 주소를생성하고, Gateway 및 Subnetmask 를설정하고 device 에해당인터페이스를등록한다. 코드 4. Interface 설정및 Client, Server 생성 이후, 서버와클라이언트를만들고 port 번호등을설정하여패킷을보낸다. Ns-3에서 simulation이제대로동작되었는지확인하기위해 tracing을하여야한다. 코드내부에 cout<<endl 을이용한화면출력함수를이용하여도되지만, 내부에서 TraceHelper를이용해 tracing 파일을생성하는것이확인하기에더편리하다. 생성된파일은.pcap 확장자를가지고있으며이파일을 WireShark로불러오면전송된패킷들의정보를확인할수있다. 3
3. NS-3 Manual 문서 그림 1. Software organization of ns-3 Ns-3 는 simulation core 와 model 이 C++ 로구현되어있는네트워크시뮬레이터로이장에서는 위의그림에서알아야할부분에대해서살펴보겠다. 3.1 Core Core 부분에서 attribute, tracing, real time, distributed, packet, helper 에대해서알아보겠다. Attribute 는말그대로속성을나타내며 ns-3 의 class 들은각기여러개의 attribute 를가진다. 특별한점은 AddAttribute 를이용해 class 에인위적으로 attribute 를추가할수있다는것이다. 코드 5. AddAttribute 사용 위의코드는 m_maxpackets 에접근할수있는 MaxPackets 라는속성을추가한것으로위에위 부터 Attribute 명, 설명, 기본값, 접근할변수, 오류체크에대한내용이있다. Tracing 은사용자가제안한환경에서시뮬레이션을한뒤, 성능의차이를확인하거나오류를찾 기위해서는시뮬레이션동안에발생한내용들을사용자가볼수있도록해주는것이다. Ns-3 에 서는 pcap tracing 과 ascii tracing 을제공하고있다. 4
Real time은실제네트워크스택에시뮬레이션을구현하기위해각장비들이같은시뮬레이션 clock을가지도록하드웨어 clock으로고정시키는것을말한다. 초기에는시뮬레이션과정에서지정된시간이초과되는것을특정범위내에서허가하는 BestEffort 모드와초과시시뮬레이션을종료시키는 HardLimit모드가있었지만, 현재에는 ns-3 tree에서제외된상태이다. Distributed는 multiple processor에서단일시뮬레이션프로그램이동작되는것을말하는것이다. 이를위해서는 logical process간에메시지교환이필요하고이교환에는 Message Passing Interface(MPI) 가있어야한다. 현재 Distributed는 Point-to-Point Link에서만동작이가능하다. Packet은 Byte buffer, Byte tags, Packet tags, metadata로구성되어있다. Byte buffer는헤더와트레일러의정보를가지고있고, Byte tag는 packet byte buffer의 byte subset에 tag를붙이기위해사용이되며, Packet tag는 packet 자체의 tag를위해사용된다. 마지막으로 metadata 는 byte buffer에있는헤더와트레일러의정보를가져 context 없이패킷의헤더를확인하기편하게출력하는데사용된다. Helper 는 low-level API 를사용하여구현을하는데코드가너무길고어렵기때문에해당 API 들을모아사용자가손쉽게 API 를사용할수있도록도와주도록 ns-3 에서제공하는것이다. 3.2 Node and NetDevices Ns-3 에서 node 는빈공백과같은것으로 NetDevice, protocol, application 을추가하며특정한 기능을하게된다. Ns-3 에서는다양한 net device 와 framework 를지원한다. Point-to-Point NetDevice를통해 Point-to-Point link를이용할수있으며, CSMA NetDevice를통해 bus network link를이용하고, Wifi NetDevice를통해 802.11 기반의 infrastructure와 ad hoc network를이용하고, Wimax NetDevice를통해 802.16 기반의 network model을이용한다. 또한 LTE Module을통해 3GPP E-UTRAN infrastructure와 LTE(Long Term Evolution) 모델을제공하고, UAN Framework를통해수중네트워크를사용할수있다. 3.3 Emulation Ns-3는 testbed와가상환경의통합을위해 Emu NetDevice와 Tap NetDevice를제공한다. Emu NetDevice를통해실제네트워크에 Packet을보낼수있고, Tap NetDevice를통해시뮬레이션노드를실제네트워크내의호스트가되도록할수있다. 이두 NetDevice를통해실제네트워크와가상환경이서로데이터를주고받을수있다. 5
3.4 Sockets APIs Ns-3에는 Native ns-3 API와 POSIX-like API 이렇게두가지 socket API가있다. POSIX-like API는아직구현되지않았지만 Native ns-3 API는 C++ 로구현되었으며여러종류의 transport protocol을제공할수있다. ns-3 에서는 buffer variant 를통해 application 단에서유용한정보를 packet 에 encode 할수 있다. 4. Ns-3 Testing and Validation 문서 Software testing은에러를찾기위해프로그램을동작시키는방법이다. 일반적으로이 testing 에서는프로그램이구현하려고했던프로그램과일치하는지, target system에적용가능한지, simulation이나타내는결과가믿을만한지, 외부적혹은내부적압박에정상적종료가되어사용자에게피해가가지않는지, 현재적용되어있는시스템에비해성능이뛰어난지, 오랜시간이지나도안정된상태가지속되는지등에대한내용을확인하는것이다. Ns-3 에서는 test.py 라는파일이있는데, 이파일은모든테스트를구동하고사용자가읽을수 있는폼으로결과를모으는기능을수행한다. 그림 2. test.py 옵션값 6
5. 결론 지금까지본문서에서는 ns-3를처음접하는사용자를위해 nsnam [1] 에서제공하는세가지문서가설명하는바를기록하였다. 본문서가기반한세가지문서는 ns-3를이용해코드를작성하는부분에대한설명보다는기본개념과제공가능한모델들에대해설명하고있다. 이문서를통해 ns-3에대한넓은바탕을가진후, 제공되는 sample 코드를이용해코드분석을한다면훨씬수월하게 ns-3에대해이해할수있으리라생각된다. 참고문헌 [1] The ns-3 network simulator, http://nsnam.org/ 7