Professional Documents
Culture Documents
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,
Penyusun
Di dalam header IP dari sebuah segmen TCP, field Source IP Address diatur
menjadi alamat unicast dari sebuah antarmuka host yang mengirimkan segmen
SMKN 8 Malang Page 4
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
Hea
der
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.
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
Nama Keterangan
flag
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
SMKN 8 Malang Page 9
yang dikirimkan dengan flag PSH aktif tidak harus segera di-
acknowledge oleh penerima.
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:
Application Layer
(SMTP, FTP, HTTP, dll)
Transport Layer
TCP/IP Stack
(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 :
2.4 PENGALAMATAN
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
SMKN 8 Malang Page 15
dengan menggunakan berkas hosts (/etc/hosts atau
%systemroot%\system32\drivers\etc\hosts) yang disimpan di dalam mesin
yang bersangkutan.
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.
Berikut ini adalah layanan tradisional yang dapat berjalan di atas protokol TCP/IP:
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.
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
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 lagi dari dukungan sekuritas, UDP tidak
menawarkan mekanisme sekuritas secara built-in.
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.
UDPClient.java
import java.net.*;
import java.io.*;
import java.util.*;
try{
DatagramPacket packet =
socket.receive(packet);
remote_addr.getHostAddress( ) );
ByteArrayInputStream bin =
new ByteArrayInputStream(packet.getData());
if (data == -1)
break;
else
socket.close( );
catch (IOException e) {
UDPServer.java
import java.net.*;
import java.io.*;
import java.util.*;
String hostname="localhost";
try {
socket.getLocalPort());
DatagramPacket packet =
InetAddress remote_addr =
InetAddress.getByName(hostname);
remote_addr.getHostAddress());
//konfigurasi DataGramPacket
packet.setAddress(remote_addr);
packet.setPort(2000);
SMKN 8 Malang Page 31
//kirim paket UDP
socket.send(packet);
remote_addr.getHostAddress() );
catch (IOException e) {
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
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).
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.
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.
Untuk menemukan port yang tidak dipakai kode ini akan cukup bermanfaat
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.
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
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) {...}
}
responseSocket.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.AddMembership,
new MulticastOption(multicastGroup));
ListenForRequests();
}
// 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);
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.
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 =
new IPEndPoint(multicastGroup, multicastPort);
requestSocket.SendTo(findRequestBuffer,
requestLength,
SocketFlags.None, requestEndPointDestination);
requestSocket.Close();
uf.ListenForResponses();