Linux
限制傳入流量的速率
我從來沒有完全理解是否可以對傳入流量進行速率限制。我意識到沒有直接的方法可以控制遠端伺服器發送數據包的速率(除非您控制兩個端點),但是考慮到這個限制,下載管理器究竟如何讓我成功設置下載速度限制?
TCP慢啟動和限速傳入流量之間是否有任何联系?是否可以使用慢啟動描述的方法人為地限制發送方發送數據包的速率?
作為一個額外的考慮,應該注意的是,我想在其上實施流量整形的伺服器自己建立 PPPoE 連接,並充當網路其餘部分的路由器。
**更新:**到目前為止的答案對我提出的問題給出了一個公平的概述,但我仍然不知道下載管理器如何限制傳入流量,更具體地說,是否有可能在Linux網關盒。
下載管理器很可能按照涓涓論文中的說明工作。
使用 BSD 套接字的程序可以執行它自己的速率限制。對於上游限制,應用程序可以通過簡單地限制寫入套接字的數據速率來做到這一點。同樣,對於下游限制,應用程序可能會限制它從套接字讀取的數據速率。然而,這個工作的原因並不是很明顯。當應用程序忽略從套接字讀取一些數據時,它的套接字接收緩衝區會填滿。這反過來會導致接收 TCP 通告更小的接收視窗 (rwnd),從而在底層 TCP 連接上產生背壓,從而限制其數據流。最終,這種“涓滴”效應實現了端到端的速率限制。根據網路堆棧所有層中的緩衝,這種效果可能需要一些時間才能傳播。
如果您偶爾需要對 UNIX 系統上的單個程序進行速率限制,那麼一個簡單的解決方案就是“涓涓細流” 。真正的流量整形,就像您在網關上執行的一樣,可以使用
tc
. 這在 Linux Advanced Routing & Traffic Control HOWTO的第 9 章中記錄。