1 / 34

1 장 네트워크 시뮬레이터 (NS2) 소개 1. NS2 란 무엇인가 ? 2. NS2 설치 및 시뮬레이션

1 장 네트워크 시뮬레이터 (NS2) 소개 1. NS2 란 무엇인가 ? 2. NS2 설치 및 시뮬레이션. 이 완 직 ( wjlee@pnu.ac.kr ) 2010 년 1 학기. 1. NS2 란 무엇인가 ?. 1.1 NS2 (Network Simulator version 2) 소개 네트워킹을 연구하기 위해 개발된 이벤트 기반 (Event-driven) 의 시뮬레이터 적용범위 IP, TCP, UDP, HTTP 등의 TCP/IP 프로토콜 패밀리 라우팅 프로토콜 , 멀티캐스트 라우팅 프로토콜

bowie
Download Presentation

1 장 네트워크 시뮬레이터 (NS2) 소개 1. NS2 란 무엇인가 ? 2. NS2 설치 및 시뮬레이션

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 1장 네트워크 시뮬레이터(NS2) 소개1.NS2란 무엇인가? 2.NS2 설치 및 시뮬레이션 이 완 직 (wjlee@pnu.ac.kr) 2010년 1학기

  2. 1. NS2란 무엇인가? • 1.1 NS2 (Network Simulator version 2) 소개 • 네트워킹을 연구하기 위해 개발된 이벤트 기반(Event-driven)의 시뮬레이터 • 적용범위 • IP, TCP, UDP, HTTP 등의 TCP/IP 프로토콜 패밀리 • 라우팅 프로토콜, 멀티캐스트 라우팅 프로토콜 • RTP, SRN(Scalable Reliable Network) • Ad-hoc 네트워크, WLAN, Mobile-IP, UMTS • 동작 환경: 모든 Linux/UNIX 계열의 운영 체제 • 장점: 무상으로 지원됨

  3. 1.1 NS2 시뮬레이터 소개 • NS2 탄생 배경 • REAL 네트워크 시뮬레이터 • 콜롬비아 대학의 시뮬레이션 테스트베드인 NEST 기반 • 1989년 LBNL(LBL) 연구 그룹이 개발 • NS1 • REAL 기반, VINT 프로젝트 일환, DARPA 자금 지원으로 1995년 개발 • 확장된 Tcl 스크립트 언어 사용 • NS2 • 1996년 발표, NS1과 Backward 호환성 지원 • MIT가 개발한 Otcl 사용 • NS1에 포함되지 않은 여러 프로토콜, 스케줄링 알고리즘들이 포함 • NS3 • 2006년 발표, 현재 3.04 알파버전 릴리즈

  4. 1.1 NS2 시뮬레이터 소개 • NS2 추가 기능 • TCP 여러 버전(Reno, Vegas, SACK) • CBQ(Class Based Queueing) 스케줄링 알고리즘 • 동적 라우팅 알고리즘, Multi-path Routing, • Dense-Mode 멀티캐스팅, Mobile 환경 지원 • 트래픽 흐름(Traffic Flow) 관리자, Telnet 소스 • 현재도 계속 기능이 추가되며, 성능 개선 작업도 진행 중 • 지금까지 개발된 많은 네트워크 알고리즘 솔루션을 활용할 수 있음

  5. 1.2 NS2 시뮬레이터의 기본 구조 • 그림 1-1 참조(pp. 5) • 특징 • 이벤트 스케줄러(Event Scheduler)와 IP기반의 네트워크 컴포넌트를 기반, Event-driven 형태의 동작 방식 • 사용 프로그램 언어 • OTCL(Object TCL): 객체 지향 개념의 스크립트 언어 • C++ • TclCl: Otcl과 C++를 연동 • 네트워크 컴포넌트 • 노드(Node), 링크(Link), 큐(Queue), 에이전트(Agent) 등을 포함 • OTCL 클래스 계층구조: 그림 1-2 참조(pp.6)

  6. 1.3 스크립트 언어와 C++ 클래스 • TCL (Tool Command Language) • 변수나 제어 구조와 같은 프로그래밍 툴이면서, C 라이브러리 인터페이스를 활용한 언어 확장성이 높음 • X-Window 툴킷인 tk와 연동하여 쉽게 GUI 사용자 인터페이스 구현 • 그림 1-3 TCL 소스 예제 (pp. 7) • proc test {} • 프로시져 정의 • set a 43 • 할당문, a 변수에 43을 할당하라. 할당문에 의해 변수는 자동선언 • [expr …] • []안의 표현식을 계산하여 리턴 • puts • 문자열 출력하는 명령어 • 실행 • # ns <파일명>.tcl

  7. 1.3 스크립트 언어와 C++ 클래스 • OTCL 개념 • OTCL은 TCL에 OOP 개념을 도입, C++에 비해 간결하고 이식이나 상속에 장점 • OTCL과 C++과의 차이점 • 클래스 정의 • 단일 클래스를 사용하는 C++에 비해(?) 여러 개의 클러스 정의가 가능 • 생성자와 소멸자 • 생성자 대신 init instproc 프로시져 사용 • 소멸자 대신 destroy instproc 프로시져 사용 • 메소드 호출 • OTCL에서 메소드는 항상 오브젝트를 통해서만 call • self 가 C++에서의 this와유사한 기능을 수행 • 메소드를 찾기 위한 next • C++에서는 메소드 이름을 통해 숨겨진 메소드를 호출하지만, OTCL에서는 next를 사용 • next는 숨겨진 (상위 클래스의) 메소드 찾기 위해 상속 그래프를 거슬러 올라가면서 검색 • 변수 접근과 공유를 위한 $class (?) • C++에서는 static 메소드와 변수 사용을 피하기 위해 static 문법을 사용 • OTCL에서는 클래스 오브젝트 상에 있는 변수를 접근하거나 공유할때 $class를 사용하며 이는 메소드를 통해서만 가능

  8. 1.3 스크립트 언어와 C++ 클래스 • OTCL 소스 예제: 그림 1-5 (pp. 11) • Class mom, Class kid –superclass mom • mom과 kid 클래스 생성 • kid는 mom의 자식 클래스며 mom으로부터 상속(-superclass) • mom instproc greet {} • mom의 멤버함수 greet 정의(instproc) • $self instvar age_ • self: 현재 클래스를 의미 • instvar: 멤버 변수를 정의, 클래스나 슈퍼클래스에서 이미 명시된 이름인지를 체크, 동일 변수 명이 존재할 경우 참고만 할 뿐, 새로 생성하지 않는다. • set a [new mom] • new 명령어를 이용하여 클래스 인스턴스 생성, 변수 a로 명명 • 실행 결과 • 그림 1-6 참조 (pp. 12)

  9. 1.3 스크립트 언어와 C++ 클래스 • 스크립트 언어와 C++ 상관관계 • C++: 시뮬레이션을 위한 노드와 에이전트 내부 기능 기술, 주로 빠른 처리가 필요한 부분 • OTCL: 시뮬레이션을 위한 이벤트 설정, 기능 구조가 자주 변경되는 부분 • 하지만 절대적인 것은 아님 • C++과 OTCL의 쌍대성(duality): 그림 1-7 (pp. 13) 참조 • C++에서 먼저 이벤트에 대한 클래스가 정의되면, OTCL에서는 그 클래스에 정의된 함수를 사용하는 상호 관계 • bind(): C++ 멤버함수와 OTCL 오브젝트 함수를 묶어줌 (일종의 인수 전달) • bind()의 C++ 멤버함수 TcpAgent::TcpAgent() { bind(“window_”, &wind_); } • bind()의 OTCL 스크립트 $tcp set window_ 200

  10. 1.3 스크립트 언어와 C++ 클래스 • NS2 시뮬레이션 구현 원리 • 앞 페이지의 OTCL의 window_ 의 값을 사용하는 소스는 결국 C++ 구현 소스에 포함 • NS2 확장을 위해서는 이러한 관계를 파악하는 것이 중요 • 그림 1-8(pp. 14)은 NS2의 node에 대한 OTCL과 C++의 관계를 보여줌 • 그림 1-9 (pp. 15) • ns-allinone-2.27 패키지의 디렉토리 구조

  11. 1.4 NS2 시뮬레이터의 특징 • NAM (Network AniMator) • 작성한 스크립트의 시뮬레이션 실행, 결과를 애니메이션 툴로 보여주는 기능 수행 • Interactive 방식의 시뮬레이션 제어 수행 • 그림 1-10, 1-11 참조 (pp. 16) • trace-all • 시뮬레이션 시의 패킷상태를 추적할 수 있는 자료 생성 • 그림 1-12 (pp. 17) • xgraph • trace-all 에서 생성된 패킷 자료를 그래픽 형식으로 표현하는 툴 • 그림 1-13 (pp. 17)

  12. 2장. NS2 설치 및 시뮬레이션1. NS2 다운로드 및 설치 2. 간단한 시뮬레이션 실행 3. 시뮬레이션 실행 4. 시뮬레이션의 trace 결과 고찰 5. 시뮬레이션 전체 과정 6. New Elements 추가 및 NS 시뮬레이터 확장

  13. 2.1 NS2 시뮬레이터 다운로드 및 설치 • 다운로드 사이트 • www.isi.edu/nsnam/ns/tutorial/index.html • www.ee.surrey.ac.kr/Personal/L.Wood/mirror • 파일명 • ns-allinone-2.34.tar.gz • 설치과정 # tar zxvf ns-allinone-2.34.tar.gz # cd ns-allinone-2.34 # ./install • 셀에 PATH 명령 추가 # cd # vi .bash_profile

  14. 2.2 간단한 시뮬레이션 실행 • 예제 1 • 네트워크 설계 절차 • 네트워크 토폴로지 • 노드 생성 및 링크 설정(대역폭, 지연, 큐 특성 등) • 네트워크 시나리오 • 노드의 트래픽 에이전트 설정: 전송계층 프로토콜(TCP, UDP) 지정 • 응용 서비스 설정: FTP, HTTP, Telnet, CBR(Constant Bit Rate) 등의 트래픽 type 지정 • 예제1의설정 값 • 토폴로지: 그림 2-14 (pp. 25) • 노드 특성 (표 2-1) • 송신노드:0, 수신노드:1 • Queue Type: DropTail (Overflow 시에 Drop) • 패킷 크기: 500 Byte, 인터벌: 5ms • 링트 특성 (표 2-2) • Duplex Link, Bandwidth: 1 Mbps, Delay: 10ms • 프로토콜 설정 (표 2-3) • 전송계층: UDP, 응용계층: CBR • 시뮬레이션 시간 (그림 2-15) • 전체시간: 0 ~ 5 sec • 트래픽 발생 시간: 0.5 ~ 4.5 sec

  15. 2.2 간단한 시뮬레이션 실행 • 예제 1: 실행 및 결과는 그림 2-18 ~ 2-20 참조

  16. 2.2 간단한 시뮬레이션 실행 • 예제2: 시뮬레이션 토폴로지는 그림 2-21, 결과는 그림 2-22 (pp. 35) 참조

  17. 2.3 시뮬레이션 실행 • 이벤트 추적 및 기록 • 시뮬레이션 시에 패킷에 관한 모든 이벤트를 추적하는 코드 추가 • basic_traceall.tcl • 2.2절 예제1 basic.tcl에 패킷이벤트를 기록을 위한 코드 첨가 • 추가 코드는 그림 2-23(pp. 37) 참조 • out.tr 파일에 모든 패킷 이벤트를 저장(그림 2-24) • 기존 out.nam은 nam에 의해 패킷 전달 과정을 애니메이션으로만 보여줌 • trace 파일 포맷 • 그림 2-25 (pp. 38) 참조 • event • “+”: 큐에 들어오는 패킷 • “-”: 큐에서 나가는 패킷 • “r”: 다른 노드에서 도착한 패킷 • “d”: 드롭된 패킷

  18. 2.3 시뮬레이션 실행 • trace 파일 포맷 (계속) • time: 패킷 이벤트 발생 시간 • from node/to node: 패킷 이동 경로 • pkt type: CBR, TCP, UDP, ACK 등 • pkt size • flags: Congestion 관련 등의 flag 표시 • fid: flow ID (IPv6) • src addr/dst addr • node.port 형태 • seq num: 패킷 순서 번호 • pkt id: 패킷의 유일한(unique)ID

  19. 2.4 시뮬레이션의 trace 결과 고찰 • awk, grep:trace 파일의 조작 (필터링/검색/계산) • xgraph, tracegraph2: trace 결과를 그래픽으로 출력 • “awk”를 이용하여 파일로부터 그래프 그리기 • awk • trace 파일에서 특정 컬럼을 추출하거나 계산하는 용도로 많이 활용 • awk ‘{print $1, $3}’ awk-ex4.tr | xgraph • awk-ex4.tr 파일 각 행의 1번,3번 컬럼만 추출하여 xgraph로 출력 • awk ‘{if ($2 != 0) print $1, 2.0*$5/$2}’ awk-ex4.tr | xgraph • awk-ex4.tr 파일의각 행 중, 2번 컬럼이 0이 아니면 1번 컬럼 값과 “2.0*5번컬럼값/2번컬럼값” 계산 결과를 추출하여 xgraph로 출력 • grep • trace 파일에서 특정 패턴을 검색하여, 패턴이 존재하는 행만 추출하는 기능을 수행 • grep “0 1 cbr” out.tr > out1.tr • xgraph/tracegraph2: 생략 • 교재 참조 (pp. 41~46)

  20. 2.5 시뮬레이션 전체 과정 • 그림 2-29 (pp. 47) 참조 • Creating a new simulator object set ns [new Simulator] • 시뮬레이터 인스턴스 생성, 패킷 포맷 초기화, 스케줄러 생성 • Turn on Tracing • NS trace를 위한 파일 오픈 set f [open out.tr w] $ns trace-all $f • nam trace를 위한 파일 오픈 set nf [open out.nam w] $ns namtrace-all $nf • 사용자 임의의 trace 파일 오픈 set my_f [open my_out.tr w] puts $my_f “[$ns now] [expr $x(1) + $y(1)]”

  21. 2.5 시뮬레이션 전체 과정 • Creating a Network • step1: 네트워크 토폴로지 결정: 그림 2-30 (pp. 49) 참조 • step2: 노드 생성 set node_(h1) [$ns node] set node_(h2) [$ns node] set node_(r1) [$ns node] …… • step 3: 링크와 큐 생성 $ns duplex-link $node_(h1) $node_(r1) 10Mb 2ms DropTail $ns duplex-link $node_(h2) $node_(r2) 10Mb 3ms DropTail $ns duplex-link $node_(r1) $node_(r2) 1.5Mb 20ms DropTail …… • 라우팅 프로토콜 정의 • NS2에서는 Unicast Routing/Multicast Routing/Hierarchical Routing 지원 • 언급이 없을 경우, Unicast Routing 프로토콜이 적용

  22. 2.5 시뮬레이션 전체 과정 • Transport Layer 구현 • TCP agent나 UDP agent 연결 설정(그림 2-31 참조) set tcp0 [$ns create-connection TCP/Reno $node_(h1) TCPSink/DelAck $node_(h4) 0] • Application Layer 구현 • 전송할 트래픽 생성하여 attach 함 • 예를 들어 FTP 트래픽을 생성 시킬 경우 (그림 2-32 참조) set ftp0 [$tcp0 attach-app FTP] • 에러 모델 추가 set loss_module [new ErrorModel] $loss_module set rate_ 0.01 // 1% 에러 확률 $loss_module unit pkt // 기본 에러 단위 $loss_module ranvar [new RandomVariable/Uniform] $loss_module drop-target [new Agent/Null] $ns lossmodel $loss_module $n0 $n1 // 에러모듈 삽입

  23. 2.5 시뮬레이션 전체 과정 • NS2 시뮬레이터 시작 및 종료 • 트래픽 생성 시간 설정 $ns at 1.0 “$ftp0 start” • 트래픽 생성 종료 시간 설정 $ns at 17.0 “$ftp0 stop” • NS2 시뮬레이터 시작 $ns run // 이 명령어는 반드시 스크립트 코드의 마지막에 위치시킨다. • NS2 시뮬레이터 종료 exit 0

  24. 2.6 New Elements 추가 및 NS 확장(?) • 시뮬레이션 확장 절차(그림 2-33, pp. 53) 클래스 계층의 위치 결정 (어떤 클래스에서 파생할 것인지 결정함) new 패킷 헤더가 필요하다면 이를 생성한다. C++ 클래스를 생성한 후, 클래스에 메소드를 채워 넣는다. OTCL 연결(linkage)를 정의한다. OTCL 코드 작성 Build & Debug

  25. 2.6 New Elements 추가 및 NS 확장 • New Elements 추가 <step 1> *.cc C++ 코드 ns-allinone-2.34/ns-2.34/Makefile 내부에 OBJ_CC = ***.o 추가 <step 2> *.h Header 코드 C++ 코드를 추가한 후, new 패킷 타입에서 다루는 자료구조 선언 <step 3> *.tcl OTCL 라이브러리 ns-allinone-2.34/ns-2.34/Makefile 내부에 NS_TCL_LIB = ***.tcl 추가 <step 4> New Application ns-allinone-2.34/ns-2.34/packet.h 내부에 PT_NEW를 이용하여 새로운 형태의 패킷 타입 추가

  26. 2.6 New Elements 추가 및 NS 확장 • OTCL 및 C++ 확장 • Otcl 내부에서 확장 (라이브러리 확장) ns-lib.tcl 내부에서 새로 작성된 파일을 source 시킴 source ../yoursrc/msg.tcl • C++ 에서의 확장 <step 1> Makefile 변경 (?) NS_TCL_LIB = \ …… tcl/mysrc/msg.tcl <step 2> make depend 실행 (~/ns-allinone-2.34/ 상에서) <step 3> make 실행 (~/ns-allinone-2.34/ 상에서)

  27. 2.6 New Elements 추가 및 NS 확장 • Example: NS2에 새로운 프로토콜(ping) 추가 • 자세한 ‘ping’ 구현은 교재 12.4절에 설명 • 목적: ping 전송 후, 응답을 받아 RTT 시간 측정 • 헤더 파일 ping.h Class PingAgent 선언

  28. 2.6 New Elements 추가 및 NS 확장 • C++ 코드 • C++ 코드와 Tcl 코드 간의 연결(linkage)를 위한 코드 • class PingAgent 의 생성자 코드 • Tcl과 C++에서 공유할 수 있는 변수 바인딩을 수행

  29. 2.6 New Elements 추가 및 NS 확장 • PingAgent()::command 메소드 • Tcl 코드가 아래와 같이 구현되었을 경우, 이를 처리하기 위해 코드 set pa [new Agent/Ping] $pa send

  30. 2.6 New Elements 추가 및 NS 확장 • PingAgent()::recv 메소드 tcl.eval() 함수는 Tcl 함수의 recv()를 호출 (how?) 하는데, 이에 대한 코드는  Tcl 코드 부분에서 설명함.

  31. 2.6 New Elements 추가 및 NS 확장 • 추가 변경사항 • NS2의 packet.h 파일에 Ping 프로토콜 ID 정의 • p_info 클래스에 프로토콜 명칭 저장

  32. 2.6 New Elements 추가 및 NS 확장 • tcl/lib/ns-default.tcl 수정: Ping에 대한 디폴트 패킷 사이즈 정의 • tcl/lib/ns-packet.tcl 수정: off_ping_ 엔트리 추가 • ~/ns-allinone-2.34/Makefile 수정: ping.o 추가

  33. 2.6 New Elements 추가 및 NS 확장 • Tcl 코드 • echo패킷을 수신하였을 때, 호출되는 recv 프로시져 • 어디서 작성?, 어떻게 호출?

More Related