Planning Pengembangan aplikasi DiffServ dengan disiplin antrian hierarchy token bucket dan random early detection sebagai bandwidth limiting

lewat. Sehingga tiap node tidak mendapatkan QoS yang sesuai. Berikut hasil pengujian menggunakan disiplin antrian FIFO, Tabel 4.1 Pengukuran kecepatan tanpa bandwidth management Percobaan ke- Node 1 Node 2 Upload Download Upload Download 1 85 kbps 255 kbps 34 kbps 127 kbps 2 80 kbps 244 kbps 39 kbps 185 kbps Koneksi internet pada tiap isp memiliki jalur masing-masing, sehingga langsung menuju jaringan global. Hal ini berdampak pada kecepatan yang sama ketika kita mengakses konten lokal, karena untuk mengaksesnya kita harus berputar ke jaringan luar negeri dulu. APJII membentuk IIX untuk mengatasi masalah tersebut. IIX adalah jaringan interkoneksi nasional dengan menggabungkan semua ISP yang ada di Indonesia. Dengan begitu jumlah hop antar router akan berkurang dan memberikan throughput yang lebih baik. Berikut pengujian dengan server yang berada pada jaringan IIX, Tabel 4.2 Pengukuran kecepatan untuk jaringan IIX Percobaan ke- Node 1 Node 2 Upload Download Upload Download 1 88 kbps 768 kbps 66 kbps 721 kbps 2 87 kbps 754 kbps 64 kbps 701 kbps Dari hasil pengujian di atas terlihat belum adanya klasifikasi tiap paket, sehingga terdapat ketimpangan throughput antar node. Terlihat satu node mengkonsumsi bandwidth jaringan lebih banyak dari node yang lain. Untuk itu diperlukan klasifikasi berdasarkan node yang terhubung dengan jaringan serta berdasarkan paket tcp ataupun udp. Pembedaan kecepatan juga dilakukan untuk paket data yang dikirim ke atau dari jaringan IIX ataupun internasional.

4.1.2. Aplikasi mampu generate parameter TC dan iptables yang dibutuhkan.

