TCP da UDP

58
KELOMPOK X: 1. MUHAMMAD RAZAQ ASHARI 2. VINA WIDYANI CAHYADIANTI

description

Modul ini di buat untuk tugas WAN

Transcript of TCP da UDP

Page 1: TCP da UDP

KELOMPOK X:1. MUHAMMAD RAZAQ ASHARI2. VINA WIDYANI CAHYADIANTI

Page 2: TCP da UDP

KATA PENGANTAR

Modul UDP dan TCP ini dibuat untuk tugas WAN (Wide Area Network). Modul ini telah mengalami berbagai proses editan dari situs-situs tertentu. Sehingga isinya lebih lengkap dan banyak.

Modul ini membahas tentang TCP dan UDP beserta komponen-komponen yang ada di dalamnya serta contoh-contohnya.

Kami berharap supaya modul ini bermanfaat bagi semua orang,

Malang, 1 Juni 2010

Penyusun

Page 3: TCP da UDP

TCP dan UDP

1. TCP(Transmission Control Protocol)

Transmission Control Protocol (TCP) adalah suatu protokol yang berada di lapisan transpor (baik itu dalam tujuh lapis model referensi OSI atau model DARPA) yang berorientasi sambungan (connection-oriented) dan dapat diandalkan (reliable). TCP dispesifikasikan dalam RFC 793.

1.1 Karakteristik TCP

TCP memiliki karakteristik sebagai berikut:1. Berorientasi sambungan (connection-oriented): 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).

2. Full-duplex: Untuk setiap host TCP, koneksi yang terjadi antara dua host terdiri atas dua buah jalur, yakni jalur keluar dan jalur masuk. Dengan menggunakan teknologi lapisan yang lebih rendah yang mendukung full-duplex, maka data pun dapat secara simultan diterima dan dikirim. Header TCP berisi nomor urut (TCP sequence number) dari data yang ditransmisikan dan sebuah acknowledgment dari data yang masuk.

3. Dapat diandalkan (reliable): 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, TCP mengimplementasikan penghitungan TCP Checksum.

4. Byte stream: TCP melihat data yang dikirimkan dan diterima melalui dua jalur masuk dan jalur keluar TCP sebagai sebuah byte stream yang berdekatan (kontigu). Nomor urut TCP dan nomor acknowlegment dalam setiap header TCP didefinisikan juga dalam bentuk byte. Meski demikian, TCP tidak mengetahui batasan pesan-pesan di dalam byte stream TCP

Page 4: TCP da UDP

tersebut. Untuk melakukannya, hal ini diserahkan kepada protokol lapisan aplikasi (dalam DARPA Reference Model), yang harus menerjemahkan byte stream TCP ke dalam "bahasa" yang ia pahami.

5. 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.

6. Melakukan segmentasi terhadap data yang datang dari lapisan aplikasi (dalam DARPA Reference Model)

7. Mengirimkan paket secara "one-to-one": hal ini karena memang TCP harus membuat sebuah sirkuit logis antara dua buah protokol lapisan aplikasi agar saling dapat berkomunikasi. TCP tidak menyediakan layanan pengiriman data secara one-to-many.

TCP umumnya digunakan ketika protokol lapisan aplikasi membutuhkan layanan transfer data yang bersifat andal, yang layanan tersebut tidak dimiliki oleh protokol lapisan aplikasi tersebut. Contoh dari protokol yang menggunakan TCP adalah HTTP dan FTP.

1.2 Segmen TCP

Segmen-segmen TCP akan dikirimkan sebagai datagram-datagram IP (datagram merupakan satuan protocol data unit pada lapisan internetwork). Sebuah segmen TCP terdiri atas sebuah header dan segmen data (payload), yang dienkapsulasi dengan menggunakan header IP dari protokol IP.

Sebuah segmen dapat berukuran hingga 65495 byte: 216-(ukuran header IP terkecil (20 byte)+ukuran header TCP terkecil (20 byte)). Datagram IP tersebut akan dienkapsulasi lagi dengan menggunakan header protokol network interface (lapisan pertama dalam DARPA Reference Model) menjadi frame lapisan Network Interface. Gambar berikut mengilustrasikan data yang dikirimkan ke sebuah host.

Page 5: TCP da UDP

Di dalam header IP dari sebuah segmen TCP, field Source IP Address diatur menjadi alamat unicast dari sebuah antarmuka host yang mengirimkan segmen TCP yang bersangkutan. Sementara itu, field Destination IP Address juga akan diatur menjadi alamat unicast dari sebuah antarmuka host tertentu yang dituju. Hal ini dikarenakan, protokol TCP hanya Header TCP

Ukuran dari header TCP adalah bervariasi, yang terdiri atas beberapa field yang ditunjukkan dalam gambar dan tabel berikut. Ukuran TCP header paling kecil (ketika tidak ada tambahan opsi TCP) adalah 20 byte.

Nama Field Ukuran

Keterangan

Source Port 2 byte (16 bit)

Mengindikasikan sumber protokol lapisan aplikasi yang mengirimkan segmen TCP yang bersangkutan. Gabungan antara field Source IP Address dalam header IP dan field Source Port dalam field header TCP disebut juga sebagai socket sumber, yang berarti sebuah alamat global dari mana segmen dikirimkan

Destination Port 2 byte (16 bit)

Mengindikasikan tujuan protokol lapisan aplikasi yang menerima segmen TCP yang bersangkutan. Gabungan antara field Destination IP Address dalam

Proses enkapsulasi data protokol TCP/IP: Data aplikasi + header TCP + header IP + header network interface (Ethernet, Token Ring, dll) + trailer network interface

Page 6: TCP da UDP

header IP dan field Destination Port dalam field header TCP disebut juga sebagai socket tujuan, yang berarti sebuah alamat global ke mana segmen akan dikirimkan.

Sequence Number

4 byte (32 bit)

Mengindikasikan nomor urut dari oktet pertama dari data di dalam sebuah segmen TCP yang hendak dikirimkan. Field ini harus selalu diset, meskipun tidak ada data (payload) dalam segmen.Ketika memulai sebuah sesi koneksi TCP, segmen dengan flag SYN (Synchronization) diset ke nilai 1, field ini akan berisi nilai Initial Sequence Number (ISN). Hal ini berarti, oktet pertama dalam aliran byte (byte stream) dalam koneksi adalah ISN+1.

Acknowledgment Number

4 byte (32 bit)

Mengindikasikan nomor urut dari oktet selanjutnya dalam aliran byte yang diharapkan oleh untuk diterima oleh pengirim dari si penerima pada pengiriman selanjutnya. Acknowledgment number sangat dipentingkan bagi segmen-segmen TCP dengan flag ACK diset ke nilai 1.

Data Offset 4 bit Mengindikasikan di mana data dalam segmen TCP dimulai. Field ini juga dapat berarti ukuran dari header TCP. Seperti halnya field Header Length dalam header IP, field ini merupakan angka dari word 32-bit dalam header TCP. Untuk sebuah segmen TCP terkecil (di mana tidak ada opsi TCP tambahan), field ini diatur ke nilai 0x5, yang berarti data dalam segmen TCP dimulai dari oktet ke 20 dilihat dari permulaan segmen TCP. Jika field Data Offset diset ke nilai maksimumnya (24=16) yakni 15, header TCP dengan ukuran terbesar dapat memiliki panjang hingga 60 byte.

