Topik temu duga representatif

Temu Duga Rangkaian: Bagaimanakah TCP Mengesan dan Pulih daripada Kehilangan Paket?

UmumSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Penghantar menghantar lima segmen data TCP 1,000 bait berturut-turut bermula pada nombor jujukan 1,000. Segmen kedua hilang dan tiga segmen seterusnya sampai kepada penerima. Terbitkan jujukan ACK, SACK, dan penghantaran semula, kemudian bandingkan tamat masa, penghantaran semula pantas, dan sempadan pengesanan kehilangan moden.

Kehendak soalan dan skop

Penghantar menghantar lima segmen data TCP 1,000 bait berturut-turut bermula pada nombor jujukan 1,000. Segmen kedua hilang dan tiga segmen seterusnya sampai kepada penerima. Terbitkan jujukan ACK, SACK, dan penghantaran semula, kemudian bandingkan tamat masa, penghantaran semula pantas, dan sempadan pengesanan kehilangan moden.

Andaikan sambungan telah diwujudkan, kesemua lima segmen membawa data, tetingkap terima dan tetingkap kesesakan membenarkan kesemua lima segmen berada dalam penerbangan (in flight), penerima boleh menimbal data yang tidak mengikut susunan, dan SACK telah dirundingkan semasa jabat tangan (handshake). Nombor jujukan mengira bait, dan julat di bawah adalah separuh terbuka. Tanpa SACK, penaakulan ACK kumulatif dan penghantaran semula pantas klasik masih terpakai; penghantar cuma kehilangan maklumat tentang bait jujukan lebih tinggi yang telah tiba.

Soalan ini sesuai untuk peranan bahagian belakang (backend), infrastruktur, SRE, klien, rangkaian, dan kejuruteraan perisian am. Kompetensi terasnya ialah menerbitkan dan mengesahkan keadaan protokol pengangkutan, jadi kategorinya ialah general. Ia tidak bertanyakan tentang pengasingan rentas strim HTTP/3 atau pewujudan, penamatan, dan TIME_WAIT TCP.

Perkara yang dinilai oleh penemu duga

Pertama, bolehkah calon menyatakan unit dengan betul? TCP menomborkan bait. Nombor jujukan segmen mengenal pasti bait data pertamanya, dan ACK kumulatif menamakan bait seterusnya yang dijangkakan oleh penerima; ia bukan pembilang paket.

Kedua, bolehkah calon menerbitkan garis masa? Sebaik sahaja segmen kedua hilang, segmen terkemudian yang tidak mengikut susunan tidak memajukan ACK kumulatif, tetapi ia menghasilkan ACK pendua. ACK pendua ketiga ialah isyarat penghantaran semula pantas RFC 5681 yang klasik. Mengira ACK yang mula-mula memperakui segmen A sebagai pendua akan menghasilkan jawapan yang tersasar sebanyak satu (off-by-one).

Ketiga, bolehkah calon memisahkan mekanisme pemulihan? RTO meliputi kehilangan yang tidak menghasilkan maklum balas ACK yang mencukupi. Penghantaran semula pantas menggunakan ACK pendua yang dijana oleh data terkemudian untuk pulih lebih awal. SACK menerangkan blok bait tidak bersebelahan yang diterima supaya penghantar boleh mengelak daripada menghantar semula data yang telah dihantar, tetapi ia tidak menggantikan ACK kumulatif mahupun mengawal tetingkap kesesakan secara berasingan.

Keempat, bolehkah calon menerangkan ketidaktentuan? Penyusunan semula atau replikasi juga boleh menghasilkan ACK pendua, dan lonjakan RTT boleh menyebabkan tamat masa tanpa kehilangan sebenar. Penghantaran yang boleh dipercayai, pengesanan kehilangan, dan kawalan kesesakan saling berinteraksi, tetapi ia merupakan konsep yang berbeza.

