Deskripsi terbaik yang pernah saya dengar yang menjelaskan metode pelambatan inheren TCP adalah dari podcast Security Now baru-baru ini . Mengutip Steve Gibson:
Jadi dengan persetujuan universal, TCP menjadi protokol yang sangat pintar, ia melakukan sesuatu yang disebut "awal yang lambat." Biasanya diberikan izin untuk mengirim sejumlah paket tanpa pemberitahuan. Jadi idenya, mari kita bergerak di sini. Dan biasanya angka itu adalah dua. Jadi ketika TCP dimulai, ia dapat mengirim dua paket, satu demi satu. Tanpa yang pertama diakui, itu akan mengirim yang kedua. Tapi kemudian menunggu. Dan kemudian aturan untuk pelambatan adalah kami mengizinkan jumlah paket yang tidak diakui meningkat satu per setiap pengakuan yang kami terima.
Jadi mari kita pikirkan tentang itu. Kami mengizinkan jumlah paket yang tidak diakui meningkat satu per setiap pengakuan yang kami terima. Jadi kami pertama-tama mengirim dua paket sebagai awal yang telah disepakati. Mereka diakui. Jadi kami memiliki pengakuan pertama kami. Kami membiarkan diri kami mengirim dua. Sekarang, dengan diterimanya pengakuan pertama ini, kami menambah satu hingga tiga. Jadi kita sekarang dapat mengirim tiga paket lagi tanpa pemberitahuan lebih lanjut. Ketika sebuah pengakuan datang kembali untuk apa pun yang kami kirim sebelumnya, kami meningkatkannya menjadi empat. Ini dikenal sebagai "jendela kemacetan." Ini bukan jendela yang pernah dikirim di telepon, artinya, tidak seperti jendela terima, yang merupakan 16 bit header TCP yang memberi tahu kami berapa banyak data yang dapat kami kirim ke depan. Yang ini - ini jendela. Itu'
Jika kami terus meningkatkan jumlah paket yang tidak diakui, kami diizinkan mengirimkannya setiap kali kami menerima pemberitahuan, pada titik tertentu kami akan mencapai batas. Dan keindahan dari sistem ini adalah bahwa hal itu akan terjadi, ketika kita mulai mencoba mengirim paket lebih cepat daripada tautan terlemah, secara harfiah tautan, antar router, pada titik tertentu kita menemukan titik di mana tautan terlemah terputus. Ini menjatuhkan paket yang kami coba kirim karena kami mencoba mengirimnya terlalu cepat. Jadi ucapan terima kasih dari ujung yang lain berhenti karena data tidak lagi dapat diterima.
Dan apa yang dilakukan TCP adalah, jika gagal menerima - dan ini bervariasi dalam strategi. Seiring berjalannya waktu, strateginya, strategi penghindaran kemacetan yang sebenarnya sangat bervariasi. Ada nama-nama seperti Tahoe dan Reno, dan sejumlah besar lainnya yang akan Anda lihat jika Anda melakukan beberapa Googling dan Wikipedia, yang secara spesifik persis seperti apa perilaku tersebut. Tetapi idenya adalah bahwa, ketika pengirim menyadari bahwa datanya tidak lagi melewati karena tidak ada pengakuan, ia mengurangi tingkat pengirimannya dengan cepat. Biasanya, membaginya menjadi dua. Jadi secara dramatis skala itu kembali, dan kemudian kembali untuk meningkatkannya.
Jadi pada dasarnya apa artinya ini adalah bahwa kehilangan paket adalah fungsi pensinyalan untuk "Kami tidak dapat mengirim data lebih cepat," dan bahwa pengirim TCP di setiap ujung koneksi, di seluruh Internet, selalu semacam - mereka ' sedang mencoba untuk pergi lebih cepat daripada kecepatan maksimum yang tersedia antara dua titik akhir, yaitu, tautan terlemah, di mana pun itu, dan mereka selalu mendorongnya ke batas. Jadi mengingat ada titik di suatu tempat yang lebih lemah daripada kemampuan mereka untuk mengirim paket, mereka akan menemukannya karena mereka akan memompa paket keluar. Selama ada data yang akan dikirim dan mereka punya koneksi bandwidth tinggi, pengirim akan meningkatkan tingkat pengiriman, yaitu, jumlah paket yang luar biasa, paket-paket yang diizinkan untuk berada di luar sana dengan cepat sebagai ucapan terima kasih kembali, secara agresif terus memindahkan nomor itu ke atas sampai mendorongnya terlalu jauh. Kemudian banyak mundur, dan kemudian kembali bergerak maju.
Jadi inilah yang sebenarnya terjadi di antara koneksi TCP yang, seperti, mungkin, saya tidak tahu berapa persen, tetapi persentase lalu lintas terbesar di Internet adalah melalui koneksi TCP. Semua sistem operasi kami di kernel, dalam apa yang disebut TCP stack, memiliki penghitung ini. Dan ketika kita mengirim file, ketika kita mengunggah file besar atau kita menerima halaman web, server di ujung yang lain melakukan hal yang sama. Ini mendorong, berdasarkan koneksi individual, karena banyak paket yang belum diakui sejauh yang dapat, meningkatkan kecepatan paket sampai mencapai titik di mana ia mulai gagal atau gagap. Kemudian mundur, untuk semacam memungkinkan hal-hal untuk pulih, dan kemudian mulai bekerja kembali.
Dan itu akhirnya menjadi semacam sistem pelambatan diri yang, mengingat kendala, maksud saya, sepertinya agak funky dan kasar. "