Reserved 6 bit Direservasikan untuk digunakan pada masa depan. Pengirim segmen TCP akan mengeset bit-bit ini ke dalam nilai 0.

Flags 6 bit Mengindikasikan flag-flag TCP yang memang ada enam jumlahnya, yang terdiri atas: URG (Urgent), ACK (Acknowledgment), PSH (Push), RST (Reset), SYN (Synchronize), dan FIN (Finish).

Window 2 byte (16 bit)

Mengindikasikan jumlah byte yang tersedia yang dimiliki oleh buffer host penerima segmen yang

Page 7: TCP da UDP

bersangkutan. Buffer ini disebut sebagai Receive Buffer, digunakan untuk menyimpan byte stream yang datang. Dengan mengimbuhkan ukuran window ke setiap segmen, penerima segmen TCP memberitahukan kepada pengirim segmen berapa banyak data yang dapat dikirimkan dan disangga dengan sukses. Hal ini dilakukan agar si pengirim segmen tidak mengirimkan data lebih banyak dibandingkan ukuran Receive Buffer. Jika tidak ada tempat lagi di dalam Receive buffer, nilai dari field ini adalah 0. Dengan nilai 0, maka si pengirim tidak akan dapat mengirimkan segmen lagi ke penerima hingga nilai field ini berubah (bukan 0). Tujuan hal ini adalah untuk mengatur lalu lintas data atau flow control.

Checksum 2 byte (16 bit)

Mampu melakukan pengecekan integritas segmen TCP (header-nya dan payload-nya). Nilai field Checksum akan diatur ke nilai 0 selama proses kalkulasi checksum.

Urgent Pointer 2 byte (16 bit)

Menandakan lokasi data yang dianggap "urgent" dalam segmen.

Options 4 byte (32 bit)

Berfungsi sebagai penampung beberapa opsi tambahan TCP. Setiap opsi TCP akan memakan ruangan 32 bit, sehingga ukuran header TCP dapat diindikasikan dengan menggunakan field Data offset.

Page 8: TCP da UDP

1.3 Port TCP

Port TCP mampu mengindikasikan sebuah lokasi tertentu untuk menyampaikan segmen-segmen TCP yang dikirimkan yang diidentifikasi dengan TCP Port Number. Nomor-nomor di bawah angka 1024 merupakan port yang umum digunakan dan ditetapkan oleh IANA (Internet Assigned Number Authority). Tabel berikut ini menyebutkan beberapa port TCP yang telah umum digunakan.

Nomor port TCP Keterangan20 File Transfer Protocol/FTP (digunakan untuk saluran data).21 File Transfer Protocol/FTP (digunakan untuk saluran

kontrol).25 Simple Mail Transfer Protocol/SMTP yang digunakan untuk

mengirim e-mail23 Telnet80 Hypertext Transfer Protocol/HTTP yang digunakan untuk

World Wide Web.110 Post Office Protocol 3/POP3 yang digunakan untuk

menerima e-mail.139 NetBIOS over TCP session service.

Port TCP merupakan hal yang berbeda dibandingkan dengan port UDP, meskipun mereka memiliki nomor port yang sama. Port TCP merepresentasikan satu sisi dari sebuah koneksi TCP untuk protokol lapisan aplikasi, sementara port UDP merepresentasikan sebuah antrean pesan UDP untuk protokol lapisan aplikasi. Selain itu, protokol lapisan aplikasi yang menggunakan port TCP dan port UDP dalam nomor yang sama juga tidak harus sama. Sebagai contoh protokol Extended Filename Server (EFS) menggunakan port TCP dengan nomor 520, dan protokol Routing Information Protocol (RIP) menggunakan port UDP juga dengan nomor 520. Jelas, dua protokol tersebut sangatlah berbeda! Karenanya, untuk menyebutkan sebuah nomor port, sebutkan juga jenis port yang digunakannya, karena hal tersebut mampu membingungkan (ambigu).

Page 9: TCP da UDP

1.4 TCP Flag

Sebuah segmen TCP dapat memiliki flag (tanda-tanda) khusus yang mengindikasikan segmen yang bersangkutan, seperti yang disebutkan dalam tabel berikut:

Nama flag

Keterangan

URG Mengindikasikan bahwa beberapa bagian dari segmen TCP mengandung data yang sangat penting, dan field Urgent Pointer dalam header TCP harus digunakan untuk menentukan lokasi di mana data penting tersebut berada dalam segmen.

ACK Mengindikasikan field Acknowledgment mengandung oktet selanjutnya yang diharapkan dalam koneksi. Flag ini selalu diset, kecuali pada segmen pertama pada pembuatan sesi koneksi TCP.

PSH Mengindikasikan bahwa isi dari TCP Receive buffer harus diserahkan kepada protokol lapisan aplikasi. Data dalam receive buffer harus berisi sebuah blok data yang berurutan (kontigu), dilihat dari ujung paling kiri dari buffer. Dengan kata lain, sebuah segmen yang memiliki flag PSH diset ke nilai 1, tidak bolah ada satu byte pun data yang hilang dari aliran byte segmen tersebut; data tidak dapat diberikan kepada protokol lapisan aplikasi hingga segmen yang hilang tersebut datang. Normalnya, TCP Receive buffer akan dikosongkan (dengan kata lain, isi dari buffer akan diteruskan kepada protokol lapisan aplikasi) ketika buffer tersebut berisi data yang kontigu atau ketika dalam "proses perawatan". Flag PSH ini dapat mengubah hal seperti itu, dan membuat akan TCP segera mengosongkan TCP Receive buffer. Flag PSH umumnya digunakan dalam protokol lapisan aplikasi yang bersifat interaktif, seperti halnya Telnet, karena setiap penekanan tombol dalam sesi terminal virtual akan dikirimkan dengan sebuah flag PSH diset ke nilai 1. Contoh dari penggunaan lainnya dari flag ini adalah pada segmen terakhir dari berkas yang ditransfer dengan menggunakan protokol FTP. Segmen yang dikirimkan dengan flag PSH aktif tidak harus segera di-acknowledge oleh penerima.

RST Mengindikasikan bahwa koneksi yang dibuat akan digagalkan. Untuk sebuah koneksi TCP yang sedang berjalan (aktif), sebuah segmen

Page 10: TCP da UDP

dengan flag RST diset ke nilai 1 akan dikirimkan sebagai respons terhadap sebuah segmen TCP yang diterima yang ternyata segmen tersebut bukan yang diminta, sehingga koneksi pun menjadi gagal. Pengiriman segmen dengan flag RST diset ke nilai 1 untuk sebuah koneksi aktif akan menutup koneksi secara paksa, sehingga data yang disimpan dalam buffer akan dibuang (dihilangkan). Untuk sebuah koneksi TCP yang sedang dibuat, segmen dengan flag RST aktif akan dikirimkan sebagai respons terhadap request pembuatan koneksi untuk mencegah percobaan pembuatan koneksi.