Kelima, bolehkah jawapan melangkaui slogan buku teks? Calon yang mantap akan menerangkan sebab penerbangan kecil atau kehilangan ekor mungkin tidak menghasilkan tiga ACK pendua dan menyatakan bahawa pelaksanaan boleh menggunakan RACK-TLP untuk mengurangkan pergantungan pada ambang kiraan paket tetap dan RTO dengan menggabungkan masa penghantaran dengan maklum balas SACK.

Soalan penjelasan

  • Adakah nombor jujukan dan panjang dinyatakan dalam bait? Tukarkan label paket relatif kepada julat bait terlebih dahulu. SYN dan FIN juga menggunakan ruang jujukan, tetapi masalah ini hanya mengandungi data pada sambungan yang telah diwujudkan.
  • Adakah SACK dirundingkan semasa jabat tangan? Tanpanya, pemulihan bergantung pada ACK kumulatif dan algoritma pilihan penghantar. Dengannya, ACK pendua boleh membawa blok tidak mengikut susunan yang diterima.
  • Adakah penerbangan (flight) cukup besar untuk menjana tiga ACK pendua? Sekurang-kurangnya tiga segmen baharu selepas jurang mesti tiba untuk membekalkan isyarat klasik. Segmen ekor yang hilang biasanya tidak mempunyai data terkemudian untuk mencipta ACK tersebut.
  • Adakah kita menerangkan RFC 5681 atau satu kernel yang konkrit? Ambang klasik berguna untuk penerbitan. Tindanan sebenar mungkin menggunakan ambang yang boleh dikonfigurasikan, pemulihan SACK, RACK-TLP, atau sambungan lain, jadi kesimpulan surihan paket memerlukan sistem pengendalian dan versinya.
  • Adakah matlamatnya ketepatan protokol atau diagnosis prestasi? Ketepatan menerangkan penghantaran mengikut susunan pada akhirnya. Diagnosis juga memerlukan RTT, RTO, keadaan kesesakan, penyusunan semula, titik tangkapan, dan tingkah laku offload NIC.

Rangka jawapan 30 saat

“Nombor jujukan TCP mengira bait, dan ACK kumulatif ialah bait seterusnya yang dijangkakan. Segmen A meliputi 1,000 hingga 1,999, jadi penerimaannya menghasilkan ACK 2,000. Segmen B, yang meliputi 2,000 hingga 2,999, hilang. Tiga segmen seterusnya boleh ditimbal, tetapi jurang masih bermula pada 2,000, jadi setiap satunya menghasilkan satu lagi ACK 2,000. Jika SACK dirundingkan, ACK tersebut juga melaporkan bait yang diterima daripada 3,000 hingga 5,999.

Pada laluan klasik RFC 5681, ACK pendua ketiga mencetuskan penghantaran semula pantas bagi bait 2,000 hingga 2,999 tanpa menunggu RTO. Sebaik sahaja jurang diisi, ACK kumulatif mara terus ke 6,000. Jika penerbangan terlalu kecil, ekor hilang, atau maklum balas ACK terhenti, penghantar mungkin memerlukan RTO. RTO diterbitkan daripada RTT yang diratakan dan variasi RTT, kemudian diundurkan secara eksponen selepas tamat masa, dengan pengurangan tetingkap kesesakan yang lebih kuat. SACK meningkatkan ketepatan pemulihan untuk berbilang jurang. RACK-TLP moden juga boleh menggunakan masa penghantaran, maklum balas SACK, dan kuar untuk mengesan kehilangan ekor atau kehilangan penghantaran semula dengan lebih awal. Dalam surihan, saya akan mengaitkan ACK kumulatif, blok SACK, pemasaan penghantaran semula, dan tindanan TCP sebenar dan bukannya menganggap penyusunan semula atau label penganalisis sebagai bukti kehilangan.”

Perincian langkah demi langkah

Langkah 1: Tetapkan julat bait dan ACK kumulatif