1. HTB HTB yang bersifat classful qdisc, memiliki pengaturan tc yang lebih banyak dibanding classless. Pada HTB tidak hanya mengatur qdisc tapi juga bisa dibuat child dari qdisc yang ada, dengan begitu kita dapat melakukan pengaturan yang lebih luas lagi. Terdapat beberapa pengaturan yang wajib pada classful qdisc pada kasus ini HTB. 1. pengaturan qdisc tc qdisc add dev eth1 root handle 1: htb default 9999 tc qdisc add dev eth1 parent 1:2 handle 21: pfifo limit 10 pada pengaturan qdisc dapat dilihat syntax baku sebagai berikut, tc qdisc [add|del] dev device_name [root|parent CLASSID|handle QHANDLE] [QDISC_KIND] Berikut penjelasan dari tiap pengaturan yang diperlukan : 2. opsi add adalah untuk menambahkan qdisc pada device network tertentu dan del untuk menghapusnya. 3. opsi device_name untuk pengaturan network device yang akan diatur. 4. opsi root untuk pengaturan qdisc induk. 5. opsi parent adalah classid dari parent qdisc. 6. opsi handle adalah qdiscid untuk qdisc tersebut. 7. opsi QDISC_KIND adalah jenis qdisc yang ingin digunakan. 2. pengaturan class tc class add dev eth1 parent 1:0 classid 1:1 htb rate 1Mbit ceil 2Mbit tc class add dev eth1 parent 1:1 classid 1:2 htb rate 64Kbit ceil 256Kbit pada pengaturan class dapat dilihat syntax baku sebagai berikut, tc class [add|del] dev device_name [root|parent CLASSID] [classid CLASSID] QDISCKIND rate n ceil n Berikut penjelasan dari pengaturan yang diperlukan : a Opsi add adalah untuk menambahkan class dan del untuk menghapusnya. b Opsi device_name adalah network device yang akan diberikan class. c Opsi root untuk pengaturan class induk. d Opsi parent adalah classid induk dari class tersebut. e Opsi CLASSID adalah classid yang digunakan sebagai id class tersebut. f Opsi QDISCKIND adalah qdisc yang digunakan pada class tersebut. g Opsi rate adalah kecepatan normal class tersebut. h Opsi ceil adalah kecepatan maksimum class tersebut. 3. pengaturan filter tc filter add dev eth1 parent 1:0 protocol ip u32 match ip dst 192.168.0.1232 flowid 1:2 untuk pengaturan filter berikut syntax baku : tc filter [add|del] dev device_name [parent CLASSID] protocol proto [u32 match selector|fw classid CLASSID] [root|handle handleid|flowid FLOWID] penjelasan dari pengaturan yang diperlukan : a opsi add digunakan untuk menambah filter dan del untuk menghapus filter. b Opsi device_name adalah network device yang ditambah filter. c Opsi parent adalah parent yang memiliki qdisc root dari device_name. d Opsi protocol untuk menentukan filter pada protocol yang diinginkan. e Opsi u32 ataupun fw adalah untuk mencocokan paket data yang ingin difilter. f Opsi handle maupun flowid untuk mencocokkan classid yang akan difilter. Dari beberapa pengaturan sebelumnya akan didapat konfigurasi yang digambarkan sebagai berikut : Gambar 4.3 HTB tree bandwidth management Untuk penambahan tiap node yang akan ditambahkan pada tree tersebut. Cukup ditambahkan pada level 0 dan level 1 saja, dengan penambahan id yang sesuai dengan ketentuan. Node sebelah di kiri digunakan untuk klasifikasi paket data dari dan ke jaringan IIX dan sebelah kanan untuk jaringan internasional. Tiap-tiap node nantinya Class main link Classid 1:1 Class IIX Classid 1:2 Class Internasional Classid 1:3 Class IIX node Classid 1:n2 Class Intl Node Classid 1:n3 Class tcp node Classid 1:n22 Class udp Classid 1:n22+1 Qdisc Leaf RED Qdisc Handleid n22: Qdisc Leaf RED Qdisc Handleid n22+1: Level 1 2 3 akan diklasifikasikan lagi paket data pada transport layer yaitu apakah paket tersebut TCP atau UDP. Classid 1:1 digunakan untuk menghandle maksimum bandwidth yang ada. Classid 1:2 digunakan untuk menghandle maksimum bandwidth untuk koneksi IIX. Classid 1:3 digunakan untuk menghandle maksimum bandwidth untuk koneksi internasional. Dan child dari node IIX dan Internasional akan digunakan untuk menghandle tiap node dalam jaringan. Classid child akan berupa 1:n2 untuk paket data IIX dan 1:n3 untuk paket data Internasional, dimana n adalah bilangan bulat. Tiap node akan memiliki leaf class yang membedakan paket TCP dan UDP. Tiap-tiap node class yang menghandle tiap node pada jaringan akan bertambah secara dinamis sesuai kebutuhan user, dan child classnya akan mengikuti. Berikut potongan kode untuk generate class seperti gambar 4.3 di atas, tc qdisc add dev DEVICE root htb default 8888 tc class add dev DEVICE parent 1:0 classid 1:1 htb rate RATE ceil MAXRATE tc class add dev DEVICE parent 1:1 classid 1:2 htb rate RATE ceil MAXRATE tc filter add dev DEVICE parent 1:0 handle 6666 fw classid 1:2 tc class add dev DEVICE parent 1:1 classid 1:3 htb rate RATE ceil MAXRATE tc filter add dev DEVICE parent 1:0 handle 9999 fw classid 1:3 bagian ini akan digenerate oleh aplikasi secara dinamis sesuai kebutuhan pengguna. tc class add dev DEVICE parent 1:2 classid 1:N2 htb rate RATE ceil MAXRATE tc filter add dev DEVICE parent 1:0 protocol ip u32 match ip dst IP flowid 1:N2 tc class add dev DEVICE parent 1:3 classid 1:N3 htb rate RATE ceil MAXRATE tc filter add dev DEVICE parent 1:0 protocol ip u32 match ip dst IP flowid 1:N3 tc class add dev DEVICE parent 1:N2 classid 1:N22 htb rate RATE ceil MAXRATE tc filter add dev DEVICE parent 1:N2 u32 match ip protocol 6 0xff flowid 1:N22 tc class add dev DEVICE parent 1:N2 classid 1:N22+1 htb rate RATE ceil MAXRATE tc filter add dev DEVICE parent 1:N2 u32 match ip protocol 17 0xff flowid 1:N22+1 tc class add dev DEVICE parent 1:N3 classid 1:N32 htb rate RATE ceil MAXRATE tc filter add dev DEVICE parent 1:N3 u32 match ip protocol 6 0xff flowid 1:N32 tc class add dev DEVICE parent 1:N3 classid 1:N32+1 htb rate RATE ceil MAXRATE tc filter add dev DEVICE parent 1:N3 u32 match ip protocol 17 0xff flowid 1:N32+1 2. RED Pengaturan RED lebih singkat dibanding pengaturan HTB. Hal ini dikarenakan RED yang bersifat classless. Pengaturan RED hanya memerlukan beberapa parameter, diantaranya : a limit rate, batasan kecepatan yang diizinkan. b min rate, batasan minimum kecepatan yang diizinkan. c max rate, batasan maksimum kecepatan yang diizinkan. Ketika melewati paket akan didrop. d burst rate e probability, kemungkinan paket yang akan didrop. Direkomendasikan 20 - 30. f Avpkt, average packet yang direkomendasikan diset 1000. Adapun bentuk syntax dari RED yang diset dari TC adalah sebagai berikut: tc qdisc add dev DEV root red limit LIMIT min MIN max MAX burst BURST avpkt 1000 probability PROP Nilai yang diset pada RED haruslah dalam satuan Byte bukan bit. Maka sebelumnya harus dikonversi ke dalam Byte. Berikut rumus untuk mendapatkan beberapa parameter di atas. Bandwidth : 64kbps = 8000KBs Latency : 0.5 s. Max : Bandwidth Latency = 8000 0.5 = 4000 Min : Max 2 = 2000 Limit : 8 Max = 8 4000 = 32000 Burst : 2 min + max 3 avpkt = 2 2000 + 4000 3 1000 = 2.667 Jika kita gunakan parameter di atas, maka akan kita gunakan pada tc sebagai berikut, tc qdisc add dev eth0 parent ID red limit 32000 min 2000 max 4000 burst 2.667 avpkt 1000 probability 0.02 Aplikasi nantinya akan meminta input berupa bandwidth dan latency yang dimiliki. Dan akan langsung mengenerate parameter lain, untuk kemudian menjalankan tc dengan parameter ada. 3. Iptables Aplikasi ini dibutuhkan untuk melakukan filtering terhadap tiap paket data yang datang maupun dikirim dari router. Filter akan lebih spesifik untuk mencari dan menandai paket data mana yang datang maupun dikirim ke jaringan IIX ataupun Internasional. Karna nantinya kedua paket data tersebut akan diperlakukan berbeda. Berikut potongan kode untuk melakukan filtering terhadap paket data yang datang dari IIX dan untuk dari Internasional akan ditandai bila tidak termasuk paket tersebut, clear iptables IPTABLES = perintah iptables DEV_UPLINK = device yang menghadap jaringan internet DEV_DOWNLINK = device yang menghadap jaringan lokal IPTABLES -t mangle -F IPTABLES -t filter -F IPTABLES -t nat –F IPTABLES -t mangle -X IPTABLES -t mangle -N IIX bagian ini akan diulang dan ditambahkan ip dari server yang terhubung dengan IIX IPTABLES -t mangle -A IIX -i DEV_UPLINK -p icmp -s 167.205.0.016 -j CONNMARK --set-mark 103 IPTABLES -t mangle -A IIX -i DEV_UPLINK -p icmp -s 167.205.0.016 -j RETURN IPTABLES -t mangle -A IIX -i DEV_DOWNLINK -p icmp -d 167.205.0.016 -j CONNMARK --set-mark 103 IPTABLES -t mangle -A IIX -i DEV_DOWNLINK -p icmp -d 167.205.0.016 -j RETURN bagian ini akan menangani sisa paket data yang tidak cocok pada rules sebelumnya dan ditentukan sebagai paket data dari jaringan internasional IPTABLES -t mangle -N INTL IPTABLES -t mangle -A INTL -i DEV_UPLINK -p icmp -s 0.0.0.00 -j CONNMARK --set-mark 104 IPTABLES -t mangle -A INTL -i DEV_UPLINK -p icmp -s 0.0.0.00 -j RETURN IPTABLES -t mangle -A INTL -i DEV_DOWNLINK -p icmp -d 0.0.0.00 -j CONNMARK --set-mark 104 IPTABLES -t mangle -A INTL -i DEV_DOWNLINK -p icmp -d 0.0.0.00 -j RETURN IPTABLES -t mangle -A PREROUTING -j IIX IPTABLES -t mangle -A PREROUTING -j INTL

