Pemrograman Socket TCP dan Socket UDP Makalah ini disusun guna memenuhi tugas mata kuliah Pemrograman jaringan Yang diampu oleh Bapak Mahmudi, S.Kom Oleh Amalia Eka Hasti Adhana (8010022) Devi Mega Sari (8010039) Hendrik Hidayat (8010063) Ita Amalia (8010073) FAKULTAS TEKNIK DAN ILMU KOMPUTER UNIVERSITAS SAINS AL-QUR AN JAWA TENGAH DI WONOSOBO 2013
PENDAHULUAN A. Latar Belakang Masalah Perkembangan teknologi informasi tidak lepas dari pesatnya pertumbuhan pengguna internet. Internet adalah sistem jaringan komputer yang terhubung secara global yang dapat melakukan pertukaran data. Dalam melakukan transkasinya dikenal paradigma client-server; yang menitikberatkan pada pendistribusian data ke dua pihak: kepada klien maupun server. Klien adalah komponen yang meminta request panggilan kepada server. Sementara server adalah komponen yang memproses request dari klien; dan langsung mengembalikan hasilnya kepada klien. Sebuah server dapat menerima banyak request dari klien. Client-Server merupakan sebuah model komputerisasi dimana sebuah aplikasi client dijalankan di komputer desktop atau komputer pribadi yang mengakses informasi pada server atau host yang terletak di lain tempat. Bagian dari aplikasi yang dijalankan di client biasanya digunakan untuk mengoptimalkan interaksi dengan user, dimana server menyediakan proses tersentralisasi dan bekerja secara multiuser Socket adalah sebuah cara untuk berkomunikasi dengan program atau node lain menggunakan file deskriptor. Penggunaan socket programming memungkinkan adanya komunikasi antara client dan server. Salah satu contoh sederhana penggunaan socket programming adalah pembuatan program untuk chatting. ada dua jenis socket yang bisa digunakan untuk membangun aplikasi, yakni TCP Socket dan UDP Socket. Perbedaan utamanya adalah, di model TCP digunakan konsep connection oriented dan reliable data transfer, sedangkan di model UDP digunakan konsep connectionless oriented dan unreliable data transfer.
B. Rumusan Masalah Rumusan Masalah yang dapat diambil dari aar belakang diatas adalah: 1. Apa pengertian socket 2. Bagaimana pengaplikasian Socket pada Java 3. Apa pengertian socket UDP dan TCP (pengertian, karakteristik, kelebihan dan kekurangan, cara penggunaan, contoh pengaplikasiannya) 4. Apa Perbedaan Socket TCP dan UDP 5. Contoh Aplikasi TCP dan UDP dengan Java BAB II
PEMBAHASAN A. Pengertian Socket Socket adalah salah satu cara untuk komunikasi antar komputer, umumnya lewat network atau internet. Socket biasa digunakan untuk pemrograman berbasis client-server yang dapat menggunakan socket TCP/IP atau socket UDP Socket berfungsi sebagai jalan untuk melakukan komunikasi antar mesin seperti transfer data dan informasi jaringan. Untuk berkomunikasi dengan server, client harus tahu nomor IP server begitu juga nomor port yang dituju, nomor port menunjukkan service yang dijalankan. Contoh port 23 untuk Telnet Server, port 25 untuk Mail Server dan port 80 untuk Web Server. Dalam hal ini aplikasi di client sudah mengetahui port yang akan dituju. Contoh program aplikasi di client yang meminta service di server adalah ftp, telnet, ssh. Program yang berjalan di server, akan berjalan sepanjang waktu (disebut sebagai daemon) sampai mesin/service dimatikan, menunggu request dari client sesuai service yang diminta B. Socket Java
Model pemrograman client-server menggunakan dari dua macam koneksi pada layer 4/ layer transport OSI, yaitu connection oriented dan connectionless oriented. Untuk connection oriented menggunakan protokol TCP (Transmission Control Protocol). Sedangkan connectionless oriented menggunakan UDP (User Datagram Protocol ). Pada beberapa aplikasi java telah disediakan paket java.net yang berisi kelas-kelas dan interface yang menyediakan API (Application Programming Interface) level rendah (Socket, ServerSocket,DatagramSocket) dan level tinggi (URL, URLConnection). Berikut adalah contoh dari kelas Socket berikut method dan eksepsi error yang tersedia. Socket (String host, int port, InetAddress localaddr, intlocalport); membuat sebuah socket dan mengkoneksikannya ke port yang dituju pada alamat IP yang disebutkan pada parameter address atau nama host. Selain itu juga akan dilakukan bind socket ke alamat lokal dan port lokal. Hal ini dilakukan jika koneksi antara client dan server membutuhkan nomor port yang sudah ditentukan. Methods : getinetaddress() : untuk mendapatkan nama host yang dituju dan alamat IPnya getport() : untuk mendapatkan nomor remote host getlocalport(): untuk mendapatkan nomor port localhost getlocaladdress(): untuk mendapatkan alamat local dimana socket digunakan getinputstream(): mengembalikan objek input stream dari socket getoutputstream(): mengembalikan objek output stream ke socket setsotimeout(int timeout) dan getsotimeout() : Kedua method tersebut digunakan untuk memberi (set) dan mengambil (get) nilai opsi Socket untuk time out block (dalam milidetik) reading dari socket (SO_TIMEOUT).
Jika dalam waktu timeout tidak mendapat suatu nilai maka, akan dilemparkan ke exception java.net.sockettimeoutexception. Nilai default timeoutnya adalah 0, yang berarti tanpa batas. Exceptions : SocketException : Kelas ini merupakan kelas yang diturunkan dari kelas IOException. Kelas exception ini dipanggil atau dipicu ketika ada kegagalan dalam pemakaian socket, sebagai contoh adalah kegagalan dalam protokol TCP. Salah satu penyebabnya yang mungkin terjadi adalah ketika port yang akan digunakan sudah digunakan sebelumnya pada localhost. Penyebab yang lain adalah user tidak dapat melakukan bind ke port yang dituju. Misalnya saja, Anda ingin menggunakan port 80 untuk aplikasi Anda, namun ternyata pada komputer Anda tersebut sudah berjalan HTTP Server yang juga menggunakan port 80. Bila hal ini terjadi, maka JVM akan melemparkan kegagalan yang ada ke kelas exception SocketException. BindException : Exception ini akan dipanggil ketika ada port lokal yang akan digunakan sudah terpakai oleh yang lain, atau ada kegagalan dalam permintaan untuk menggunakan alamat. ConnectException : Exception ini akan dipanggil ketika sebuah koneksi ditolak oleh host yang dituju, oleh karena tidak ada proses yang siap menerima data pada port yang dituju. NoRouteToHostException: Koneksi yang akan dibangun tidak dapat dipenuhi oleh karena melebihi waktu timeout yang tersedia atau host yang dituju tidak dapat dicapai (unreachable). C. Tipe-tipe Socket 1. User Datagram Protocol ( UDP ) a. Apa itu UDP
UDP (User Datagram Protocol) adalah salah satu protocol lapisan transport TCP/IP yang mendukung komunikasi yang tidak andal (unreliable), tanpa koneksi (connectionless) antar host dalam jaringan yang mengunakan TCP/IP. Dalam UDP tidak ada kontrol kemacetan koneksi (congestion control), artinya UDP dapat mengirimkan per segment tanpa dipengaruhi oleh kesibukan jaringan. UDP digunakan untuk pengiriman data secara cepat tanpa memperhatikan ketepatan pengiriman data. UDP tidak pernah digunakan untuk mengirim data penting seperti halaman web, informasi database, dan lain-lain. UDP biasanya digunakan untuk streaming audio dan video. b. Karakteristik UDP Connectionless (tanpa koneksi): Pesan-pesan UDP akan dikirimkan tanpa harus dilakukan proses negosiasi koneksi antara dua host yang hendak berukar informasi. Hal ini berarti bahwa suatu paket yang dikirim melalui jaringan dan mencapai komputer lain tanpa membuat suatu koneksi. Sehingga dalam perjalanan ke tujuan paket dapat hilang karena tidak ada koneksi langsung antara kedua host. Unreliable (tidak andal): Pesan-pesan UDP akan dikirimkan sebagai datagram tanpa adanya nomor urut atau pesan acknowledgment. Protokol lapisan aplikasi yang berjalan di atas UDP harus melakukan pemulihan terhadap pesan-pesan yang hilang selama transmisi. Umumnya, protokol lapisan aplikasi yang berjalan di atas UDP mengimplementasikan layanan keandalan mereka masing-masing, atau mengirim pesan secara periodik atau dengan menggunakan waktu yang telah didefinisikan. c. Aplikasi UDP Digunakan untuk multimedia streaming, yang sangat memberikan toleransi kehilangan segment cukup baik dan yang sangat tidak sensitive terhadap kerusakan atau kehilangan segment. Contoh protokol aplikasi yang menggunakan UDP :
o DNS (Domain Name System) 53 o SNMP, (Simple Network Management Protocol) 161, 162 o TFTP (Trivial File Transfer Protocol) 69 o SunRPC port 111. d. Kelebihan UDP Tidak perlu adanya setup koneksi terlebih dahulu (hal ini dapat menyebabkan tambahan delay) sederhana, artinya antara penerima dan pengirim tidak perlu menjaga session atau status koneksi ukuran header segment sederhana tidak perlu kontrol kemacetan koneksi, artinya UDP dapat mengirimkan per segment tanpa dipengaruhi oleh kesibukan jaringan e. Kelemahan UDP segmen UDP mungkin akan hilang paket diterima mungkin dalam keadaan yang tidak urut. Jika paket yang diterima tidak urut, paket akan dibuang. f. Pemrograman Socket mengguanakan UDP
1) Client membaca inputan dari keyboard, kemudian mengirimkan hasilnya ke server melalui socket-nya. 2) Server membaca data yang dikirim oleh client di connection socket 3) Server mengubah data menjadi huruf besar 4) Server mengirimkan data yang telah diubah menuju client melalui socket-nya. 5) Client membaca data yang dikirim oleh server dari client socketnya. Kemudian menampilkan data tersebut di monitor 2. Transport Layer Protocol ( TCP ) a. Apa Itu TCP TCP adalah komunikasi yang berorientasi koneksi (Connection oriented communication). karena TCP menerapkan model koneksi connection oriented, maka ketika setup data sudah terbentuk, antara pengirim dan penerima dapat saling mempertukarkan data secara full duplex dengan tetap menjaga session koneksi diantara penerima dan pengirim (stateful). Untuk dapat melaksanakan mekanisme tersebut, di bawah ini adalah contoh, bagaimana mekanisme threeway handshake terjadi pada TCP dengan menggunakan field sequence number dan acknowledge number : b. Karakteristik TCP
Connection-oriented : Suatu arsitektur/mekanisme komunikasi data di mana dua perangkat yang akan saling berkomunikasi diharuskan untuk membuat sebuah sesi (session) terlebih dahulu. Reliabel : Keandalan yang dimiliki oleh protokol ini disebabkan karena beberapa mekanisme seperti : Checksum, Duplicate Data Detection, Retransmisson, Sequencing, Timers. Stream data transfer : TCP akan mengelompokkan byte-byte yang sebelumnya tidak terstruktur ke dalam bentuk segmen untuk kemudian dikirimkan ke IP. Layanan ini memberikan keuntungan bagi aplikasiaplikasi karena mereka tidak perlu lagi membuat blok- blok data. Efficient flow control : Ketika mengirim ulang acknowledgement ke alamat asal, proses TCP yang menerima mengindikasikan nomor urutan yang bisa diterimanya tanpa harus meng-over flow buffer internal miliknya. Full-duplex operation : TCP bisa mengirim dan menerima dalam waktu yang bersamaan. Multiplexing : Komunikasi antar upper-layer yang terjadi secara simultan bisa dimultiplexikan melalui satu koneksi tunggal c. Kelebihan TCP adalah Error Recovery Pengirim dan penerima juga melengkapi data dengan sejumlah informasi yang bisa digunakan untuk memeriksa data yang dikirimkan bebas dari kesalahan. Jika ditemukan kesalahan pada paket data yang diterima, maka penerima tidak akan menerima data tersebut. Pengirim akan mengirim ulang paket data yang mengandung kesalahan tadi. Namun hal ini dapat menimbulkan delay yang cukup berarti. Flow Control Flow control menentukan kapan data harus dikirim kembali, dan kapan menghentikan aliran data paket sebelumnya, sampai berhasil ditransfer. Hal ini karena jika paket data berhasil dikirim, tabrakan
dapat terjadi. Ketika ini terjadi, maka klien meminta kembali paket dari server sampai seluruh paket lengkap di transfer dan identik dengan aslinya. d. Kelemahan TCP Memungkinkan buffer overflow attack. Korban adalah aplikasi yang tidak di tulis dengan baik, memanfaatkan kesalahan programming untuk mengeksekusi kode sisipan, dapat dieksploitasi secara remote atau lokal (tergantung aplikasi), dan spesifik pad prosesor dan system operasi tertentu. Memungkinkan terjadinya denial of service. Denial of sevice menjadikan servis tidak dapat di gunakan lagi. Target denial of service, yaitu koneksi jaringan penghubung antarservis dan user, system operasi yang di gunakan dan aplikasi yang menyediakan servis. e. Contoh protokol aplikasi yang menggunakan TCP Telnet/TeleNetwork adalah remote login yang dapat terjadi di internet karena ada service dari protocol TELNET. Dengan Telnet memungkinkan kita untuk mengakses komputer lain secara remote melalui internet. FTP (File Transfer Protocol) f. Pemrograman Socket Menggunakan TCP Cara kerja aplikasi yang menggunakan TCP dapat digambarkan oleh di bawah ini :
Detail dari proses tersebut adalah : 1. Untuk bisa melakukan koneksi client server, program server harus berjalan terlebih dahulu 2. Di sisi server disediakan sebuah socket, yang disebut welcoming socket yang fungsinya untuk mendeteksi adanya permintaan koneksi dari sisi client. 3. Di sisi client terdapat client socket. Jika ingin menghubungi server, maka melalui client socket-nya, client membuat inisialisai koneksi ke welcoming socket milik server, dengan mode three-way handshake. 4. Setelah welcoming socket menerima inisialisasi koneksi dari client socket, aplikasi server akan membuat connection socket di sisi server. Dengan connection socket ini, client socket dan connection socket berinteraksi satu sama lain untuk mengirim dan menerima data.
5. Client membaca data yang dikirim oleh server dari client socketnya. Kemudian menampilkan data tersebut di monitor. D. Perbedaan TCP dan UDP TCP UDP Connection-Oriented (koneksi bersambungan) : Sebelum data dapat ditransmisikan antara dua host, dua proses yang berjalan pada lapisan aplikasi harus melakukan negosiasi untuk membuat sesi koneksi terlebih dahulu. Koneksi TCP ditutup dengan menggunakan proses terminasi koneksi TCP (TCP connection termination). Connectionless (tanpa koneksi): Pesan-pesan UDP akan dikirimkan tanpa harus dilakukan proses negosiasi koneksi antara dua host yang hendak berukar informasi. Reliable (dapat diandalkan): Data yang dikirimkan ke sebuah koneksi TCP akan diurutkan dengan sebuah nomor urut paket dan akan mengharapkan paket positive acknowledgment dari penerima. Jika tidak ada paket Acknowledgment dari penerima, maka segmen TCP (protocol data unit dalam protokol TCP) akan ditransmisikan ulang. Pada pihak penerima, segmen-segmen duplikat akan diabaikan dan segmen-segmen yang datang tidak sesuai dengan urutannya akan diletakkan di belakang untuk mengurutkan segmen-segmen TCP. Untuk menjamin integritas setiap segmen TCP, Unreliable (tidak andal): Pesanpesan UDP akan dikirimkan sebagai datagram tanpa adanya nomor urut atau pesan acknowledgment. Protokol lapisan aplikasi yang berjalan di atas UDP harus melakukan pemulihan terhadap pesan-pesan yang hilang selama transmisi. Umumnya, protokol lapisan aplikasi yang berjalan di atas UDP mengimplementasikan layanan keandalan mereka masingmasing, atau mengirim pesan secara periodik atau dengan menggunakan waktu yang telah didefinisikan.
public class TCPprofilClient { //private static String strhost; private static InetAddress host; private static final int PORT = 1745; TCP mengimplementasikan penghitungan TCP Checksum. Memiliki layanan flow control: Untuk mencegah data terlalu banyak dikirimkan pada satu waktu, yang akhirnya membuat "macet" jaringan internetwork IP, TCP mengimplementasikan layanan flow control yang dimiliki oleh pihak pengirim yang secara terus menerus memantau dan membatasi jumlah data yang dikirimkan pada satu waktu. Untuk mencegah pihak penerima untuk memperoleh data yang tidak dapat disangganya (buffer), TCP juga mengimplementasikan flow control dalam pihak penerima, yang mengindikasikan jumlah buffer yang masih tersedia dalam pihak penerima Melakukan segmentasi terhadap data yang datang dari lapisan aplikasi. UDP tidak menyediakan mekanisme flow-control, seperti yang dimiliki oleh TCP. UDP tidak menyediakan mekanisme segmentasi data yang besar ke dalam segmen-segmen data, seperti yang terjadi dalam protokol TCP. E. Contoh Pemrograman Socket TCP dan UDP pada Java 1. UTPProfilClient import java.io.*; import java.net.*; import java.util.*;
public static void main(string[] args) { System.out.println("Membuka Socket...\n"); try{ UTPProfilServer import java.io.*; import java.net.*; import java.util.*; public class TCPprofilServer { private static ServerSocket servsock; private static final int PORT = 1745;
2. UDPserver import java.net.*; import java.io.*; import java.util.*; public class UDPServer { public static void main(string[] args) {
UDPClient
import java.net.*; import java.io.*; import java.util.*; public class UDPClient { public static void main (String args[ ]) { try{ // buat socket UDP untuk port 2000 DatagramSocket socket = new DatagramSocket(2000); // buat paket UDP yang berisi buffer 256 byte DatagramPacket packet = new DatagramPacket( new byte[256], 256 ); // terima paket ini adalah operasi terblok socket.receive(packet); // tampilkan informasi paket InetAddress remote_addr = packet.getaddress(); System.out.println ("Pengirim : " + remote_addr.gethostaddress( ) ); System.out.println ("dari Port: " + packet.getport()); // tampilkan isi paket ByteArrayInputStream bin = new ByteArrayInputStream(packet.getData()); for (int i=0; i < packet.getlength(); i++) { int data = bin.read(); if (data == -1) break; else System.out.print ( (char) data) ; } socket.close( ); } catch (IOException e) { System.out.println ("Error - " + e); } } //akhir dari main() } //akhir dari class BAB III
PENUTUP A. Kesimpulan Socket adalah salah satu cara untuk komunikasi antar komputer, umumnya lewat network atau internet. UDP (User Datagram Protocol) adalah salah satu protocol lapisan transport TCP/IP yang mendukung komunikasi yang tidak andal (unreliable), tanpa koneksi (connectionless) antar host dalam jaringan yang mengunakan TCP/IP. TCP adalah komunikasi yang berorientasi koneksi (Connection oriented communication). Perbedaan utamanya antara keduanya adalah, di model TCP digunakan konsep connection oriented dan reliable data transfer, sedangkan di model UDP digunakan konsep connectionless oriented dan unreliable data transfer.