區域網UDP丟包優化

2021-06-21 12:21:10 字數 1101 閱讀 1671

之前一直沒考慮清楚為何接收到udp資料丟包的問題,當意識到這造成很大問題時便狂查資料,有以下結論:

1.傳送方傳送的資料太快,導致udp輸入佇列溢位(系統會丟掉一些包),在應用程式看來是即是丟包。

解決方法:

1.想辦法提高應用程式對udp包的處理速度。

2.提高udp輸入佇列緩衝區大小,可通過setsockopt的so_rcvbuf來進行設定,但是這裡的設定還受限於系統的設定,

在linux系統下可以通過設定系統最大緩衝區來設定:

在 /etc/sysctl.conf 中加入

net.core.rmem_max = 131071 //最大值,有資料說甚至可以設定為10m或更大

net.core.rmem_default = 112640//預設值

設定後重啟可通過:sysctl -a |grep net.core 檢視

論證例子:

題: buf = x; 接收速度,奇數秒:y byte/s。偶數秒:0byte/s;處理速度:z byte/s;問buf 多久會滿?

解:(1).當x<=y-z時,第一秒就會滿。

(2)當x>y-z時,x = (y/2 - z)*t.得出t = (2*x)/(y-2*z).

2.1 當 y < 2*z時,t無大於0的解。(即buf永遠不會滿)

2.2 當y>2*z時, t = (2*x)/(y-2*z).

若要使buf永遠不滿:

(1)的解決辦法為,增大x,z。減小y.

(2.2)的解決辦法是減小y,還有增大z。

無論如何,最終要使資料滿足2.1的情況。

由此得出結論,首先滿足基本條件即不可以讓第一次傳送的高峰期就將緩衝區填滿,降低傳送方的傳送速度,加快處理速度均會使緩衝區達到不滿的狀態。

乙個執行緒接收,乙個執行緒處理並不會提高處理速度,只是變相的增大了緩衝區大小,將系統緩衝區轉移到了自己的緩衝區。

2.當然最愚蠢的錯誤就是將recvfrom中的buf_size設定小了。

3.區域網裡丟包率也是很小的,並且未經過路由器,不會亂序,如果在到達網絡卡之前就丟包了,那就要檢查網路狀況,當然也可以通過ethtool設定網絡卡資訊提高接收成功率。網上還有提到napi可以提高網絡卡處理效率,通過使用輪詢降低中斷次數。

區域網開發UDP

1.掛 asyncudpsocketdelegate 2.例項化 asyncudpsocket asyncudpsocket alloc init asyncudpsocket setdelegate self asyncudpsocket bindtoport 10250 error nil as...

區域網優化(網摘)

區域網在構建和使用時,難免出現這樣那樣的故障。排除故障 優化系統,是管理區域網最基本的工作之一。本文從排除故障 優化效能的角度出發,簡單歸納了一些區域網維護及優化的經驗和技巧,其中著重討論了網絡卡 網線的正確安裝 合理設定等問題。了解這些,有助於我們更好的去維護電腦 管理網路,從而更好的利用網路去開...

區域網截包程式設計

實驗目的 目前的區域網基本上都採用以廣播為技術基礎的乙太網,任何兩個節點之間的通訊資料報,不僅為這兩個節點的網絡卡所接收,也同時為處在同一乙太網上的任何乙個節點的網絡卡所擷取。因此,黑客只要接入乙太網上的任一節點進行偵聽,就可以捕獲發生在這個乙太網上的所有資料報,對其進行解包分析,從而竊取關鍵資訊,...