Lompat ke konten

Simulator interaktif

Amati sebuah koneksi jaringan menentukan kecepatannya sendiri.

Tidak ada yang memberitahunya. Ia harus menebak.

Geser satu slider dan setiap paket disimulasikan ulang: sender mempercepat diri, antrean di titik lambat terisi, dan ketika meluap lajunya runtuh. Tidak ada yang digambar dari rumus di sini.

Berjalan di peramban. Tidak perlu instal apa pun.

Congestion windowKedalaman antreanPaket hilang

20.0 Mbps · RTT dasar 50.0 ms · RENO · 30 s

Run itu, satu siklus demi satu siklus

Setiap angka di bawah dibaca langsung dari run pada grafik di atas — bukan ilustrasi. Ikuti sekali, dan sisa situs ini adalah loop yang sama dalam kondisi berbeda.

  1. 010 s

    Sender mulai dengan 10 segmen di perjalanan — 14.1 KiB. Ia tidak tahu apa-apa tentang kapasitas link, dan tidak akan ada yang memberitahunya.

  2. 02141 ms

    Jadi ia menggandakan diri setiap round trip — 10, 20, 40 — dan setelah 3 round trip ia mencapai 40 segmen. Itulah "slow start", dan ia hanya pelan di saat-saat awal.

  3. 0386 + 86

    Dua batas yang tidak ia lihat. Kabelnya sendiri menampung 86 segmen (122.1 KiB, si BDP) — itu kapasitas × round trip, jumlah yang bisa berada di perjalanan sekaligus. Lebihnya menunggu di buffer bottleneck, yang menampung 86 lagi. Belum ada yang hilang; antreannya saja yang memanjang, dan round trip-nya ikut.

  4. 048310 ms

    Buffer penuh, jadi paket berikutnya yang datang dibuang. Ini satu-satunya pesan yang pernah dikirim balik oleh jaringan, dan bentuknya keheningan, bukan pesan.

  5. 058412 ms

    Sender baru mengetahuinya 102 ms kemudian. Itu satu round trip sebagaimana keadaannya saat itu — 50.0 ms kabel ditambah sekitar 51.9 ms menunggu di antrean yang baru saja ia penuhi — karena loss disimpulkan dari duplicate ACK, yang tidak bisa kembali lebih cepat. Buffer yang lebih penuh membuat umpan balik ini lebih lambat, dan itulah inti keberatan terhadap buffer besar. Lalu ia memotong: 174 segmen jadi 87, kira-kira setengahnya. Semua yang ia ketahui tentang jaringan sebasi ini.

  6. 06× 4

    Dari situ ia menanjak satu segmen per round trip sampai melampaui batas lagi. Itu terjadi 4 kali dalam 30 detik, dan itulah geriginya. Tidak ada yang merancang bentuknya — ini loop tersebut, digambar. Hitungan segmen di sini tepat hanya karena setiap segmen dalam model ini satu MSS; stack sungguhan bervariasi.

Baru pertama kali?

Bagaimana sebuah koneksi menemukan kecepatannya

sendermengirim sekencang mungkinbuffersisanya menunggu di sinidibuang — satu-satunya sinyal balikhanya bisa meneruskan secepat inibottleneckreceiverACK
  1. 01

    Kirim sedikit, lalu lebih banyak

    Koneksi baru mulai hati-hati dan menggandakan kirimannya setiap round trip. Dalam sedetik ia sudah jauh lebih cepat daripada awalnya — dan biasanya lebih cepat daripada yang bisa ditampung link.

  2. 02

    Titik lambatnya penuh

    Di suatu tempat di jalur ada link paling sempit. Paket yang datang lebih cepat daripada yang bisa diteruskannya harus menunggu di antrean. Antrean itulah sebabnya latency-mu naik saat ada unduhan.

  3. 03

    Sebuah paket dibuang, dan itulah pesannya

    Ketika antrean penuh, paket berikutnya dibuang. Sender melihat lubangnya lalu memotong lajunya — biasanya jadi setengah. Drop itu satu-satunya umpan balik yang diberikan jaringan, dan seluruh sistem ini dibangun di atasnya.

  4. 04

    Naik, jatuh, naik, jatuh

    Tidak ada yang merancang bentuk yang muncul. Ulangi loop-nya dan lajunya menggambar pola gerigi, terus-menerus mencari batas yang tidak pernah diberitahukan. Semua hal lain di situs ini adalah akibatnya.

Cara membaca grafiknya

Empat pengukuran dari run yang sama, ditumpuk pada satu garis waktu bersama. Baca lurus ke bawah pada satu titik waktu dan kamu melihat alasan koneksinya berperilaku begitu: window menanjak, antrean terisi di bawahnya, round trip naik bersama antrean, dan satu garis merah menandai saat sebuah paket dibuang — sekali, di keempat deret sekaligus.