4.1.3. Aplikasi mampu generate parameter untuk TC dan Iptables.

Terlihat dari analisis kebutuhan parameter TC sebelumnya. Terdapat beberapa parameter untuk TC yang dibutuhkan. Beberapa di antaranya adalah : a Network device yang akan digunakan. b Kecepatan maksimum untuk tiap network device yang digunakan. c Beberapa parameter untuk HTB 1 classid untuk tiap node. Node qdisc root dengan handle 1:0, node parent class dengan classid 1:1. Node IIX dengan 1:2, node internasional dengan classid 1:3. child class IIX akan menggunakan classid 1:n2 dan internasional dengan classid 1:n3, untuk n adalah bilangan bulat. Untuk qdisc child class tersebut akan mengikuti classid dengan handle n2: untuk IIX dan n3 untuk Internasional, untuk n adalah bilangan bulat 2 Maksimum rate untuk parent class. 3 Rate untuk tiap class node yang tidak melebihi parent class. d Bandwidth dan latency yang dimiliki oleh network device yang menggunakan RED. e Ip yang digunakan oleh tiap network interface yang digunakan untuk routing oleh iptables f Daftar ip host yang terhubung jaringan IIX untuk penanda paket data yang dikirim ataupun diterima.

4.1.4. Konfigurasi yang dibutuhkan sebagai gateway server.

