Mengenal Socket
Bayangkan sebuah server game online yang berkomunikasi
tanpa henti, dimainkan oleh entah berapa banyak client yang tersebar. Ini
merupakan salah satu contoh aplikasi dari sekian banyak aplikasi yang
menggunakan socket jaringan untuk saling berkomunikasi dan bertukar data.
Komunikasi socket jaringan memang
tidak mengenal lelah, pertukaran data terjadi terus-menerus dan memegang
peranan vital. Jika oleh karena suatu hal komunikasi berhenti karena
maintenance, kerusakan, ataupun sebab lainnya, maka dapat dipastikan para
penggunanya akan kecewa.
Maka dari itu, komunikasi jaringan
selalu diusahakan tidak terhenti. Demikianlah tugas berat yang harus dilakukan
socket jaringan. Sebelum membahas lebih jauh, apakah sebenarnya pengertian
socket itu?
Pengertian socket adalah interface
pada jaringan yang menjadi titik komunikasi antarmesin pada Internet Protocol,
dan tentunya tanpa komunikasi ini, tidak akan ada pertukaran data dan informasi
jaringan.
Socket terdiri dari elemen-elemen utama sebagai
berikut:
1. Protokol.
2. Local IP.
3. Local Port.
4. Remote IP.
5. Remote Port.
Dalam komunikasi antara dua pihak,
tentunya harus digunakan kesepakatan aturan dan format yang sama agar
komunikasi dapat dimengerti. Seperti halnya dua orang yang menggunakan bahasa
yang sama, maka bahasa di sini berfungsi sebagai protokol. Protokol yang
digunakan dalam socket dapat menggunakan TCP ataupun UDP.
Contoh komunikasi sederhana adalah
komunikasi antara komputer A dan komputer B. Baik komputer A maupun komputer B
harus memiliki identitas unik, yang direpresentasikan oleh IP masing-masing.
Komunikasi yang terjadi melalui
port, sehingga baik komputer A maupun komputer B harus memiliki port yang dapat
diakses satu sama lain.
TCP dan UDP
Pemrograman socket adalah cara untuk menggunakan
komponen/API (Application Programming Interface) socket untuk membuat sebuah
aplikasi.
Aplikasi socket umumnya terdiri dari
dua kategori berdasarkan pengiriman datanya, yaitu:
1. Datagram socket (menggunakan UDP).
2. Stream socket (menggunakan TCP).
Terdapat perlakuan yang berbeda
antara UDP dan TCP, walaupun sama-sama berfungsi sebagai protokol pertukaran
data.
UDP tidak memerlukan proses koneksi
terlebih dahulu untuk dapat mengirimkan data, paket-paket data yang dikirimkan
UDP bisa jadi melalui rute yang berbeda-beda, sehingga hasil yang diterima bisa
jadi tidak berurutan.
Contohnya jika aplikasi socket
pengirim mengirimkan berturut-turut pesan 1, pesan 2, dan pesan 3, maka
aplikasi socket penerima belum tentu mendapatkan pesan yang berurutan dimulai
dari pesan 1, pesan 2, dan terakhir pesan 3. Bisa saja pesan 2 terlebih dulu
diterima, menyusul pesan-pesan yang lain, atau berbagai kemungkinan lainnya.
Bahkan, dapat terjadi pesan yang dikirimkan tidak sampai ke penerima karena
kegagalan pengiriman paket data.
Tidak demikian halnya dengan stream
socket yang menggunakan TCP. Jenis ini mengharuskan terjadinya koneksi terlebih
dahulu, kemudian mengirimkan paket-paket data secara berurutan, penerima juga
dijamin akan menerima data dengan urutan yang benar, dimulai dari data pertama
yang dikirimkan hingga data terakhir. TCP dapat menangani data yang hilang,
rusak, terpecah, ataupun terduplikasi.
Dari sekilas perbedaan ini, kita
dapat menarik kesimpulan bahwa aplikasi socket yang menggunakan TCP memerlukan
pertukaran data dua arah yang valid. Sedangkan, aplikasi socket yang
menggunakan UDP lebih memprioritaskan pada pengumpulan data.
Karena itu aplikasi socket dengan
TCP sering diterapkan untuk aplikasi chat, transfer file, ataupun
transaksi-transaksi penting. Sedangkan aplikasi socket dengan UDP cocok
diterapkan untuk aplikasi monitoring jaringan, game online, dan
aplikasi-aplikasi broadcast.
Port
Salah satu elemen penting yang digunakan dalam
aplikasi socket adalah port. Port merupakan sebuah koneksi data virtual yang
digunakan aplikasi untuk bertukar data secara langsung.
Terdapat banyak port di dalam sebuah
sistem komputer dengan fungsinya masing-masing. Sebagai contoh, dalam mengirim
e-mail digunakan service SMTP yang umumnya menggunakan port 25. Sementara
service POP3 untuk menerima e-mail menggunakan port 110, port 80 digunakan
untuk HTTP, port 443 digunakan untuk HTTPS, dan seterusnya.
Nomor-nomor port dikategorikan dalam
tiga jenis sebagai berikut:
1. Well-known ports.
Merupakan port yang telah digunakan secara internal
oleh sistem Windows, misalnya port untuk koneksi Internet, service FTP, dan
seterusnya. Port yang telah digunakan ini adalah port 0 sampai dengan port
1023.
2. Registered ports.
Port ini dapat digunakan dalam aplikasi Anda,
range-nya adalah port 1024 hingga port 49151, cukup banyak port yang tersedia
yang bebas Anda pilih sehingga Anda tidak perlu kuatir kekurangan port untuk
aplikasi Anda.
3. Dynamic/Private ports.
Dari port 49152 sampai dengan port 65535.
Winsock
Untuk pemrograman aplikasi socket berbasis Windows,
maka komponen API yang sering digunakan adalah Winsock (Win-dows Socket API)
yang mendukung interface standar TCP/IP, yang merupakan protokol jaringan
paling popular saat ini (contoh protokol jaringan yang lain adalah NetBIOS, IPX
dari Novell, AppleTalk dari Apple, dan seterusnya).
Pengertian TCP/IP (TCP over IP)
mungkin dapat menjadi sedikit rancu jika diartikan TCP/IP hanya mengizinkan
pengiriman TCP (dan tidak UDP), padahal seperti yang telah kita bahas,
pengiriman socket dapat melalui TCP maupun UDP.
Pengertian TCP/IP di sini sebenarnya
digunakan untuk menunjukkan teknologi jaringan/Internet, termasuk di dalamnya
adalah UDP. Jika Anda menggunakan UDP, dapat juga disebut sebagai UDP/IP (UDP
over IP), tetapi umumnya istilah ini jarang digunakan dan istilah TCP/IP telah
mencakup, baik TCP maupun UDP.
Pada bahasa pemrograman visual
seperti Visual Basic/Delphi, Anda dapat menggunakan control Winsock yang telah
disediakan untuk mengembangkan aplikasi socket.
Walaupun kita akan mencontohkan
aplikasi socket dalam environment Windows, Anda tidak perlu khawatir jika
aplikasi socket yang menggunakan Winsock tidak dapat berkomunikasi dengan
aplikasi socket berbasis Unix/Linux, karena komunikasi tetap dapat terjadi
selama aplikasi tersebut menggunakan protokol jaringan yang sama.
Kalau demikian, untuk mencoba
aplikasi socket, apakah mutlak diperlukan setidaknya jaringan dengan minimal
dua komputer yang saling terkoneksi? Bagi Anda yang terpaksa hanya menggunakan
satu komputer, dapat memanfaatkan alamat localhost atau 127.0.0.1 yang
mengizinkan dua aplikasi berjalan pada satu mesin komputer dan berkomunikasi
satu sama lain.
Aplikasi Server
Untuk membuat aplikasi socket yang sederhana, tidak
diperlukan langkah-langkah yang rumit. Kita akan mencoba membuat dua buah
aplikasi, yang pertama adalah aplikasi server yang akan menerima data,
sedangkan aplikasi kedua adalah aplikasi client yang mengirimkan data pada
server. Baik aplikasi server dan aplikasi client mendefi nisikan port yang sama
sebagai jalur komunikasi.
Contoh program dibuat dengan
menggunakan Visual Basic 6. Konsep pemrograman yang serupa juga dapat Anda
implementasikan pada bahasa pemrograman lain seperti Visual Basic.NET, Delphi,
dan lain sebagainya.
Kita akan memulainya dengan aplikasi
server, tugas aplikasi server cukup sederhana, yaitu hanya siap sedia menerima
data yang masuk pada sebuah port. Control yang Anda perlukan adalah control
winsock bernama Winsock1 dan sebuah textbox bernama Text1. Pada event
Form_Load, tuliskan kode program di bawah
ini:
Private Sub Form_Load()
With Winsock1
.LocalPort = 1025
.Listen
End With
End Sub
Kode program tersebut melakukan
inisialisasi socket, socket memilih port 1025 pada komputer server dan menunggu
data yang masuk melalui port tersebut dengan perintah Listen.
Selanjutnya pada event Winsock1_ConnectionRequest,
ketikkan kode program berikut:
Private Sub Winsock1_ConnectionRequest(ByVal requestID
As
Long)
If Winsock1.State <> sckClosed Then
Winsock1.Close
Winsock1.Accept requestID
End Sub
Kode program di atas berfungsi untuk menerima request
koneksi. Selanjutnya pada event Winsock1_DataArrival, ketikkan kode program
berikut:
Private Sub Winsock1_DataArrival(ByVal bytesTotal As
Long)
Dim strData As String
Winsock1.GetData strData
Text1.Text = Text1.Text & strData
End Sub
Kode program di atas berfungsi untuk mengambil data
yang diterima oleh socket dan menampilkannya pada Text1. Aplikasi server telah
selesai!
Aplikasi Client
Seperti aplikasi server, Anda perlu menyiapkan control
Winsock dan Text, ditambah sebuah control Command Button yang dapat Anda
namakan cmdKirim yang berfungsi untuk mengirimkan data yang diketik pada Text1
ke aplikasi server.
Pada event Form_Load, ketikkan kode program di bawah:
Private Sub Form_Load()
With Winsock1
.RemoteHost = “127.0.0.1”
.RemotePort = 1025
.Connect
End With
End Sub
Kode program di atas berfungsi untuk melakukan
inisialisasi, tentukan IP tujuan/server/remote dengan 127.0.0.1 seperti pada
contoh jika Anda mencoba aplikasi ini dengan menggunakan satu mesin komputer.
Jika Anda mencobanya dengan menggunakan dua komputer
dalam sebuah jaringan, isikan dengan IP komputer yang berfungsi sebagai server.
Selanjutnya pada cmdKirim, ketikkan kode program
sebagai berikut:
Private Sub cmdKirim_Click()
If Winsock1.State = sckConnected Then
Winsock1.SendData Text1.Text
End If
End Sub
Kode program di atas akan
mengirimkan pesan yang Anda ketik pada textbox Text1 pada aplikasi server.
Selesailah sudah aplikasi server dan
client. Cukup mudah, bukan? Anda dapat melakukan uji coba dengan menjalankan
aplikasi server pada komputer yang berfungsi sebagai server (ataupun komputer
yang sama dengan aplikasi client jika Anda menggunakan 127.0.0.1 sebagai remote
IP).
Jalankan aplikasi client, dan ketik
kata-kata yang Anda inginkan, lalu tekan Command Button cmdKirim, maka aplikasi
server akan menampilkan pesan yang Anda ketikkan
tersebut.
Dari program sederhana ini, Anda
dapat mengembangkannya menjadi aplikasi socket yang sesuai dengan keperluan
Anda, penggunaannya sangat luas dan bisa jadi sangat bermanfaat, misalnya
aplikasi instant messenger seperti Yahoo! Messenger ataupun MSN Messenger yang
merupakan aplikasi socket yang banyak digunakan.
Pengolahan Data
Komunikasi data antara server dan client di atas
merupakan bentuk komunikasi satu arah sederhana. Data yang dikirimkan dari
client pun merupakan data mentah yang tidak memerlukan pengolahan data lebih
lanjut.
Anda dapat membuat sendiri function
dan rutin untuk mengolah data yang dikirim dan diterima sesuai dengan kebutuhan
aplikasi, karena data yang dikirimkan antarmesin bisa jadi sangat bervariasi.
Misalnya saja aplikasi server/client
Anda memerlukan pertukaran data identitas mesin, tanggal, jam, header pesan,
isi pesan, dan lain sebagainya. Anda dapat mengirimkannya dalam format
tertentu, misalnya bentuk string dengan karakter pemisah untuk membedakan masing-masing
field.
Dalam komunikasi data di dalam
jaringan, Anda perlu mempertimbangkan besarnya data yang lalu-lalang pada
jaringan, baik dengan menggunakan TCP maupun UDP. Keduanya harusdipersiapkan
untuk mampu menangani data yang besar jika memang pengguna aplikasi socket Anda
sangat luas.
Pastinya tidak terdapat masalah yang
berarti jika Anda mencobanya dengan dua atau beberapa komputer dalam sebuah
jaringan lokal, tetapi coba bayangkan seberapa besar total data yang harus
dikirim dan diterima pada sebuah aplikasi game online, misalnya.
Pada contoh game online, sebuah
server harus dipersiapkan untuk mampu melayani sedemikian banyak client, dan
jaringan yang digunakan bukan lagi jaringan lokal, tetapi sudah merupakan
jaringan Internet, di mana siapapun dapat menggunakan aplikasi Anda selama ia
memiliki koneksi Internet.
Mungkin Anda bertanya, jika data
yang keluar-masuk memerlukan pengolahan lebih lanjut, mengapa tidak digunakan
database, sehingga Anda tidak perlu pusing membuat rutin atau modul untuk
mengolah data yang dikirim/diterima melalui komunikasi socket?
Pada umumnya, aplikasi socket
client/server memang menggunakan database pada sisi server, tetapi jika
aplikasi socket mengharuskan sisi client menggunakan database tertentu, maka
akan membatasi penggunaan aplikasi itu sendiri.
Selain itu, kegunaan komunikasi
socket adalah agar dapat berjalan lintas platform. Tidak peduli operating
system apa yang digunakan pengguna aplikasi, komunikasi socket tetap berjalan
selama digunakan protokol yang sama.
Sebenarnya jika Anda melihat
software database seperti SQL Server, intinya juga merupakan aplikasi socket,
di mana menggunakan port tertentu sebagai jalur komunikasi, tetapi software
tersebut telah dikemas menjadi produk database yang spesifik.
Tools Tambahan
Aplikasi socket merupakan aplikasi jaringan dan jika
Anda mendalami seluk-beluk jaringan, tentu akan familiar dengan tools tambahan
yang umumnya digunakan dalam jaringan. Tools ini kemungkinan dapat berguna
untuk diimplementasikan ke dalam aplikasi socket Anda.
Tools yang dimaksud, antara lain:
1. Ping.
Ping digunakan untuk memeriksa keberadaan remote host
dengan jalan mengirimkan sinyal kepada remote host. Keberadaan remote host
dapat ditentukan dengan melihat response yang diterima. Ping juga dapat
digunakan untuk mengukur kecepatan transfer data. Salah satu contoh penggunaan
ping dalam aplikasi socket adalah memeriksa server yang tersedia sebelum
mengirimkan data (dengan asumsi tersedia lebih dari 1 server).
2. Telnet.
Telnet merupakan singkatan dari TELecommunication
NET-work. Umumnya istilah telnet saat ini merujuk pada aplikasi telnet client
yang tersedia pada kebanyakan operating sys-tem. Telnet mengizinkan Anda
mengakses remote host dan menggunakan service-nya. Sebagai contoh, Anda dapat mengirimkan
e-mail melalui telnet yang menggunakan port 25 (service SMTP) pada remote host
tertentu. Jika Anda telah masuk ke dalam environment telnet, command line yang
digunakan adalah command berbasis Unix/Linux. Aplikasi socket dapat dimodifi
kasi bekerja seperti telnet dengan mengakses remote host dan port tertentu. Di
dalam aplikasi socket, Anda dapat mengambil dan mengolah response yang didapat
dari remote host.
3. Netstat.
Netstat menampilkan status jaringan yang terjadi.
Dapat menampilkan port yang sedang terkoneksi, atau dalam kondisi
menunggu/listening, juga menampilkan protokol yang digunakan, apakah TCP atau
UDP. Dengan netstat, Anda dapat mengetahui koneksi jaringan yang terjadi, hal
ini dapat dimanfaatkan di dalam aplikasi socket, misalnya untuk melihat port
yang sedang aktif dan digunakan.
Ada kalanya Anda perlu menjalankan
tools jaringan yang telah disebutkan di atas melalui aplikasi Anda. Untuk
keperluan ini, Anda dapat menggunakan shell command yang disediakan oleh bahasa
pemrograman yang Anda gunakan.
Misalnya pada Visual Basic, dapat
digunakan perintah Shell diikuti parameter yang diperlukan.
Jika ingin mengolah response yang
dihasilkan oleh tools tertentu, Anda dapat menuliskan hasilnya pada sebuah file
teks, contohnya jika Anda menjalankan perintah netstat –an > hasil.txt pada
Command Prompt Windows, maka informasi mengenai koneksi yang aktif akan
tersimpan dalam file hasil. txt, di mana Anda dapat mengolah file hasil.txt
tersebut lebih lanjut di dalam aplikasi Anda.
Keamanan Jaringan
Berbicara mengenai komunikasi jaringan, ternyata erat
kaitannya dengan keamanan jaringan. Port yang terbuka dengan keluar masuknya
data, sebenarnya juga merupakan celah keamanan yang dapat dimanfaatkan
pihak-pihak tertentu yang berniat buruk.
Karena itu, saat mengembangkan
sebuah aplikasi socket, Anda juga perlu mempertimbangkan issue keamanan
jaringan dan sistem komputer Anda. Jika data yang dikirimkan merupakan data
yang sensitif dan rahasia, Anda dapat melakukan enkripsi data ataupun tindak
pengamanan lainnya.
Dari sisi pengguna, saat menggunakan
sebuah aplikasi socket, berarti Anda telah mengizinkan aplikasi tersebut untuk
melakukan pengiriman dan penerimaan data melalui port tertentu. Karena itu
pastikan Anda mengenal dengan baik aplikasi socket yang Anda gunakan, yakinkan
bahwa aplikasi tersebut tidak mengandung program jahat yang dapat membahayakan
keamanan komputer Anda.
Tetapi jika aplikasi instant
messenger dan game online tidak diizinkan oleh administrator jaringan di kantor
Anda, jangan lantas mengira pimpinan Anda sangat peduli dengan keamanan
jaringan. Hal tersebut untuk mencegah kantor Anda menjadi game center dan ruang
gosip!