Congestion window
Berapa banyak yang sender bersedia biarkan berada di perjalanan sekaligus
Kedalaman antrean
Berapa byte yang sedang menunggu giliran di bottleneck
Throughput
Berapa banyak data yang benar-benar lewat
RTT
Lama satu round trip — kabelnya, ditambah waktu menunggu
Paket hilang
Garis vertikal merah, digambar sekali melintasi keempat deret pada saat sebuah paket dibuang. Merah di situs ini berarti loss dan tidak pernah hal lain.

Ke mana selanjutnya

Kurang lebih berurutan. Tiap halaman menjawab satu pertanyaan dan menampilkan run yang dipakai untuk menjawabnya.

Skenario

Tiap skenario adalah satu konfigurasi yang mendemonstrasikan satu fenomena bernama.

Istilahnya

Istilah jaringan tetap dalam bahasa Inggris di seluruh situs, karena begitulah setiap artikel dan setiap RFC yang kamu baca setelah ini menyebutnya. Berikut arti masing-masingnya. Di mana pun istilah itu muncul, garis putus-putus di bawahnya memberi definisi ini lagi.

flow
Satu koneksi. Satu unduhan, satu streaming, satu unggahan — satu sender berbicara ke satu receiver.
bottleneck
Link paling lambat di jalur. Hanya ini yang penting: ia menentukan kecepatan, dan di situlah antrean terbentuk.
segment
Satu paket data, menurut hitungan TCP. Window dan antrean sering diukur dengan satuan ini alih-alih byte, karena yang penting adalah ada berapa hal terpisah di perjalanan.Dalam model ini setiap segmen tepat satu MSS, hal yang tidak dijamin oleh stack sungguhan.
MSS
Jumlah data terbesar yang bisa dibawa satu paket — 1.448 byte di sini. Ini satuan pertumbuhan window: "satu segmen lagi per round trip" berarti satu unit ini lagi.Maximum segment size. Ditentukan link terkecil di jalur; 1.448 byte umum untuk Ethernet setelah header.
ACK
Receiver berkata "sudah sampai". Setiap ACK yang kembali sekaligus izin bagi sender untuk mengirim satu lagi — jadi irama paket yang keluar adalah salinan irama ACK yang masuk, yang merupakan salinan irama yang diizinkan titik lambat. Tidak ada yang mengukur apa pun; koneksinya mengatur lajunya sendiri.Acknowledgement. Tiga ACK duplikat berurutan adalah cara sender menyimpulkan ada satu paket yang hilang.
buffer
Ruang tunggu di titik paling lambat di jalur. Ketika paket datang lebih cepat daripada yang bisa dikirim link, paket mengantre di sini alih-alih dibuang — sampai penuh.Selalu ditampilkan sebagai kelipatan BDP, karena jumlah byte-nya sendiri tidak memprediksi apa pun.
RTT
Waktu satu paket pergi lalu di-ACK kembali. Inilah yang terasa sebagai lag.Round-trip time. RTT dasar adalah kabelnya saja; kelebihannya adalah waktu menunggu di antrean.
BDP
Berapa banyak data yang muat di dalam kabelnya sendiri. Link cepat dan jauh itu seperti pipa panjang: banyak data bisa berada di perjalanan sebelum byte pertama sampai.Bandwidth-delay product: kapasitas × round-trip time. Jumlah ideal yang berada di perjalanan.
packet loss
Paket yang tidak pernah sampai. Di jalur kabel ini hampir tidak pernah berarti kerusakan — artinya sebuah antrean penuh. Itu sebabnya TCP memperlakukan loss sebagai sinyal untuk melambat.
congestion window
Tebakan sender sendiri tentang berapa banyak data yang boleh berada di perjalanan sekaligus. Tidak ada yang memberitahunya, jadi ia menaikkan tebakan selama lancar dan memotongnya saat ada paket hilang.Ditulis cwnd. Inilah kuantitas yang digambar dengan warna teal, dan alasan jejaknya bergerigi.
ssthresh
Garis pembatas antara dua aturan pertumbuhan. Di bawahnya window berlipat dua tiap round trip; di atasnya ia menambah satu segmen tiap round trip. Sebuah loss menetapkannya jadi setengah window saat itu — itulah sebabnya tanjakan setelah drop berupa garis lurus dan tanjakan pertama melengkung.Slow-start threshold. Digambar sebagai garis abu-abu putus-putus di panel window.
slow start
Cara sebuah koneksi dimulai: kirim sedikit, lalu gandakan setiap round trip sampai ada yang jebol. Pelan sesaat lalu sangat cepat — itulah sebabnya ia melampaui kapasitas.
AIMD
Aturan yang menghasilkan pola gerigi: naik satu langkah tetap selama lancar, potong setengah saat ada paket hilang. Naik pelan, mundur banyak.Additive increase, multiplicative decrease. Ini juga yang membuat flow yang bersaing menuju pembagian yang adil.
sawtooth
Bentuk yang digambar koneksi TCP sepanjang waktu: naik, jatuh, naik, jatuh. Tidak ada yang merancang bentuk ini — begitulah AIMD terlihat kalau digambar.
throughput
Berapa banyak data yang benar-benar lewat per detik.
goodput
Throughput tanpa retransmit — data yang benar-benar sampai dan terhitung. Sebuah run bisa sibuk tapi hasilnya sedikit, kalau ia terus mengirim paket yang sama dua kali.
utilisation
Berapa persen kapasitas link yang benar-benar terpakai. Di bawah 100% berarti ada saat kabelnya menganggur, biasanya karena sender baru saja memotong window-nya setelah loss.
bufferbloat
Buffer yang begitu besar sampai ia menyembunyikan kongesti alih-alih memberi sinyal. Tidak ada yang hilang, jadi sender terus mendorong, antrean penuh terus-menerus, dan setiap paket menunggu di belakangnya. Unduhan selesai pada kecepatan yang sama dan semua hal lain terasa rusak.
AQM
Antrean yang membuang paket lebih awal, secara sengaja, sebelum penuh — supaya sender diberi tahu untuk melambat ketika ruang tunggunya masih relatif kosong.Active queue management. RED dan CoDel adalah dua yang dimodelkan di sini.
queue discipline
Aturan yang dipakai ruang tunggu untuk memutuskan paket mana yang dibuang, dan kapan.
timeout
Jenis loss yang mahal. Tidak ada ACK yang kembali sama sekali, jadi sender menunggu, menyerah, lalu mulai lagi hampir dari nol. Satu timeout lebih mahal daripada beberapa drop biasa.
Jain's fairness index
Satu angka untuk seberapa merata link dibagi. 1,00 berarti persis rata; 0,50 untuk dua flow berarti salah satunya mengambil hampir semuanya.
seed
Kumpulan angka acak mana yang dipakai run ini. Seed sama, pengaturan sama, hasilnya identik byte demi byte — jadi tautan yang kamu bagikan menampilkan persis apa yang kamu lihat.

