Thursday, May 28, 2020

Network Fundamentals: TCP & UDP #BelajarJaringanKomputer

Dalam tulisan ini, kita akan melihat protokol di layer transport OSI yaitu TCP dan UDP. Jika pada tulisan sebelumnya tentang protokol IP dan paketnya, Anda tahu bahwa kita memerlukan protokol transport untuk mengirim paket IP tersebut.

Saya ingin fokus pada protokol transport yang paling sering digunakan:
  • TCP (Transmission Control Protocol)
  • UDP (User Datagram Protocol)
Jadi mengapa kita memiliki 2 protokol transport yang berbeda di sini? Kapan kita membutuhkan salah satunya?

Jawaban singkatnya adalah:
TCP adalah protokol yang bersifat reliable (dapat diandalkan).
UDP adalah protokol yang bersifat unreliable (tidak dapat diandalkan) atau best effort (upaya terbaik).

Tidak bisa diandalkan alias Unreliable, Anda mungkin berpikir mengapa saya ingin transportasi data yang tidak dapat diandalkan? Apakah itu masuk akal? Saya akan menceritakan sedikit cerita untuk menjelaskan perbedaan antara kedua protokol tersebut.

Anda mau men-download sebuah file berukuran 10 GB dan setelah mengunduh 9 GB, ada yang tidak beres dan beberapa IP packet tidak berhasil sampai ke komputer Anda. Segera setelah seluruh download selesai, Anda mencoba membuka file tersebut dan Anda mendapatkan banyak error (karena sebagian isi file tidak sampai ke komputer Anda). Hal ini membuat pengorbanan waktu dan bandwidth Anda untuk men-download beberapa GB terasa sia-sia, padahal sebagian besar data telah di-download dengan baik.

Oleh sebab itu,  Anda membutuhkan sebuah protokol transport yang bisa memastikan bahwa pengiriman data dari pengirim (misal server) ke komputer Anda itu reliable (handal), nah itulah sebabnya kita menggunakan TCP. Jika beberapa IP packet tidak sampai ke komputer Anda, Anda ingin memastikan data ini akan dikirim ulang ke komputer Anda.

Dalam cerita kedua, Anda adalah seorang network engineer yang ingin mengimplementasikan Voice over IP di perusahaan Anda dan  menyingkirkan semua telepon analog. Tetapi setelah VoIP diimplementasikan, para user mengeluh karena kualitas panggilan telepon kini menjadi lebih buruk. Anda menghubungi vendor solusi VoIP tersebut dan Anda mendapatkan informasi bahwa vendor berpikir untuk menggunakan protokol transportasi yang dapat diandalkan (reliable) seperti TCP karena kita ingin panggilan telepon dapat diandalkan (reliable) bukan?

Ternyata itu adalah cara berpikir yang salah! TCP melakukan koreksi kesalahan (error correction) yang berarti bahwa data yang tidak berhasil sampai ke komputer Anda akan dikirim ulang (retransmission). Sangatlah aneh jika Anda berbicara dengan seseorang di telepon dan Anda mendengar sesuatu yang mereka katakan beberapa detik yang lalu? Komunikasi via telepon seharusnya bersifat real-time, jadi kita tidak menginginkan pengiriman ulang (retransmission). Lebih baik mengirim paket VoIP dan kehilangan beberapa paket yang error, daripada mengirimnya kembali setelah itu. Codec VoIP juga dapat memperbaiki kehilangan paket (packet loss) hingga tingkat tertentu. Dalam contoh ini (komunikasi VoIP), kita ingin menggunakan protokol yang unreliable/best effort, yaitu UDP.



Pertama-tama Anda melihat Tipe Koneksi. TCP bertipe connection-oriented yang artinya akan membuat koneksi terlebih dahulu, baru kemudian mulai mentransfer data. UDP bertipe connectionless, yang artinya akan langsung mulai mengirim dan tidak peduli apakah data tsb diterima oleh tujuan atau tidak. Koneksi yang disiapkan oleh TCP disebut "3-way handshake" yang akan kita bahas sebentar lagi.

Sequencing berarti menggunakan nomor urut. Jika Anda men-download file yang besar, Anda perlu memastikan bahwa Anda dapat mengembalikan semua segment itu dalam urutan yang benar. Seperti yang Anda lihat di tabel, UDP tidak menawarkan fitur ini, tidak ada nomor urut pada UDP.