SYN Mengindikasikan bahwa segmen TCP yang bersangkutan mengandung Initial Sequence Number (ISN). Selama proses pembuatan sesi koneksi TCP, TCP akan mengirimkan sebuah segmen dengan flag SYN diset ke nilai 1. Setiap host TCP lainnya akan memberikan jawaban (acknowledgment) dari segmen dengan flag SYN tersebut dengan menganggap bahwa segmen tersebut merupakan sekumpulan byte dari data. Field Acknowledgment Number dari sebuah segmen SYN diatur ke nilai ISN + 1.

FIN Menandakan bahwa pengirim segmen TCP telah selesai dalam mengirimkan data dalam sebuah koneksi TCP. Ketika sebuah koneksi TCP akhirnya dihentikan (akibat sudah tidak ada data yang dikirimkan lagi), setiap host TCP akan mengirimkan sebuah segmen TCP dengan flag FIN diset ke nilai 1. Sebuah host TCP tidak akan mengirimkan segmen dengan flag FIN hingga semua data yang dikirimkannya telah diterima dengan baik (menerima paket acknowledgment) oleh penerima. Setiap host akan menganggap sebuah segmen TCP dengan flag FIN sebagai sekumpulan byte dari data. Ketika dua host TCP telah mengirimkan segmen TCP dengan flag FIN dan menerima acknowledgment dari segmen tersebut, maka koneksi TCP pun akan dihentikan.

1.5 TCP Three-way handshake

Proses pembuatan koneksi TCP disebut juga dengan "Three-way Handshake". Tujuan metode ini adalah agar dapat melakukan sinkronisasi terhadap nomor urut dan nomor acknowledgement yang dikirimkan oleh kedua pihak dan saling bertukar ukuran TCP Window. Prosesnya dapat digambarkan sebagai berikut:

Page 11: TCP da UDP

Host pertama (yang ingin membuat koneksi) akan mengirimkan sebuah segmen TCP dengan flag SYN diaktifkan kepada host kedua (yang hendak diajak untuk berkomunikasi).

Host kedua akan meresponsnya dengan mengirimkan segmen dengan acknowledgment dan juga SYN kepada host pertama.

Host pertama selanjutnya akan mulai saling bertukar data dengan host kedua.

TCP menggunakan proses jabat tangan yang sama untuk mengakhiri koneksi yang dibuat. Hal ini menjamin dua host yang sedang terkoneksi tersebut telah menyelesaikan proses transmisi data dan semua data yang ditransmisikan telah diterima dengan baik. Itulah sebabnya, mengapa TCP disebut dengan koneksi yang reliable.

Proses pembuatan koneksi (TCP Three way handshake)

Page 12: TCP da UDP

2. TCP LAYER

2.1 Transmission Control Protocol/Internet Protocol

TCP/IP (singkatan dari Transmission Control Protocol/Internet Protocol) adalah standar komunikasi data yang digunakan oleh komunitas internet dalam proses tukar-menukar data dari satu komputer ke komputer lain di dalam jaringan Internet. Protokol ini tidaklah dapat berdiri sendiri, karena memang protokol ini berupa kumpulan protokol (protocol suite). Protokol ini juga merupakan protokol yang paling banyak digunakan saat ini. Data tersebut diimplementasikan dalam bentuk perangkat lunak (software) di sistem operasi. Istilah yang diberikan kepada perangkat lunak ini adalah TCP/IP stack

Protokol TCP/IP dikembangkan pada akhir dekade 1970-an hingga awal 1980-an sebagai sebuah protokol standar untuk menghubungkan komputer-komputer dan jaringan untuk membentuk sebuah jaringan yang luas (WAN). TCP/IP merupakan sebuah standar jaringan terbuka yang bersifat independen terhadap mekanisme transport jaringan fisik yang digunakan, sehingga dapat digunakan di mana saja. Protokol ini menggunakan skema pengalamatan yang sederhana yang disebut sebagai alamat IP (IP Address) yang mengizinkan hingga beberapa ratus juta komputer untuk dapat saling berhubungan satu sama lainnya di Internet. Protokol ini juga bersifat routable yang berarti protokol ini cocok untuk menghubungkan sistem-sistem berbeda (seperti Microsoft Windows dan keluarga UNIX) untuk membentuk jaringan yang heterogen.

Protokol TCP/IP selalu berevolusi seiring dengan waktu, mengingat semakin banyaknya kebutuhan terhadap jaringan komputer dan Internet. Pengembangan ini dilakukan oleh beberapa badan, seperti halnya Internet Society (ISOC), Internet Architecture Board (IAB), dan Internet Engineering Task Force (IETF). Macam-macam protokol yang berjalan di atas TCP/IP, skema pengalamatan, dan konsep TCP/IP didefinisikan dalam dokumen yang disebut sebagai Request for Comments (RFC) yang dikeluarkan oleh IETF.

Page 13: TCP da UDP

2.2 ARSITEKTUR

Arsitektur TCP/IP tidaklah berbasis model referensi tujuh lapis OSI, tetapi menggunakan model referensi DARPA. Seperti diperlihatkan dalam diagram, TCP/IP merngimplemenasikan arsitektur berlapis yang terdiri atas empat lapis. Empat lapis ini, dapat dipetakan (meski tidak secara langsung) terhadap model referensi OSI. Empat lapis ini, kadang-kadang disebut sebagai DARPA Model, Internet Model, atau DoD Model, mengingat TCP/IP merupakan protokol yang awalnya dikembangkan dari proyek ARPANET yang dimulai oleh Departemen Pertahanan Amerika Serikat.

Setiap lapisan yang dimiliki oleh kumpulan protokol (protocol suite) TCP/IP diasosiasikan dengan protokolnya masing-masing. Protokol utama dalam protokol TCP/IP adalah sebagai berikut:

1. Protokol lapisan aplikasi: bertanggung jawab untuk menyediakan akses kepada aplikasi terhadap layanan jaringan TCP/IP. Protokol ini mencakup protokol Dynamic Host Configuration Protocol (DHCP), Domain Name System (DNS), Hypertext Transfer Protocol (HTTP), File Transfer Protocol (FTP), Telnet, Simple Mail Transfer Protocol (SMTP), Simple Network Management Protocol (SNMP), dan masih banyak protokol lainnya. Dalam beberapa implementasi stack protokol, seperti halnya Microsoft TCP/IP, protokol-protokol lapisan aplikasi berinteraksi dengan menggunakan antarmuka Windows Sockets (Winsock) atau NetBIOS over TCP/IP (NetBT).

2. Protokol lapisan antar-host: berguna untuk membuat komunikasi menggunakan sesi koneksi yang bersifat connection-oriented atau broadcast yang bersifat connectionless. Protokol dalam lapisan ini adalah Transmission Control Protocol (TCP) dan User Datagram Protocol (UDP).

3. Protokol lapisan internetwork: bertanggung jawab untuk melakukan pemetaan (routing) dan enkapsulasi paket-paket data jaringan menjadi paket-paket IP. Protokol yang bekerja dalam lapisan ini adalah Internet Protocol (IP), Address Resolution Protocol (ARP), Internet Control Message Protocol (ICMP), dan Internet Group Management Protocol (IGMP).