Lima julat bait logik tersebut ialah:

text
A: SEQ=1000, LEN=1000 -> [1000, 2000)  delivered
B: SEQ=2000, LEN=1000 -> [2000, 3000)  lost
C: SEQ=3000, LEN=1000 -> [3000, 4000)  delivered
D: SEQ=4000, LEN=1000 -> [4000, 5000)  delivered
E: SEQ=5000, LEN=1000 -> [5000, 6000)  delivered

Selepas A tiba, penerima memegang bait 1,000 hingga 1,999 secara bersebelahan, jadi ia menghantar ACK=2000. ACK ini memajukan sempadan perakuan buat kali pertama. Ia adalah ACK baharu, bukan pendua.

Selepas B hilang, C boleh diterima dalam tetingkap terima tetapi tidak dapat mengisi jurang yang bermula pada 2,000. Penerima boleh menimbal C, manakala perakuan kumulatifnya kekal ACK=2000. Perkara yang sama berlaku untuk D dan E. RFC 9293 mentakrifkan medan ACK sebagai nombor jujukan seterusnya yang dijangkakan oleh rakan penerima, itulah sebabnya ia tidak melompat ke hujung setiap segmen yang tidak mengikut susunan.

Langkah 2: Terbitkan tiga ACK pendua dan penghantaran semula pantas

Pada laluan klasik RFC 5681, setiap ketibaan C, D, dan E menyebabkan ACK=2000 pendua serta-merta:

text
Receive A             -> ACK 2000                     new ACK
Receive C; B is absent -> ACK 2000 + SACK [3000,4000) duplicate ACK 1
Receive D; B is absent -> ACK 2000 + SACK [3000,5000) duplicate ACK 2
Receive E; B is absent -> ACK 2000 + SACK [3000,6000) duplicate ACK 3
Sender retransmits B   -> SEQ 2000, LEN 1000
Receiver gets B        -> ACK 6000                     gap closes

Apabila ACK pendua ketiga sampai kepada penghantar, ia membuat kesimpulan bahawa B berkemungkinan hilang dan membuat penghantaran semula pantas [2000,3000) dan bukannya menunggu pemasa penghantaran semula. C, D, dan E telah pun ditimbal. Apabila B tiba, julat bersebelahan memanjang serta-merta sehingga bait 5,999, jadi ACK kumulatif boleh bergerak terus dari 2,000 ke 6,000.

Tiga ACK pendua ialah heuristik kehilangan, bukan bukti matematik. Penyusunan semula rangkaian boleh menghantar data jujukan lebih tinggi terlebih dahulu dan menghasilkan corak ACK yang sama. Segmen data atau ACK yang direplikasi juga boleh menghasilkannya. Ambang tersebut mengimbangi pembaikan yang lebih pantas dengan salah mengklasifikasikan penyusunan semula, dan tindanan sebenar mungkin menambah algoritma lain.

Langkah 3: Nyatakan perkara yang ditambah oleh SACK dan perkara yang tidak

ACK kumulatif hanya menyatakan bahawa semua data di bawah 2,000 telah tiba secara bersebelahan. Pilihan SACK boleh melaporkan tambahan blok tidak bersebelahan yang dipegang dalam penimbal terima, seperti [3000,6000). Ia menutup jurang maklumat: penghantar mengetahui data jujukan lebih tinggi telah tiba dan boleh melangkau blok tersebut semasa membaiki beberapa ruang kosong.

SACK mempunyai tiga sempadan penting:

  1. SACK-Permitted mesti dirundingkan dalam pertukaran SYN sebelum penerima boleh membawa blok SACK dalam ACK terkemudian.
  2. Blok SACK tidak memajukan ACK kumulatif dari 2,000 ke 6,000. Hanya pengisian [2000,3000) yang memajukan sempadan bersebelahan.
  3. SACK ialah maklumat penerima yang bersifat nasihat. Ia membantu penghantar mengekalkan papan skor pemulihan; algoritma penghantar masih memilih susunan penghantaran semula dan tindak balas kesesakan.

