Apakah ada cara untuk membatasi bandwidth pada NIC di linux? Saya ingin dapat mensimulasikan koneksi yang lambat sembarang.
Apakah ada cara untuk membatasi bandwidth pada NIC di linux? Saya ingin dapat mensimulasikan koneksi yang lambat sembarang.
Jawaban:
The netem modul kernel, dikendalikan oleh iproute.
Anda perlu mengkompilasi Netem dengan kernel:
Networking -->
Networking Options -->
QoS and/or fair queuing -->
Network emulator
Setelah modul netem dimuat, iproute's tc memungkinkan Anda hal-hal seperti:
tc qdisc add dev tap0 root netem delay 50ms loss 50%
(50% paket loss, keterlambatan ekstra 50 ms)
sch_netem
. Umumnya tidak perlu memuatnya secara manual, itu akan dimuat secara otomatis sesuai kebutuhan.
rate
pilihan: tc qdisc add dev lo root handle 1:0 netem delay 10ms rate 1mbit limit 1000
. Perhatikan bahwa untuk beberapa perangkat seperti lo
(untuk mengakses localhost), Anda perlu mengatur antrian panjang juga: ifconfig lo txqueuelen 1000
. Lihat serverfault.com/a/394949/76090
Sisi klien, bukan?
Tetesan harus melakukan apa yang Anda inginkan. Jika Anda menjalankan Ubuntu (atau Debian, saya pikir), Anda dapat menginstalnya dengan sudo apt-get install trickle
, dan kemudian menjalankannya. trickle -s -d 10 -u 10 firefox
(atau lebih, saya belum menggunakannya dalam beberapa saat) akan menjalankan firefox, membatasi kecepatan unduh dan unggah menjadi 10 kilobyte per detik.
Saya menemukan cara untuk menghindari kotak saya dari memakan semua bandwidth yang tersedia di jaringan menggunakan alat yang disebut 'wondershaper' di ubuntu. Saya harap ini ada di destro linux lain juga. Saya dapat membatasi bandwidth apa yang bisa dikonsumsi pc rumah linux saya menggunakan perintah berikut.
sudo wondershaper eth0 1000 200
Ini membatasi batas unduhan hingga 1000 kilobit dan uplaod hingga 200 kilobit. Rujuk ke halaman manual wonderershaper untuk informasi lebih lanjut / opsi.
wondershaper
di Debian.
sudo wondershaper clear eth0
NIST membuat simulator jaringan yang disebut NistNet.
http://snad.ncsl.nist.gov/nistnet/ (tautan tampaknya mati)
http://cs.ecs.baylor.edu/~donahoo/tools/nistnet/
NistNet memungkinkan Anda membuat router yang mengemulasi tautan comms yang Anda pilih.
Untuk operasi paling sederhana, Anda memilikinya di sebuah kotak dengan dua NIC di antara dua jaringan.
Misalnya, saya punya aplikasi yang harus bekerja melalui tautan satelit.
Data dapat melewati tautan 2Mbps dengan latensi BESAR. Kontrol harus menggunakan tautan 128kbps, dengan latensi yang sama.
NistNet membantu agar semuanya berfungsi pada 128kbps.
Menggunakan NistNet saya bisa mensimulasikan tidak hanya bandwidth, tetapi juga latensi, dan itu juga akan menjatuhkan paket untuk Anda, mensimulasikan tautan yang sibuk atau tidak dapat diandalkan.
Jika Anda ingin mensimulasikan koneksi abitrary, jangan hanya membatasi lebar pita, buat latensi naik juga.
Jangan lupa paket fragmen juga. Anda dapat mengatur MTU kecil yang bagus di tautan palsu.
IIRC menambahkan paket jitter akan memungkinkan Anda mengetahui apakah Anda dapat mengatasi paket yang tidak sesuai pesanan.
Saya pribadi telah menggunakan wonderershaper di masa lalu untuk ini, meskipun itu ditulis untuk use case yang berlawanan - memanfaatkan koneksi ADSL Anda.
Saya harus mencoba yang lain yang disebutkan di sini.
Anda dapat menggunakan proxy squid yang dipasang secara lokal untuk membatasi bandwidth misalnya untuk menguji halaman web pada tautan lambat:
Instal proxy squid dari distribusi Anda - di Fedora saya semudah itu yum install squid
.
Tambahkan yang berikut ke /etc/squid/squid.conf
:
delay_pools 1
delay_class 1 1
delay_access 1 allow all
delay_parameters 1 16000/16000
Ini akan membatasi bandwidth menjadi sekitar 128 kbps (16000 Bps).
Mulai cumi :/etc/init.d/squid start
Konfigurasikan browser Anda untuk menggunakan localhost
port server proxy 3128
.
Belum ada yang menyebutkan ip_relay , bernama "iprelay" di repositori Debian. Ini berfungsi sebagai proksi TCP, daripada mencegat panggilan seperti yang dilakukan tetesan , dan akan bekerja dengan aplikasi apa pun yang dapat menggunakan proxy (misalnya browser web) atau menerima port tujuan yang ditentukan pengguna (telnet, ssh, ftp, curl, dan lain-lain ).
Ini sedikit lebih sulit untuk diatur, tetapi sering bekerja dalam situasi di mana tetesan tidak akan terjadi.