4. Protokol lapisan antarmuka jaringan: bertanggung jawab untuk meletakkan frame-frame jaringan di atas media jaringan yang digunakan. TCP/IP dapat bekerja dengan banyak teknologi transport, mulai dari teknologi transport dalam LAN (seperti halnya Ethernet dan Token Ring), MAN dan WAN

Page 14: TCP da UDP

(seperti halnya dial-up modem yang berjalan di atas Public Switched Telephone Network (PSTN), Integrated Services Digital Network (ISDN), serta Asynchronous Transfer Mode (ATM)).

2.3 KONSEP LAYERING TCP/IP

Sekumpulan protocol TCP/IP ini dimodelkan dengan empat layer TCP/IP, sebagaimana terlihat pada gambar dibawah ini.

Application Layer(SMTP, FTP, HTTP, dll)Transport Layer(TCP, UDP)Internet Layer(IP, ARP, ICMP)Network Interface layer (Ethernet, X25,SLIP,PPP)

Jaringan Fisik

TCP/IP terdiri atas empat lapis kumpulan protocol yang bertingkat. Keempat lapis/layer tersebut adalah :

Network Interface Layer Internet Layer Transport Layer Application Layer

Dalam TCP/IP terjadi penyampaian data dari protocol yang berada di satu layer ke protocol yang berada di layer yang lain. Setiap protocol memperlakukan semua informasi yang diterimanya dari protocol lain sebagai data.

TCP/IP Stack

Page 15: TCP da UDP

2.4 PENGALAMATAN

Protokol TCP/IP menggunakan dua buah skema pengalamatan yang dapat digunakan untuk mengidentifikasikan sebuah komputer dalam sebuah jaringan atau jaringan dalam sebuah internetwork, yakni sebagai berikut:

1. Pengalamatan IP: yang berupa alamat logis yang terdiri atas 32-bit (empat oktet berukuran 8-bit) yang umumnya ditulis dalam format www.xxx.yyy.zzz. Dengan menggunakan subnet mask yang diasosiasikan dengannya, sebuah alamat IP pun dapat dibagi menjadi dua bagian, yakni Network Identifier (NetID) yang dapat mengidentifikasikan jaringan lokal dalam sebuah internetwork dan Host identifier (HostID) yang dapat mengidentifikasikan host dalam jaringan tersebut. Sebagai contoh, alamat 205.116.008.044 dapat dibagi dengan menggunakan subnet mask 255.255.255.000 ke dalam Network ID 205.116.008.000 dan Host ID 44. Alamat IP merupakan kewajiban yang harus ditetapkan untuk sebuah host, yang dapat dilakukan secara manual (statis) atau menggunakan Dynamic Host Configuration Protocol (DHCP) (dinamis).

2. Fully qualified domain name (FQDN): Alamat ini merupakan alamat yang direpresentasikan dalam nama alfanumerik yang diekspresikan dalam bentuk <nama_host>.<nama_domain>, di mana <nama_domain> mengindentifikasikan jaringan di mana sebuah komputer berada, dan <nama_host> mengidentifikasikan sebuah komputer dalam jaringan. Pengalamatan FQDN digunakan oleh skema penamaan domain Domain Name System (DNS). Sebagai contoh, alamat FQDN id.wikipedia.org merepresentasikan sebuah host dengan nama "id" yang terdapat di dalam domain jaringan "wikipedia.org". Nama domain wikipedia.org merupakan second-level domain yang terdaftar di dalam top-level domain .org, yang terdaftar dalam root DNS, yang memiliki nama "." (titik). Penggunaan FQDN lebih bersahabat dan lebih mudah diingat ketimbang dengan menggunakan alamat IP. Akan tetapi, dalam TCP/IP, agar komunikasi dapat berjalan, FQDN harus diterjemahkan terlebih dahulu (proses penerjemahan ini disebut sebagai resolusi nama) ke dalam alamat IP dengan menggunakan server yang menjalankan DNS, yang disebut dengan Name Server atau dengan menggunakan berkas hosts (/etc/hosts atau %systemroot%\system32\drivers\etc\hosts) yang disimpan di dalam mesin yang bersangkutan.

Page 16: TCP da UDP

2.5 KONSEP ENKAPSULASI DALAM TCP/IP

Jika suatu protocol menerima data dari protocol lain di layer atasnya, ia akan menambahkan informasi tambahan miliknya ke data tersebut. Informasi ini memiliki fungsi yang sesuai dengan fungsi protocol tersebut. Setelah itu, data ini diteruskan lagi ke protocol pada layer dibawahnya.

Hal yang sebaliknya terjadi jika suatu protocol menerima data dari protocol lain yang berada pada layer dibawahnya. Jika data ini dianggap valid, protocol akan melepas informasi tambahan tersebut, yang berada pada layer di atasnya.

Lapisan/layer terbawah, yaitu Network Interface layer bertanggung jawab mengirim dan menerima data ke dan dari media fisik. Media fisiknya dapat berupa kabel, serta optik atau gelombang radio. Karena tugasnya ini, protocol pada layer ini harus mampu menerjemahkan sinyal listrik menjadi data digital yang dimengerti komputer, yang berasal dari peralatan lain yang sejenis.

Lapisan/layer protocol berikutnya ialah Internet Layer. Protocol yang berada pada layer ini bertanggung jawab dalam proses pengiriman paket ke alamat yang tepat. Pada layer ini terdapat tiga macam protocol, yaitu IP, ARP dan ICMP.

IP (Internet Protocol) berfungsi untuk menyampaikan paket data ke lamat yang tepat. ARP (Address Resolution Protocol) ialah protocol digunakan untuk menemukan alamat hardware dari host/komputer yang terletak pada network yang sama. Sedangkan ICMP (Internet Control Message Protocol) ialah protocol yang digunakan untuk mengirimkan pesan & melaporkan kegagalan pengiriman data.

Layer berikutnya yaitu Transport layer berisi protocol yang bertanggung jawab untuk mengadakan komunikasi antara dua host/komputer. Kedua protocol tersebut ialah TCP (Transmission Control Protocol) dan UDP (User Datagram Protocol). Layer teratas, ialah Application Layer. Pada layer inilah terletak semua aplikasi yang menggunakan protocol TCP/IP ini.

Page 17: TCP da UDP

2.6 LAYANAN

Berikut ini adalah layanan tradisional yang dapat berjalan di atas protokol TCP/IP:

1. Pengiriman berkas (file transfer). File Transfer Protocol (FTP) memungkinkan pengguna komputer yang satu untuk dapat mengirim ataupun menerima berkas ke sebuah host di dalam jaringan. Metode otentikasi yang digunakannya adalah penggunaan nama pengguna (user name) dan [[password]], meskipun banyak juga FTP yang dapat diakses secara anonim (anonymous), alias tidak berpassword. (Keterangan lebih lanjut mengenai FTP dapat dilihat pada RFC 959.)

2. Remote login. Network terminal Protocol (telnet) memungkinkan pengguna komputer dapat melakukan log in ke dalam suatu komputer di dalam suatu jaringan secara jarak jauh. Jadi hal ini berarti bahwa pengguna menggunakan komputernya sebagai perpanjangan tangan dari komputer jaringan tersebut. (Keterangan lebih lanjut mengenai Telnet dapat dilihat pada RFC 854 dan RFC 855.)