Konfigurasi yang dibutuhkan hanya melakukan setting terhadap iptables. Iptables nantinya akan membuat setiap paket data yang masuk ke dalam server untuk diteruskan ke internet. Proses yang dapat dilakukan berupa SNAT maupun Masquerade. Aplikasi nantinya akan mengenerate syntax iptables sesuai keinginan dan langsung mengeksekusinya. Berikut adalah contoh syntax yang dibutuhkan untuk SNAT dan masquerade. SNAT IPTABLES -t nat -A POSTROUTING -o DEV -j SNAT –to-source IPPUBLIC Masquerade IPTABLES -t nat -A POSTROUTING -o DEV -j MASQUERADE Untuk penggunaan SNAT diperlukan input berupa ip public nantinya digunakan untuk merubah ip private yang digunakan dalam LAN. Sedangkan penggunaan Masquerade tidak memerlukan input, karena akan langsung merubah ke ip public yang ada.

4.1.5. Aplikasi membuat laporan realtime untuk pengukur pemakaian bandwidth.

Pada TC terdapat opsi untuk melihat rate yang terjadi untuk setiap class. Tapi terdapat kekurangan pada penggunaanya. Tidak adanya log ataupun laporan yang bersifat realtime. Untuk mendapatkan kecepatan yang diberikan untuk tiap class, cukup dengan perintah berikut : tc -s -d class show dev DEV Perintah tersebut akan memberikan output berupa laporan untuk semua class yang ada, berikut salah satu contoh laporan yang akan muncul: class htb 1:10 parent 1:1 leaf 101: prio 0 quantum 1000 rate 64000bit ceil 64000bit burst 1599b8 mpu 0b overhead 0b cburst 1599b8 mpu 0b overhead 0b level 0 Sent 0 bytes 0 pkt dropped 0, overlimits 0 requeues 0 rate 0bit 0pps backlog 0b 0p requeues 0 lended: 0 borrowed: 0 giants: 0 tokens: 195312 ctokens: 195312 Output yang muncul terdiri dari banyak parameter, beberapa di antaranya adalah kecepatan minimum dan maksimum. Nilai 1:10 adalah classid yang dimaksud dan parent adalah parent class dari class tersebut. Untuk melihat kecepatan yang sedang berjalan, parameter rate akan memberikan nilai berupa kecepatan aktual pada saat perintah ini dieksekusi. Kekurangan inilah yang nantinya akan dibuat log berupa diagram garis yang akan update tiap detik dan memberikan fungsi pelaporan terhadap user mengenai kecepatan aktual yang dimiliki suatu class saat itu. Aplikasi nantinya akan mencocokan classid yang ada dengan hasil output perintah sebelumnya. Setelah itu langsung ditampilkan dan nilai kecepatan sebelumnya akan disimpan dan dari sini akan terlihat fungsi log untuk kecepatan tiap waktu.

