Anda di halaman 1dari 6

TCP SOCKET PROGRAMMING

PEMROGRAMAN JARINGAN

Pengertian Socket
Socket adalah sebuah cara untuk berkomunikasi dengan program atau node lain
menggunakan file deskriptor. Untuk berkomunikasi dengan program atau node lain semudah kita
membaca dan menulis file deskriptor. Antarmuka socket dan file adalah mirip, jika pada file kita
membukanya dengan open() sedangkan pada socket kita manggunakan socket(). Pada file
deskriptor yang menjadi tujuan adalah sebuah file, sedangkan pada socket adalah komputer atau
node lain. Berikut ini menunjukkan bagaimana suatu aplikasi berhubungan dengan aplikasi
lainnya.

Socket dapat melakukan beberapa operasi yakni : koneksi ke mesin remote, mengirim
data (write), menerima data (read), menutup koneksi (close), bind to port, listen pada data yang
masuk dan menerima koneksi dari mesin remote pada port tertentu. Karena namanya saja socket
programming, maka masing-masing mesin yang saling berinteraksi harus terpasang socket pula.

Paradigma pada aplikasi jaringan berlaku model client-server. Aplikasi yang


menginisialisasi koneksi, disebut aplikasi client. Sedangkan aplikasi yang menerima inisialisasi
disebut sebagai aplikasi server. Oleh karena itu, jika kita membangun suatu aplikasi jaringan
yang lengkap, maka kita harus membuat aplikasi client maupun aplikasi server. Lebih lanjut
mengenai socket, 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. Sebuah aplikasi dapat menggunakan salah
satu dari jenis Socket tersebut disesuaikan dengan peruntukan aplikasi tersebut.
Jenis Socket
Ada dua golongan socket di Unix yang paling umum dipakai yaitu:
a. Socket Lokal atau AF_UNIX
Socket Lokal adalah socket yang melakukan komunikasi dengan perantaraan
sebuah file yang biasanya diletakkan pada direktori /tmp atau /usr/tmp ataupun /var/tmp.
Socket semacam ini digunakan umumnya terbatas untuk komunikasi antar aplikasi dalam
satu mesin.

b. Socket Networking atau AF_INET


Socket Networking ditujukan untuk komunikasi antar aplikasi antar mesin dalam
lingkungan jaringan TCP/IP. Identifikasi socket dilakukan dengan sebuahservice
identifier yaitu berupa nomor port TCP/IP yang dapat di sambung oleh client. Socket
Networking memiliki beberapa jenis, yang paling umum digunakan yaitu:

Socket Stream atau SOCK_STREAM


Socket Stream adalah socket komunikasi full-duplex berbasis aliran (stream)
data. Pada model komunikasi Socket Stream, koneksi dua aplikasi harus dalam kondisi
tersambung dengan benar untuk dapat bertukar data. Ini dapat dianalogikan seperti
komunikasi telepon. Jika sambungan telepon di salah satu titik putus, maka komunikasi
tidak dapat terjadi. Koneksi model seperti ini akan menjamin data dapat dipertukarkan
dengan baik, namun memiliki kelemahan dalam hal penggunaan jalur data yang relatif
besar dan tidak boleh terputus.

Socket Datagram atau SOCK_DGRAM


Socket Datagram berkomunikasi dengan cara yang berbeda. Socket ini tidak
membutuhkan koneksi yang tersambung dengan benar untuk mengirimkan dan menerima
data. Model koneksi semacam ini tidak dapat menjamin data dapat dipertukarkan dengan
baik, namun memiliki keunggulan dalam hal penggunaan jalur data yang minimal. Socket
Datagram dapat dianalogikan dengan komunikasi yang terjadi pada kelas, misalnya pada
saat guru melakukan broadcasting materi pelajaran untuk diterima oleh setiap murid.
Tidak ada yang dapat menjamin materi pelajaran dapat diterima oleh semua murid
dengan baik, kecuali diterapkan metoda rechecking. Rechecking ini dapat dilakukan baik
oleh guru maupun murid. Guru bertanya untuk memastikan jawaban dari murid benar,
atau murid bertanya untuk memastikan kebenaran materi yang diterimanya. Socket
Datagram pun menggunakan metoda ini untuk menjamin pengiriman data dapat
dilakukan dengan baik.