3. Computer mail. Digunakan untuk menerapkan sistem surat elektronik. (Keterangan lebih lanjut mengenai e-mail dapat dilihat pada RFC 821 RFC 822.)

4. Network File System (NFS). Pelayanan akses berkas-berkas yang dapat diakses dari jarak jauh yang memungkinkan klien-klien untuk mengakses berkas pada komputer jaringan, seolah-olah berkas tersebut disimpan secara lokal. (Keterangan lebih lanjut mengenai NFS dapat dilihat RFC 1001 dan RFC 1002.)

5. Remote execution. Memungkinkan pengguna komputer untuk menjalankan suatu program tertentu di dalam komputer yang berbeda. Biasanya berguna jika pengguna menggunakan komputer yang terbatas, sedangkan ia memerlukan sumber yg banyak dalam suatu sistem komputer.Ada beberapa jenis remote execution, ada yang berupa perintah-perintah dasar saja, yaitu yang dapat dijalankan dalam system komputer yang sama dan ada pula yg menggunakan sistem Remote Procedure Call (RPC), yang memungkinkan program untuk memanggil subrutin yang akan dijalankan di sistem komputer yg berbeda. (sebagai contoh dalam Berkeley UNIX ada perintah rsh dan rexec.)

6. Name server yang berguna sebagai penyimpanan basis data nama host yang digunakan pada Internet (Keterangan lebih lanjut dapat dilihat pada RFC 822 dan RFC 823 yang menjelaskan mengenai penggunaan protokol name server yang bertujuan untuk menentukan nama host di Internet.)

Page 18: TCP da UDP

2.7 REQUEST FOR COMMENTS

RFC (Request For Comments) merupakan standar yang digunakan dalam Internet, meskipun ada juga isinya yg merupakan bahan diskusi ataupun omong kosong belaka. Diterbitkan oleh IAB yang merupakan komite independen yang terdiri atas para peneliti dan profesional yang mengerti teknis, kondisi dan evolusi Internet. Sebuah surat yg mengikuti nomor RFC menunjukan status RFC :

S: Standard, standar resmi bagi internet DS: Draft standard, protokol tahap akhir sebelum disetujui sebagai standar PS: Proposed Standard, protokol pertimbangan untuk standar masa depan I: Informational, berisikan bahan-bahan diskusi yg sifatnya informasi E: Experimental, protokol dalam tahap percobaan tetapi bukan pada jalur

standar. H: Historic, protokol-protokol yg telah digantikan atau tidak lagi

dipertimbankan utk standarisasi.

Page 19: TCP da UDP

3. UDP (USER DATAGRAM PROTOKOL)

UDP, singkatan dari User Datagram Protocol, adalah salah satu protokol lapisan transpor TCP/IP yang mendukung komunikasi yang tidak andal (unreliable), tanpa koneksi (connectionless) antara host-host dalam jaringan yang menggunakan TCP/IP. Protokol ini didefinisikan dalam RFC 768.

3.1 KARAKTERISTIK UDP

UDP memiliki karakteristik-karakteristik berikut:

1. Connectionless (tanpa koneksi): Pesan-pesan UDP akan dikirimkan tanpa harus dilakukan proses negosiasi koneksi antara dua host yang hendak berukar informasi.

2. 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.

3. UDP menyediakan mekanisme untuk mengirim pesan-pesan ke sebuah protokol lapisan aplikasi atau proses tertentu di dalam sebuah host dalam jaringan yang menggunakan TCP/IP. Header UDP berisi field Source Process Identification dan Destination Process Identification.

4. UDP menyediakan penghitungan checksum berukuran 16-bit terhadap keseluruhan pesan UDP.

UDP tidak menyediakan layanan-layanan antar-host berikut:

1. UDP tidak menyediakan mekanisme penyanggaan (buffering) dari data yang masuk ataupun data yang keluar. Tugas buffering merupakan tugas yang harus diimplementasikan oleh protokol lapisan aplikasi yang berjalan di atas UDP.

2. UDP tidak menyediakan mekanisme segmentasi data yang besar ke dalam segmen-segmen data, seperti yang terjadi dalam protokol TCP. Karena itulah, protokol lapisan aplikasi yang berjalan di atas UDP harus mengirimkan data yang berukuran kecil (tidak lebih besar dari nilai

Page 20: TCP da UDP

Maximum Transfer Unit/MTU) yang dimiliki oleh sebuah antarmuka di mana data tersebut dikirim. Karena, jika ukuran paket data yang dikirim lebih besar dibandingkan nilai MTU, paket data yang dikirimkan bisa saja terpecah menjadi beberapa fragmen yang akhirnya tidak jadi terkirim dengan benar.

3. UDP tidak menyediakan mekanisme flow-control, seperti yang dimiliki oleh TCP.

3.2 Macam – macam aplikasi yang menggunakan UDP :

1. Trivial File Transfer Protocol (TFTP) 692. Domain Name System (DNS) 533. Remote Procedure Call (RPC)4. Simple Network Management Protocol (SNMP) 161, 1625. Lightweight Directory Access Protocol (LDAP)6. SunRPC port 111.

3.3 FUNGSI UDP

1. Protokol yang “ringan” (lightweight): Untuk menghemat sumber daya memori dan prosesor, beberapa protokol lapisan aplikasi membutuhkan penggunaan protokol yang ringan yang dapat melakukan fungsi-fungsi spesifik dengan saling bertukar pesan. Contoh dari protokol yang ringan adalah fungsi query nama dalam protokol lapisan aplikasi Domain Name System.

2. Protokol lapisan aplikasi yang mengimplementasikan layanan keandalan: Jika protokol lapisan aplikasi menyediakan layanan transfer data yang andal, maka kebutuhan terhadap keandalan yang ditawarkan oleh TCP pun menjadi tidak ada. Contoh dari protokol seperti ini adalah Trivial File Transfer Protocol (TFTP) dan Network File System (NFS)

3. Protokol yang tidak membutuhkan keandalan. Contoh protokol ini adalah protokol Routing Information Protocol (RIP).

4. Transmisi broadcast: Karena UDP merupakan protokol yang tidak perlu membuat koneksi terlebih dahulu dengan sebuah host tertentu, maka transmisi broadcast pun dimungkinkan. Sebuah protokol lapisan aplikasi dapat mengirimkan paket data ke beberapa tujuan dengan menggunakan alamat multicast atau broadcast. Hal ini kontras dengan protokol TCP yang

Page 21: TCP da UDP

hanya dapat mengirimkan transmisi one-to-one. Contoh: query nama dalam protokol NetBIOS Name Service.

3.4 PENGGUNAAN UDP

UDP sering digunakan dalam beberapa tugas berikut:

1. Protokol yang "ringan" (lightweight): Untuk menghemat sumber daya memori dan prosesor, beberapa protokol lapisan aplikasi membutuhkan penggunaan protokol yang ringan yang dapat melakukan fungsi-fungsi spesifik dengan saling bertukar pesan. Contoh dari protokol yang ringan adalah fungsi query nama dalam protokol lapisan aplikasi Domain Name System.