4.1.6. User Stories

Dari hasil analisis user stories sebelumnya dapat disimpulkan bahwa terdapat beberapa user stories yang dapat dibagi, di antaranya : 1. Konfigurasi qdisc HTB dan RED dengan TC 2. Aplikasi mampu konfigurasi Iptables untuk marking dan routing. 3. Penggunaan TC untuk mengambil data kecepatan tiap node. 4. Penggunaan TC untuk setting qdisc sebelumnya.

4.2. Design

4.2.1 Class Design

Proses desain akan dilakukan menggunakan Class Responsibilities, and Collaboration CRC Card. Penggunaan CRC card untuk mengarahkan berpikir secara objek dibanding secara prosedural. Tiap-tiap CRC card akan merepresentasikan tiap objek yang dibutuhkan. Proses desain di sini akan lebih fokus pada bagaimana tiap objek saling berinteraksi bukan bagaimana membuat objek tersebut. Dari user stories pada tahap planning, penulis membuat beberapa class yaitu : 1. HTB, digunakan untuk mengenerate TC statement. 2. RED, digunakan untuk mengenerate TC statement. 3. TC, digunakan untuk mengeksekusi TC statement yang sebelumnya dibuat oleh class lain. 4. BWGUI, digunakan untuk menangani GUI dari aplikasi. 5. Client, digunakan untuk menangani informasi tiap klien. 6. BandwidthConsumption, digunakan untuk menangani penggunaan bandwidth tiap client. HTB RED TC Client Generate tc statement untuk root qdisc. Generate tc statement untuk tambahedithapus client. BWGUI TC HTB RED Client BandwidthConsumtpion Generate tc statement sesuai dengan algoritma RED yang sudah ditetapkan. Generate tc statement untuk edit dan hapus RED qdisc. Eksekusi statement untuk TC. Parsing output untuk kecepatan aktual tiap-tiap class. Client Menangani GUI untuk aplikasi. Setting TC dengan tampilan grafis. Memberikan laporan penggunaan bandwidth tiap client dengan plot. Gambar 4.4 Class HTB Gambar 4.5 Class RED Gambar 4.6 Class TC Gambar 4.7 Class BWGUI