Senjata rahasia TCP: Kontrol Aliran Jaringan dan Kontrol Kemacetan Jaringan

Keandalan Transportasi TCP
Kita semua sudah familiar dengan protokol TCP sebagai protokol transport yang andal, tetapi bagaimana cara kerjanya dalam memastikan keandalan transport tersebut?

Untuk mencapai transmisi yang andal, banyak faktor yang perlu dipertimbangkan, seperti kerusakan data, kehilangan data, duplikasi, dan shard yang tidak berurutan. Jika masalah-masalah ini tidak dapat diatasi, transmisi yang andal tidak dapat dicapai.

Oleh karena itu, TCP menggunakan mekanisme seperti nomor urutan, balasan pengakuan, kontrol pengiriman ulang, manajemen koneksi, dan kontrol jendela untuk mencapai transmisi yang andal.

Dalam makalah ini, kita akan fokus pada jendela geser (sliding window), kontrol aliran (flow control), dan kontrol kemacetan (congestion control) pada TCP. Mekanisme pengiriman ulang (retransmission) akan dibahas secara terpisah di bagian selanjutnya.

Kontrol Aliran Jaringan
Kontrol Aliran Jaringan atau yang dikenal sebagai Kontrol Lalu Lintas Jaringan sebenarnya merupakan manifestasi dari hubungan yang rumit antara produsen dan konsumen. Anda mungkin sering menjumpai skenario ini di tempat kerja atau dalam wawancara. Jika kapasitas produsen untuk memproduksi jauh melebihi kapasitas konsumen untuk mengonsumsi, hal itu akan menyebabkan antrian terus bertambah tanpa batas. Dalam kasus yang lebih serius, Anda mungkin tahu bahwa ketika pesan RabbitMQ menumpuk terlalu banyak, hal itu dapat menyebabkan penurunan kinerja seluruh server MQ. Hal yang sama berlaku untuk TCP; jika dibiarkan tanpa pengawasan, terlalu banyak pesan akan dimasukkan ke dalam jaringan, dan konsumen akan melampaui kapasitas mereka, sementara produsen akan terus mengirim pesan duplikat, yang akan sangat memengaruhi kinerja jaringan.

Untuk mengatasi fenomena ini, TCP menyediakan mekanisme bagi pengirim untuk mengontrol jumlah data yang dikirim berdasarkan kapasitas penerimaan aktual penerima, yang dikenal sebagai kontrol aliran. Penerima mempertahankan jendela penerimaan, sementara pengirim mempertahankan jendela pengiriman. Perlu dicatat bahwa jendela-jendela ini hanya berlaku untuk satu koneksi TCP dan tidak semua koneksi berbagi jendela yang sama.

TCP menyediakan kontrol aliran dengan menggunakan variabel untuk jendela penerimaan. Jendela penerimaan memberi pengirim indikasi berapa banyak ruang cache yang masih tersedia. Pengirim mengontrol jumlah data yang dikirim sesuai dengan kapasitas penerimaan aktual penerima.

Host penerima memberi tahu pengirim tentang ukuran data yang dapat diterimanya, dan pengirim mengirimkan data hingga batas tersebut. Batas ini adalah ukuran jendela (window size), ingat header TCP? Ada kolom jendela penerimaan (receive window), yang digunakan untuk menunjukkan jumlah byte yang mampu atau bersedia diterima oleh penerima.

Host pengirim akan secara berkala mengirimkan paket probe jendela, yang digunakan untuk mendeteksi apakah host penerima masih mampu menerima data. Ketika buffer penerima berisiko meluap, ukuran jendela diatur ke nilai yang lebih kecil untuk menginstruksikan pengirim agar mengontrol jumlah data yang dikirim.

Berikut adalah diagram Kontrol Aliran Jaringan:

Pengendalian Lalu Lintas

Pengendalian Kemacetan Jaringan
Sebelum membahas pengendalian kemacetan, kita perlu memahami bahwa selain jendela penerimaan dan jendela pengiriman, terdapat juga jendela kemacetan, yang terutama digunakan untuk menyelesaikan masalah pada tingkat berapa pengirim mulai mengirim data ke jendela penerimaan. Oleh karena itu, jendela kemacetan juga dikelola oleh pengirim TCP. Kita membutuhkan algoritma untuk memutuskan berapa banyak data yang tepat untuk dikirim, karena mengirim terlalu sedikit atau terlalu banyak data bukanlah hal yang ideal, oleh karena itu muncullah konsep jendela kemacetan.

Pada kontrol aliran jaringan sebelumnya, yang kita hindari adalah pengirim memenuhi cache penerima dengan data, tetapi kita tidak tahu apa yang terjadi di jaringan. Biasanya, jaringan komputer berada dalam lingkungan bersama. Akibatnya, mungkin terjadi kemacetan jaringan karena komunikasi antar host lain.

