Sebagian besar programmer telah melakukan pemrograman berbasis web (http). Pemrograman seperti web services dan juga pemrograman aplikasi web adalah salah contoh pemrograman berbasis http. Protokol HTTP berjalan di atas protokol yang lebih umum (low-level) yakni TCP. Penggunaan TCP dalam jaringan internet adalah yang terbanyak (75%), dilanjutkan dengan UDP (20%), ICMP dan protokol lainnya sebanyak (5%).UDP adalah protokol kedua yang paling banyak digunakan. Aplikasi seperti DNS Resolution, SNMP status, Windows Internet Naming Services (WINS), Trifial FTP (TFT), autentifikasi kerberos , hingga online gaming menggunakan UDP sebagai protokol utama dalam bekerja. UDP memang memberi keuntungan dari sisi efisiensi bandwith, dukungan klien yang lebih banyak, latency yang lebih rendah, serta performa yang tinggi adalah ciri-ciri UDP. Walaupun pengembangan aplikasi UDP dapat dikatakan sederhana, implementasi untuk mencapai keuntungan tersebut memerlukan pemikiran dan desain yang baik.
TCP vs UDP
Kedua teknologi tersebut mengalami revolusi yang berbeda (atau bahkan berlawanan). TCP lahir sebagai sebuah teknologi yang berdasar pada koneksi, menjaga sesi aplikasi, dan menjamin tingkat komunikasi yang handal dan memiliki standarisasi pada tingkat flow control. UDP tidak memiliki kesemua fitur tersebut dan sangat bergantung pada aplikasi untuk menghasilkan sekumpulan fitur yang mencukupi.UDP dapat dikatakan sebagai protokol yang tidak terikat aturan. Pada saat menggunakan UDP kita dapat membuat paket yang kita kirimkan memiliki checksum atau tidak, mengirimkan paket ke satu atau banyak penerima, hingga memilih port komunikasi yang digunakan secara bebas. UDP tidak menjaga sesi koneksi dan paket yang dikirimkan bersifat independen dari satu paket ke paket yang lain sehingga urutan paket yang datang bukanlah sebuah jaminan dari protokol ini. Hal yang menarik dari dukungan sekuritas, UDP tidak menawarkan mekanisme sekuritas secara built-in.
Berdasar pada argumen di atas,dapat dipastikan membuat aplikasi berbasis UDP harus dipikirkan dari segi manfaatnya. Sebagai contohnya UDP akan sangat cocok bila diimplementasikan pada presentasi serentak sebanyak 20 klien.Hal lain yang mungkin menjadi pertimbangan pemilihan antara UDP dan TCP adalah kecepatan. Pada TCP dibutuhkan sekurang kurangnya tiga pertukaran paket. Sebagai contoh komunikasi antara Yogyakarta dan Jakarta membutuhkan tiga paket dan masing-masing adalah 200ms maka dibutuhkan waktu 600ms.Hal ini tentunya menunjukkan bahwa pada suatu waktu (terutama bila paket TCP yang dikirimkan kecil) timbul overhead yang tidak perlu. Hal ini dapat dihindarkan dengan menggunakan UDP. Perbedaan TCP dan UDP adalah urutan paket. Pada aplikasi tertentu urutan paket menjadi penting sebagai contoh aplikasi transfer berkas ,pada kasus tertentu paket yang hilang atau tidak urut tidak terlalu berpengaruh pada aplikasi video streaming yang mendukung frame skipping.Sebuah kesimpulan pada sisi ini adalah TCP memberikan fitur yang lebih dari sisi keamanan, fleksibilitas, dan juga kualitas. Programmer akan mudah melakukan pemrograman TCP terlebih lagi hal-hal detil tentang keamanan telah dicakup juga pada TCP. Sementara pada UDP, hal tersebut tidak ditemukan, UGP unggul dalam suatu keadaan jaringan yang membutuhkan performa tetapi dengan ketahanan yang tidak terlalu tinggi.
Solusi UDP pada Pemrograman
Pada bagian ini,akan membuat contoh sederhana yang mendayagunakan UDP. Bayangkan anda programmer game yang melakukan pemrograman game, anda harus mengirimkan status lokasi setiap pemain.
Informasi yang ada harus dikirimkan dengan format tertentu. Pembentukan format ini disusun dengan bantuan method.
Data yang telah diubah formatnya kemudian dikirimkan. Perlu diingat dalam melakukan transmisi paket adalah serialize dan deserialize. Kode berikut melakukan inisialisasi socket, melakukan serialize pesan yang dikirimkan, serta mengirimkan hasil serialize ke alamat server yang dituju (pada kesempatan ini server yang dituju beralamat 127.0.0.1 yang tak lain adalah komputer
sendEndPoint).Method sendTo melakukan pengiriman data dengan menggunakan socket berjenis UDP.Pengiriman protokol UDP dilakukan tanpa blocking dengan kata lain protokol UDP tidak memiliki flow control dan kewajiban respons setiap paket yang dikirimkan.
Method BeginRecieveFrom yang mendengar pesan masuk secara asinkron dari klien. Penerimaan paket di sisi server,bergantung pada aplikasi yang mendengarkan. Apabila aplikasi server tidak mendengarkan pada port yang digunakan klien ataupun yang sebaliknya maka pesan tidak akan sampai ke tujuan. Sampai tidaknya pesan UDP dapat dilakukan dengan melakukan pengecekan pada sisi klien tepatnya dengan menangkap eksepsi klien. Pada sisi klien apabila pesan yang dikirimkan tidak sampai pada tujuan maka akan dikembalikan eksepsi dengan kode status 10054 (Connection Reset By Peer)
Bila diperhatikan kode-kode yang telah dibuat tampak jelas bahwa kode dikirimkan dan diterima dengan port UDP yang tidak kita ketahui. Berdasar pada aplikasi pemantauan paket jaringan (netmon.exe) ditemukan bahwa paket dikirim ke sebuah port dengan nomor 54.Ini tentulah tidak fleksibel mengingat kebijakan keamanan di setiap jaringan berbeda beda.Pendekatan yang dapat dilakukan untuk melakukan semacam persetujuan port dan alamat IP yang digunakan adalah dengan mengesetnya di dalam kode atau mengesetnya pada saat runtime.
Pemograman Lanjut UDP
Mengirim posisi pemain pada sebuah aplikasi game. Bergantung pada yang anda bayangkan tentang permainan apa yang kita buat, entah itu game RPG seperti Ragnarok® atau game mobil balap seperti Need for Speed® keduanya merupakan game yang posisi aware. UDP bersifat non-reliable artinya sebuah pesan posisi pemain tidak dapat dipastikan sampai pada server. Mungkin anda berpendapat bahwa toh paket posisi akan senantiasa dikirimkan jadi bila terdapat posisi yang hilang dapat diabaikan karena posisi terbaru juga akan dikirimkan. Prinsip tersebut ada benarnya tetapi bagaimana bila pemain yang bersangkutan itu mengalami kekalahan sehingga secara aturan pemain tersebut tidak memiliki posisi lagi atau keluar dari arena permainan. Hal tersebut tidak dapat diketahui oleh server karena tidak terdapat penanda tentang keadaan demikian. Solusi mengenai hal ini sebenarnya mengikuti pendekatan yang dimiliki oleh TCP yakni ACK (acknowledge). ACK akan membantu klien dalam menentukan apakah server telah menerima paket yang dikirimkan. Dan karena terdapat kemungkinan pula bahwa paket yang dikirimkan terjadi duplikasi ACK juga membantu server untuk mengetahui keidentikan paket dan membuang paket yang ganda. Pada setiap pembaharuan posisi yang dikirimkan maka sebuah ACK direquest dan akan dikirimkan kembali oleh server. Klien akan mengelola ACK dalam suatu daftar tunggu tetapi hanya ACK terakhirlah yang ditunggu (ACK yang lalu diabaikan). Bila waktu respons ACK terlalu lama maka klien dapat mengirimkan kembali paket yang sama dengan ACK yang berbeda. Pada sisi penerima terdapat dua tugas tambahan yang dilaksanakannya yakni mendeteksi duplikasi dan mengirimkan ACK respons.PlayerInfo pada pengembangannya tidak hanya mengirimkan paket tetapi juga nomor urut paket. Paket yang terkirim akan memperbaharui daftar ACK dan juga waktu kirim yang akan bermanfaat pada saat pengiriman ulang paket yang dilakukan tidaklah terlalu kompleks. Bila terjadi terlalu banyak kesalahan dalam pengiriman maka pengirim (klien) mengasumsikan terjadi kesalahan pada koneksi. Pada sisi server hal yang dilakukan adalah mendengar paket masuk dan mendeteksi duplikasi data.
Broadcast dan Multicast
Satu fitur utama dari UDP dibanding TCP adalah kemampuan untuk mengirim sebuah pesan ke banyak penerima. Pengiriman pesan berupa broadcast yaitu pengiriman pesan kesemua host dalam sebuah subnet. Multicasting merupakan pengiriman berkas ke beberapa host yang melakukan registrasi diri ke suatu alamat multicast group. Pada pemrograman konsepnya tentu serupa, klien meregistrasikan diri sebelum mendengar paket-paket yang dikirimkan. Apabila tidak mengetahui alamat dan port server (seperti bila kita bermain game online) maka kebanyakan server melakukan pendekatan dengan mendengarkan komunikasi paket pada alamat yang umum digunakan pada multicast (224.0.0.0 hingga 239.255.255.255). Server akan mendengar request paket, bila ditemukan request maka server akan melakukan respons mengenai akses yang dilakukan klien. Class berikut mengungkapkan suatu template request dan respons. Server mengawali kegiatannya dengan membuka komunikasi socket dan mendengar berbagai request yang masuk Pada saat server menerima request maka server akan memberikan respons terhadap paket data yang dikirimkan oleh klien. Pada keadaan ini server mengungkapkan bahwa komunikasi yang dibutuhkan akan terbentuk dan siap beroperasi.
Tidak ada komentar:
Posting Komentar