Jika kedua-dua B dan D hilang, satu penghantaran semula pantas pada mulanya hanya membaiki B. Pemulihan klasik tanpa SACK mempunyai kurang maklumat tentang sama ada D telah tiba. SACK boleh melaporkan blok C dan E yang berasingan, membolehkan penghantar mengenal pasti kedua-dua jurang dengan lebih tepat dan mengelak daripada menghantar semula C dan E yang telah ditimbal.

Langkah 4: Terangkan sebab RTO kekal perlu

Penghantaran semula pantas bergantung pada maklum balas ACK. Jika penghantar hanya menghantar A dan B dan kehilangan segmen ekor B, tiada C, D, atau E yang tiba untuk mencipta ACK pendua. Jika laluan ACK songsang juga gagal, penghantar juga tidak dapat mengumpul tiga pendua. Pemasa penghantaran semula ialah jaring keselamatan terakhir.

RFC 6298 mengekalkan masa ulang-alik yang diratakan SRTT, variasi ulang-alik RTTVAR, dan granulariti jam G:

text
For the first RTT sample R:
SRTT   = R
RTTVAR = R / 2
RTO    = SRTT + max(G, 4 * RTTVAR)

For a later sample R':
RTTVAR = (1 - 1/4) * RTTVAR + 1/4 * abs(SRTT - R')
SRTT   = (1 - 1/8) * SRTT   + 1/8 * R'
RTO    = SRTT + max(G, 4 * RTTVAR)

Sebagai contoh, dengan sampel pertama R=120 ms dan G tidak lebih daripada 240 ms, SRTT=120 ms, RTTVAR=60 ms, dan formula mentah memberikan 360 ms. RFC 6298 mengesyorkan membundarkan RTO di bawah satu saat ke atas kepada satu saat, dan mengesyorkan RTO permulaan satu saat sebelum sampel RTT wujud. Kernel sebenar mungkin menggunakan algoritma yang lebih baharu dan butiran pelaksanaan, jadi selang masa yang tidak tepat satu saat tidak dengan sendirinya menyangkal pemulihan tamat masa.

Apabila pemasa tamat tempoh, penghantar menghantar semula data tertua yang belum diperakui dan menggandakan RTO sebelum memulakan semula pemasa. Pengunduran eksponen mengelakkan penyuntikan data berulang kali ke dalam laluan yang sesak atau rosak secara berterusan. Mengukur RTT secara langsung daripada segmen yang dihantar semula mewujudkan kekaburan: adakah ACK tersebut merangkumi segmen asal atau penghantaran semula? Tanpa cap masa yang menyelesaikan kekaburan tersebut, algoritma Karn mengecualikan sampel itu daripada kemas kini RTT.

Langkah 5: Asingkan pemulihan kebolehpercayaan daripada tindak balas kesesakan

Penghantaran semula menjawab soalan "bagaimanakah kita menggantikan bait yang hilang?" Kawalan kesesakan menjawab soalan "berapa banyak data yang boleh kekal dalam penerbangan selepas itu?" Isyarat kehilangan mempengaruhi kedua-duanya, tetapi kedua-dua tugas itu berbeza.

RFC 5681 klasik menganggap RTO sebagai isyarat yang lebih kuat. ssthresh tidak lebih daripada max(FlightSize/2, 2*SMSS), dan cwnd jatuh kepada tidak lebih daripada satu segmen bersaiz penuh sebelum mula perlahan bersambung semula. Tiga ACK pendua menunjukkan bahawa segmen terkemudian masih tiba dan jam ACK masih bertahan, jadi penghantar memasuki penghantaran semula pantas dan pemulihan pantas, mengurangkan tetingkap tanpa mengenakan penetapan semula RTO yang sama.

Kawalan aliran ialah satu lagi had yang berasingan. rwnd yang diiklankan oleh penerima melindungi kapasiti penimbal terima, manakala cwnd penghantar melindungi rangkaian. Kedua-duanya mengekang penghantaran sebenar. SACK menerangkan keadaan penerimaan; ia tidak membesarkan rwnd mahupun cwnd.

Langkah 6: Tambah sempadan RACK-TLP moden

Peraturan tiga ACK pendua yang tetap mempunyai prestasi yang lemah untuk penerbangan pendek, kehilangan ekor, penghantaran semula yang hilang, dan penyusunan semula yang ketara. RFC 8985 mengesyorkan RACK-TLP sebagai alternatif kepada pengiraan ACK pendua tradisional. RACK menggabungkan masa penghantaran terkini bagi setiap segmen, RTT, dan maklum balas SACK untuk membuat kesimpulan sama ada penghantaran terdahulu hilang. TLP menghantar kuar apabila maklum balas ACK jarang berlaku berhampiran ekor, cuba memulihkan jam ACK sebelum RTO.

Jawapan temu duga harus terlebih dahulu menerbitkan mekanisme klasik dan kemudian menyatakan sempadan pelaksanaan. Surihan sebenar mungkin menunjukkan pemulihan dengan kurang daripada tiga ACK pendua atau kuar ekor. Semak algoritma dan versi tindanan. Menyatakan bahawa setiap pelaksanaan "menunggu tepat tiga pendua atau sentiasa menunggu RTO" tersilap menganggap model pengajaran sebagai tingkah laku semasa yang lengkap.

Langkah 7: Sahkan dengan bukti paket, bukan kiraan penghantaran semula

Bina garis masa yang boleh diselaraskan merentas pemerhatian:

  1. Tangkap pada penghantar dan penerima untuk mengesan di mana segmen asal hilang dan bukannya bergantung pada satu sudut pandangan.
  2. Jajarkan SEQ, LEN, ACK kumulatif, dan blok SACK untuk membuktikan bahawa jurang bait wujud.
  3. Kira pendua hanya selepas ACK baharu sebelumnya; jangan kira ACK garis dasar itu sendiri.
  4. Bandingkan masa penghantaran semula dengan ACK pendua ketiga atau RTO yang dijangkakan, kemudian periksa keadaan kesesakan, RTT, dan algoritma pemulihan tindanan.
  5. Kaitkan kelewatan aplikasi dengan kehilangan antara muka, penyusunan semula, dan isyarat giliran daripada menetapkan punca utama daripada satu label Wireshark semata-mata.

Nilai tcp.analysis.fast_retransmission, tcp.analysis.retransmission, dan tcp.analysis.duplicate_ack Wireshark ialah kesimpulan penganalisis daripada tangkapan yang tersedia, bukan bendera yang dibawa dalam pengepala TCP. TSO dan GRO juga boleh menjadikan sempadan segmen tangkapan hos berbeza daripada paket pada wayar fizikal. Kesimpulan penting memerlukan semakan silang dengan ruang jujukan dan pemasaan kedua-dua titik akhir.

Contoh jawapan berkualiti tinggi

“Saya akan menerbitkannya dalam ruang jujukan bait. A mempunyai SEQ=1000 dan panjang 1,000, jadi selepas menerima A, penerima seterusnya menjangkakan bait 2,000 dan menghantar ACK 2,000 baharu. B meliputi bait 2,000 hingga 2,999 dan hilang. C, D, dan E meliputi bait 3,000 hingga 5,999 dan tiba, tetapi tiada yang mengisi jurang pada 2,000. Oleh itu, ACK kumulatif kekal pada 2,000. Setiap segmen yang tidak mengikut susunan menjana satu ACK pendua. Jika SACK dirundingkan, penerima juga melaporkan secara progresif bahawa bait 3,000 hingga 5,999 telah ditimbal.

Di bawah tingkah laku klasik RFC 5681, C, D, dan E menghasilkan tiga ACK pendua untuk 2,000. Yang ketiga menyebabkan penghantar membuat penghantaran semula pantas bagi B tanpa menunggu RTO. Apabila B tiba, penimbal terima menjadi bersebelahan dan ACK kumulatif melompat terus ke 6,000. Ralat tersasar satu yang biasa berlaku ialah mengira ACK 2,000 pertama selepas A sebagai pendua; ia adalah ACK baharu yang memajukan sempadan.

Jika kehilangan berlaku pada ekor atau penerbangan terlalu kecil, tiga segmen terkemudian tidak wujud, jadi RTO ialah jaring keselamatan terakhir. RTO dianggarkan daripada RTT yang diratakan ditambah empat kali ganda variasi RTT, dan RFC 6298 menggunakan pengunduran eksponen selepas tamat masa. RTO biasanya menyebabkan pengurangan tetingkap kesesakan yang lebih kuat berbanding pemulihan pantas kerana jam ACK mungkin telah terhenti. SACK memberitahu penghantar bait lebih tinggi tidak bersebelahan yang telah tiba, yang amat berguna untuk berbilang jurang. Ia tidak memajukan ACK kumulatif dengan sendirinya dan bukan algoritma kawalan kesesakan.

Tindanan sebenar juga mungkin menggunakan RACK-TLP untuk membuat kesimpulan kehilangan daripada masa penghantaran dan maklum balas SACK serta untuk menyiasat kehilangan ekor. Tiga ACK pendua ialah penerbitan klasik yang diperlukan, bukan satu-satunya pencetus yang mungkin dalam setiap surihan. Dalam diagnosis, saya akan menjajarkan nombor jujukan, panjang, ACK kumulatif, blok SACK, dan masa penghantaran semula pada kedua-dua titik akhir, memeriksa tetapan tindanan dan offload, dan kemudian membezakan kehilangan sebenar daripada penyusunan semula, kehilangan laluan ACK, atau kesimpulan penganalisis.”

Kesilapan lazim

  • Menganggap ACK sebagai nombor paket → TCP memperakui ruang bait yang bersebelahan → terbitkan bait seterusnya yang dijangkakan dengan SEQ + LEN.
  • Mengira ACK 2,000 selepas A sebagai pendua 1 → ia memajukan sempadan kumulatif buat kali pertama → mula mengira ACK terkemudian dengan nombor yang sama yang tidak memajukannya.
  • Mendakwa C menghasilkan ACK 4,000 → jurang bait pada B kekal → kekalkan ACK kumulatif pada 2,000 dan laporkan C dengan SACK.
  • Mendakwa SACK menggantikan ACK kumulatif → TCP masih memajukan sempadan bersebelahan secara kumulatif → anggap SACK sebagai maklumat blok tidak bersebelahan tambahan.
  • Mendakwa tiga pendua membuktikan kehilangan → penyusunan semula dan replikasi boleh menghasilkan isyarat yang sama → gelarkannya sebagai heuristik kehilangan klasik dan sahkan garis masa.
  • Mendakwa setiap kehilangan akan dihantar semula secara pantas → kehilangan ekor atau penerbangan kecil mungkin tidak menghasilkan ACK pendua yang mencukupi → kekalkan RTO dan terangkan penambahbaikan RACK-TLP.
  • Menggabungkan penghantaran semula dan kawalan kesesakan → membaiki data dan mengehadkan kadar penghantaran menyelesaikan masalah yang berbeza → nyatakan tindakan pemulihan, cwnd, dan rwnd secara berasingan.
  • Menganggap label Wireshark sebagai bit protokol pada wayar → label tersebut disimpulkan daripada konteks tangkapan dan mungkin diputarbelitkan oleh offloadbuat semakan silang ruang jujukan dan pemasaan kedua-dua titik akhir.

Soalan susulan

Soalan susulan 1: Jika hanya dua segmen dihantar dan segmen kedua hilang, adakah penghantaran semula pantas berlaku?

Bukan pada laluan klasik. Tiada data jujukan lebih tinggi yang sampai kepada penerima, jadi ia tidak dapat menjana tiga ACK pendua. Penghantar biasanya menunggu RTO. Tindanan RACK-TLP mungkin menghantar kuar kehilangan ekor untuk meminta maklum balas, tetapi RTO masih menyediakan sandaran jika kuar itu gagal.

Soalan susulan 2: Bagaimana jika C hanya disusun semula dan B tiba kemudian pada penghantaran asalnya?

Menerima C menjana ACK 2,000 pendua dan blok SACK yang sepadan. Jika B tiba sebelum ambang kehilangan dicapai, ACK kumulatif akan mara dan penghantaran semula dapat dielakkan. Jika penyusunan semula cukup mendalam untuk mencetuskan tiga pendua terlebih dahulu, penghantaran semula pantas klasik mungkin palsu. RACK menggunakan tetingkap penyusunan semula berasaskan masa untuk mengurangkan mod kegagalan ambang paket tetap ini.

Soalan susulan 3: Mengapakah SACK lebih berharga apabila kedua-dua B dan D hilang?

Penerima boleh melaporkan blok C dan E yang telah dihantar. Penghantar menggunakan maklumat tersebut dalam papan skor jurang, melangkau julat yang telah di-SACK, dan membaiki B dan D. Tanpa SACK, ACK kumulatif hanya mendedahkan jurang paling kiri. Reno klasik mempunyai kurang maklumat tentang berbilang kehilangan dalam satu tetingkap dan mungkin memerlukan ACK separa atau akhirnya RTO.

Soalan susulan 4: Jika sampel RTT pertama ialah 120 ms, mengapa tidak menetapkan RTO kepada 120 ms?

RTT berubah-ubah mengikut giliran dan perubahan laluan. RFC 6298 mengasaskan RTTVAR kepada R/2; apabila G tidak lebih besar daripada 4 × RTTVAR, RTO mentah ialah R + 4 × R/2 = 3R. Itu adalah 360 ms di sini, dan RFC mengesyorkan membundarkannya ke atas kepada sekurang-kurangnya satu saat. Menggunakan satu RTT secara terus akan menyebabkan variasi kecil menghasilkan tamat masa palsu dan penghantaran semula yang tidak perlu.

Soalan susulan 5: Tangkapan menunjukkan penghantaran semula tetapi bukan tiga ACK pendua. Adakah itu membuktikan RTO?

Tidak. Tangkapan mungkin terlepas ACK laluan songsang, sudut pandangan mungkin sebelum atau selepas offload, dan tindanan mungkin menggunakan RACK-TLP atau algoritma pemulihan lain. Bandingkan penghantaran semula dengan pemasaan ACK sebelumnya, periksa SACK dan kuar ekor, periksa keadaan kernel bahagian penghantar, dan lengkapkan bukti dengan tangkapan bahagian penerima.

Soalan susulan 6: Mengapakah tindak balas kesesakan selepas tamat masa biasanya lebih kuat berbanding selepas pemulihan pantas?

Tiga ACK pendua menunjukkan bahawa segmen terkemudian sedang meninggalkan rangkaian dan sampai kepada penerima, jadi jam ACK masih berjalan. RTO mungkin bermakna keseluruhan penerbangan atau laluan maklum balas tidak mencatatkan sebarang kemajuan. Oleh itu, RFC 5681 klasik mengurangkan cwnd kepada tidak lebih daripada satu segmen bersaiz penuh dan memulakan semula mula perlahan selepas tamat masa, manakala pemulihan pantas mengekalkan tetingkap penghantaran yang dikurangkan.

Sumber awam

Soalan berkaitan