• Tidak ada hasil yang ditemukan

METODOLOGI PENELITIAN

3.1. Alat dan Bahan

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

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 tambah/edit/hapus 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

Class BWGUI akan menggunakan class HTB, RED dan TC. Karena class BWGUI yang nantinya akan menangani input dan output dari pengguna. Karena

Client

BandwidthConsumption

TC Client Menangani informasi tiap

client, di antaranya: - IP address

- Rate

Parsing kecepatan aktual tiap kelas dari TC.

Menyimpan kecepatan tiap class untuk ditampilkan pada plot. HTB RED TC Client BandwidthConsumption Gambar 4.8 Class Client

Gambar 4.9 Class BandwidthConsumption

Gambar 4.10 Desain Class BWGUI

input berupa nilai bandwidth rate dan informasi client. Maka class BWGUI memerlukan class tersebut. Class HTB menggunakan class client untuk menampung informasi client berupa IP, bandwidth rate dan lainnya. Class TC hanya berkomunikasi dengan BWGUI dan BandwidthConsumption. Karena BandwidthConsumption memerlukan class TC untuk mengambil bandwidth rate dari tiap class dan melakukan parsing terhadap outputnya.

4.2.2 GUI design

Gambar 4.11 Layout BWTC tab Gateway

Layout untuk GUI memiliki beberapa widget, di antaranya menu, plot, tab, dan beberapa textbox dan button. Untuk tampilan awal dari aplikasi, terlihat dari gambar 4.11 Terdapat tab gateway yang aktif, di dalamnya memiliki 2 group frame.

Sebelah kiri adalah NAT settings yang berguna untuk mengeset PC sebagai gateway atau hanya melewatkan paket. Dan terdapat 2 textbox untuk setting network interface yang digunakan untuk terhubung ke internet dan jaringan local.

Sebelah kanan adalah Max Upload & Download Rate yang digunakan untuk mengatur kecepatan maksimum upload dan download yang dimiliki. Terdapat 2 Textbox, satu untuk mengatur upload dan untuk mengatur download. Satuan yang digunakan dalam textbox tersebut adalah kbps.

Gambar 4.12 Layout BWTC tab Download Rate

Pada tab selanjutnya atau tab Download Rate, terdapat beberapa tombol dan table. Tombol Add Client berfungsi menambah informasi klien dan mengatur kecepatan klien tersebut. Tombol Edit Client berfungsi mengubah informasi klien yang sudah

masuk. Tombol Delete Client berfungsi menghapus klien dari table dan melepas pengaturan kecepatan.

Fungsi dari table di bawahnya adalah untuk menampilkan klien yang telah ditambah. Informasi klien ditampilkan pada table tersebut. Dan ketika dipilih akan menampilkan log berupa plot di bagian atas.

Gambar 4.12 Layout BWTC tab Upload Rate

Pada Tab ini terdapat sebuah group frame Upload Settings yang berisi textbox untuk upload limit, probability dan latency. Tidak seperti download rate, pada tab upload rate tidak bergantung pada berapa klien karena menggunakan RED yang tidak memiliki fungsi classifier. Proses nantinya akan mengenerate RED ke dalam network interface yang sebelumnya disetting sebagai inet interface.

Gambar 4.13 Layout BWTC dialogbox Client.

Pada tab Download Rate, terdapat button Add Client dan Edit Client. Aksi dari kedua button tersebut akan memunculkan dialogbox seperti di atas. Dialogbox akan muncul untuk meminta informasi terkait klien yang ingin diatur kecepatan downloadnya.

Gambar 4.14 Layout BWTC menu File.

Menu file digunakan untuk membuat setting baru ataupun mengambil setting yang sudah ada dan menyimpannya ketika ada perubahan.

Gambar 4.15 Layout BWTC menu Help

Gambar 4.16 Layout BWTC plot log rate.

Plot akan muncul ketika pengguna memilih salah satu klien yang ada dalam table. Ketika terpilih plot akan memunculkan diagram garis untuk menunjukkan penggunaan bandwidth dari klien tersebut. Plot akan terupdate tiap 1 detik dan memberikan log realtime kepada pengguna.

4.3.

Coding

Setelah desain selesai, masuk ke tahap coding. Tahap ini tidak langsung membuat code dari tiap objek dari hasil desain sebelumnya. Pembuatan Unit Test untuk menguji tiap class didahulukan. Contoh Unit Test yang akan dibuat adalah sebagai berikut :

