Bab 3. Simulasi dengan NS-2 NS simulator adalah perangkat lunak untuk kebutuhan simulasi aplikasi, protokol, tipe jaringan , elemen-elemen jaringan, pemodelan jaringan dan pemodelan lalu-lintas jaringan. Pada intinya perangkat lunak ini didesain dan dikembangakan untuk kebutuhan penelitian jaringan. Perangkat lunak ini bersifat open source dan seringkali disebut sebagai NS-2, dan dapat di download di alamat situs http://isi.edu/nsnam/ns/. NS simulator menggunakan dua buah bahasa pemrograman standar, yaitu simulator berorientasi obyek yang ditulis dalam C++ dan OTcl (object oriented extension of Tcl) untuk eksekusi terhadap perintah-perintah yang ditulis sebagai script dari NS-2. 3.1. Pemrograman Tcl dan Otcl Tcl (Tool Command Language) adalah salah satu bahasa pemrograman yang digunakan oleh jutaan orang karena memiliki sintaks yang sangat mudah dan mudah diintegrasikan dengan bahasa yang lain. Bahasa pemrograman Tcl ini dibuat pertama kali oleh Jhon Ousterhout. Beberapa dasar dari sintaks bahasa pemgrograman Tcl dan Otcl adalah sebagai berikut: • Mengisikan sebuah nilai pada sebuah variabel dilakukan dengan menggunakan perintah ‘set’. Misalnya: mengisikan nilai 0 ke dalam variabel b. set b 0 • Mengisikan nilai dari suatu variabel ke dalam variabel yang lain dilakukan dengan menggunakan simbol $. Misalnya: mengisikan nilai yang ada dalam variabel b ke dalam variabel x. set x $b • Operasi matematika dilakukan dengan menggunakan perintah ‘expr’. Misalnya: mengisikan nilai penjumlahan dari variabel a dan b ke dalam variabel x. x [expr $a + $b] • Dalam Tcl sebuah variabel dapat berisi string, integer bilangan real tergantung pada nilai yang kita masukkan. Misalkan kita menuliskan x [expr 1/50], maka hasilnya akan 0. Tetapi apabila kita menuliskan x [expr 1.0/50.0] maka hasilnya akan berupa bilangan real. • Tanda # digunakan sebagai tanda baris untuk komentar, karena baris yang memiliki tanda # di bagian awal maka baris tersebut tidak akan dieksekusi. • Untuk membuat sebuah file, pertama-tama kita menentukan sebuah file yang akan digunakan misalkan ‘namafile’, dan menandai sebuah variabel misalnya ‘file1’ untuk pointer yang akan digunakan oleh Tcl menghubungkan ke file ‘namafile’. Misalkan: set file1 [open namafile w] • Untuk menampilkan hasil operasi dilakukan dengan menggunakan perintah ‘puts’. Setiap kali perintah ini dieksekusi maka secara otomatis perintah ini akan menggeser tampilan berikutnya pada baris di bawahnya. Untuk menghindari pembuatan baris baru tambahkan perintah –nonewline setelah perintah puts. Penulisan di file dilakukan dengan perintah puts $file1 “text”. • Eksekusi terhadap perintah-perintah UNIX dilakukan dengan menggunakan ‘exec’. Misalnya: kita ingin memerintahkan NS untuk menggambarkan kurva yang datanya terletak dalam file bernama ‘data’. Exec xgraph data & Tanda & adalah simbol agar eksekusi dilakukan sebagai background. • Struktur percabangan dituliskan sebagai berikut: if { ekspresi } { <beberapa perintah> } else { <beberapa perintah> } Untuk melakukan pengujian kesamaan dalam ekspresi gunakan simbol “==”, sedangkan ketidaksamaan menggunakan simbol “!=”. • Proses looping dapat dilakukan dengan cara seperti di bawah ini: for { set i 0 } {$i < 8} { incr i } { <beberapa perintah> } • Prosedur dapat dibuat dalam tcl dengan bentuk seperti dibawah ini: proc kuadrat { par1 par2 ...} { global var1 var2 <perintah> return $sesuatu } Prosedur menerima parameter dapat berupa object, file atau variabel. Dalam contoh di atas adalah par1 dan par2. Perintah ‘global’ digunakan untuk mendeklarasikan variabel sebagai variabel ekternal, artinya variabel tersebut dapat dieksekusi dari luar prosedur, dalam contoh di atas adalah variabel var1 dan var2. 3.2. Inisialisasi dan Terminasi Simulasi dengan menggunakan NS selalu dimulai dengan mendefinisikan sebuah variabel atau object sebagai instance dari kelas Simulator dengan cara sebagai berikut: set ns [new Simulator] Variabel ns dalam perintah diatas dapat diganti dengan nama lain, tetapi secara umum orang menggunakan variabel dengan nama ns seperti di atas. Untuk menyimpan data keluaran hasil dari simulasi (trace files) dan juga sebuah file lagi untuk kebutuhan visualisasi (nam files) akan dibuat dua buah file dengan perintah “open” seperti berikut: #Buka trace files set tracefile1 [open out.tr w] $ns trace-all $tracefile1 #Buka NAM trace files set namfile [open out.nam w] $ns namtrace-all $namfile Skrip di atas akan membuat file out.tr yang akan digunakan untuk menyimpan data hasil simulasi dan file out.nam untuk menyimpan data hasil visualisasi. Deklarasi ‘w’ pada bagian akhir dari perintah open adalah perintah tulis. Selanjutnya terminasi terhadap program dilakukan dengan cara mendeklarasikan prosedur “finish” seperti di bawah ini: #Mendefiniskan prosedur ‘finish’ proc finish {} { global ns tracefile1 namfile $ns flush-trace close $tracefile1 close $namfile exec nam out.nam & exit 0 } Perhatikan bahwa prosedur tersebut menggunakan variabel global ns, tracefile1 dan namfile. Perintah flush-trace digunakan untuk menyimpan semua data hasil simulasi ke dalam file tracefile1 dan namfile. Perintah exit akan mengakhiri aplikasi dan mengembalikan status dengan angka 0 kepada sistem. Perintah exit 0 adalah perintah default untuk membersihkan memori dari sistem, nilai yang lain dapat gunakan untuk misalnya untuk memberikan status gagal. Pada bagian akhir dari program, prosedur ‘finish’ harus dipanggil dengan indikasi waktu (dalam detik) terminasi dari program, misalnya $ns at 100.0 “finish” Selanjutnya untuk memulai simulasi atau menjalankan program dapat dilakukan dengan menggunakan perintah: $ns run 3.3. Membuat node dan link Mendefiniskan sebuah node pada NS pada dasarnya adalah membuat sebuah variabel, sebagai contoh: set n0 [$ns node] Selanjutnya untuk menggunakan node n0 dilakukan dengan cara memanggil variabel $n0. Demikian pula node-node yang lain dapat dibuat dengan cara yang sama sesuai dengan kebutuhan dalam simulasi, seperti: set n1 [$ns node] set n2 [$ns node] Setelah node terbuat, maka langkah selanjutnya adalah membuat link yang akan membuat hubungan antar node. Sebuah link untuk menghubungkan node $n0 dan $n2 dengan bi-directional link berkapasitas 10 Mb dan dengan waktu tunda akibat propagasi sebesar 10ms dapat dibuat dengan cara seperti di bawah ini: $ns duplex-link $n0 $n2 10Mb 10ms DropTail Apabila diinginkan sebuah link satu arah maka dapat gunakan perintah “simplexlink” untuk menggantikan “duplex-link”. Pada NS, antrian keluaran dari sebuah node didefiniskan sebagai bagian dari sebuah link, karena itu kita perlu mendefinisikan karakteristik dari queue ini apabila terjadi lebihan data yang datang pada sebuah node. Opsi “DropTail” berarti bahwa data terakhir yang datang akan dibuang apabila kapasitas dari memori telah penuh. Alternatif lain untuk opsi ini antara lain: • RED (random early discard), • FQ (fair queueing), • DRR (deficit round robin), • SFQ (stochastic fair queueing), dan • CBQ (memasukkan prioritas dan round-robin). Karena link dianggap memiliki memori (buffer) maka kita perlu mendefiniskan kapasitas antrian dari link sebagai berikut: #Melakukan setting ukuran memori pada link n2-n3 sebesar 15 $ns queue-limit $n2 $n3 15 Sebagai contoh mari kita membangun simulasi jaringan sederhana dengan diagram seperti dibawah ini: $n0 1Mbps 8ms $n2 1Mbps 10ms 250kbps 100ms 250kbps 100ms $n4 600kbps 50ms $n3 600kbps 40ms $n5 $n1 Gambar 3.1. Jaringan sederhana untuk simulasi NS Maka secara keseluruhan skrip NS untuk jaringan di atas adalah sebagai berikut: #Skrip 1. #membuat 6 buah node set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] #membuat link antar node $ns duplex-link $n0 $n2 1Mb 8ms DropTail $ns duplex-link $n1 $n2 1Mb 10ms DropTail $ns simplex-link $n2 $n3 0.25Mb 100ms DropTail $ns simplex-link $n3 $n2 0.25Mb 100ms DropTail $ns duplex-link $n3 $n4 0.6Mb 50ms DropTail $ns duplex-link $n3 $n5 0.6Mb 40ms DropTail #Melakukan setting ukuran memori pada link n2-n3 sebesar 15 $ns queue-limit $n2 $n3 15 3.4. Menggabungkan aplikasi dalam simulasi Setelah mendefinisikan topologi dari jaringan Internet yang akan kita simulasikan maka langkah selanjutnya adalah membuat simulasi lalu lintas data yang akan melewati jaringan. Karena itu kita perlu mendefinisikan proses routing (menentukan mana tujuan dan sumber), protokol yang akan digunakan beserta aplikasinya. Berikut ini kita akan melihat bagaimana mendefinisikan aplikasi FTP yang berjalan di atas protokol TCP. 3.4.1. File Transfer Protocol (FTP) Sebagaimana telah kita pelajari dalam bab sebelumnya TCP adalah protokol yang mengutamakan reliabilitas dalam pengiriman data, baik melalui mekanisme congestion contol, flow control dan error control. Karena setiap kali pengiriman data TCP membutuhkan konfirmasi dalam bentuk acknkowledgment, maka jelas terlihat di sini bahwa TCP membutuhkan link yang bersifat dua arah (bidirectional link). NS-2 mendukung berbagai variasi dari TCP, antara lain: Tahoe, Reno, Newreno, dan Vegas. Untuk mendefinisikan jenis protokol yang akan digunakan NS-2 menggunakan perintah berikut ini: set tcp [new Agent/TCP] Selanjutnya untuk menggabungkan protokol ini pada sebuah node, dalam hal ini misalnya node n0 digunakan perintah: $ns attach-agent $n0 $tcp Tujuan akhir dari mengalirnya aplikasi TCP didefinisikan dengan pointer yang disebut dengan sink sebagai berikut: set sink [new Agent/TCPSink] Salah satu tugas node akhir ini adalah membangkitkan segment acknowledgment sebagaimana telah kita pelajari pada mekanisme pengiriman data pada TCP. Untuk menggabungkan tujuan akhir dari aliran data ke salah satu node, misalnya kita ambil node n4, digunakan perintah: $ns attach-agent $n4 $sink Koneksi antara sumber dan tujuan akhir selanjutnya didefiniskan dengan: $ns connect $tcp $sink Ukuran dari paket TCP secara default adalah 1000 bytes, tetapi NS memungkinkan kita mengubah ukuran dari paket TCP dengan nilai yang lain, misalkan kita inginkan ukuran paket sebesar 552 bytes, maka definisi untuk ukuran paket di dalam skrip NS adalah: $tcp set packetSize_ 552 Karena TCP mampu mengalirkan beberapa aplikasi dengan menggunakan konsep multiplexing dan demultiplexing, maka kita tahu bahwa akan ada beberapa aliran data di dalam link yang telah kita bangun. Untuk membedakan aliran satu dengan yang lain dibutuhkan sesuatu sebagai identifikasi bagi masing-masing aliran data. Pemberian identitas pada aplikasi TCP dilakukan dengan memberikan perintah berikut: $tcp set fid_ 1 Langkah terakhir adalah menentukan jenis aplikasi dan menggabungkan dengan protokol TCP yang telah kita definisikan sebagai berikut: #Menggabungkan aplikasi FTP pada protokol TCP set ftp [new Application/FTP] $ftp attach-agent $tcp Secara keseluruhan penentuan protokkol dan aplikasi pada skrip adalah sebagai berikut: #Membentuk koneksi melalui protokol TCP set tcp [new Agent/TCP] $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n4 $sink $ns connect $tcp $sink $tcp set packetSize_ 552 $tcp set fid_ 1 #Menggabungkan aplikasi FTP pada protokol TCP set ftp [new Application/FTP] $ftp attach-agent $tcp 3.5. Mengatur jadwal eksekusi pada skrip Karena NS merupakan simulator kejadian diskrit, maka skrip yang telah dibuat dengan Tcl perlu mendefinisikan waktu eksekusi dari setiap kejadian. Setiap kejadian pada skrip Tcl dapat didefinisikan dengan perintah $ns at <waktu> <kejadian> Misalnya untuk menentukan kapan aplikasi FTP mulai mengirimkan data dan kapan selesai mengirimkan data digunakan perintah berikut: $ns at 0.2 “ftp start” $ns at 10.0 “ftp stop” Dengan menggunakan perintah tersebut di atas, aplikasi FTP akan mulai berjalan pada detik ke 0.2 dan berhenti pada detik ke 10.0. 3.6. Menjalankan skrip pada NS-2 simulator Sekarang mari kita letakkan semua skrip di atas dalam sebuah file contoh1.tcl seperti berikut: #file contoh1.tcl set ns [new Simulator] #Mendefinisikan warna untuk aliran data dalam NAM $ns color 1 Blue $ns color 2 Red #Buka trace files set tracefile1 [open out.tr w] $ns trace-all $tracefile1 #Buka NAM trace files set namfile [open out.nam w] $ns namtrace-all $namfile #Mendefiniskan prosedur ‘finish’ proc finish {} { global ns tracefile1 namfile $ns flush-trace close $tracefile1 close $namfile exec nam out.nam & exit 0 } #membuat 6 buah node set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] #membuat link antar node $ns duplex-link $n0 $n2 1Mb 8ms DropTail $ns duplex-link $n1 $n2 1Mb 10ms DropTail $ns simplex-link $n2 $n3 0.25Mb 100ms DropTail $ns simplex-link $n3 $n2 0.25Mb 100ms DropTail $ns duplex-link $n3 $n4 0.6Mb 50ms DropTail $ns duplex-link $n3 $n5 0.6Mb 40ms DropTail #menentukan posisi node pada NAM (Network Animator) $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns simplex-link-op $n2 $n3 orient right $ns simplex-link-op $n3 $n2 orient left $ns duplex-link-op $n3 $n4 orient right-up $ns duplex-link-op $n3 $n5 orient right-down #Melakukan setting ukuran memori pada link n2-n3 sebesar 15 $ns queue-limit $n2 $n3 15 #Membentuk koneksi melalui protokol TCP set tcp [new Agent/TCP] $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n4 $sink $ns connect $tcp $sink $tcp set packetSize_ 552 $tcp set fid_ 1 #Menggabungkan aplikasi FTP pada protokol TCP set ftp [new Application/FTP] $ftp attach-agent $tcp $ns at 0.2 “ftp start” $ns at 9.6 “ftp stop” $ns at 10.0 “finish” $ns run Setelah menyimpan file contoh1.tcl pada home direktori, selanjutnya eksekusi untuk menjalankan skrip contoh1.tcl pada NS simulator dilakukan dengan mengetikkan ns contoh1.tcl pada command prompt. Proses simulasi ditampilkan dengan menggunakan Network Animator (NAM) seperti terlihat dalam Gambar 3.2. Gambar 3.2. Tampilan NAM untuk skrip contoh1.tcl 3.7. UDP Protokol TCP menghasilkan lalu lintas data yang bersifat bursty. Hal ini terutama disebabkan karena adanya congestion control pada TCP. Apabila TCP mengenalinya masih ada banyak bandwidth tersisa di dalam sebuah jalur, maka TCP akan meningkatkan lebar dari congestion window sampai terdeteksi adanya kongesi. Apabila TCP mendeteksi adanya kongesi di dalam sebuah jalur maka TCP akan menurunkan lebar dari congestion window menjadi setengahnya atau sampai minimum menjadi 1 MSS saja. Lihat kembali pada sub-Bab 2.1.7. Sebagaimana kita ketahui, ukuran dari congestion window ini berasosiasi dengan kecepatan atau throughput dari jalur. Karena itu apabila congestion window menjadi lebar kecepatan pengiriman data akan meningkat, sebaliknya apabila ukuran congestion window mengecil maka kecepatan data akan turun. Dengan demikian lalu-lintas data pada TCP terihat bursty. Sebaliknya pada UDP lalu lintas data tidak bursty melainkan cenderung konstan karena protokol UDP tidak memiliki congestion control. Karena itu pada dasarnya protokol UDP tidak memiliki batasan kecepatan pengiriman data, kecepatan pengiriman data akan linier dengan ketersediaan bandwidth yang ada pada jalur komunikasi. Pada bagian ini kita akan membuat simulasi protokol UDP pada NS-2 dengan menggunakan aplikasi Contant Bit Rate (CBR). Aplikasi CBR ini mewakili aplikasi-aplikasi praktis semacam Voice over IP (VoIP) pada jaringan Internet. Dengan menggunakan diagram jaringan sebagaimana halnya pada Gambar 3.1, protokol UDP dengan aplikasi CBR akan mengalir dari node 1 ke node 5. Definisi dari node 1 sebagai sumber dilakukan dengan cara: set udp [new Agent/UDP] $ns attach-agent $n1 $udp Sedangkan definisi node 5 sebagai tujuan akhir dari data adalah sebagai berikut: set null [new Agent/Null] $ns attach-agent $n5 $null Berikutnya kita membuat koneksi antara sumber dan tujuan, serta memberikan identikasi untuk aliran data UDP sebagai berikut: $ns connect $udp $null $udp set fid_ 2 Sekarang mari kita definisikan aplikasi CBR dan melekatkan aplikasi ini pada protokol UDP. Aplikasi CBR didefinisikan dengan cara: set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp Baris kedua dari perintah di atas berfungsi untuk melekatkan aplikasi CBR pada protokol UDP. Mari kita asumsikan untuk aplikasi ini memiliki ukuran paket sebesar 1000 byte dan dengan kecepatan pengiriman data sebesar 0.01 Mbps. $cbr set packetSize_ 1000 $cbr set rate_ 0.01Mb Karakteristik lain dari CBR adalah adanya sebuah flag random_ untuk mengindikasikan adanya random noise pada proses transmisi atau tidak. Kita asumsikan tidak ada random noise, maka: $cbr set random_ false Secara keseluruhan, perintah-perintah untuk mendefinisikan protokol UDP dan aplikasi CBR ditunjukkan dalam skrip berikut ini: #Membentuk koneksi melalui protokol UDP set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n5 $null $ns connect $udp $null $udp set fid_ 2 #Menggabungkan aplikasi CBR pada protokol UDP set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set packetSize_ 1000 $cbr set rate_ 0.01Mb $cbr set random_ false Selanjutnya mari kita insert kan skrip aplikasi CBR pada protokol UDP ini pada skrip contoh1.tcl dilengkapi dengan penentuan waktu aplikasi CBR mulai mengirimkan data. Skrip ini juga dilengkapi dengan kemampuan untuk menulis file WinFile yang berisi informasi tentang fluktuasi ukuran dari congestion window pada pada protokol TCP. #file contoh1.tcl set ns [new Simulator] #Mendefinisikan warna untuk aliran data dalam NAM $ns color 1 Blue $ns color 2 Red #Buka trace files set tracefile1 [open out.tr w] $ns trace-all $tracefile1 #Buka winfile file set winfile [open WinFile w] #Buka NAM trace files set namfile [open out.nam w] $ns namtrace-all $namfile #Mendefiniskan prosedur ‘finish’ proc finish {} { global ns tracefile1 namfile $ns flush-trace close $tracefile1 close $namfile exec nam out.nam & exit 0 } #membuat 6 buah node set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] set n4 [$ns node] set n5 [$ns node] #membuat link antar node $ns duplex-link $n0 $n2 1Mb 8ms DropTail $ns duplex-link $n1 $n2 1Mb 10ms DropTail $ns simplex-link $n2 $n3 0.25Mb 100ms DropTail $ns simplex-link $n3 $n2 0.25Mb 100ms DropTail $ns duplex-link $n3 $n4 0.6Mb 50ms DropTail $ns duplex-link $n3 $n5 0.6Mb 40ms DropTail #menentukan posisi node pada NAM (Network Animator) $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns simplex-link-op $n2 $n3 orient right $ns simplex-link-op $n3 $n2 orient left $ns duplex-link-op $n3 $n4 orient right-up $ns duplex-link-op $n3 $n5 orient right-down #Melakukan setting ukuran memori pada link n2-n3 sebesar 10 $ns queue-limit $n2 $n3 10 #Membentuk koneksi melalui protokol TCP set tcp [new Agent/TCP] $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n4 $sink $ns connect $tcp $sink $tcp set packetSize_ 552 $tcp set fid_ 1 #Menggabungkan aplikasi FTP pada protokol TCP set ftp [new Application/FTP] $ftp attach-agent $tcp #Membentuk koneksi melalui protokol UDP set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n5 $null $ns connect $udp $null $udp set fid_ 2 #Menggabungkan aplikasi CBR pada protokol UDP set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set packetSize_ 1000 $cbr set rate_ 0.01Mb $cbr set random_ false $ns at 0.2 “$cbr start” $ns at 1.0 “$ftp start” $ns at 9.6 “$cbr stop” $ns at 9.8 “$ftp stop” #Prosedur untuk menggambarkan ukuran congestion window proc plotWindow {tcpSource file} { global ns set time 0.1 set now [$ns now] set cwnd [$tcpSource set cwnd_] puts $file “$now $cwnd” $ns at [expr $now+$time] “plotWindow $tcpSource $file } $ns at 0.1 “plotWindow $tcp $winfile” $ns at 10.0 “finish” $ns run Gambar 3.4. Tampilan NAM untuk skrip contoh1.tcl (biru: aliran TCP dan merah: aliran UDP) 3.8. Analisis Trace File 3.8.1. Tracing object Simulasi dengan menggunakan NS-2 dapat menghasilkan visualisasi dari tracing dengan menggunakan NAM dan juga file tracing dalam bentuk text (ASCII) yang berkaitan dengan setiap kejadian dalam jaringan. Pada saat menggunakan tracing (lihat sub-Bab 3.2), NS-2 sebetulnya menyisipkan 4 object ke dalam link, yaitu: EnqT, DeqT, RecvT dan DrpT seperti terlihat dalam Gambar 3.4. EnqT mencatat informasi berkaitan dengan sebuah paket yang datang dan mengalami proses antrian pada input dari link (Ingat: pada NS-2 sebuah link dianggap memiliki memory). Apabila paket mengalami overflow dan sejumlah paket yang datang dibuang, maka informasi terkait dengan paket yang dibuang tersebut disimpan di dalam DrpT. Sedangkan DeqT mencatat informasi dari paket yang telah keluar dari poses antrian dan Recvt berisi informasi tentang paket yang sampai pada keluaran dari sebuah link. Gambar 3.4. Tracing object pada sebuah link 3.8.2. Struktur dari trace file Keluaran dari tracing yang ditulis ke dalam text file tersusun atas 12 kolom seperti ditunjukkan dalam Gambar 3.5. Gambar 3.5. Field pada file trace Fungsi dari setiap field dijelaskan sebagai berikut: a) Field pertama adalah event. Field event merupakan salah satu dari 4 kemungkinan symbol yang berasosiasi dengan 4 macam event, yaitu: r merupakan simbol dari receive berarti bahwa paket telah sampai ke bagian output dari sebuah link, + merupakan simbol bahwa paket masuk ke proses antrian, - merupakan simbol bahwa paket keluar dari proses antrian, d merupakan simbol bahwa paket tersebut dibuang (drop). b) Field kedua menunjuk pada waktu saat sebuah event terjadi. c) Field ketiga menunjuk pada node input dari sebuah link saat sebuah event terjadi. d) Field keempat menunjuk pada node output dari sebuah link saat sebuah event terjadi. e) Field kelima menunjuk pada tipe dari paket. f) Field keenam menunjuk pada ukuran dari paket. g) Field ketujuh menunjuk pada beberapa flag yang akan dijelaskan di belakang. h) Field kedepalan adalah flow id. i) Field kesembilan adalah alamat sumber dalam bentuk “node.port”. j) Field kesepuluh adalah alamat tujuan dalam bentuk “node.port”. k) Field kesebelas adalah sequence number dari paket data. l) Field keduabelas adalah id unik dari paket. Contoh isi dari file trace adalah sebagai berikut: + 0.2 0 2 tcp 40 ------- 1 0.0 4.0 0 0 - 0.2 0 2 tcp 40 ------- 1 0.0 4.0 0 0 r 0.20832 0 2 tcp 40 ------- 1 0.0 4.0 0 0 + 0.20832 2 3 tcp 40 ------- 1 0.0 4.0 0 0 - 0.20832 2 3 tcp 40 ------- 1 0.0 4.0 0 0 r 0.3096 2 3 tcp 40 ------- 1 0.0 4.0 0 0 + 0.3096 3 4 tcp 40 ------- 1 0.0 4.0 0 0 - 0.3096 3 4 tcp 40 ------- 1 0.0 4.0 0 0 r 0.360133 3 4 tcp 40 ------- 1 0.0 4.0 0 0 3.8.3. Pemrosesan file data dengan Perl Perl singkatan dari Practical Extraction and Report Language merupakan bahasa pemrograman yang banyak digunakan untuk pemrosesan data file ASCII pada sistem UNIX. Bahasa pmrograman ini dibuat oleh Larry Wall dengan tujuan untuk memudahkan tugas-tugas administrasi sistem UNIX. Namun Perl saat ini telah berevolusi menjadi bahasa pemrograman dan merupakan salah satu alat yang dapat digunakan untuk pemrograman web. Berikut ini akan ditunjukkan skrip Perl untuk perhitungan throughput dari koneksi TCP yang telah dijalankan pada skrip sebelumnya contoh1.tcl. Skrip Perl ini dituliskan dalam sebuah file bernama throughput.pl. Sebagai masukan bagi prosedur ini adalah nama dari trace file (yaitu out.tr), nama node yang menunjukkan letak dari protokol TCP yang akan kita cek, dan granularitas (periode waktu tertentu). # type: perl throughput.pl <trace file> <required node> <granularity> > output file $infile=$ARGV[0]; $tonode=$ARGV[1]; $granularity=$ARGV[2]; #Menghitung jumlah paket dalam byte yang ditransmisikan #melalui sebuah nodedalam interval waktu sebagaimana #dispesifikasikan dalam granularity. $sum=0; $clock=0; open (DATA,"<$infile") || die "Can't open $infile $!"; while (<DATA>) { @x = split(' '); #kolom 1 adalah waktu if ($x[1]-$clock <= $granularity) { #kolom 0 adalah event, diambil pada saat event r saja if ($x[0] eq 'r') { #kolom 3 adalah node tujuan, disesuaikan dengan argv[1] if ($x[3] eq $tonode) { #kolom 4 adalah jenis paket dalam hal ini dipilih TCP if ($x[4] eq 'tcp') { $sum=$sum+$x[5]; } } } } else { $throughput=$sum/$granularity; print STDOUT "$x[1] $throughput\n"; $clock=$clock+$granularity; $sum=0; } } $throughput=$sum/$granularity; print STDOUT "$x[1] $throughput\n"; $clock=$clock+$granularity; $sum=0; close DATA; exit(0); Selanjutnya jalankan prosedur throughput.pl di atas dengan menggunakan file out.tr sebagai input, dan simpan hasil pengolahan ke dalam file bernama thp dengan cara: perl throughput.pl out.tr 4 1 > thp Perintah di atas menunjukkan bahwa analisis throughput akan dilakukan pada node 4 dengan nilai granularity sebesar 1s. 3.8.4. Menggambar grafik dengan Gnuplot Setelah mendapatkan throughput dengan cara di atas, maka langkah selanjutnya adalah menggambarkan throughput tersebut ke dalam bentuk grafik. Salah satu cara menggambarkan grafik adalah dengan menggunakan Gnuplot. gnuplot set size 0.8,0.8 set key right bottom set xlabel “waktu (s)” set ylabel “throughput” plot ‘thp’ with lines 1 Ukuran congestion window pada TCP juga dapat digambarkan dengan menggunakan gnuplot dengan memanggil file WinFile seperti pada contoh skrip di bawah ini: gnuplot set size 0.8,0.8 set key right bottom set xlabel “waktu (s)” set ylabel “CongWin” plot ‘WinFile’ with lines 1 Tugas: Lakukan simulasi ulang untuk menghitung throughput TCP dan fluktuasi ukuran CongWin pada node4 dengan konfigurasi jaringan seperti dalam Gambar 3.1, tetapi gunakan protokol-protokol Tahoe, Reno, NewReno dan Vegas. Lakukan perbandingan dan analisis terhadap karakteristik dari keempat protokol di atas! Cara melakukan setting untuk protokol TCP yang berbeda adalah sebagai berikut: set tcp [new Agent/TCP/Reno] set tcp [new Agent/TCP/Newreno] set tcp [new Agent/TCP/Vegas] 3.9. TCP pada Link dengan Noise Pada simulasi sebelumnya TCP didominasi oleh kehilangan paket data akibat adanya kongesi di dalam jaringan. Pada kenyataannya link yang mengandung noise juga dapat mengurangi unjuk kerja dari jaringan, misalnya pada jaringan komunikasi radio semacam WiFi, telepon selular dan komunikasi melalui satelit. Dalam beberapa kasus keberadaan noise di dalam link dapat memutuskan komunikasi dan bahkan menyebabkan sejumlah paket hilang. Pada bagian ini kita akan mensimulasikan TCP pada link yang mengandung noise. Gambar 3.6. Model jaringan untuk simulasi TCP pada link dengan noise Gambar 3.7. Implementasi diagram jaringan pada ns-2 Sebagai contoh mari kita tambahkan link dengan error model pada jalur yang terletak di antara node2 dan node3 dalam Gambar 3.6. Proses penambahan error model dilakukan dengan cara sebagai berikut: #Error model pada link n2 dan n3 set loss_module [new ErrorModel] $loss_module set rate_ 0.2 $loss_module ranvar [new RandomVariable/Uniform] $loss_module drop-target [new Agent/Null] $ns lossmodel $loss_module $n2 $n3 Perintah $loss_module set rate_ 0.2 di atas menunjuk pada laju kehilangan data yang diharapkan sebesar 20% dari jumlah paket. Selanjutnya perintah $loss_module ranvar [new RandomVariable/Uniform] menunjukkan bahwa error ini dibangkitkan dengan menggunakan bilangan acak dengan distribusi uniform. Contoh skrip untuk mensimulasikan diagram dalam Gambar 3.6 dengan menggunakan link yang mengandung noise dapat dilihat dalam file contoh2.tcl di bawah ini: #file contoh2.tcl set ns [new Simulator] #Mendefinisikan warna untuk aliran data dalam NAM $ns color 1 Blue $ns color 2 Red #Buka trace files set tf [open out.tr w] set windowVsTime2 [open WindowsVsTimeNReno w] $ns trace-all $tf #Buka NAM trace files set nf [open out.nam w] $ns namtrace-all $nf #Mendefiniskan prosedur ‘finish’ proc finish {} { global ns tf nf $ns flush-trace close $tf close $nf exec nam out.nam & exit 0 } #membuat 4 buah node set n0 [$ns node] set n1 [$ns node] set n2 [$ns node] set n3 [$ns node] $ns at 0.1 "$n1 label \"CBR\"" $ns at 1.0 "$n0 label \"FTP\"" #membuat link antar node $ns duplex-link $n0 $n2 2Mb 10ms DropTail $ns duplex-link $n1 $n2 2Mb 10ms DropTail $ns simplex-link $n2 $n3 0.07Mb 20ms DropTail $ns simplex-link $n3 $n2 0.07Mb 20ms DropTail #menentukan posisi node pada NAM $ns duplex-link-op $n0 $n2 orient right-down $ns duplex-link-op $n1 $n2 orient right-up $ns simplex-link-op $n2 $n3 orient right $ns simplex-link-op $n3 $n2 orient left #Melakukan setting ukuran memori pada link n2-n3 sebesar 10 $ns queue-limit $n2 $n3 10 #Monitor queue pada link n2-n3 untuk NAM $ns simplex-link-op $n2 $n3 queuePos 0.5 #Set error model pada link n2 - n3 set loss_module [new ErrorModel] $loss_module set rate_ 0.2 $loss_module ranvar [new RandomVariable/Uniform] $loss_module drop-target [new Agent/Null] $ns lossmodel $loss_module $n2 $n3 #Membentuk koneksi melalui protokol TCP set tcp [new Agent/TCP/Newreno] $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink/DelAck] $ns attach-agent $n3 $sink $ns connect $tcp $sink $tcp set fid_ 1 #Menggabungkan aplikasi FTP pada protokol TCP set ftp [new Application/FTP] $ftp attach-agent $tcp $ftp set type_ FTP #Membentuk koneksi melalui protokol UDP set udp [new Agent/UDP] $ns attach-agent $n1 $udp set null [new Agent/Null] $ns attach-agent $n3 $null $ns connect $udp $null $udp set fid_ 2 #Menggabungkan aplikasi CBR pada protokol UDP set cbr [new Application/Traffic/CBR] $cbr attach-agent $udp $cbr set type_ CBR $cbr set packetSize_ 1000 $cbr set rate_ 0.01Mb $cbr set random_ false $ns at 0.1 "$cbr start" $ns at 1.0 "$ftp start" $ns at 119.0 "$ftp stop" $ns at 119.5 "$cbr stop" #Prosedur untuk menggambarkan ukuran congestion window proc plotWindow {tcpSource file} { global ns set time 0.1 set now [$ns now] set cwnd [$tcpSource set cwnd_] puts $file "$now $cwnd" $ns at [expr $now+$time] "plotWindow $tcpSource $file" } $ns at 1.1 "plotWindow $tcp $windowVsTime2" #Monitor queue setiap 0.1 sec dan simpan dalam qm.out set qmon [$ns monitor-queue $n2 $n3 [open qm.out w] 0.1]; [$ns link $n2 $n3] queue-sample-timeout; $ns at 120 "finish" $ns run Tugas Buatlah skrip tcl untuk diagram jaringan seperti dalam Gambar 3.6 dengan data aplikasi FTP yang berjalan di atas protokol TCP pada node0 dan data aplikasi CBR yang berjalan di atas protokol UDP pada node1. Tambahkan skrip untuk mensimulasikan adanya noise pada link antara node2 dan node3. a. Dengan cara melakukan plotting terhadap throughput dari jaringan di atas bandingkan throughput antara link dengan laju kehilangan data 20% dan 0%. b. Dengan cara melakukan plotting terhadap ukuran CongWin dari jaringan di atas bandingkan fluktuasi ukuran CongWin antara link dengan laju kehilangan data 20% dan 0%. Note: Semua simulasi dilakukan dengan menggunakan TCP Tahoe dan jalankan simulasi selama 120 detik. 3.10. Queue Monitoring Salah satu object yang cukup penting dalam ns adalah monitor-queue. Object ini berisi banyak sekali informasi yang terkait dengan karakteristik proses antrian, misalnya panjang antrian, jumlah paket yang datang, jumlah paket yang keluar dari antrian, jumlah paket yang di drop dan sebagainya. Untuk mengaktifkan proses queue monitor pada link antara node2 dan node3 pada diagram jaringan dalam Gambar 3.6 digunakan perintah sebagai berikut: set qmon [$ns monitor-queue $n2 $n3 [open qm.out w] 0.1]; [$ns link $n2 $n3] queue-sample-timeout; #start tracing Seperti terlihat dalam perintah di atas object monitor-queue memiliki 4 buah argumen. Dua argumen pertama berkaitan dengan letak link di antara dua buah node yang akan diobservasi, argumen berikutnya adalah file output dalam contoh di atas file yang dimaksud adalah qm.out, dan argumen terakhir merupakan frekuensi dari proses pengamatan, dalam skrip di atas kita akan mengambil sampel setiap 0.1 detik. Contoh isi dari file qm.out adalah sebagai berikut: 0 2 3 0 0 0 0 0 0 0 0 0.10000000000000001 2 3 0.0 0.0 0 0 0 0 0 0 0.20000000000000001 2 3 0.0 0.0 1 0 1 1000 0 1000 0.30000000000000004 2 3 0.0 0.0 1 0 1 1000 0 1000 0.40000000000000002 2 3 0.0 0.0 1 0 1 1000 0 1000 0.5 2 3 0.0 0.0 1 0 1 1000 0 1000 0.59999999999999998 2 3 0.0 0.0 1 0 1 1000 0 1000 0.69999999999999996 2 3 0.0 0.0 1 0 1 1000 0 1000 0.79999999999999993 2 3 0.0 0.0 1 0 1 1000 0 1000 0.89999999999999991 2 3 0.0 0.0 1 0 1 1000 0 1000 0.99999999999999989 2 3 0.0 0.0 2 0 2 2000 0 2000 1.0999999999999999 2 3 0.0 0.0 3 1 2 2040 40 2000 File output berisi informasi yang terdiri atas 11 kolom seperti berikut: 1) Waktu pengambilan sampel, 2) Node input, 3) Node output, 4) Ukuran queue dalam satuan byte (berkorespondensi dengan atribut size_ pada object monitor-queue), 5) Ukuran queue dalam satuan paket(berkorespondensi dengan atribut pkt_ pada object monitor-queue), 6) Jumlah paket yang telah datang (berkorespondensi parrivals_ pada object monitor-queue), dengan atribut 7) Jumlah paket yang telah keluar dari queue (berkorespondensi dengan atribut pdepartures_ pada object monitor-queue), 8) Jumlah paket yang di drop (dibuang) oleh queue (berkorespondensi dengan atribut pdrops_ pada object monitor-queue), 9) Jumlah data dalam byte yang telah datang (berkorespondensi dengan atribut barrivals_ pada object monitor-queue), 10) Jumlah data dalam byte yang telah keluar dari queue (berkorespondensi dengan atribut bdepartures_ pada object monitor-queue), 11) Jumlah data dalam byte yang di drop (dibuang) oleh queue (berkorespondensi dengan atribut bdrops_ pada object monitor-queue). Tugas Untuk skrip tcl yang telah dibuat dalam sus-bab 3.9 di atas tambahkan skrip untuk memonitor queue. Selanjutnya lakukan ploting terhadap ukuran queue masing-masing dalam satuan byte dan paket. Juga lakukan analisis terhadap kedua grafik tersebut.