Mensimulasikan koneksi jaringan bandwidth rendah, latensi tinggi di Linux

19

Saya ingin mensimulasikan koneksi jaringan latensi tinggi dan bandwidth rendah pada mesin Linux saya.

Membatasi bandwidth telah dibahas sebelumnya, misalnya di sini , tetapi saya tidak dapat menemukan posting mana yang membatasi bandwidth dan latensi.

Saya bisa mendapatkan latensi tinggi atau bandwidth rendah menggunakan tc. Tapi saya belum bisa menggabungkan ini menjadi satu koneksi. Secara khusus, contoh script kontrol tingkat di sini tidak berfungsi untuk saya:

# tc qdisc add dev lo root handle 1:0 netem delay 100ms 
# tc qdisc add dev lo parent 1:1 handle 10: tbf rate 256kbit buffer 1600 limit 3000
RTNETLINK answers: Operation not supported

Bagaimana cara membuat koneksi bandwidth rendah, latensi tinggi, menggunakan tcatau alat lain yang tersedia?

Justin L.
sumber
1
pernahkah Anda mencoba menggabungkan pendekatan dari tautan Anda, mis. gunakan tc untuk latensi dan tetesan untuk bandwidth? (Ini lebih buruk daripada hanya menggunakan tc, tapi mungkin masih berfungsi;)
Andy
Itu ide yang bagus (dan, memang, tetesan bahkan akan menambah latensi), tetapi sayangnya Firefox tidak memuat di bawah tetesan, dan itulah yang perlu saya uji.
Justin L.

Jawaban:

15

Aha! Ini bekerja jika kita membalik urutan perintah.

tc qdisc add dev lo root handle 1: htb default 12 
tc class add dev lo parent 1:1 classid 1:12 htb rate 20kbps ceil 20kbps 
tc qdisc add dev lo parent 1:12 netem delay 1000ms 

https://lists.linux-foundation.org/pipermail/netem/2010-May/001388.html

Justin L.
sumber
Siapa pun yang tertarik mengapa, sepertinya netem qdisc tidak bisa menjadi orangtua, jadi Anda harus mengatur ulang hierarki untuk memilikinya sebagai simpul daun.
Andy
3
Perhatikan bahwa batas bandwidth hanya satu arah (keluar). Anda harus melakukan pekerjaan tambahan untuk mewujudkannya di kedua arah (tampaknya menggunakan ifb). linuxfoundation.org/collaborate/workgroups/networking/…
Roger Binns
Datangi ini ketika mencoba grok tc. Dari apa yang saya baca, baris pertama menghasilkan 1: 0, tetapi baris kedua merujuk ke 1: 1? (mungkin pemahaman saya yang salah - tapi saya telah mengintip di banyak halaman mencoba memahami bagaimana kelas / qtdiscs diberi nomor)
symcbean
1

Ini tidak gratis, tetapi Proxy Charles Web Debugging dapat mensimulasikan koneksi latensi tinggi bandwidth rendah

http://www.charlesproxy.com/documentation/proxying/throttling/

Matthew Lock
sumber
Cukup menarik, saya sebenarnya melakukan ini untuk debugging web. Tetapi tentunya harus ada cara untuk melakukan ini tanpa menghabiskan uang. :)
Justin L.
Sayangnya Charles tampaknya tidak bekerja dengan traffic lokal. Itu mati ketika saya mencoba mengakses 192.168.1.1 melalui proxy.
Justin L.
2
Atau cukup gunakan WANEm, gratis: wanem.sourceforge.net
Nathan Kidd