Lalu lintas masuk yang membatasi nilai

12

Saya tidak pernah benar-benar mengerti apakah mungkin untuk menilai-membatasi lalu lintas masuk . Saya menyadari bahwa tidak ada metode langsung di mana untuk mengontrol tingkat server pengiriman paket (kecuali Anda mengendalikan kedua titik akhir), tetapi dengan mempertimbangkan batasan ini, bagaimana tepatnya manajer unduhan memungkinkan saya untuk berhasil menetapkan batas kecepatan unduhan ?

Apakah ada tautan antara lalu lintas masuk slow-start dan pembatasan-tarif? Apakah mungkin untuk menggunakan metode yang dijelaskan oleh slow-start untuk secara artifisial membatasi tingkat pengiriman paket pengirim?

Sebagai pertimbangan tambahan, harus dicatat bahwa server tempat saya ingin menerapkan pembentukan lalu lintas membentuk koneksi PPPoE itu sendiri, dan bertindak sebagai router untuk seluruh jaringan.


Pembaruan: Jawaban sejauh ini telah memberikan gambaran umum yang adil dari pertanyaan yang saya ajukan, tetapi saya masih tidak tahu bagaimana pengelola unduhan dapat membatasi lalu lintas yang masuk, dan lebih khusus lagi, apakah mungkin untuk menerapkan strategi serupa pada suatu Kotak gateway Linux.

Richard Keller
sumber
Free Download Manager mungkin menggunakan server unggahan mereka sendiri dan klien torrent kebanyakan membatasi jumlah koneksi yang mereka gunakan. Juga, sudahkah Anda melihat ke 'QOS'?
DutchUncle
3
Sebagian besar pengelola unduhan sekadar menilai batas ACK yang dikirim kembali, sehingga memperlambat uap data yang masuk.
Chris S

Jawaban:

12

Pengelola unduhan kemungkinan besar berfungsi sebagaimana dijelaskan dalam kertas tetesan .

Suatu proses yang memanfaatkan soket BSD dapat melakukan pembatasan laju sendiri. Untuk pembatasan hulu, aplikasi dapat melakukan ini hanya dengan membatasi laju data yang ditulis ke soket. Demikian pula, untuk pembatasan hilir, aplikasi dapat membatasi laju data yang dibaca dari soket. Namun, alasan mengapa ini berhasil tidak segera jelas. Ketika aplikasi lalai membaca beberapa data dari soket, soketnya akan menerima buffer. Hal ini pada gilirannya akan menyebabkan TCP penerima mengiklankan jendela penerima yang lebih kecil (rwnd), menciptakan tekanan balik pada koneksi TCP yang mendasarinya sehingga membatasi aliran datanya. Akhirnya, efek "trickle-down" ini mencapai pembatasan tingkat ujung-ke-ujung. Bergantung pada penyanggaan di semua lapisan tumpukan jaringan, efek ini mungkin perlu waktu untuk diperbanyak.

Jika Anda sesekali perlu memberi peringkat-batas pada satu program pada sistem UNIX, solusi sederhana akan berkurang . Pembentukan lalu lintas nyata, seperti yang akan Anda lakukan pada gateway, dapat dilakukan dengan tc. Ini didokumentasikan dalam Bab 9. Antrian Disiplin untuk Manajemen Bandwidth dari Linux Advanced Routing & Traffic Control HOWTO.

sciurus
sumber
Jawaban yang bagus, persis apa yang saya cari. Terima kasih, bounty jatuh kepada Anda.
Richard Keller
4

Dalam hal modem 56k versus jalur 4 Mbps DSl, (biasanya) tidak ada yang membuat perbedaan kecepatan, itu hanya perbedaan dalam kecepatan tautan.

Alasan mengapa sulit untuk membentuk lalu lintas masuk adalah karena tidak ada penyangga dalam media transmisi. Anda menerima bit yang masuk atau hilang. Untuk lalu lintas yang hampir meninggalkan antarmuka, Anda dapat buffer dan memesan ulang paket sebanyak yang Anda inginkan (atau, setidaknya hingga memori buffer yang tersedia di perangkat).

Untuk protokol yang memiliki lapisan di atas TCP (saya tidak tahu apakah itu yang terjadi untuk torrents), itu akan menjadi masalah sederhana dari memacu permintaan untuk data lebih lanjut. Kalau tidak, aplikasi perlu berkomunikasi dengan OS, untuk menunda ACKing paket. Sebagian besar protokol berbasis UDP, karena kebutuhan, akan memiliki ACK / mengirim ulang logika dalam protokol khusus aplikasi, sehingga pada saat itu berbatasan dengan sepele untuk mempercepat mereka.

