Saya ingin mensimulasikan penundaan dan hilangnya paket untuk UDP
dan TCP
di Linux untuk mengukur kinerja suatu aplikasi. Apakah ada cara sederhana untuk melakukan hal ini?
linux
tcp
throttling
George Stocker
sumber
sumber
Jawaban:
netem memanfaatkan fungsionalitas yang sudah ada di Linux dan utilitas userspace untuk mensimulasikan jaringan. Inilah sebenarnya yang dimaksud oleh jawaban Markus, dengan nama yang berbeda.
Contoh di beranda mereka sudah menunjukkan bagaimana Anda dapat mencapai apa yang Anda minta:
Perhatikan bahwa Anda harus menggunakan
tc qdisc add
jika Anda tidak memiliki aturan untuk antarmuka itu atautc qdisc change
jika Anda sudah memiliki aturan untuk antarmuka itu. Mencoba menggunakantc qdisc change
antarmuka tanpa aturan akan memberikan kesalahanRTNETLINK answers: No such file or directory
.sumber
tc -p qdisc ls dev eth0
akan mencantumkan aturan yang ditetapkan saat ini, dantc qdisc del dev eth0 root
akan menghapusnyaUntuk paket yang dijatuhkan, saya hanya akan menggunakan iptables dan modul statistik .
Di atas akan menjatuhkan paket yang masuk dengan probabilitas 1%. Hati-hati, apa pun di atas sekitar 0,14 dan sebagian besar dari Anda koneksi tcp kemungkinan besar akan macet sepenuhnya.
Lihatlah man iptables dan cari "statistik" untuk informasi lebih lanjut.
sumber
DROP
pada koneksi keluar agak konyol menyebabkansend()
operasi kembaliEPERM
, bukan hanya menjatuhkan paket (seperti seharusnya).iptables -D INPUT -m statistic --mode random --probability 0.01 -j DROP
Salah satu kolega saya menggunakan tc untuk melakukan ini. Lihat halaman manual untuk informasi lebih lanjut. Anda dapat melihat contoh penggunaannya di sini .
sumber
iptables (8) memiliki modul kecocokan statistik yang dapat digunakan untuk mencocokkan setiap paket ke-n. Untuk menjatuhkan paket ini, cukup tambahkan -j DROP .
sumber
Ini tutorial tentang simulasi fisika jaringan berisi C ++ class dalam kode contoh untuk simulasi latency dan packet loss di koneksi UDP dan mungkin bimbingan. Lihat variabel latensi publik dan packetLoss dari kelas Connection yang ditemukan di file Connection.h dari kode sumber yang dapat diunduh .
sumber
Belum mencobanya sendiri, tetapi halaman ini memiliki daftar modul plugin yang berjalan di sistem penyaringan IP iptables bawaan Linux. Salah satu modul disebut "n", dan memungkinkan Anda untuk mengatur aturan yang akan menurunkan tingkat paket yang dapat dikonfigurasi. Paling tidak bisa menjadi tempat yang baik untuk memulai.
sumber
Anda dapat mencoba http://snad.ncsl.nist.gov/nistnet/ Ini proyek NIST yang cukup lama (rilis terakhir 2005), tetapi berhasil untuk saya.
sumber
Alat injeksi jaringan yang mudah digunakan adalah Saboteur . Itu dapat mensimulasikan:
sumber
Salah satu alat yang paling banyak digunakan dalam komunitas ilmiah untuk tujuan itu adalah DummyNet . Setelah Anda menginstal
ipfw
modul kernel, untuk memperkenalkan jeda propagasi 50 ms antara 2 mesin, jalankan saja perintah-perintah ini:Untuk juga memperkenalkan 50% paket loss Anda harus menjalankan:
Sini lebih detail.
sumber