2. Protokol lapisan aplikasi yang mengimplementasikan layanan keandalan: Jika protokol lapisan aplikasi menyediakan layanan transfer data yang andal, maka kebutuhan terhadap keandalan yang ditawarkan oleh TCP pun menjadi tidak ada. Contoh dari protokol seperti ini adalah Trivial File Transfer Protocol (TFTP) dan Network File System (NFS)

3. Protokol yang tidak membutuhkan keandalan. Contoh protokol ini adalah protokol Routing Information Protocol (RIP).

4. Transmisi broadcast: Karena UDP merupakan protokol yang tidak perlu membuat koneksi terlebih dahulu dengan sebuah host tertentu, maka transmisi broadcast pun dimungkinkan. Sebuah protokol lapisan aplikasi dapat mengirimkan paket data ke beberapa tujuan dengan menggunakan alamat multicast atau broadcast. Hal ini kontras dengan protokol TCP yang hanya dapat mengirimkan transmisi one-to-one. Contoh: query nama dalam protokol NetBIOS Name Service.

Page 22: TCP da UDP

3.5 PESAN – PESAN UDP

UDP, berbeda dengan TCP yang memiliki satuan paket data yang disebut dengan segmen, melakukan pengepakan terhadap data ke dalam pesan-pesan UDP (UDP Messages). Sebuah pesan UDP berisi header UDP dan akan dikirimkan ke protokol lapisan selanjutnya (lapisan internetwork) setelah mengepaknya menjadi datagram IP. Enkapsulasi terhadap pesan-pesan UDP oleh protokol IP dilakukan dengan menambahkan header IP dengan protokol IP nomor 17 (0x11). Pesan UDP dapat memiliki besar maksimum 65507 byte: 65535 (216)-20 (ukuran terkecil dari header IP)-8 (ukuran dari header UDP) byte. Datagram IP yang dihasilkan dari proses enkapsulasi tersebut, akan dienkapsulasi kembali dengan menggunakan header dan trailer protokol lapisan Network Interface yang digunakan oleh host tersebut.

Dalam header IP dari sebuah pesan UDP, field Source IP Address akan diset ke antarmuka host yang mengirimkan pesan UDP yang bersangkutan; sementara

Ilustrasi Mengenai pesan-pesan UDP

Page 23: TCP da UDP

field Destination IP Address akan diset ke alamat IP unicast dari sebuah host tertentu, alamat IP broadcast, atau alamat IP multicast.

3.6 HEADER UDP

Header UDP diwujudkan sebagai sebuah header dengan 4 buah field memiliki ukuran yang tetap, seperti tersebutkan dalam tabel berikut.

Field Panjang KeteranganSource Port

16 bit (2 byte)

Digunakan untuk mengidentifikasikan sumber protokol lapisan aplikasi yang mengirimkan pesan UDP yang

Ilustrasi Mengenai Header UDP

Page 24: TCP da UDP

bersangkutan. Penggunaan field ini adalah opsional, dan jika tidak digunakan, akan diset ke angka 0. Beberapa protokol lapisan aplikasi dapat menggunakan nilai field ini dari pesan UDP yang masuk sebagai nilai field port tujuan (Destination Port, lihat baris selanjutnya) sebagai balasan untuk pesan tersebut.

Destination Port

16 bit (2 byte)

Digunakan untuk mengidentifikasikan tujuan protokol lapisan aplikasi yang menjadi tujuan pesan UDP yang bersangkutan. Dengan menggunakan kombinasi antara alamat IP dengan nilai dari field ini untuk membuat sebuah alamat yang signifikan untuk mengidentifikasikan proses yang berjalan dalam sebuah host tertentu yang dituju oleh pesan UDP yang bersangkutan.

Length 16 bit (2 byte)

Digunakan untuk mengindikasikan panjang pesan UDP (pesan UDP ditambah dengan header UDP) dalam satuan byte. Ukuran paling kecil adalah 8 byte (ukuran header UDP, ketika tidak ada isi pesan UDP), dan ukuran paling besar adalah 65515 bytes (65535 [216] -20 [ukuran header protokol IP]). Panjang maksimum aktual dari pesan UDP akan disesuaikan dengan menggunakan nilai Maximum Transmission Unit (MTU) dari saluran di mana pesan UDP dikirimkan. Field ini bersifat redundan (terulang-ulang). Panjang pesan UDP dapat dihitung dari field Length dalam header UDP dan field IP Header Length dalam header IP.

Checksum 16 bit (2 byte)

Berisi informasi pengecekan integritas dari pesan UDP yang dikirimkan (header UDP dan pesan UDP). Penggunaan field ini adalah opsional. Jika tidak digunakan, field ini akan bernilai 0.

3.7 PORT UDP

Seperti halnya TCP, UDP juga memiliki saluran untuk mengirimkan informasi antar host, yang disebut dengan UDP Port. Untuk menggunakan protokol UDP, sebuah aplikasi harus menyediakan alamat IP dan nomor UDP Port dari host yang dituju. Sebuah UDP port berfungsi sebagai sebuah multiplexed message queue, yang berarti bahwa UDP port tersebut dapat menerima beberapa pesan secara sekaligus. Setiap port diidentifikasi dengan nomor yang unik, seperti halnya TCP, tetapi meskipun begitu, UDP Port berbeda dengan TCP Port meskipun

Page 25: TCP da UDP

memiliki nomor port yang sama. Tabel di bawah ini mendaftarkan beberapa UDP port yang telah dikenal secara luas.

Nomor Port UDP Digunakan oleh53 Domain Name System (DNS) Name Query adalah sebuah

sistem yang menyimpan informasi tentang nama host maupun nama domain dalam bentuk basis data tersebar (distributed database) di dalam jaringan komputer, misalkan: Internet. DNS menyediakan alamat IP untuk setiap nama host dan mendata setiap server transmisi surat (mail exchange server) yang menerima surat elektronik (email) untuk setiap domain.

67 BOOTP client (Dynamic Host Configuration Protocol [DHCP]) adalah protokol yang berbasis arsitektur client yang dipakai untuk memudahkan pengalokasian alamat IP dalam satu jaringan. Sebuah jaringan lokal yang tidak menggunakan DHCP harus memberikan alamat IP kepada semua komputer secara manual. Jika DHCP dipasang di jaringan lokal, maka semua komputer yang tersambung di jaringan akan mendapatkan alamat IP secara otomatis dari server DHCP. Selain alamat IP, banyak parameter jaringan yang dapat diberikan oleh DHCP, seperti default gateway dan DNS server.

68 BOOTP server (DHCP)adalah protokol yang berbasis arsitektur server yang dipakai untuk memudahkan pengalokasian alamat IP dalam satu jaringan. Sebuah jaringan lokal yang tidak menggunakan DHCP harus memberikan alamat IP kepada semua komputer secara manual. Jika DHCP dipasang di jaringan lokal, maka semua komputer yang tersambung di jaringan akan mendapatkan alamat IP secara otomatis dari server DHCP. Selain alamat IP, banyak parameter jaringan yang dapat diberikan oleh DHCP, seperti default gateway dan DNS server.

69 Trivial File Transfer Protocol (TFTP) adalah sebuah protokol perpindahan berkas yang sangat sederhana yang didefinisikan pada tahun 1980. TFTP memiliki fungsionalitas dasar dari protokol File Transfer Protocol (FTP).

