Bingung dengan penyusunan ulang paket
Saya sedang membaca buku teks yang mengatakan tentang protokol TCP "Selective Repeat":
Kami berasumsi bahwa paket tidak dapat diatur ulang dalam saluran antara pengirim dan penerima. Ini umumnya merupakan asumsi yang masuk akal ketika pengirim dan penerima dihubungkan oleh satu kabel fisik. Namun, ketika "saluran" yang menghubungkan keduanya adalah jaringan, pengubahan urutan paket dapat terjadi. Pendekatan yang diambil dalam prakteknya adalah untuk memastikan bahwa nomor urut tidak digunakan kembali sampai pengirim “yakin” bahwa paket yang dikirim sebelumnya dengan nomor urut x tidak lagi dalam jaringan. Ini dilakukan dengan mengasumsikan bahwa paket tidak dapat "hidup" di jaringan lebih lama dari jumlah waktu maksimum yang tetap.
Saya bingung dan di bawah ini adalah dua pertanyaan saya.
Q1-Apa yang dimaksud dengan "saluran dapat dianggap sebagai paket penyangga pada dasarnya dan secara spontan memancarkan paket ini kapan saja di masa mendatang." berarti? Mengapa kita perlu buffer paket lama? Bukankah lebih baik penerima mengabaikannya saja?
Q2-Katakanlah ukuran jendela adalah 2 dan nomor urut yang tersedia adalah 0,1,2,3. Pengirim terlebih dahulu mengirimkan paket 0, paket 1, sedangkan paket 0 terpukul entah bagaimana dan membutuhkan banyak waktu untuk sampai, sehingga terjadi timeout pengirim harus mengirim paket 0 lagi, namun kali ini paket 0 (baru) tiba tepat waktu. Kemudian pengirim mengirimkan paket 2, paket 3, semuanya diterima oleh penerima. Dan kemudian pengirim akan mengirim paket 0 (baru), dan paket 1 (baru), tetapi paket lama 0 tiba di penerima sekarang, jadi penerima tidak dapat mengetahui bahwa paket ini adalah paket lama atau paket baru. Jadi bagaimana "dengan asumsi bahwa sebuah paket tidak dapat" hidup "di jaringan lebih lama dari beberapa waktu maksimum tetap" dapat memperbaiki masalah ini? Apakah itu berarti header paket berisi waktu pengirimannya?
Jawaban
Apa artinya "saluran dapat dianggap sebagai paket penyangga pada dasarnya dan secara spontan memancarkan paket ini kapan saja di masa mendatang." berarti? mengapa kita perlu buffer paket lama? Bukankah lebih baik penerima mengabaikannya saja?
Itulah sifat antrian dan buffering yang merupakan bagian penting dari packet switching - paket yang diterima akan diantrekan / disangga pada ingress dan dihapus dari antrian setelah diteruskan. Buffering diperlukan karena jika tidak, tautan keluar akan selalu gratis setiap kali paket diterima - itu tidak mungkin untuk jaringan packet-switched, hanya untuk circuit-switched.
Misalkan ukuran jendela adalah 2 dan nomor urut yang tersedia adalah 0,1,2,3.
Jendela tidak menghitung paket / datagram tetapi byte . Selain itu, nomor urut hanya diulang ketika bidang 32-bitnya meluap - itu terjadi hanya setelah 4 GiB data. Namun, batasan itu berarti bahwa tidak boleh ada lebih dari 4 Gib data "dalam penerbangan" untuk menghindari ambiguitas. Karena kemungkinan jendela terbesar adalah (mendekati) 1 GiB, itu bukan masalah.
Perhatikan bahwa dengan ACK kumulatif yang sederhana, penerima tidak dapat memilih ACK segmen selanjutnya secara selektif ketika segmen sebelumnya masih hilang. ACK berarti semua data sebelumnya telah diterima.
Misalnya, dengan ukuran segmen 1.000 dan ukuran jendela 10.000, pengirim mengirimkan datagram D00-D09 (urutan 0-9.999). D00 dan D02-D09 diterima, tetapi D01 hilang. Penerima masih ACK 1.000 (urutan data yang diharapkan berikutnya) yang memicu pengirim untuk memindahkan D0 keluar dari jendela, memajukannya ke 1.000-10.999, dan mengirim D10.
Sementara itu penerima telah memutuskan bahwa ada masalah, jadi ACK 1.000 lagi untuk menandakan hal itu. Pengirim menerima ACK ganda dan mengirim ulang D01 (mode enggan) atau semua data mulai dari D01 (mode agresif). Penerima sudah mendapat D10 (10.000-10.999), jadi ACK 11.000 yang pada gilirannya memindahkan jendela pengirim ke 11.000-20.999 (dan membatalkan transmisi ulang yang masih luar biasa, untuk mode agresif).
(Saya telah menyederhanakan prosesnya, pada kenyataannya ada lebih banyak tumpang tindih paralel, dan penundaan antara kirim dan terima, tentu saja.)
EDIT: Seperti Jeff telah menunjukkan dengan benar (thx!), Dukungan untuk ucapan terima kasih selektif (SACK) hampir diberikan hari ini. Dengan menggunakan opsi itu, penerima juga dapat SACK 2.000-9.999 (dari D02-D09) segera, jadi pengirim tidak akan mulai mentransmisikannya kembali. Itu juga bisa mulai mentransmisikan 11.000-20.999 lebih awal.