我知道我可以使用tc
或類似的工具來調整輸出流量。但是,我現在想調整輸入流量 - 實際上,我想透過緩慢的有損連接優先下載某種類型的檔案。
我知道原因tc
只能影響輸出流量:主機本身無法直接控制輸入流量。另一方面,TCP 內建了一些措施,可以防止 TCP 流量在慢速連線中溢出。那麼,我是否可以修改 TCP 標頭中的某些內容,以便遠端主機認為我的連線比它想像的要慢?
假設我能夠在兩種類型的連接上設定相應的標記iptables
。有沒有辦法減少第一型連接的輸入頻寬,但前提是存在第二類型連線?
答案1
您指的是 TCP 明確擁塞通知(http://en.wikipedia.org/wiki/Explicit_Congestion_Notification.)我認為你正在尋找的東西在技術上是不可能的,因為當Linux伺服器本身收到資料包時,你已經收到了資料包並正在嘗試事後調整它們。
實際上,如果您想要 QOS 或流量整形,則應該在上游提供者處完成,而不是在接收端。換句話說,所有的流量整形都是在來源端完成的,而不是目的端。
答案2
對於這個問題有非常好的解決方案,很遺憾的是它們都不能在 Linux 上免費使用。延遲或丟棄資料包的效果非常非常差。如果有必要,你可以這樣做,但結果充其量是足夠的。當您收到資料包時,它已經消耗了您試圖保護的入站頻寬。
正確的方法是破壞出站 TCP 視窗通告,向另一端通告較小的視窗。有一些硬體和軟體實作可以做到這一點,但據我所知,沒有一個可以在 Linux 上免費使用。
這腳本解釋了一種方法,並有一些非常詳細的評論解釋了理論和局限性。