Ketika jaringan mengalami kemacetan, jika sejumlah besar paket terus dikirim, hal itu dapat menyebabkan masalah seperti penundaan dan kehilangan paket. Pada titik ini, TCP akan mengirim ulang data, tetapi pengiriman ulang akan meningkatkan beban pada jaringan, mengakibatkan penundaan yang lebih besar dan lebih banyak kehilangan paket. Hal ini dapat menjadi lingkaran setan dan terus membesar.

Oleh karena itu, TCP tidak dapat mengabaikan apa yang terjadi di jaringan. Ketika jaringan mengalami kemacetan, TCP mengorbankan dirinya sendiri dengan mengurangi jumlah data yang dikirimnya.

Oleh karena itu, kontrol kemacetan diusulkan, yang bertujuan untuk menghindari pengisian seluruh jaringan dengan data dari pengirim. Untuk mengatur jumlah data yang harus dikirim pengirim, TCP mendefinisikan konsep yang disebut jendela kemacetan. Algoritma kontrol kemacetan akan menyesuaikan ukuran jendela kemacetan sesuai dengan tingkat kemacetan jaringan, sehingga dapat mengontrol jumlah data yang dikirim oleh pengirim.

Apa itu congestion window? Apa hubungannya dengan send window?

Jendela Kemacetan (Congestion Window) adalah variabel status yang dikelola oleh pengirim yang menentukan jumlah data yang dapat dikirim oleh pengirim. Jendela kemacetan berubah secara dinamis sesuai dengan tingkat kemacetan jaringan.

Jendela Pengirim (Sending Window) adalah ukuran jendela yang disepakati antara pengirim dan penerima yang menunjukkan jumlah data yang dapat diterima oleh penerima. Jendela kongesti (congestion window) dan jendela pengirim saling terkait; jendela pengirim biasanya sama dengan nilai minimum dari jendela kongesti dan jendela penerima, yaitu swnd = min(cwnd, rwnd).

Jendela kemacetan cwnd berubah sebagai berikut:

Jika tidak ada kemacetan di jaringan, yaitu tidak terjadi batas waktu pengiriman ulang, maka jendela kemacetan akan meningkat.

Jika terjadi kemacetan di jaringan, jendela kemacetan akan berkurang.

Pengirim menentukan apakah jaringan mengalami kemacetan dengan mengamati apakah paket pengakuan ACK diterima dalam waktu yang ditentukan. Jika pengirim tidak menerima paket pengakuan ACK dalam waktu yang ditentukan, maka dianggap bahwa jaringan mengalami kemacetan.

Selain membahas jendela kemacetan (congestion window), sekarang saatnya membahas algoritma pengendalian kemacetan TCP. Algoritma pengendalian kemacetan TCP terdiri dari tiga bagian utama:

Permulaan yang Lambat:Pada awalnya, jendela kemacetan cwnd relatif kecil, dan pengirim meningkatkan jendela kemacetan secara eksponensial untuk beradaptasi dengan cepat terhadap kapasitas jaringan.
Pencegahan Kemacetan:Setelah jendela kemacetan melebihi ambang batas tertentu, pengirim meningkatkan jendela kemacetan secara linier untuk memperlambat laju pertumbuhan jendela kemacetan dan menghindari kelebihan beban jaringan.
Pemulihan Cepat:Jika terjadi kemacetan, pengirim mengurangi separuh jendela kemacetan dan memasuki keadaan pemulihan cepat untuk menentukan lokasi pemulihan jaringan melalui pengakuan duplikat yang diterima, lalu terus meningkatkan jendela kemacetan.

Permulaan Lambat
Saat koneksi TCP dibuat, jendela kemacetan cwnd awalnya diatur ke nilai MSS (ukuran segmen maksimum) minimum. Dengan cara ini, laju pengiriman awal sekitar MSS/RTT byte/detik. Bandwidth aktual yang tersedia biasanya jauh lebih besar daripada MSS/RTT, sehingga TCP ingin menemukan laju pengiriman optimal, yang dapat dicapai melalui slow-start.

Dalam proses slow-start, nilai congestion window cwnd akan diinisialisasi ke 1 MSS, dan setiap kali segmen paket yang ditransmisikan diakui, nilai cwnd akan meningkat satu MSS, yaitu, nilai cwnd akan menjadi 2 MSS. Setelah itu, nilai cwnd digandakan untuk setiap transmisi segmen paket yang berhasil, dan seterusnya. Proses pertumbuhan spesifik ditunjukkan pada gambar berikut.

 Pengendalian kemacetan jaringan

Namun, laju pengiriman tidak selalu bisa meningkat; pertumbuhan itu harus berakhir pada suatu saat. Jadi, kapan peningkatan laju pengiriman berakhir? Slow-start biasanya mengakhiri peningkatan laju pengiriman dengan beberapa cara berikut:

Cara pertama adalah kasus kehilangan paket selama proses pengiriman slow start. Ketika terjadi kehilangan paket, TCP mengatur jendela kongesti pengirim cwnd menjadi 1 dan memulai kembali proses slow start. Pada titik ini, diperkenalkan konsep ambang batas slow start ssthresh, yang nilai awalnya adalah setengah dari nilai cwnd yang menghasilkan kehilangan paket. Artinya, ketika kongesti terdeteksi, nilai ssthresh adalah setengah dari nilai jendela.