137 NetBIOS Name Service adalah sebuah aplikasi harus melakukan registrasi nama NetBIOS miliknya dengan

Page 26: TCP da UDP

menggunakan layanan NetBIOS Name Service. Panjang sebuah nama NetBIOS hanyalah 16 byte. Umumnya, byte ke-16 digunakan untuk mendeskripsikan "jenis", dengan teknik yang serupa dengan nomor port dalam TCP/IP. Dalam NetBIOS over TCP/IP, layanan NetBIOS Name Service beroperasi dalam port UDP 137. Port TCP 137 juga dapat digunakan, tapi jarang.

138 NetBIOS Datagram Service adalah sebuah mekanisme penyampaian data secara connectionless. Mengingat setiap pesan akan dikirimkan secara independen, maka pesan-pesan tersebut haruslah berukuran lebih kecil. Layanan ini juga tidak menawarkan layanan pendeteksian kesalahan dan pemulihannya, sehingga merupakan tanggung jawab aplikasi untuk melakukannya. Dalam NetBIOS over TCP/IP, layanan ini berjalan di atas port UDP 138.

161 Simple Network Management Protocol (SNMP) merupakan protokol standard industri yang digunakan untuk memonitor dan mengelola berbagai perangkat di jaringan Internet meliputi hub, router, switch, workstation dan sistem manajemen jaringan secara jarak jauh (remote).

445 Server Message Block (SMB) adalah Protokol yang dipakai untuk membaca, menulis dan mengalihkan file dari server ke client pada suatu sistem jaringan. Protokol ini dapat beroperasi di atas TCP/IP, IPX, NetBEUI, ,Windows NT, Windows 9X, dan lain-lain.

520 Routing Information Protocol (RIP) adalah sebuah protokol routing dinamis yang digunakan dalam jaringan berbasis lokal dan luas. Karena itu protokol ini diklasifikasikan sebagai Interior Gateway Protocol (IGP).

1812/1813 Remote Authentication Dial-In User Service (RADIUS) adalah sebuah protokol keamanan komputer yang digunakan untuk melakukan autentikasi, otorisasi, dan pendaftaran akun pengguna secara terpusat untuk mengakses jaringan. RADIUS didefinisikan di dalam RFC 2865 dan RFC 2866, yang pada awalnya digunakan untuk melakukan autentikasi terhadap akses jaringan secara jarak jauh dengan menggunakan koneksi dial-up.

UDP dapat dikatakan sebagai protokol yang tidak terikat aturan. Pada saat menggunakan UDP kita dapat membuat paket yang kita kirimkan memiliki

Page 27: TCP da UDP

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 lagi dari dukungan sekuritas, UDP tidak menawarkan mekanisme sekuritas secara built-in.

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. Pada UDP hanya terjadi sebuah pertukaran paket seperti pada gambar berikut.

Hal ini tentunya menunjukkan bahwa pada suatu waktu (terutama bila paket TCP yang dikirimkan kecil) timbul overhead yang tidak perlu. Hal ini dapat

Page 28: TCP da UDP

dihindarkan dengan menggunakan UDP. Hal lain tentang perbedaan TCP dan UDP adalah urutan paket. Pada aplikasi tertentu urutan paket menjadi penting sebagai contoh aplikasi transfer berkas tetapi 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.

3.8 Solusi UDP pada Pemrograman

Berikut adalah contoh aplikasi client/server dengan menggunakan protokolUDP :

UDPClient.java

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 );

Page 29: TCP da UDP

// 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()

Page 30: TCP da UDP

} //akhir dari class

UDPServer.java

import java.net.*;

import java.io.*;

import java.util.*;

public class UDPServer {

public static void main (String args[ ]) {

String hostname="localhost";

String message = "Hallo UDP!";

try {

// buat socket UDP, dan cari port yang tersedia

DatagramSocket socket = new DatagramSocket();

System.out.println ("Local port: " +

socket.getLocalPort());

ByteArrayOutputStream bOut = new ByteArrayOutputStream();

//konversi printstream ke array byte

byte [ ] bArray = bOut.toByteArray();

// buat paket datagram dengan ukuran buffer 256 byte

DatagramPacket packet =

new DatagramPacket( bArray, bArray.length );

//buat objek dari class InetAddress

Page 31: TCP da UDP

InetAddress remote_addr = InetAddress.getByName(hostname);

//cek alamat IP dari hostname

System.out.println("Hostname has IP address = " +

remote_addr.getHostAddress());

//konfigurasi DataGramPacket

packet.setAddress(remote_addr);

packet.setPort(2000);

//kirim paket UDP

socket.send(packet);

// tampilkan informasi paket

System.out.println ("Dikirim oleh : " +

remote_addr.getHostAddress() );

System.out.println ("Dikirim dari : " + packet.getPort());

}

catch (UnknownHostException ue){

System.out.println("Unknown host "+hostname);

}

catch (IOException e) {

System.out.println ("Error - " + e);

}

}//akhir dari main

}//akhir dari class

Page 32: TCP da UDP

Pada bagian ini kita akan membuat contoh sederhana yang mendayagunakan UDP. Bayangkan anda programmer game yang melakukan pemrograman game, anda harus mengirimkan status lokasi tiap-tiap pemain. Lokasi pemain dengan ID tertentu dan berada dalam koordinat x,y

public class PlayerInfo { public byte playerID, locationX, locationY;}

Informasi yang ada tentunya harus dikirimkan dengan format tertentu. Pembentukan format ini disusun dengan bantuan method berikut.

public int ToBuffer(byte[] buffer, int pos){ int newPos = pos; buffer[newPos++] = playerID; buffer[newPos++] = locationX; buffer[newPos++] = locationY; return newPos - pos;}

public void FromBuffer(byte[] buffer, int pos){ playerID = buffer[pos++]; locationX = buffer[pos++]; locationY = buffer[pos++];}

Data yang telah diubah formatnya kemudian dikirimkan. Hal yang patut 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 lokal).

Page 33: TCP da UDP

const int ProtocolPort = 3001;Socket sendSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);IPAddress sendTo = IPAddress.Parse("127.0.0.1");EndPoint sendEndPoint = new IPEndPoint(sendTo, ProtocolPort);byte[] buffer = new byte[PlayerInfo.MaxWireSize];int bufferUsed = player.ToBuffer(buffer, 0);sendSocket.SendTo(buffer, bufferUsed, SocketFlags.None, sendEndPoint);

Method sendTo melakukan pengiriman data dengan menggunakan socket berjenis UDP seperti yang dilakukan pada instance object sendSocket. Pengiriman protokol UDP dilakukan tanpa blocking dengan kata lain protokol UDP tidak memiliki flow control dan kewajiban respons setiap paket yang dikirimkan.

Pada sisi server dilakukan penulisan kode sebagai berikut.

Socket receiveSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);EndPoint bindEndPoint = new IPEndPoint(IPAddress.Any, ProtocolPort);byte[] recBuffer = new byte[PlayerInfo.MaxWireSize];receiveSocket.Bind(bindEndPoint);receiveSocket.BeginReceiveFrom(recBuffer, 0, recBuffer.Length, SocketFlags.None, ref bindEndPoint, new AsyncCallback(MessageReceivedCallback), (object)this);

