0

如何測量服務器和客戶端之間的實際帶寬以決定發送多少實時數據?如何利用所有可用帶寬與實時數據?

我的服務器每秒向客戶端發送30次讀取時間數據。如果服務器數據太多,它會優先處理數據塊,並丟棄任何不適合可用帶寬的內容,因爲無論如何,這些數據都會失效。數據通過可靠(20%)和不可靠通道(80%)發送(都是基於UDP的,但如果TCP作爲可靠通道可以提供任何好處,請讓我知道)。數據對延遲非常敏感。服務器經常(但並非總是)具有比可用帶寬更多的數據。發送儘可能多的數據但不超過可用帶寬是至關重要的,以避免數據包丟失或延遲較高。

服務器和客戶端是自定義應用程序,因此可以實現任何算法/協議。

我的主要問題是如何跟蹤可用帶寬。此外,有關典型帶寬抖動的任何統計信息都會有所幫助(服務器位於雲中,客戶端是全球的家庭用戶)。

目前,我正在考慮如何利用:

  • 可靠的信道的時延信息。它應該與帶寬相關,因爲如果延遲增加,則可以(!)表示數據包丟棄導致重傳,因此服務器必須降低數據速率。

  • 客戶端在不可靠的通道上收到的數據量在時間範圍內。特別是如果數據量低於從服務器發送的數據量。

  • ,如果目前的等待時間是接近或低於最低的記錄之一,可以增加帶寬

的問題是,這種方法過於複雜,涉及到很多「啓發式」等應該是一個什麼樣的步增大/減小帶寬等

從誰在過去處理類似的問題,或只是什麼好主意

人們尋找任何建議

回答

0

經過一番研究,問題有一個名稱:擁塞控制或擁塞避免算法。這是一個相當複雜的話題,有很多關於它的材料。隨着時間的推移,TCP Congestion Control正在發展,真的很不錯。還有其他實現它的協議,例如UDT或SCTP

1

嘗試使用比你實際上有更多的帶寬首發症狀會增加延遲,因爲你填滿了發送者和瓶頸之間的緩衝區。見https://en.wikipedia.org/wiki/Bufferbloat。我的猜測是,如果您可以成功檢測到增加的延遲,因爲您開始填充帶寬並退出,那麼您可以避免數據包丟失。

我不會低估TCP--人們花了很多時間調整擁塞避免,以獲得合理數量的可用帶寬,同時仍然是一個好的網絡公民。做得更好可能並不容易。

另一方面,很大程度上取決於中間節點的態度,這可能會將UDP與TCP區別開來。您可能會發現,在負載情況下,它們會優先或丟棄UDP。還有一些網絡,特別是衛星鏈路,可能會使用https://en.wikipedia.org/wiki/TCP_acceleration,甚至不知道它。 (這對我們來說是一個痛苦的驚喜 - 我們依靠TCP連接失敗和保持連接來檢測連接丟失。不幸的是,正在使用的TCP加速器與我們保持着聯繫,假裝是遠端,即使連接到事實上,遠端已經失傳)。

+0

你有任何有關典型帶寬波動的信息嗎?我的意思是在中間,我瞭解用戶觀看YouTube會導致大量帶寬下降 –

+0

無信息。快速搜索找到延遲地圖 - http://internethealthreport.com/ http://www.internettrafficreport.com/ https://www.dotcom-tools.com/internet-backbone-latency.aspx真正關心的人可能已經轉移到了合作地點,例如股票交易中心,所以最好的數據可能是專有的,並不代表任何其他人的問題。 – mcdowella