Pengertian TCP (Transmission Control Protocol)


TCP (Transmission Control Protocol) merupakan protokol yang bersifat connection-
oriented, artinya komunikasi yang melewatinya membutuhkan handshaking untuk mengatur
koneksi end-to-end. Koneksi dapat dibuat dari client ke server, dan kemudian banyak data dapat
dikirimkan melalui koneksi itu. Aplikasi berbasis TCP biasanya membutuhkan ketepatan data
hingga 100% tapi tidak memperdulikan lama pengiriman, sedangkan aplikasi berbasis UDP
biasanya adalah aplikasi yang tidak terlalu mempedulikan ketepatan data tapi sangat peduli
dengan delay pengiriman. Contoh aplikasi TCP adalah web browser, sedangkan UDP adalah
Video Converence. Untuk membangun aplikasi hal pertama yang perlu dilakukan
adalah menganalisa jenis aplikasi kita, kebutuhan bandwidth, kebutuhan ketersampaian data dan
sensitifitas terhadap delay. Berdasarkan hal ini kita bisa menentukan protokol apa yang kita
gunakan, entah TCP atau UDP.

TCP memiliki ciri-ciri yaitu sebagai berikut:


Terpercaya
TCP mengatur pesan acknoweledegment, retransmission, dan timeout. Banyak usaha
untuk mengirimkan pesan yang dibuat dengan terpercaya. Jika hilang ditengah jalan, server
akan meminta kembali bagian yang hilang. Di TCP, tidak ada data yang hilang atau dalam
beberapa kasus timeouts, koneksi didrop.

Terurut
Jika dua pesan dikirimkan sepanjang koneksi, satu demi satu, pesan yang pertama
akan mencapai aplikasi penerima pertama. Ketika paket data tiba di urutan yang berbeda,
layer TCP menahan data selanjutnya sampai data yang baru saja datang dapat di urutkan
kembali dan dikirimkan ke aplikasi.

Heavyweight
TCP meminta tiga paket hanya untuk mensetup socket, sebelum beberapa data aktual
dapat dikirimkan. Ini mengatur koneksi, reliability, dan congestion control. Ini adalah
protocol transport yang besar yang didesain di atas IP

Streaming
Data dibaca sebagai stream, dengan tidak membedakan dimana satu paket berakhir
dan yang lin dimulai. Paket mungkin dipisah atau digabungkan ke dalam data streams yang
lebih besar atau lebih kecil secara sewenang-wenang.

UDP Socket tidak memerlukan proses koneksi terlebih dahulu undtuk dapat mengirimkan
data, paket-paket data yang dikirimkan UDP bisa jadi melalui rute yang berbeda-beda, sehingga
hasil yang diterima bisa jadi tidak berurutan. Tidak demikian halnya dengan 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 perbedaan tersebut 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 dterapkan untuk aplikasi chat, transfer file, ataupun transaksi-transaksi
penting. Sedangkan aplikasi UDP cocok diterapkan untuk aplikasi monitoring jaringan, game
online, dan aplikasi-aplikasi broadcast.

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 socket-nya. Kemudian
menampilkan data tersebut di monitor.

Port in TCP
Aplikasi client menggunakan nomor port untuk memberitahu mesin tujuan dan service
TCP mana yang diinginkannya. Server untuk aplikasi tertentu menggunakan well-known port
untuk mengetahui koneksi dari client yang meminta servicenya. Port port yang digunakan
dalam transport layer menggunakan 16-bit integer (0 65535), dengan satu sama lain harus
berbeda (unique). Pada saat client ingin membangun koneksi dengan Server, client harus
mengetahui port dari server yang dituju dan protokol apa yang digunakan (UDP or TCP or
SCTP).

