Introduce of NS-2 TCL◆ IntroductionEvent 구동 네트워크 시뮬레이터 다양한 IP 네트워크를 시뮬레이트한다 C++ OTCL로 구성 C++ : 변화에 느리지만 실행이 빠르다.(data처리) OTCL : 실행이 느리지만 변화에 빠르다.(control)◆ IntroductionC++ OTCl packet와 event 처리 시간(시뮬레이션 시간이 아니고)을 줄이기 위하여, event scheduler와 data 경로에 있는 기본적인 network 구성요소 object는 C++을 사용하여 쓰여지고 compile된다. compile된 object는 C++ object의 각각 요소들과 matching되는 OTcl object를 생성하고 OTcl 링크를 통해 OTcl 인터프리터로 유용하게 만들어진다. 이러한 방법으로 C++ object의 제어가 OTcl로 주어진다OTCLMIT에서 구현한 Object tcl을 말하는 것으로 Tcl/Tk(X-Window Toolkit)를 오브젝트 기반 프로그래밍을 위해 확장한 것 구조의 특징 tcl과 같이 철저하게 동적으로 확장할 수 있도록 설계 tcl 문법과 개념을 바탕으로 개발된 것 - 간결하고 이식이 가능한 구조이벤트 스케쥴러의 생성스케쥴러 생성 “set ns [new Simulator]” new를 사용하여 시뮬레이터 클래스를 생성하고 set 명령을 사용하여 생성된 객체의 인스턴스를 ns로 설정 이벤트 스케쥴링 “$ns at time event ” at time 은 명령을 실행할 시간 event 는 지정된 시점에 실행될 프로시저를 가리킨다. 스케쥴러 실행 “$ns run” : 시뮬레이션을 실행NS ComponentsNS Simulator NAM(Network Animator) NS output을 visualization Pre-processing 트래픽을 생성, 토폴로지 생성 Post-processing 간단한 trace분석Network Simulation 2NS2 – NS1의 기능추가 및 성능 개선 TCP, 라우팅 프로토콜, 멀티캐스트 프로토콜, RTP(Real Time Protocol), SRM(Scalable Reliable Multicast) 등 다양한 인터넷 프로토콜에 대한 시뮬레이션을 수행하기에 적절한 여러 환경을 제공하고 있어 현재 널리 사용되고 있는 네트워크 시뮬레이션 도구이다. 대화 모드(Interactive Mode) 수동 모드(Passive Mode)수동모드(Passive mode)스크립트 파일을 만든 후 이를 이용하여 시뮬레이션을 수행하는 방법이다. ns명령, tcl명령, shell명령어를 이용하여 tcl파일 제작. filename.tcl - ns filename.tclTCL file[Shell Prompt] vi hello.tcl 라인 2: set ns [new Simulator] set 명령어로 변수 ns를 new Simulator로 사용하고 라인 3: $ns at 1 puts Hello World!“ puts 명령어로 “Hello World!” 문자 스트링을 화면에 출력 라인 4: $ns at 1.5 exit 라인 5: $ns run 라인 6: ns hello.tcl 라인 7: Hello World!네트워크 시뮬레이션 요소노드(node) set n0 [$ns node] set n1 [$ns node] ns simplex-link $n0 $n1 1Mb 10ms Droptail (단방향) 대역폭 : 1Mb / 전송지연 : 10ms ns duplex-link $n0 $n1 1Mb 10ms Droptail (양방향)에이전트(Agent)시뮬레이션에서 행동을 이끌어 낼 수 있는 객체 단말이나 라우터로 간주되는 노드에서 이동할 수 있는 실체이며, 그 실체에 특성을 어떻게 부여하는가에 따라 에이전트의 행동이 달라진다노드의 접속 및 연결 설정 - UDPUDP(User Datagram Protocol) 한 응용 프로그램에서 다른 응용 프로그램으로 데이터그램을 전송하는 기본적인 메카니즘을 제공한다 신뢰성이 보장되지 않는 비연결형 데이터그램 전송 서비스를 제공한다 Agent/UDP와 Agent/NULL을 쌍으로 설정해야한다 즉, 근원지와 목적지를 쌍으로 설정해야 한다.노드의 접속 및 연결 설정 - UDP라인 1: set udp [new Agent/UDP] – 근원지 설정 라인 2: set null [new Agent/NULL] – 목적지 설정 라인 3: $ns attach-agent $n0 $udp – node 0번에 udp 패킷을 받아들이는 객체 생성 라인 4: $ns attach-agent $n1 $null – node 1번에 udp 패킷을 받아들이는 객체 생성 라인 5: $ns connect $udp $null – 근원지 에이전트와 목적지 에이전트 간을 연결노드의 접속 및 연결 설정 - TCP인터넷 호스트 간에 신뢰성이 보장되는 데이터 전송서비스를 제공하는 종단간 전송 프로토콜이다 Agent/TCP와 Agent/ TCPSink를 쌍으로 설정노드의 접속 및 연결 설정 - TCP라인 1: set tcp [new Agent/TCP] 라인 2: set tcpsink [new Agent/TCPSink] 라인 3: $ns attach-agent $n0 $tcp 라인 4: $ns attach-agent $n1 $tcpsink 라인 5: $ns connect $tcp $tcpsink시뮬레이션 결과의 시각적 표현NAM(Network Animator ) 네트워크 시뮬레이션 도중 발생하는 사건들을 시간 축에 대해 기록해 놓은 파일 정보를 분석하여 그 결과를 화면 상에 에니메이션 형태로 표현하는 비쥬얼 시뮬레이션 도구이다 노드와 링크에서의 순차적 시간 변화에 따른 패킷 전송과 ACK등의 응답 패킷의 움직임을 시각적으로 볼 수 있게 한다.NAM(Network Animator )라인 1: $ns f1 [open test.nam w] 라인 2: $ns namtrace-all $f1◆ Grammer of TCL$result 달러표시($)는 변수값을 의미 여기서 result는 변수명을 의미 {i =10} { }는 하나의 인자로 넘길때 사용 [Factorial 10] [ ]는 어떤 명령어의 실행결과를 다른 명령의 인자로 사용할때 사용 expr $result * $i expr은 특정한 수학적 계산을 위해 쓰임.◆ Grammer of TCL대괄호와 따옴표 puts stdout The length of $s is [string length $s]. = The length of Hello is 5. puts stdout {The length of $s is [string length $s].} = The length of $s is [string length $s].◆ Exampleset var 5 set b $var puts “$b” 1. var이라는 변수에 5를 대입 (var값 = 5 ) 2. var 변수값을 b에 대입(b값 = 5) 3. b의 변수값을 출력 4. 결과값은 5.◆ Lab1-1proc Factorial {x} { set i 1 set result 1 while {$i = $x} { set result [expr $result * $i] incr i } return $result } set result [Factorial 10] puts $result결과값 : 3628800◆ Lab1-1 Capture◆ Lab1-2Class Real Real instproc init {x} { $self instvar value_ set value_ $x } Real instproc multiply {x} { $self instvar value_ puts [expr $value_ * [$x set value_]] } Real instproc divide {x} { $self instvar value_ puts [expr $value_ / [$x set value_]] }Class Integer -superclass Real Integer instproc multiply {x} { $self instvar value_ puts [expr $value_ * [$x set value_]] } Integer instproc divide {x} { $self instvar value_ puts [expr $value_ / [$x set value_]] }set realA [new Real 12.3] set realB [new Real 0.5] $realA multiply $realB $realA divide $realB set integerA [new Integer 12] set integerB [new Integer 5] $integerA multiply $integerB $integerA divide $integerB6.1500000000000004 24.600000000000001 60 2◆ Lab1-2 Capture{nameOfApplication=Show}