Cara kedua adalah dengan menghubungkannya langsung dengan nilai ambang batas slow-start ssthresh. Karena nilai ssthresh adalah setengah dari nilai jendela ketika kemacetan terdeteksi, kehilangan paket dapat terjadi setiap kali cwnd berlipat ganda ketika cwnd lebih besar dari ssthresh. Oleh karena itu, sebaiknya atur cwnd ke ssthresh, yang akan menyebabkan TCP beralih ke mode kontrol kemacetan dan mengakhiri slow-start.

Cara terakhir slow start dapat berakhir adalah jika tiga ACK redundan terdeteksi, TCP melakukan transmisi ulang cepat dan memasuki keadaan pemulihan. (Jika tidak jelas mengapa ada tiga paket ACK, akan dijelaskan secara terpisah dalam mekanisme transmisi ulang.)

Penghindaran Kemacetan
Ketika TCP memasuki keadaan kontrol kemacetan, cwnd diatur menjadi setengah dari ambang batas kemacetan ssthresh. Ini berarti bahwa nilai cwnd tidak dapat digandakan setiap kali segmen paket diterima. Sebaliknya, pendekatan yang relatif konservatif diadopsi di mana nilai cwnd hanya ditingkatkan satu MSS (panjang segmen paket maksimum) setelah setiap transmisi selesai. Misalnya, bahkan jika 10 segmen paket diakui, nilai cwnd hanya akan meningkat satu MSS. Ini adalah model pertumbuhan linier dan juga memiliki batas atas pertumbuhan. Ketika terjadi kehilangan paket, nilai cwnd diubah menjadi MSS, dan nilai ssthresh diatur menjadi setengah dari cwnd. Atau juga akan menghentikan pertumbuhan MSS ketika 3 respons ACK redundan diterima. Jika tiga ACK redundan masih diterima setelah mengurangi nilai cwnd menjadi setengahnya, nilai ssthresh dicatat sebagai setengah dari nilai cwnd dan keadaan pemulihan cepat dimasuki.

Pemulihan Cepat
Dalam kondisi Fast Recovery, nilai congestion window cwnd ditingkatkan sebesar satu MSS untuk setiap ACK redundan yang diterima, yaitu ACK yang tidak tiba secara berurutan. Hal ini bertujuan untuk memanfaatkan segmen paket yang telah berhasil ditransmisikan dalam jaringan guna meningkatkan efisiensi transmisi semaksimal mungkin.

Ketika ACK untuk segmen paket yang hilang tiba, TCP menurunkan nilai cwnd dan kemudian memasuki keadaan penghindaran kemacetan. Hal ini untuk mengontrol ukuran jendela kemacetan dan menghindari peningkatan kemacetan jaringan lebih lanjut.

Jika terjadi timeout setelah status kontrol kemacetan, kondisi jaringan menjadi lebih serius dan TCP beralih dari status penghindaran kemacetan ke status slow-start. Dalam hal ini, nilai jendela kemacetan cwnd diatur ke 1 MSS, panjang segmen paket maksimum, dan nilai ambang batas slow-start ssthresh diatur ke setengah dari cwnd. Tujuannya adalah untuk secara bertahap meningkatkan ukuran jendela kemacetan setelah jaringan pulih untuk menyeimbangkan laju transmisi dan tingkat kemacetan jaringan.

Ringkasan
Sebagai protokol transport yang andal, TCP mengimplementasikan transport yang andal melalui nomor urutan, pengakuan, kontrol pengiriman ulang, manajemen koneksi, dan kontrol jendela. Di antaranya, mekanisme kontrol aliran mengontrol jumlah data yang dikirim oleh pengirim sesuai dengan kapasitas penerimaan aktual penerima, yang menghindari masalah kemacetan jaringan dan penurunan kinerja. Mekanisme kontrol kemacetan menghindari terjadinya kemacetan jaringan dengan menyesuaikan jumlah data yang dikirim oleh pengirim. Konsep jendela kemacetan dan jendela pengiriman saling terkait, dan jumlah data pada pengirim dikontrol dengan menyesuaikan ukuran jendela kemacetan secara dinamis. Slow start, penghindaran kemacetan, dan pemulihan cepat adalah tiga bagian utama dari algoritma kontrol kemacetan TCP, yang menyesuaikan ukuran jendela kemacetan melalui strategi yang berbeda untuk beradaptasi dengan kapasitas dan tingkat kemacetan jaringan.

Pada bagian selanjutnya, kita akan membahas mekanisme pengiriman ulang TCP secara detail. Mekanisme pengiriman ulang merupakan bagian penting dari TCP untuk mencapai transmisi yang andal. Mekanisme ini memastikan transmisi data yang andal dengan mengirim ulang data yang hilang, rusak, atau tertunda. Prinsip dan strategi implementasi mekanisme pengiriman ulang akan diperkenalkan dan dianalisis secara detail pada bagian selanjutnya. Tetaplah bersama kami!


Waktu posting: 24 Februari 2025