Transportasi Keandalan TCP
Kita semua familier dengan protokol TCP sebagai protokol transportasi yang andal, tetapi bagaimana protokol tersebut menjamin keandalan transportasi?
Untuk mencapai transmisi yang andal, banyak faktor yang perlu dipertimbangkan, seperti kerusakan data, kehilangan, duplikasi, dan shard yang tidak berurutan. Jika masalah ini tidak dapat diatasi, transmisi yang andal tidak dapat dicapai.
Oleh karena itu, TCP menggunakan mekanisme seperti nomor urut, balasan pengakuan, kontrol pengiriman ulang, manajemen koneksi, dan kontrol jendela untuk mencapai transmisi yang andal.
Dalam makalah ini, kami akan fokus pada jendela geser, kontrol aliran, dan kontrol kongesti TCP. Mekanisme transmisi ulang dibahas secara terpisah di bagian berikutnya.
Kontrol Aliran Jaringan
Network Flow Control atau yang dikenal dengan Network Traffic Control sebenarnya merupakan perwujudan dari hubungan yang sangat erat 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 ini akan menyebabkan antrean bertambah tanpa batas. Dalam kasus yang lebih serius, Anda mungkin tahu bahwa ketika pesan RabbitMQ menumpuk terlalu banyak, hal ini dapat menyebabkan penurunan kinerja seluruh server MQ. Hal yang sama berlaku untuk TCP; jika tidak dicentang, terlalu banyak pesan akan dimasukkan ke dalam jaringan, dan konsumen akan melampaui kapasitasnya, sementara produsen akan terus mengirim pesan duplikat, yang akan sangat memengaruhi kinerja jaringan.
Untuk mengatasi fenomena ini, TCP menyediakan mekanisme bagi pengirim untuk mengendalikan 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 ini hanya untuk satu koneksi TCP dan tidak semua koneksi berbagi jendela.
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 memberitahu pengirim tentang ukuran data yang dapat diterimanya, dan pengirim mengirimkan hingga batas ini. Batas ini adalah ukuran jendela, ingat header TCP? Ada kolom jendela penerima, yang digunakan untuk menunjukkan jumlah byte yang dapat atau ingin diterima oleh penerima.
Host pengirim akan secara berkala mengirim paket pemeriksaan jendela, yang digunakan untuk mendeteksi apakah host penerima masih dapat menerima data. Ketika buffer penerima dalam bahaya meluap, ukuran jendela ditetapkan ke nilai yang lebih kecil untuk memberi instruksi kepada pengirim agar mengendalikan jumlah data yang dikirim.
Berikut ini adalah diagram Kontrol Aliran Jaringan:
Kontrol Kemacetan Jaringan
Sebelum memperkenalkan pengendalian kongesti, kita perlu memahami bahwa selain jendela penerimaan dan jendela pengiriman, ada juga jendela kongesti, yang terutama digunakan untuk memecahkan masalah pada kecepatan berapa pengirim mulai mengirim data ke jendela penerimaan. Oleh karena itu, jendela kongesti juga dikelola oleh pengirim TCP. Kita memerlukan algoritme untuk memutuskan berapa banyak data yang tepat untuk dikirim, karena mengirim terlalu sedikit atau terlalu banyak data tidaklah ideal, oleh karena itu muncul konsep jendela kongesti.
Dalam pengendalian aliran jaringan sebelumnya, yang kami hindari adalah pengirim mengisi cache penerima dengan data, tetapi kami tidak tahu apa yang terjadi di jaringan. Biasanya, jaringan komputer berada dalam lingkungan bersama. Akibatnya, mungkin ada kemacetan jaringan karena komunikasi antara host lain.
Ketika jaringan mengalami kemacetan, jika sejumlah besar paket terus dikirim, hal itu dapat menyebabkan masalah seperti penundaan dan hilangnya paket. Pada titik ini, TCP akan mengirimkan ulang data, tetapi pengiriman ulang tersebut akan menambah beban pada jaringan, yang mengakibatkan penundaan yang lebih lama dan lebih banyak paket yang hilang. Hal ini dapat menjadi lingkaran setan dan terus membesar.
Dengan demikian, 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, diusulkan pengendalian kongesti, yang bertujuan untuk menghindari pengisian seluruh jaringan dengan data dari pengirim. Untuk mengatur jumlah data yang harus dikirim oleh pengirim, TCP mendefinisikan sebuah konsep yang disebut jendela kongesti. Algoritma pengendalian kongesti akan menyesuaikan ukuran jendela kongesti sesuai dengan tingkat kongesti jaringan, sehingga dapat mengendalikan jumlah data yang dikirim oleh pengirim.
Apa itu jendela kongesti? Apa hubungannya dengan jendela pengiriman?
Congestion Window adalah variabel status yang dikelola oleh pengirim yang menentukan jumlah data yang dapat dikirim oleh pengirim. Congestion window berubah secara dinamis sesuai dengan tingkat kemacetan jaringan.
Jendela Pengiriman adalah ukuran jendela yang disepakati antara pengirim dan penerima yang menunjukkan jumlah data yang dapat diterima penerima. Jendela kongesti dan jendela pengiriman saling terkait; jendela pengiriman biasanya sama dengan minimum jendela kongesti dan jendela penerimaan, yaitu, swnd = min(cwnd, rwnd).
Jendela kemacetan dapat berubah sebagai berikut:
Jika tidak ada kemacetan dalam jaringan, yaitu tidak terjadi batas waktu transmisi ulang, maka jendela kemacetan bertambah.
Jika terjadi kemacetan di jaringan, jendela kemacetan 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, jaringan dianggap mengalami kemacetan.
Selain jendela kongesti, sekarang saatnya membahas algoritma kontrol kongesti TCP. Algoritma kontrol kongesti TCP terdiri dari tiga bagian utama:
Mulai Lambat:Awalnya, jendela kemacetan cwnd relatif kecil, dan pengirim meningkatkan jendela kemacetan secara eksponensial untuk cepat beradaptasi dengan kapasitas jaringan.
Penghindaran Kemacetan:Setelah jendela kemacetan melampaui 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 membagi dua jendela kemacetan dan memasuki status pemulihan cepat untuk menentukan lokasi pemulihan jaringan melalui pengakuan duplikat yang diterima, kemudian terus menambah jendela kemacetan.
Mulai Lambat
Saat koneksi TCP terbentuk, cwnd jendela kongesti awalnya ditetapkan ke nilai MSS (ukuran segmen maksimum) minimum. Dengan cara ini, laju pengiriman awal adalah sekitar MSS/RTT byte/detik. Lebar pita yang tersedia sebenarnya biasanya jauh lebih besar daripada MSS/RTT, jadi TCP ingin menemukan laju pengiriman optimal, yang dapat dicapai dengan cara slow-start.
Dalam proses slow-start, nilai cwnd dari cwnd window akan diinisialisasi menjadi 1 MSS, dan setiap kali segmen paket yang ditransmisikan diakui, nilai cwnd akan ditingkatkan sebesar 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.
Namun, laju pengiriman tidak selalu dapat meningkat; peningkatan tersebut harus berakhir suatu saat. Jadi, kapan peningkatan laju pengiriman berakhir? Slow-start biasanya mengakhiri peningkatan laju pengiriman dengan salah satu dari beberapa cara berikut:
Cara pertama adalah kasus packet loss selama proses pengiriman slow start. Ketika packet loss terjadi, TCP menetapkan cwnd congestion window pengirim menjadi 1 dan memulai ulang proses slow start. Pada titik ini, diperkenalkan konsep slow start threshold ssthresh yang nilai awalnya adalah setengah dari nilai cwnd yang menghasilkan packet loss. Artinya, ketika terdeteksi kongesti, nilai ssthresh adalah setengah dari nilai window.
Cara kedua adalah dengan berkorelasi langsung dengan nilai ambang batas slow-start ssthresh. Karena nilai ssthresh adalah setengah dari nilai jendela saat kemacetan terdeteksi, kehilangan paket dapat terjadi setiap kali penggandaan saat cwnd lebih besar dari ssthresh. Oleh karena itu, sebaiknya tetapkan cwnd ke ssthresh, yang akan menyebabkan TCP beralih ke mode kontrol kemacetan dan mengakhiri slow-start.
Cara terakhir agar slow start dapat berakhir adalah jika tiga ACK yang redundan terdeteksi, TCP melakukan transmisi ulang yang cepat dan memasuki status pemulihan. (Jika tidak jelas mengapa ada tiga paket ACK, hal itu akan dijelaskan secara terpisah dalam mekanisme transmisi ulang.)
Penghindaran Kemacetan
Ketika TCP memasuki status kontrol kongesti, cwnd ditetapkan menjadi setengah dari ambang batas kongesti 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 sebesar satu MSS (panjang segmen paket maksimum) setelah setiap transmisi selesai. Misalnya, bahkan jika 10 segmen paket diakui, nilai cwnd hanya akan meningkat sebesar satu MSS. Ini adalah model pertumbuhan linear dan juga memiliki batas atas pada pertumbuhan. Ketika terjadi kehilangan paket, nilai cwnd diubah menjadi MSS, dan nilai ssthresh ditetapkan menjadi setengah dari cwnd. Atau juga akan menghentikan pertumbuhan MSS ketika 3 respons ACK redundan diterima. Jika tiga ACK redundan masih diterima setelah nilai cwnd dikurangi setengahnya, nilai ssthresh dicatat sebagai setengah dari nilai cwnd dan status pemulihan cepat dimasukkan.
Pemulihan Cepat
Dalam status Fast Recovery, nilai cwnd dari jendela kongesti dinaikkan sebesar satu MSS untuk setiap ACK redundan yang diterima, yaitu ACK yang tidak datang secara berurutan. Hal ini dilakukan untuk memanfaatkan segmen paket yang telah berhasil ditransmisikan dalam jaringan guna meningkatkan efisiensi transmisi semaksimal mungkin.
Ketika ACK dari segmen paket yang hilang tiba, TCP menurunkan nilai cwnd dan kemudian memasuki status penghindaran kemacetan. Hal ini dilakukan untuk mengendalikan ukuran jendela kemacetan dan menghindari peningkatan kemacetan jaringan lebih lanjut.
Jika batas waktu terjadi setelah status kontrol kemacetan, kondisi jaringan menjadi lebih serius dan TCP bermigrasi dari status penghindaran kemacetan ke status mulai lambat. Dalam kasus ini, nilai jendela kemacetan cwnd ditetapkan ke 1 MSS, panjang segmen paket maksimum, dan nilai ambang batas mulai lambat ssthresh ditetapkan ke setengah dari cwnd. Tujuannya adalah untuk secara bertahap meningkatkan ukuran jendela kemacetan setelah jaringan pulih guna menyeimbangkan laju transmisi dan tingkat kemacetan jaringan.
Ringkasan
Sebagai protokol transportasi yang andal, TCP menerapkan transportasi yang andal melalui nomor urut, pengakuan, kontrol pengiriman ulang, manajemen koneksi, dan kontrol jendela. Di antara semuanya, 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 di pengirim dikontrol dengan menyesuaikan ukuran jendela kemacetan secara dinamis. Mulai lambat, penghindaran kemacetan, dan pemulihan cepat adalah tiga bagian utama dari algoritma kontrol kemacetan TCP, yang menyesuaikan ukuran jendela kemacetan melalui berbagai strategi untuk beradaptasi dengan kapasitas dan tingkat kemacetan jaringan.
Pada bagian berikutnya, kita akan membahas mekanisme transmisi ulang TCP secara terperinci. Mekanisme transmisi ulang merupakan bagian penting dari TCP untuk mencapai transmisi yang andal. Mekanisme ini memastikan transmisi data yang andal dengan mentransmisikan ulang data yang hilang, rusak, atau tertunda. Prinsip dan strategi implementasi mekanisme transmisi ulang akan diperkenalkan dan dianalisis secara terperinci di bagian berikutnya. Nantikan terus!
Waktu posting: 24-Feb-2025