Client di sisi sebaliknya, umumnya menggunakan ephemeral port atau biasa disebut
short-lived ports. Nomor pada port ephemeral yang digunakan oleh client diberikan oleh
Transport Protocol. Client tidak perlu tahu nomor port ephemeral yang digunakan, yang jelas
semua port ephemeral yang digunakan pasti bersifat unique.
The Internet Assigned Numbers Authority (IANA) telah mengelompokkan nomor
nomor port yang dibagi menjadi tiga bagian :
1. Well-known ports: 0 1023. Pada range ini merupakan nomor nomor port yang telah
digunakan oleh IANA. Contoh nya adalah Web server yang menggunakan port 80, FTP
menggunakan 21 dll.
2. Registered ports: 1024 49252. Nomor nomor port pada range ini tidak digunakan oleh
IANA, IANA mengelompokkan port port ini untuk dapat digunakan sebagai server untuk
TCP atau UDP. Contohnya antara port 6000 sampai 6063 digunakan untuk X Windows server.
Aplikasi yang kita gunakan juga bisa menggunakan port ini.
3. Private ports: 49152 65535. Nomor nomor port pada range ini adalah ephemeral port.
Namun tentu saja tidak menutup kemungkinan nilai ephemeral port mempunya nilai diluar
range ini, hal tersebut bergantung juga dari Sistem Operasi yang digunakan.

Jadi dapat disimpulkan bahwa koneksi TCP memiliki 1 buah local ip address, local port
number, foreign ip address dan foreign port number.

Contoh Kasus
Salah satu contoh sederhana penggunaan socket programming adalah pembuatan
program untuk chatting. Program tersebut sebenarnya merupakan bentuk aplikasi berupa
komunikasi antara client dan server. Ketika seorang user (client) melakukan koneksi ke chat
server, program akan membuka koneksi ke port yang diberikan, sehingga server perlu membuka
socket pada port tersebut dan mendengarkan koneksi yang datang. Socket sendiri merupakan
gabungan antara host-adress dan port adress. Dalam hal ini socket digunakan untuk komunikasi
antara client dan server. Contoh alamat socket adalah 192.168.29.30: 3000, dimana nomer 3000
adalah nomer portnya.

Untuk pengiriman data ke server pertama-tama tentukan terlebih dahulu protocol yang
akan digunakan, disini digunakan protocol TCP karena dengan menggunakan TCP data bisa
dipastikan sampai ke server dengan baik. Pada proses pengiriman data ini inisialisasikan terlebih
dahulu socket yang digunakan, kemudian langkah selanjutnya tinggal mengirimkan string
dengan pola yang disesuaikan dengan pola penerimaan data pada server. Sebelum dikirim, nilai
tersebut dijadikan kedalam sebuah byte array dan dicodingkan ke dalam bentuk ASCII baru
kemudian data dikirimkan ke server.

Sebuah circuit virtual disiapkan sebelum packet-packet dikirimkan. Pada masing-masing


packet terdapat virual circuit identifier yang berisi alamat tujuan packet tersebut. Data yang
dikirimkan dalam sebuah protokol TCP maka akan diurutkan dengan sebuah nomor urut dan
akan mengharap packet positive acknowledgment. Apabila tidak ada packet positive
acknowledgment, maka packet akan dikirim ulang. Oleh karena itu, protokol TCP reliable. Akan
tetapi karena harus mengecek setiap packet yang dikirmkan, maka protokol TCP relatif lambat.
Pada TCP, hanya bisa melakukan koneksi one-to-one dan tidak bisa melakukan koneksi one-to-
many. Karena rute-rute packet sudah ditentukan sebelumnya, maka akan lebih sulit bagi jaringan
untuk beradaptasi dengan kemacetan. Apabila sebuah simpul/node mengalami
kerusakan/kegagalan, maka seluruh virtual circuit yang melewati simpul tersebut akan hilang.

Anda mungkin juga menyukai