• Tidak ada hasil yang ditemukan

L.1. Lampiran 1 Data Kedatangan Paket Data Real Time (Saluran 64 Kbps)

N/A
N/A
Protected

Academic year: 2021

Membagikan "L.1. Lampiran 1 Data Kedatangan Paket Data Real Time (Saluran 64 Kbps)"

Copied!
17
0
0

Teks penuh

(1)

Lampiran 1 Data Kedatangan Paket Data Real Time (Saluran 64 Kbps)

Rentang Interval (1000 ms) Jumlah Kedatangan

0 39 1 36 2 39 3 37 4 40 5 37 6 38 7 38 8 41 9 36 10 38 11 38 12 38 13 37 14 39 15 36 16 38 17 39 18 37 19 39 20 36 21 39 22 38 23 36 24 39 25 38 26 37 27 37 28 38 29 38 30 37 31 38 32 39 33 37 34 56

(2)

Lampiran 2 Data Kedatangan Paket Data Real Time (Saluran 128 Kbps)

Rentang Interval (1000 ms) Jumlah Kedatangan

0 51 1 50 2 50 3 52 4 49 5 50 6 50 7 50 8 51 9 50 10 50 11 50 12 50 13 51 14 50 15 51 16 49 17 50 18 51 19 50 20 50 21 50 22 50 23 51 24 50 25 50 26 50 27 50 28 51 29 50 30 50 31 51 32 49 33 51 34 50 35 50 36 50 37 51 38 51 39 49 40 51

(3)

Rentang Interval (1000 ms) Jumlah Kedatangan 41 49 42 51 43 50 44 50 45 50 46 50 47 51 48 50 49 35

(4)

Lampiran 3 Cara Penggunaan Program

Untuk menjalankan program yang digunakan dalam skripsi ini, diperlukan beberapa langkah awal untuk menyiapkan pustaka dan pendukung yang digunakan pada program ini.

1. Menyiapkan bahasa pemrograman Java (Jdk, JRE) versi 1.5

2. Menyiapkan pustaka libpcap yang dibutuhkan untuk pemrograman dan penangkapan paket jaringan.

3. Menyiapkan pustaka jpcap (http://jpcap.sourceforge.net) dan ssj (http://www.iro.umontreal.ca/~simardr/ssj/indexf.html).

4. Setelah pustaka-pustaka pendukung dipenuhi, saatnya untuk mengubah kode program menjadi program yang dapat dijalankan (berupa class). Program terdiri dari 6 file kode program yaitu

1. Datagram.java, menyimpan struktur paket data (tidak dijalankan langsung) 2. Poisson.java, mencatat interval kedatangan paket, dan mebagi-baginya ke

dalam kelas interval kedatangan (tidak dijalankan langsung)

3. Tcpdumper.java, mencatat paket jaringan yang diterima (format tcpdump) 4. TcpdumpReader.java, membaca hasil catatan paket data dengan format

tcpdump, dan memanggil program Poisson.java.

5. Throughput.java, untuk menampilkan hasil perhitungan rumus

6. WebDump.java, untuk membaca catatan akses WWW dan membandingkan dengan rumus yang diperoleh pada perhitungan rumus rata-rata.

Untuk mengcompile file-file di atas (untuk setiap file kode program), ketik #javac [namafile].java. Untuk menjalankan program, ketik #java [namafile]

(5)

Lampiran 4 Kode Program Datagram.java

import net.sourceforge.jpcap.util.Timeval; import net.sourceforge.jpcap.net.Packet; public class Datagram{

private int size; private Timeval time; private Packet packet; long seconds; long useconds;

Datagram(int length,Timeval time,long seconds,long useconds,Packet p){ this.time=time; this.packet=p; this.size=length; this.seconds=seconds; this.useconds=useconds; }

public Timeval getTimeval(){ return time; }

public int getSize(){ return size; }

public Packet getPacket(){ return packet; }

public long getSeconds(){ return seconds; }

public long getUSeconds(){ return useconds; } } Tcpdumper.java import net.sourceforge.jpcap.capture.PacketCapture; import net.sourceforge.jpcap.capture.*; import net.sourceforge.jpcap.net.*; import net.sourceforge.jpcap.util.*; import java.io.*;

public class Tcpdumper {

(6)

BufferedReader stdin = new BufferedReader

(new InputStreamReader(System.in)); String filename;

String ctr_str; int ctr_packet;

System.out.print("Masukkan nama file output (*.pcap):"); filename=stdin.readLine();

System.out.print("Masukkan jumlah paket yang akan ditangkap :"); ctr_str=stdin.readLine();

ctr_packet=Integer.valueOf(ctr_str); try {

String[] devices = PacketCapture.lookupDevices(); for(int i = 0; i < devices.length ; i++){

System.out.println("\t" + devices[i]); }

PacketCapture tcpcapturer = new PacketCapture(); String device = devices[1];

tcpcapturer.open(device, 65535, true, PacketCapture. DEFAULT_TIMEOUT); TcpdumpWriter.writeHeader(filename, TcpdumpWriter.LITTLE_ENDIAN, 65535); tcpcapturer.addRawPacketListener(new subRawPacketHandler(filename)); int cpt = 0; while (cpt != ctr_packet) { tcpcapturer.capture(1);

System.out.println("Mencatat paket nomor

"+String.valueOf(cpt+1));

cpt ++;

}

System.out.println(ctr_packet+" Paket berhasil dicatat ke file "+filename);

}

catch (Exception ex) { ex.printStackTrace(); }

} }

class subRawPacketHandler implements RawPacketListener { private String filename;

public subRawPacketHandler(String filename){ this.filename=filename;

}

(7)

try { TcpdumpWriter.appendPacket(filename, raw, TcpdumpWriter.LITTLE_ENDIAN); } catch (IOException e) { e.printStackTrace(); } } } TcpdumpReader.java import java.util.Vector; import net.sourceforge.jpcap.net.RawPacket; import net.sourceforge.jpcap.capture.PacketCapture; import net.sourceforge.jpcap.net.*; import net.sourceforge.jpcap.util.*; import static java.lang.Math.*; import java.sql.*;