Kenapa bentuk-bentuk di situs ini bisa dipercaya

Siapa pun bisa menggambar pola gerigi yang meyakinkan. Yang ini dihasilkan dari menjadwalkan, mengantrekan, membuang, dan meng-ACK paket satu per satu di atas clock virtual — lalu diuji terhadap empat prediksi yang dipublikasikan secara independen, sebelum apa pun ditampilkan kepadamu.

Mathis throughput

Simulated Reno throughput tracks MSS·√1.5/(RTT·√p) across a sweep of five loss rates and four RTTs, within the ±25% the 1997 paper claims against measured data.

Buffer size versus utilisation

Steady-state utilisation matches the AIMD sawtooth derivation within 1% across nine buffer sizes from 0.05 to 2 BDP, and the RTT matches base + buffer/capacity.

RTT unfairness

Two Reno flows split the link between the first and second power of the RTT ratio they actually experienced — the range Floyd's analysis and the Mathis form bracket.

AIMD convergence

Identical flows reach Jain's index above 0.95, and a flow arriving twenty seconds late converges from 0.75 to above 0.9 within forty seconds. Chiu & Jain, 1989.

Mathis, 1997 — digambar, bukan diklaim

Setiap titik adalah satu run simulator ini dibanding prediksi makalahnya untuk loss rate dan round trip yang sama. Di garis diagonal keduanya persis sama; garis putus-putus adalah ±25% yang diklaim makalah itu sendiri terhadap data terukur. Kedua sumbu dalam Mbps, skala log, karena sapuannya melintasi satu orde besaran. Run-nya terjadi saat halaman ini dibangun — sembilan konfigurasi yang sama dengan yang menjadi gerbang deploy, dibaca dari modul yang sama, jadi gambar ini tidak mungkin menunjukkan kecocokan sementara tes itu gagal.

225510102020Prediksi Mathis (Mbps)terukur di simulator ini (Mbps)
lima loss rate pada 50 msempat round trip pada p = 0,001±25%

Selisih terburuk dari sembilan run: 13.6%. Tidak ada yang dicocokkan — prediksinya hanya tahu ukuran segmen, round trip, dan loss rate, dan simulatornya tidak tahu apa pun tentang prediksi itu.

Ini hasil orang lain, bukan pemeriksaan diri sendiri. Simulator yang bisa mereproduksi empat di antaranya adalah simulator yang keluaran mengejutkannya bisa dipercaya — dan keluaran yang mengejutkan itulah alasan membangunnya.