Salah satu rute yang mungkin adalah membentuk lalu lintas dari Internet di sisi LAN router DSL Anda, karena pada saat itu, Anda akan membentuk port keluar.

Vatine
sumber
3

Saya tidak bisa menjawab mengapa Anda belum menemukan solusi apa pun yang memungkinkan membentuk data yang masuk (dan tidak tahu apa-apa di atas kepala saya), tetapi tentang bagaimana pengirim mengetahui seberapa cepat penerima dapat menerima data:

Desain dasar TCP / IP adalah bahwa untuk setiap paket yang dikirim sumber ke tujuan, ia harus menunggu tujuan untuk membalas kembali (dengan ACKpaket) dengan mengatakan bahwa ia menerima paket tersebut.

Jadi, jika Anda memiliki pengirim 4Mbps dan penerima 56Kbps, maka pengirim harus duduk dan menunggu di antara pengiriman paket agar penerima merespons setiap paket (Ada beberapa detail teknis untuk mengurangi overhead ini, tetapi premis masih berlaku pada abstrak tingkat).

Jadi apa yang terjadi jika pengirim sudah mengirimkan data 56Kbps dan kemudian mencoba mengirim sedikit lebih banyak?

Paket itu hilang. (Yah, berpotensi antri dalam buffer switch, tetapi ketika itu mengisi, paket hilang). Karena paket hilang, penerima tidak pernah menerimanya, dan karenanya tidak pernah mengirim ACKpaket. Karena pengirim tidak pernah menerima ACKpaket ini (karena tidak pernah dikirim, tetapi juga bisa hilang, atau mungkin ada gangguan jaringan), pengirim diminta untuk mengirim ulang paket tambahan. Itu duduk dan mencoba untuk mengirim ulang paket sampai melewati dan ACKjawabannya kembali ke sana.

Jadi, untuk rekap, setelah pengirim telah memaksimalkan bandwidth penerima, ia harus berhenti dan mengirim ulang paket berikutnya berulang-ulang sampai ada cukup bandwidth yang tersedia untuk dilalui. Ini secara efektif mengurangi kecepatan kirim hingga maksimum yang dapat diterima klien. (Dan ada metode optimasi untuk mengurangi berapa kali suatu paket harus dikirim ulang dalam kasus ini, di mana pengirim pada dasarnya melambat setiap kali harus mengirim ulang paket, tetapi itu di luar cakupan deskripsi yang disederhanakan ini.

Darth Android
sumber
1

Anda dapat melakukannya dengan antarmuka ifb.

Dengan antarmuka ifb, Anda dapat merutekan aliran masuknya eth0 (atau apa pun) ke jalan keluar di ifb0 (misalnya), dan menerapkan aturan batas di sana.

Periksa url dari Linux Foundation ini: http://www.linuxfoundation.org/collaborate/workgroups/networking/ifb

Dan skrip ini yang membatasi incomming dan outcomming bandwight: https://github.com/rfrail3/misc/blob/master/tc/traffic-control.sh

Ricardo Fraile
sumber
0

Lihat wondershaper: http://lartc.org/wondershaper/

Mengenai lalu lintas masuk:

This is slightly trickier as we can't really influence how fast the internet
ships us data. We can however drop packets that are coming in too fast,
which causes TCP/IP to slow down to just the rate we want. Because we don't
want to drop traffic unnecessarily, we configure a 'burst' size we allow at
higher speed.

Now, once we have done this, we have eliminated the downstream queue totally
(except for short bursts), and gain the ability to manage the upstream queue
with all the power Linux offers.
dmourati
sumber
-2

gunakan UFW (Dinding Api Tidak Rumit) http://ubuntuforums.org/showthread.php?t=1260812

Utas ini menunjukkan contoh sederhana bahwa default ke IP dengan 6 hit dalam 30 detik ditolak:

sudo ufw limit ssh/tcp

Juga perintah yang lebih 'maju' dengan nilai yang ditentukan untuk waktu dan jumlah hit

sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH

sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 8 --rttl --name SSH -j DROP

TonsOfFun111
sumber
1
Itu benar-benar tidak ada hubungannya dengan pertanyaan itu.
bulanolo