Sunday, May 31, 2020

Network Fundamentals: TCP Window Size #BelajarJaringanKomputer

Seperti yang telah kita bahas di  tulisan tentang TCP & UDP, kita tahu TCP (Transmission Control Protocol) adalah connection-oriented protocol yang berarti bahwa TCP melacak berapa banyak data yang telah dikirimkan. Pengirim akan mengirimkan beberapa data dan penerima harus membalas dengan Acknowledgement. Ketika pengirim tidak menerima Acknowledgement dari penerima maka pengirim akan mengirim ulang data tersebut.

TCP menggunakan "windowing" yang berarti bahwa pengirim akan mengirim satu atau lebih segment data dan penerima akan membalas dengan Acknowledgement untuk satu atau semua segment. Saat kita memulai koneksi TCP, host akan menggunakan receive buffer untuk menyimpan data secara sementara sebelum aplikasi dapat memprosesnya.

Ketika penerima mengirim Acknowledgement, ia akan memberi tahu pengirim berapa banyak data yang dapat ditransmisikan sebelum penerima akan mengirim Acknowledgement. Itu disebut window size. Pada dasarnya, window size menunjukkan besarnya receive buffer.

Biasanya koneksi TCP akan dimulai dengan window size kecil dan setiap kali ada Acknowledgement yang berhasil, window size akan meningkat.

Mari kita lihat sebuah contoh:

Di contoh tsb, PC1 mengirim satu segment dan PC2 membalas dengan mengirim Acknowledgement. Karena Acknowledgement berhasil, maka window size akan meningkat:

Kini PC1 mengirim dua segment sekaligus dan PC2 akan membalas dengan satu Acknowledgement. Semuanya berjalan dengan lancar sehingga window size akan meningkat lagi:
Kini PC1 mengirim empat segment sekaligus dan PC2 merespons dengan satu Acknowledgement.

Pada contoh di atas, window size terus meningkat selama penerima mengirimkan Acknowledgement untuk semua segment dari pengirim atau ketika window size mencapai batas maksimum tertentu. Ketika penerima tidak mengirim Acknowledgement dalam periode waktu tertentu (disebut round trip time) maka window size akan berkurang.

Ketika sebuah interface mengalami congestion (kemacetan) maka ada kemungkinan paket IP akan di-drop. Untuk mengatasinya, TCP memiliki algoritma yang berhubungan dengan congestion control. Salah satunya disebut TCP slow start.

Congestion bisa terjadi ketika sebuah interface harus mengirimkan lebih banyak data daripada yang bisa ditangani. Queue (antrian) akan mencapai batasnya dan paket akan di-drop.

Dengan TCP slow start, window size awalnya akan bertambah secara eksponensial (window size menjadi dua kali lipat) tetapi ketika paket yang di-drop, window size akan dikurangi menjadi satu segment. Kemudian akan bertambah lagi secara eksponensial sampai window size menjadi setengah dari ukuran window size ketika congestion terjadi. Setelah itu, window size akan bertambah secara linear, bukan secara eksponensial.

Ketika sebuah interface mengalami congestion, mungkin semua koneksi TCP Anda akan mengalami TCP slow start. Paket akan di-drop dan kemudian semua koneksi TCP akan memiliki ukuran window size yang kecil. Ini disebut TCP global synchronization. Begini tampilannya:


Garis merah, kuning dan biru adalah tiga koneksi TCP yang berbeda. Koneksi TCP ini dimulai pada waktu yang berbeda dan setelah beberapa saat, interface mengalami congestion dan semua segment di koneksi-koneksi TCP tersebut di-drop. Kemudian yang terjadi adalah window size semua koneksi TCP ini akan turun ke satu dan setelah congestion pada interface reda, maka window size semua koneksi TCP akan meningkat lagi.

Jika interface kemudian menjadi padat lagi, ukuran window size turun kembali ke satu dan kejadian di atas berulang kembali. Hasil dari ini adalah kita tidak bisa menggunakan semua bandwidth yang tersedia pada interface. Anda dapat melihat garis putus-putus di atas, yang menunjukkan bahwa rata-rata utilisasi bandwidth pada interface tidak terlalu tinggi.

Untuk mencegah congestion yang berimbas pada TCP global synchronization, kita dapat menggunakan RED (Random Early Detection) yang merupakan salah satu mekanisme pada QoS (Quality of Service). Ini adalah fitur yang melakukan drop paket "secara acak" dari TCP stream berdasarkan jumlah paket dalam Queue (antrian) dan tanda ToS (Type of Service) yang ada pada IP header. Ketika paket di-drop sebelum Queue (antrian) penuh, kita dapat menghindari TCP global synchronization.

Hasil akhirnya akan terlihat seperti ini:


Dapat disimpulkan, ketika kita menggunakan RED (random early detection), pemanfaatan rata-rata utilisasi interface akan meningkat.

Kesimpulan
Anda sekarang telah melihat bagaimana TCP menggunakan window size untuk memberi tahu pengirim berapa banyak data yang bisa dikirim sebelum menerima Acknowledgement. Saya juga telah menunjukkan kepada Anda sebuah contoh bagaimana window size digunakan ketika penerima tidak dapat memproses receive buffer-nya tepat waktu.

Tidak seperti TCP, UDP adalah protokol connectionless dan hanya akan terus mengirim segment data tanpa menunggu Acknowledgement dan tanpa window size. Karena alasan ini, Anda mungkin ingin membatasi traffic UDP Anda atau bakal ada kemungkinan terjadi TCP starvation ketika terjadi congestion.

Semoga tulisan ini dapat memudahkan dalam memahami TCP window size. Jika ada pertanyaan, jangan ragu untuk bertanya di kolom komentar di bawah ya.

Selamat belajar dan tetap semangat di tengah pandemi ini :)

~AHa
#NetworkFundamentals
#StayAtHome
#StaySafe
#StayHealthy

3 comments:

  1. Artikel menarik-menarik pak, saya sangat menyukainya ini bisa menambah wawasan saya pak..Terimakasih sudah memberikan artikel yang bermanfaat..

    Salam kenal saya juga memiliki yaitu Catatanshand semoga bisa seperti blog ini bisa bermanfaat banyak orang.

    ReplyDelete

Cisco CCNA [video #01] Introduction to Networking

Cisco CCNA adalah sertifikasi level Associate di bidang Computer Networks / Jaringan Komputer dari Cisco Systems. Sertifikasi lain dari C...