import unittest

def test_qdisc(self):

red = RED()

self.assertEqual(red.qdisc, 'root red')

def test_red(self):

red = RED()

self.assertEqual(red.setRed(128000),'/sbin/tc qdisc add dev

eth0 root red limit 64000 min 4000 max 8000 burst 5 avpkt 1000

probability 0.02 bandwidth 128')

if __name__ == '__main__':

unittest.main()

Terlihat pengujian terhadap class RED dilakukan untuk menguji attribute qdisc dan fungsi setRed. Penggunaan fungsi assert equal digunakan untuk membandingkan antara hasil output dan nilai seharusnya yang keluar. Pengujian dilakukan untuk semua class yang ada. Setelah beberapa unit test dibuat, implementasi dari desain bisa dilakukan. Tahap penulisan kode dimaksimalkan untuk lolos dari unit test. Hal ini berguna untuk mencegah dari adanya bug pada kode yang ditulis. Berikut contoh kode untuk RED :

class RED():

def __init__(self, dev = 'eth0', bandwidth=384000):

self.bandwidth = bandwidth # bps

self.maxupload = bandwidth / 8 # Byte

self.limit = 0

self.max = 0

self.burst = 0

self.latency = 0.5 # detik

self.avpkt = 1000 # 1000 nilai default dari red

self.probability = 0.02 # probabilitas untuk mark dan drop

20%

self.tc = '/sbin/tc'

self.command = 'qdisc add'

self.dev = dev

self.qdisc = 'root red'

self.space = ' '

def setRed(self, bandwidth, probability=0.02, latency=0.5):

try: self.latency = latency self.probability = probability self.bandwidth = bandwidth self.maxupload = bandwidth / 8

self.max = self.maxupload * self.latency

self.min = self.max / 2

self.limit = self.max * 8

self.burst = (2 * self.min + self.max) / (3 *

self.avpkt)

self.burst = self.burst

val = self.addQdisc()

except:

print 'bad value'

def getRED(self):

return self.setRed(self.bandwidth)

def addQdisc(self):

perintah = self.tc + self.space

perintah += self.command + self.space

perintah += 'dev ' + self.dev + self.space

perintah += self.qdisc + self.space

perintah += 'limit' + self.space + str(int(self.limit)) +

self.space

perintah += 'min' + self.space + str(int(self.min)) +

self.space

perintah += 'max' + self.space + str(int(self.max)) +

self.space

perintah += 'burst' + self.space + str(self.burst) +

self.space

perintah += 'avpkt' + self.space + str(self.avpkt) +

self.space

perintah += 'probability' + self.space +

str(self.probability) + self.space

perintah += 'bandwidth' + self.space +

str(self.bandwidth/1000)

return perintah

return '/sbin/tc qdisc del dev ' + self.dev + ' root'

Setelah kode ditulis, langsung dilakukan pengetesan dengan test case yang sebelumnya dibuat. Berikut hasil dari eksekusi unit test tersebut :

..F.

=================================================================

=====

FAIL: test_red (__main__.TestRED)

---

---

Traceback (most recent call last):

File "test.py", line 28, in test_red

self.assertEqual(red.setRed(128000),'/sbin/tc qdisc add dev

eth0 root red limit 64000 min 4000 max 8000 burst 5 avpkt 1000

probability 0.02 bandwidth 128')

AssertionError: '/sbin/tc qdisc add dev eth0 root red limit 64000

min 4000 max 8000 burst 5.33333333333 avpkt 1000 probability 0.02

bandwidth 128' != '/sbin/tc qdisc add dev eth0 root red limit 64000

min 4000 max 8000 burst 5.33 avpkt 1000 probability 0.02 bandwidth

128'

---

---

Ran 4 tests in 0.000s

Terlihat ada gagal pada unit test tersebut. Hal ini karena terdapat perbedaan antara hasil output dan nilai yang seharusnya keluar. Terdapat perbedaan pada statement burst yang seharusnya bernilai 5 tapi output dari fungsi yang diuji adalah 5.33333333333. Untuk itu perlu diperbaiki fungsi tersebut. Nilai burst yang seharusnya bilangan bulat bukannya pecahan. Sehingga kode berikut self.burst = self.burst dirubah menjadi self.burst = int(math.ceil(self.burst)).

Eksekusi kembali unit test sebelumnya dan didapat hasil berikut : ....

---

---

Ran 4 tests in 0.000s

OK

Proses perubahan kode secara terus menerus sampai didapat kode yang sederhana dinamakan refactoring. Refactoring merupakan aspek penting pada metode Extreme Programming. Karena detil kode untuk tiap class tidak dijelaskan, maka pada tahap inilah penulisan kode akan melebihi desain dan terus mengembangkan desain tersebut.

Lakukan terus perubahan dan pecahkan fungsi yang memiliki terlalu banyak baris kode menjadi beberapa fungsi. Dengan begitu fungsi akan mudah dimengerti cara kerjanya. Secara tidak langsung mengembangkan desain sederhana yang sebelumnya dibuat tanpa merubah cara program berjalan.

4.4.

Testing

Untuk menguji bug pada kode yang ditulis sebelumnya, unit test yang sebelumnya telah dibuat dieksekusi. Lakukan refactoring terus menerus sampai bug hilang. Untuk menguji fungsionalitas dari aplikasi digunakan BlackBox Testing.

4.4.1 Unit Testing

Setelah semua kode ditulis, lakukan eksekusi terhadap unit test yang telah dibuat. Sebaiknya tambahkan lebih banyak test case untuk tiap unit case. Hal ini diperlukan untuk mendeteksi bug yang kemungkinan muncul akibat proses refactoring sebelumnya.

Setelah beberapa iterasi dihasilkan test case untuk beberapa fungsi. Berikut adalah potongan test case yang akan diuji,

class TestRED(unittest.TestCase):

"RED tests"

def test_red(self):

red = RED('eth0', 128000)

self.assertEqual(red.getRED(),'/sbin/tc qdisc add dev eth0

root red limit 64000 min 4000 max 8000 burst 5 avpkt 1000

probability 0.02 bandwidth 128')

red = RED()

self.assertEqual(red.delRED(), '/sbin/tc qdisc del dev eth0

root')

class TestHTB(unittest.TestCase):

"HTB tests"

def test_class(self):

classifier = Classifier('eth0', '1:1', '1:2', '64Kbit',

'1Mbit')

self.assertEqual(classifier.getClass(), '/sbin/tc class add

dev eth0 parent 1:1 classid 1:2 htb rate 64Kbit ceil 1Mbit')

class TestClient(unittest.TestCase): "Client tests" def test_client(self): self.client = Client('Client 1','192.168.1.10', 64000, 64000, 512000, 128000,'00:FF:00:10:AF:89') self.assertEqual(self.client.get_name(), 'Client 1') self.assertEqual(self.client.get_ip(), '192.168.1.10') self.assertEqual(self.client.get_dload(), 64000) self.assertEqual(self.client.get_uload(), 64000) self.assertEqual(self.client.get_dmax(), 512000) self.assertEqual(self.client.get_umax(), 128000) self.assertEqual(self.client.get_mac(), '00:FF:00:10:AF:89')

class TestBandwidthConsumption(unittest.TestCase): "BandwidthConsumption tests" def test_BConsumption(self): bc = BandwidthConsumption() class TestTC(unittest.TestCase): "TC tests" def test_TC(self): tc = TC()

Dan hasil yang didapat setelah mengeksekusi test case di atas adalah sebagai berikut, .... --- --- Ran 6 tests in 0.000s OK 4.4.2 BlackBox Testing

Pada blackbox testing penulis mencoba melakukan tes terhadap semua fungsionalitas dari aplikasi ini. Berikut beberapa hasil tes yang penulis lakukan terhadap aplikasi dan hasilnya,

1. Pengujian Set firewall untuk fungsi SNAT atau Masquerade.

Gambar 4.17 pengujian firewall feature

Pengguna mengisi ip public yang digunakan yang nantinya akan digunakan sebagai source NAT. Interface yang berhubungan dengan internet dan jaringan lokal diatur di sini.

Gambar 4.18 cek firewall

Pengecekan apakah SNAT di iptables berhasil dieksekusi atau tidak. Hasilnya menunjukkan berhasil memberikan satu rule untuk SNAT.

Gambar 4.19 pengujian masquerade

Berbeda dengan yang tadi, di sini dilakukan pengetesan untuk masquerade. Perubahan SNAT secara dinamis dan pengaturan interface. Cara yang dilakukan hampir sama dengan sebelumnya.

Gambar 4.20 cek masquerade

Terlihat pengaturan sebelumnya berhasil memberikan satu rule ke iptables untuk melakukan masquerade.

Gambar 4.21 pengujian max download dan upload

Di sebelah kanan terdapat pengaturan untuk maksimum dan minimum upload yang diijinkan. Pengaturan ini bergantung pada koneksi internet yang kita miliki.

Gambar 4.22 cek tc max rate

Pengaturan untuk download berhasil dan menambah rule pada TC dengan HTB qdisc.

Gambar 4.23 cek tc max rate

Pengaturan upload dengan RED qdisc juga berhasil dilakukan di sini. 3. Pengujian Tambah, Ubah dan Hapus Client.

Gambar 4.24 pengujian tambah node

Di sini dilakukan pengujian untuk menambah client yang ingin diatur alokasi bandwidthnya.

Gambar 4.25 penambahan node

Gambar 4.26 cek tc leaf

Gambar 4.27 pengubahan node

Client yang sebelumnya telah ditambah, dapat diubah parameternya. Pengujian perubahan parameter dilakukan di sini.

Gambar 4.28 cek perubahan pada leaf Perubahan parameter berhasil merubah rule pada tc yang ada.

Gambar 4.29 penghapusan node

Perintah hapus dilakukan di sini. Pengujian untuk menghapus rule client dari table dan rule TC.

Gambar 4.30 cek penghapusan pada tc Terlihat sudah terhapus rule dari client yang dihapus tersebut.

Gambar 4.33 pengujian tampilan plot Tabel 4.4 Pengujian black box

Fungsi Status

Set firewall untuk fungsi SNAT atau Masquerade OK

Set Max Download dan Max Upload rate OK

Tambah, Ubah dan Hapus Client OK

Set Upload Rate OK

4.5.

Release

Tahap ini aplikasi sudah dapat diimplementasikan, dan penulis melakukan pengujian implementasi untuk membuktikan apakah aplikasi dapat memenuhi fungsinya sebagai bandwidth limiting.

4.5.1 Implementation Test

Penulis akan melakukan implementation tes dengan beberapa node yang berhubungan langsung dengan gateway. Berikut topologi jaringan yang digunakan :

Gambar 4.34 Topologi jaringan pengujian Pengujian akan dilakukan dengan beberapa parameter, di antaranya:

1. Rate : 64kbps, max rate : 64kbps 2. Rate : 64kbps, max rate : 128kbps 3. Rate : 128kbps, max rate : 128kbps 4. Rate : 128kbps, max rate : 256kbps

Berikut hasil dari pengujian alokasi bandwidth untuk tiap node yang melewati gateway:

1. Pengujian rate : 64kbps, max rate 64kbps

Gambar 4.35 Pengujian node download dan upload 64kbps 2. Pengujian rate : 64kbps, max rate 128kbps

node kecepatan 64kbps, kecepatan maksimum 128kbps. 3. Pengujian rate : 128kbps, max rate 128kbps

Gambar 4.37

Pengujian node kecepatan

128kbps, maksimum 128kbps.

Gambar 4.38 Pengujian node kecepatan 128kbps, maksimum kecepatan 256kbps.

4.5.2 QoS Testing

Setelah pengujian aplikasi berjalan dengan baik dan sesuai dengan desain sebelumnya. Pengujian lanjutan untuk menguji pengaturan QoS berjalan dengan baik atau tidak. Pengujian akan dilakukan dengan 2 situs pengujian, yaitu speedtest.net untuk menguji throughput dan pingtest.net untuk menguji delay, jitter dan packet loss.

Pengujian pertama akan dilakukan dengan menggunakan disiplin antrian HTB saja. Terdapat 3 node yang terhubung dengan gateway dan scenario pengujian menggunakan server lokal dan internasional,

1. Tiap node diberi kecepatan download 128kbps, maksimum 128 kbps dan upload 32 kbps maksimum 32kbps.

Koneksi Node 1 Node 2 Node 3 Upload Download Upload Download Upload Download IIX 30 kbps 126 kbps 34 kbps 127 kbps 24 kbps 118 kbps Internasional 28 kbps 131 kbps 39 kbps 125 kbps 29 kbps 117 kbps

Tabel 4.6 QoS Testing 1, hasil Pingtest.net

2. iap

node diberi kecep atan download 128kbps, maksimum 256kbps dan upload 32kbps

maksimum 64kbps.

Tabel 4.7 QoS Testing 2, hasil Speedtest.net

Koneksi Node 1 Node 2 Node 3

Upload Download Upload Download Upload Download IIX 56 kbps 255 kbps 61 kbps 127 kbps 62 kbps 198 kbps Internasional 48 kbps 244 kbps 48 kbps 185 kbps 58 kbps 211 kbps

Tabel 4.8 QoS Testing 2, hasil Pingtest.net

Node 1 Node 2 Node 3

Node 1 Node 2 Node 3

delay jitter Packet loss

delay jitter Packet loss

delay jitter Packet loss

1 56 ms 10 ms 0 % 51 ms 9 ms 0 % 54 ms 11 ms 0 %

delay jitter Packet loss

delay jitter Packet loss

delay jitter Packet loss

1 35ms 13ms 0 % 33 ms 11 ms 0% 38ms 15ms 0%

2 33ms 12ms 0 % 38 ms 13 ms 0% 32ms 16ms 0%

3. Tiap node diberi kecepatan 256kbps, maksimum 256kbps dan upload 64 kbps maksimum 64kbps.

Tabel 4.9 QoS Testing 3, hasil Speedtest.net

Koneksi Node 1 Node 2 Node 3

Upload Download Upload Download Upload Download IIX 75 kbps 255 kbps 52 kbps 262 kbps 60 kbps 278 kbps Internasional 70 kbps 244 kbps 64 kbps 248 kbps 62 kbps 286 kbps

Tabel 4.10 QoS Testing 3, hasil Pingtest.net

Node 1 Node 2 Node 3

delay jitter Packet loss

delay jitter Packet loss

delay jitter Packet loss

1 25 ms 8ms 0% 28 ms 6ms 0% 27 ms 8ms 0%

2 26 ms 9ms 0% 24 ms 5ms 0% 26 ms 9ms 0%

Pengujian pertama akan dilakukan dengan menggunakan disiplin antrian HTB dan RED untuk leaf class. Terdapat 3 node yang terhubung dengan gateway dan scenario pengujian menggunakan server lokal dan internasional,

1. Tiap node diberi kecepatan download 128kbps, maksimum 128 kbps dan upload 32 kbps maksimum 32kbps

Tabel 4.11 QoS Testing 4, hasil Speedtest.net

Koneksi Node 1 Node 2 Node 3

Upload Download Upload Download Upload Download IIX 32 kbps 127 kbps 34 kbps 127 kbps 32 kbps 128 kbps Internasional 28 kbps 124 kbps 32 kbps 128 kbps 32 kbps 126 kbps

Tabel 4.12 QoS Testing 4, hasil Pingtest.net

Node 1 Node 2 Node 3

delay jitter Packet loss

delay jitter Packet loss

delay jitter Packet loss

1 52ms 12ms 0% 65ms 16ms 0% 50ms 15ms 0%

2 77ms 14ms 1% 60ms 17ms 0% 49ms 14ms 0%

2. Tiap node diberi kecepatan download 128kbps, maksimum 256kbps dan upload 32kbps maksimum 64kbps.

Tabel 4.13 QoS Testing 5, hasil Speedtest.net

Koneksi Node 1 Node 2 Node 3

Upload Download Upload Download Upload Download IIX 65 kbps 226 kbps 64 kbps 228 kbps 62 kbps 232 kbps Internasional 60 kbps 222 kbps 59 kbps 209 kbps 58 kbps 218 kbps

Tabel 4.14 QoS Testing 5, hasil Pingtest.net

Node 1 Node 2 Node 3

delay jitter Packet loss

delay jitter Packet loss

delay jitter Packet loss

1 40ms 14ms 0% 38ms 14ms 0% 35ms 12ms 0%

2 38ms 13ms 0% 35ms 13ms 0% 40ms 15ms 0%

3. Tiap node diberi kecepatan 256kbps, maksimum 256kbps dan upload 64 kbps maksimum 64kbps.

Tabel 4.15 QoS Testing 6, hasil Speedtest.net

Koneksi Node 1 Node 2 Node 3

Upload Download Upload Download Upload Download IIX 64 kbps 255 kbps 64 kbps 256 kbps 64 kbps 255 kbps Internasional 62 kbps 254 kbps 60 kbps 252 kbps 62 kbps 256 kbps

Tabel 4.16 QoS Testing 6, hasil Pingtest.net

Node 1 Node 2 Node 3

delay jitter Packet loss

delay jitter Packet loss

delay jitter Packet loss

1 22ms 1ms 0% 21ms 1ms 0% 24ms 3ms 0%

2 23ms 2ms 0% 21ms 1ms 0% 22ms 2ms 0%

Dokumen terkait