import java.io.*;

public class TcpdumpReader{ private String filename; public RawPacket rawPkt;

public static final int LITTLE_ENDIAN = 1; private String serverIP;

private String clientIP; private String phoneclientIP; private String phoneserverIP;

public TcpdumpReader(String filename){ this.filename=filename; this.clientIP="192.168.1.2"; this.serverIP="172.16.1.2"; this.phoneclientIP="192.168.1.11"; this.phoneserverIP="172.16.1.11"; }

public static long extractInteger2(byte[] bytes, int pos, int cnt) { int value = 0;

for(int i=0; i<cnt; i++){

if ( (bytes[pos + cnt - i - 1] & 0xFF) !=0) value = value <<8;

value|= ((bytes[pos + cnt - i - 1] & 0xff));

}

return value; }

(8)

public Vector < Datagram > readPacket(String filename, int endian) throws IOException { String TcpdumpString;

byte[] TcpdumpPacketBytes=new byte[65535]; byte[] TcpdumpPacketDataBytes=new byte[655355]; TcpdumpString=FileUtility.readFile(filename); TcpdumpPacketBytes = TcpdumpString.getBytes("ISO-8859-1"); int offHeaderOffset=24; int offset=offHeaderOffset; long seconds; long useconds; int caplen; int length; int linkType=0x00000001;//CODE_ETHERNET = 0x00000001; Vector < Datagram > vrp =new Vector < Datagram > ();

RawPacket rp2; Packet packet; Datagram pdu; EthernetPacket ether; for (;offset<TcpdumpPacketBytes.length;){ seconds=extractInteger2(TcpdumpPacketBytes,offset,4); useconds=extractInteger2(TcpdumpPacketBytes,offset+4,4); caplen=(int)extractInteger2(TcpdumpPacketBytes,offset+8,4); length=(int)extractInteger2(TcpdumpPacketBytes,offset+12,4); offset= offset + 16; // data

for (int i=0;i<caplen&&(i+offset)<TcpdumpPacketBytes.length;i++){ TcpdumpPacketDataBytes[i]= TcpdumpPacketBytes[i+offset]; }

Timeval tv = new Timeval(seconds,(int) useconds);

rp2 = new RawPacket(tv, TcpdumpPacketDataBytes, length > caplen ?

length - caplen : 0);

packet=new PacketFactory().dataToPacket(6,rp2.getData()); if (packet instanceof IPPacket){

IPPacket ip=(IPPacket) packet; if ( ( ip.getSourceAddress().equals(clientIP) || ip.getSourceAddress().equals(phoneclientIP) ) && ( ip.getDestinationAddress().equals(serverIP)

(9)

||

ip.getDestinationAddress().equals(phoneserverIP) )

){ // kondisi if

pdu=new Datagram (caplen<length?length:caplen,tv, seconds,useconds,packet);

vrp.add(pdu); }

}

offset= offset + (caplen>length?length:caplen); } // end for number of RawPackets

return vrp; }

public static void main (String args[])throws IOException { Timeval tv2,tv1; long delta,deltams=0; long totalBytes=0; EthernetPacket ether; Packet packet; int no_of_packets; double bytes_per_packet; double bits_per_packet; double packets_per_second; double traffic; String filename;

BufferedReader stdin = new BufferedReader(new

InputStreamReader(System.in)); System.out.print("Masukkan nama file tcpdump yang akan diproses

(*.pcap) :"); filename=stdin.readLine();

TcpdumpReader tcpd = new TcpdumpReader(filename);

Vector <Datagram> vrp = tcpd.readPacket(filename,LITTLE_ENDIAN); no_of_packets=vrp.size();

for (int i=0;i<no_of_packets;i++){

packet=vrp.get(i).getPacket(); ether=(EthernetPacket) packet; delta=0; totalBytes+=vrp.get(i).getSize() ; if (i>0){ tv1=vrp.get(i-1).getTimeval(); tv2=vrp.get(i).getTimeval(); delta=tv2.getDate().getTime()-tv1.getDate().getTime();

(10)

deltams +=delta; } } tv1=vrp.get(0).getTimeval(); tv2=vrp.get(no_of_packets-1).getTimeval(); delta=tv2.getDate().getTime()-tv1.getDate().getTime(); Poisson poi = new Poisson(vrp,1000);

bytes_per_packet=(double)totalBytes/(double)no_of_packets; bits_per_packet=8* bytes_per_packet;

packets_per_second = poi.getLambda_MLE(); traffic = packets_per_second * bits_per_packet;

System.out.println("Besar paket rata-rata (bytes) :"+bytes_per_packet); System.out.println("Besar paket rata-rata (bits) :"+bits_per_packet+ "bits/paket");

System.out.println("Selisih waktu paket pertama dan terakhir :"+delta+"ms ");

System.out.println("Laju kedatangan paket adalah

:"+packets_per_second+" packet/s"); System.out.println("");

System.out.println("Laju kedatangan (bps) :"+traffic); System.out.println("");

} }

Throughput.java import java.io.*;

public class Throughput{ private long a; private long u; private int c; private double RTT; private double T0; private double pb,pc,pct; private int b;

public double getpb(){ return pb; }

public double getpc(){ return pc; }

public double getpct(){ return pct; }

(11)

public Throughput(long a, long u,int c,double RTT,double T0,int b){ this.a=a; this.u=u; this.RTT=RTT; this.T0=T0; this.b=b; this.c=c; this.pb=erlangB(a,u,c); this.pc=erlangC(a,u,c);

this.pct=erlangC_Dist(a,u,c,T0,RTT ); //anggep aja pakai T0 }

public double erlangB (long a, long u,int c){ double p;

double sigma=0;

double load = (double)a/(double)u; p =pow(load,(double)c); p =p/(double)faktorial(c); for (int i=0;i<=c;i++){

sigma += pow(load,i)/(double)faktorial(i); }

if (sigma!=0) p = p / sigma;

System.out.println("");

System.out.println("Peluang Penolakan (ErlangB) ="+p); return p;

}

public double erlangC (long a, long u,int c){ double p;

double sigma=0;

double load = (double)a/(double)u; double avg_wait;

p = pow(load,(double)c)*c; p = p / (double)faktorial(c); p = p / ((double)c-load); for (int i=0;i<c;i++){

sigma += (pow(load,(double)i)/(double)faktorial(i) ); }

sigma+=p;

if (sigma!=0) p /= sigma;

avg_wait=(p * load) / ( c - load) ; System.out.println("");

if (p<=1)

System.out.println("Peluang Penundaan (ErlangC) ="+p); else

(12)

System.out.println("Peluang Penundaan (ErlangC) ="+p+" >1, tidak dapat digunakan");

System.out.println("Rata-rata waktu menunggu ="+avg_wait); return p;

}

public double erlangC_Dist (long a, long u, int c, double T0,double RTT){ double p;

double load = (double)a/(double)u; double t = T0/RTT;

p = this.pc*exp(-(c-load)*t);

System.out.println("Peluang Menunggu Selama "+t+"(faktor tunda) sebesar "+p);

return p; }

public double erlangC_Dist2(long a, long u, int c, double t){ //waiting time double p;

double load = (double)a/(double)u; p = exp(-c*(1-load)*t);

System.out.println("peluang menunggu sebanyak "+t+"s sebesar "+p); return p;

}

public long faktorial(int n){ int hasil=1; if (n==0){ hasil=1; }

else{

for (int i=1;i<=n;i++){ hasil=hasil*i; }

}

return hasil; }

public double countTDTO(double p){ double hasil;

double minima;

minima = min(1,((double)3* sqrt((double)3*b*p/(double)8)) ); hasil= 1/ ( RTT* sqrt(2*b*p/3) + this.T0*minima*p*(1+32*p*p)); System.out.println(hasil+" packet/s");

return hasil; }

(13)

public static void main(String args[]) throws IOException{ String incoming_str; String bandwidth_str; String rtt_str; String t0_str; String b_str; long incoming; int c; double rtt; double t0; int b;

BufferedReader stdin = new BufferedReader(new

InputStreamReader(System.in)); System.out.print("Masukkan jumlah kedatangan (bps) :"); incoming_str=stdin.readLine();

System.out.print("Masukkan bandwith saluran WAN (bps):"); bandwidth_str=stdin.readLine();

System.out.print("Masukkan nilai estimasi RTT (dalam s):"); rtt_str=stdin.readLine();

System.out.print("Masukkan nilai timeout TCP (T0,dalam s):"); t0_str=stdin.readLine();

System.out.print("Masukkan nilai b (jumlah paket di ACK setiap ronde) :"); b_str=stdin.readLine(); c=Integer.valueOf(bandwidth_str); if ((c % 64000)!=0){ c=c/64000; c=c+1; }else{ c=c/64000; } incoming=Long.valueOf(incoming_str); rtt=Double.valueOf(rtt_str); t0=Double.valueOf(t0_str); b=Integer.valueOf(b_str);

Throughput rate= new Throughput(incoming,64000,c,rtt,t0,b); // 64 Kbyte System.out.println("====================================== ==========================");

System.out.println("");

System.out.println("Laju TCP dengan menggunakan Peluang Erlang B"); rate.countTDTO(rate.getpb());

System.out.println("");

System.out.println("Laju TCP dengan menggunakan Peluang Erlang C"); rate.countTDTO(rate.getpc());

(14)

System.out.println("");

System.out.println("Laju TCP dengan menggunakan Peluang Distribusi Waktu Tunda Erlang C ");

rate.countTDTO(rate.getpct()); System.out.println("====================================== =========================="); } } WebDump.java import java.util.Vector; import java.io.IOException; import net.sourceforge.jpcap.net.RawPacket; import net.sourceforge.jpcap.capture.PacketCapture; import net.sourceforge.jpcap.net.*; import net.sourceforge.jpcap.util.*; import static java.lang.Math.*; import java.sql.*;

import java.io.*;

public class WebDump { private double RTT; private double p; private double b; private double T0; private String filename;

public static final int LITTLE_ENDIAN = 1; public WebDump(String filename){

this.filename=filename; }

public static long extractInteger2(byte[] bytes, int pos, int cnt) { int value = 0;

for(int i=0; i<cnt; i++){

if ( (bytes[pos + cnt - i - 1] & 0xFF) !=0) { value = value <<8;

}

value|= ((bytes[pos + cnt - i - 1] & 0xff)); }

return value; }

public static Vector < Datagram > readPacket(String filename, int endian) throws IOException { String TcpdumpString;

(15)

byte[] TcpdumpPacketBytes=new byte[65535]; byte[] TcpdumpPacketDataBytes=new byte[65535]; TcpdumpString=FileUtility.readFile(filename); TcpdumpPacketBytes = TcpdumpString.getBytes("ISO-8859-1"); int offHeaderOffset=24; int offset=offHeaderOffset; long seconds; long useconds; int caplen; int length; int linkType=0x00000001;//CODE_ETHERNET = 0x00000001; Vector < Datagram > vrp =new Vector < Datagram > ();

RawPacket rp2; Packet packet; Datagram pdu; EthernetPacket ether; for (;offset<TcpdumpPacketBytes.length;){ seconds=extractInteger2(TcpdumpPacketBytes,offset,4); useconds=extractInteger2(TcpdumpPacketBytes,offset+4,4); caplen=(int)extractInteger2(TcpdumpPacketBytes,offset+8,4); length=(int)extractInteger2(TcpdumpPacketBytes,offset+12,4);

offset= offset + 16; //get the data

for (int i=0;i<caplen &&(i+offset)<TcpdumpPacketBytes.length;i++){

TcpdumpPacketDataBytes[i]= TcpdumpPacketBytes[i+offset]; }

Timeval tv = new Timeval(seconds,(int) useconds);

rp2 = new RawPacket(tv, TcpdumpPacketDataBytes, length > caplen ? length - caplen : 0);

packet=new PacketFactory().dataToPacket(6,rp2.getData()); if(packet instanceof TCPPacket) {

TCPPacket tcpPacket = (TCPPacket)packet; String srcHost = tcpPacket.getSourceAddress(); String dstHost = tcpPacket.getDestinationAddress();

if (tcpPacket.getSourceAddress().equals("192.168.1.2")){ pdu = new Datagram (caplen<length?

length:caplen,tv,seconds,useconds,packet); vrp.add(pdu);

} }

offset= offset + (caplen>length?length:caplen); // next packet entry

}

(16)

}

public static void main (String args[])throws IOException { BufferedReader stdin = new BufferedReader(new

InputStreamReader(System.in)); WebDump webreader; Timeval tv2,tv1; long delta,deltams=0; Packet packet; IPPacket ip; String input; Vector <Datagram> vrp; Throughput rate;

System.out.print("Berapa kapasitas saluran WAN percobaan? (64000 atau

128000) :");

input=stdin.readLine(); if(input.equals("64000")){

webreader = new WebDump("web64.pcap");

vrp = readPacket("web64.pcap",LITTLE_ENDIAN); rate= new Throughput(64474,64000,1,1.477291,3.2,2); }else if (input.equals("128000")){

webreader = new WebDump("web128.pcap");

vrp = readPacket("web128.pcap",LITTLE_ENDIAN); rate= new Throughput(85607,64000,2,0.0290,3.2,2); }else{

System.out.println("Untuk percobaan ini hanya terdapat 2

kapasitas saluran WAN"); return ; } int last=0; int tcpcounter=0;

for (int i=0;i<vrp.size();i++){

packet=vrp.get(i).getPacket(); if(packet instanceof TCPPacket) {

TCPPacket tcpPacket = (TCPPacket)packet; String srcHost = tcpPacket.getSourceAddress(); String dstHost = tcpPacket.getDestinationAddress(); System.out.println(srcHost+" ---> "+dstHost); if (i>0){

tv1=vrp.get(last).getTimeval(); tv2=vrp.get(i).getTimeval();

delta=tv2.getDate().getTime()-tv1.getDate().getTime(); System.out.println("Packet "+(i+1)+" Interval dari Paket Sebelumnya "+delta+"ms"); System.out.println("");

(17)

deltams +=delta; } last=i; tcpcounter++; } } System.out.println(""); System.out.println(""); System.out.println("====================================== =====================");

System.out.println("Jumlah paket dalam akses WWW adalah "+tcpcounter);

System.out.println("Waktu tunda akses WWW dari Percobaan adalah "+(double)deltams/(double)1000+ " s");

System.out.println("====================================== =================");

System.out.println("Laju TCP pada saluran WAN Dengan Kapasitas "+input+ " Kbps");

if(input.equals("64000")){

System.out.println("Waktu tunda akses WWW harapan adalah "+(double)tcpcounter/rate.countTDTO(rate.getpb())+" s" ); }else if (input.equals("128000")){

System.out.println("Waktu tunda akses WWW harapan adalah "+(double)tcpcounter/rate.countTDTO(rate.getpct())+" s"); }

System.out.println("====================================== =====================");

} // end void main }

Referensi

Dokumen terkait

Menimbang, bahwa putusan Pengadilan Negeri Subang Nomor : 11/Pdt.Plw/2017/PN.Sng diucapkan pada tanggal 8 Agustus 2017 dengan di hadiri oleh Kuasa Hukum Terlawan

Hasil yang akan didapat pada penelitian ini adalah sebuah rancangan Model Proses dan Model Data Aplikasi E-Commerce.. Dalam mengembangkan Rancangan Model Proses dan Model Data

Tujuan penelitian ini adalah Menganalisa hubungan depresi dengan kadar [9] gula darah acak pada penderita Diabetes Mellitus tipe 2 di Ruang Dahlia RSUD Jombang.. Desain penelitian

Intervensi yang paling utama dalam diagnosa Ketidakefektifan perfusi jaringan perifer adalah tindakan Konservatif yaitu non pembedahan dengan memberikan traksi yaitu

Laba usaha yang didapatkan oleh badan usaha di satu negara dalam perjanjian ini hanya dapat dikenakan oleh negara dimana badan usaha tersebut berkedudukan, namun apabila badan

The main objectives of this study are the (1) measurement and mapping of the spatial distribution of the deformation rates in the study area; (2) analysis of

sisi inilah Kartini diuntungkan karena lahir dari ibunda yang rakyat jelata. Keterkungkungan perempuan karena budaya membuat dirinya tak

Sistem penilaian dengan system KPI, selain dapat mengukur kinerja orang per orang, juga bisa dilakukan untuk melakukan pengukuran kinerja secara kelompok, baik itu