void MessageReceivedCallback(IAsyncResult result){ EndPoint remoteEndPoint = new IPEndPoint(0, 0); try { int bytesRead = receiveSocket.EndReceiveFrom(result,

Page 34: TCP da UDP

ref remoteEndPoint); player.FromBuffer(recBuffer, 0, Math.Min(recBuffer.Length, bytesRead)); Console.WriteLine("ID:{0} X:{1} Y:{2}", player.playerID, player.locationX, player.locationY); } catch (SocketException e) { Console.WriteLine("Error: {0} {1}", e.ErrorCode, e.Message); }

receiveSocket.BeginReceiveFrom(recBuffer, 0, recBuffer.Length, SocketFlags.None, ref bindEndPoint, new AsyncCallback(MessageReceivedCallback), (object)this);}

Inti dari kode tersebut adalah method BeginRecieveFrom yang mendengar pesan masuk secara asinkron dari klien. Penerimaan paket di sisi server amat bergantung pada aplikasi yang mendengarkan. Apabila aplikasi server tidak mendengarkan pada port yang digunakan klien ataupun yang sebaliknya maka pesan diyakini 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). Untuk menangkap kode status berikut dilakukan penambahan kode berikut.

EndPoint bindEndPoint = new IPEndPoint(IPAddress.Any, 0);sendSocket.Bind(bindEndPoint);byte[] recBuffer = new byte[PlayerInfo.MaxWireSize];sendSocket.BeginReceiveFrom(recBuffer, 0, recBuffer.Length, SocketFlags.None, ref reponseEndPoint,

Page 35: TCP da UDP

new AsyncCallback(CheckForFailuresCallback), (object)this);

Method CheckForFailuresCallback akan menangkap kesalahan kode status 10054 sebagai berikut.

void CheckForFailuresCallback(IAsyncResult result){ EndPoint remoteEndPoint = new IPEndPoint(0, 0); try { int bytesRead = sendSocket.EndReceiveFrom(result, ref remoteEndPoint); } catch (SocketException e) { if (e.ErrorCode == 10054) serviceMissing = true; }}

Bila anda perhatikan 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. Hal 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. Kode berikut berusaha membaca alamat port dan IP berdasar pada endPoint remote.

bytesRead = socket.EndReceiveFrom(result, ref remoteEndPoint);EndPoint endPointDestination = new IPEndPoint(((IPEndPoint)remoteEndPoint).Address, ((IPEndPoint)remoteEndPoint).Port);

Page 36: TCP da UDP

socket2.SendTo(buffer, length, SocketFlags.None, endPointDestination);

Untuk menemukan port yang tidak dipakai kode ini akan cukup bermanfaat

socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);EndPoint endPoint = new IPEndPoint(IPAddress.Any, 0);socket.Bind(endPoint);listeningPort = ((IPEndPoint)(socket.LocalEndPoint)).Port;

3.9 Broadcast dan Multicast

Salah satu fitur utama dari UDP dibanding TCP adalah kemampuan untuk mengirim sebuah pesan ke banyak penerima. Pengiriman pesan dapat 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.

IPAddress multicastGroup = IPAddress.Parse("239.255.255.19");socket.Bind(...);socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(multicastGroup));socket.BeginReceiveFrom(...);

Apabila kita tidak mengetahui alamat dan port server (seperti halnya 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

Page 37: TCP da UDP

paket, bila ditemukan request maka server akan melakukan respons mengenai akses yang dilakukan klien. Class berikut mengungkapkan suatu template request dan respons.

class FindRequest { public int serviceID; public int responsePort; public int SerializeToPacket(byte[] packet) {...} public FindRequest(byte[] packet) {...}}

class FindResult { public int serviceID; public int SerializeToPacket(byte[] packet) {...} public FindResult(byte[] packet) {...}}Server mengawali kegiatannya dengan membuka komunikasi socket dan mendengar berbagai request yang masuk

public AsyncCallback onReceiveRequest = new AsyncCallback(OnReceiveRequest);IPAddress multicastGroup = IPAddress.Parse("239.255.255.19");

public void FindMe(int blockFor, int serviceID) { responseSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint responseEndPoint = new IPEndPoint(IPAddress.Any, multicastPort); responseSocket.Bind(responseEndPoint); responseSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(multicastGroup)); ListenForRequests();}

Page 38: TCP da UDP

public void ListenForRequests() { EndPoint endPoint = new IPEndPoint(0, 0); responseSocket.BeginReceiveFrom(findRequestBuffer, 0, 12, SocketFlags.None, ref endPoint, onReceiveRequest, (object)this);}

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.

static void OnReceiveRequest(IAsyncResult result) { UDP_finder uf = (UDP_finder)result.AsyncState; EndPoint remoteEndPoint = new IPEndPoint(0, 0); int bytesRead = uf.responseSocket.EndReceiveFrom(result, ref remoteEndPoint); FindRequest request = new FindRequest(uf.findRequestBuffer);

// prepare result FindResult fr = new FindResult(); fr.serviceID = uf.currentServiceID; int requestLength = fr.SerializeToPacket(uf.findResultBuffer);

//send result Socket requestSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint requestEndPointDestination = new IPEndPoint(((IPEndPoint)remoteEndPoint).Address, request.responsePort);

Page 39: TCP da UDP

requestSocket.SendTo(uf.findResultBuffer, requestLength, SocketFlags.None, requestEndPointDestination);

requestSocket.Close(); uf.ListenForRequests();}

Pada sisi klien dilakukan tiga hal utama yakni mencari server, mengirim request, dan menunggu respons seperti pada kode berikut.

public void Finder(int waitFor, int serviceID) { // start listening for responses before sending the request responseSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint responseEndPoint = new IPEndPoint(IPAddress.Any, 0); responseSocket.Bind(responseEndPoint); responsePort = ((IPEndPoint)(responseSocket.LocalEndPoint)).Port;

ListenForResponses();

// prepare request FindRequest fr = new FindRequest(); fr.serviceID = serviceID; fr.responsePort = responsePort; int requestLength = fr.SerializeToPacket(findRequestBuffer);

//send request Socket requestSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); EndPoint requestEndPointDestination =

Page 40: TCP da UDP

new IPEndPoint(multicastGroup, multicastPort); requestSocket.SendTo(findRequestBuffer, requestLength, SocketFlags.None, requestEndPointDestination);

requestSocket.Close();

//wait for responses Thread.Sleep(waitFor);}

public void ListenForResponses() { EndPoint endPoint = new IPEndPoint(0, 0); responseSocket.BeginReceiveFrom(findResultBuffer, 0, 8, SocketFlags.None, ref endPoint, onReceiveResponse, (object)this);}

static void OnReceiveResponse(IAsyncResult result) { UDP_finder uf = (UDP_finder)result.AsyncState; EndPoint remoteEndPoint = new IPEndPoint(0, 0); int bytesRead = uf.responseSocket.EndReceiveFrom(result, ref remoteEndPoint); FindResult response = new FindResult(uf.findResultBuffer);

uf.ListenForResponses();

Console.WriteLine("Found service {0}", response.serviceID);}