Lalu bagaimana dengan VoIP? Bukankah kita harus mengembalikan segment-segment itu di sisi penerima? Ya, sebenarnya hal itu kita lakukan, karena kalau tidak maka kita akan mendapatkan beberapa percakapan aneh (karena suara yang diterima tidak berurutan). UDP tidak menawarkan fitur pengurutan/sequencing ini. Tapi ada sedikit rahasia, yaitu untuk VoIP itu bukan hanya UDP yang kita gunakan, tetapi juga menggunakan RTP yang menawarkan pengurutan/sequencing serta beberapa fitur lainnya yang kita perlukan untuk VoIP.

Mari kita lihat UDP header:
Anda dapat melihat betapa sederhananya UDP header, terdapat nomor (logical) port pengirim dan tujuan (digunakan untuk mengetahui data ini untuk aplikasi yang mana), ada checksum dan panjang/length.

Mari kita simpulkan apa yang sekarang kita ketahui tentang UDP:

  • beroperasi pada layer transport OSI.
  • protokol connectionless: tidak membuat koneksi, hanya mengirim data. Analoginya seperti kita mengirim surat.
  • Protokol yang bersifat unreliable/best effort.
  • Tidak ada fitur error-recovery.

Sekarang mari kita lihat apa yang bisa ditawarkan TCP kepada kita. Pertama-tama karena TCP adalah protokol yang reliable, TCP akan membuat koneksi sebelum memulai pengiriman data. Proses membuat koneksi ini disebut "3-way handshake". 

Contohnya ada 2 komputer yang ingin saling mengirim data menggunakan TCP. Client PC ingin mengirim data ke Server dengan cara yang reliable, sehingga menggunakan TCP. Berikut ini proses membuat koneksi dengan 3-way handshake:
1. Client PC mengirim SYN segment dengan random (acak) sequence number (misal 3456) ke server 
2. Server membalas dengan mengirim SYN-ACK segment dengan random sequence number (misal 4100) dan ACK number yang ditambahkan 1 dari sequence number lawannya (yaitu 3457)
3. Client PC membalas dengan mengirim ACK segment dengan ACK number yang ditambahkan 1 dari sequence number lawannya (yaitu 4101)

Setelah TCP 3-way handshake ini sukses, maka Client PC bisa melakukan upload/download file dari server.

Selain 3-way handshake ini, TCP juga mempunyai fitur lain yaitu Flow Control. 

Apa itu Flow Control
Perangkat jaringan beroperasi pada kecepatan data yang berbeda karena berbagai faktor seperti CPU dan bandwidth yang tersedia. Flow control digunakan ketika perangkat pengirim mempunyai kecepatan yang jauh lebih cepat daripada yang dapat ditangani oleh penerima. TCP menggunakan mekanisme sliding window untuk menerapkan flow control. Sliding window menggunakan window size yaitu seberapa banyak segment yang bisa dikirim kepada penerima, sebelum penerima mengirim ACK kepada pengirim. Jadi window size itu menunjukkan ukuran buffer pada penerima. Mengenai Window Size ini kan saya bahas di tulisan lain yah :)

Kesimpulan:
  • Pada layer 4 (transport) OSI ada 2 protokol yang sering kita gunakan yaitu TCP & UDP (selain kedua protokol ini, sebenarnya masih ada protokol lain seperti SCTP).
  • TCP digunakan oleh aplikasi yang membutuhkan reliability, seperti download file, email, browsing web.
  • UDP digunakan oleh aplikasi yang membutuhkan kecepatan (real-time), seperti VoIP, video streaming.
  • Sebagian besar aplikasi yang kita gunakan (seperti HTTP, HTTPS, SSH, Telnet, SMTP, POP3), menggunakan protokol TCP di layer 4 dan protokol IP di layer 3, sehingga kita sering mendengar istilah TCP/IP.

Agar lebih mudah memahami TCP & UDP, Anda bisa menonton video saya yang membahas TCP & UDP di: https://youtu.be/k4DfVCJOA4w?t=1965

Semoga bisa membantu dalam memahami topik Network Fundamentals dan jika ada pertanyaan, silahkan ketik di kolom komentar :)


Tetap semangat :)

AHa

No comments:

Post a Comment

Dasar-dasar Jaringan Komputer (Tulisan & Video)

Bagi yang ingin belajar jaringan komputer dari dasar, saya sarankan mengikuti link ini (ada versi tulisan dan video di dalamnya) #NetworkF...