網路程式設計之UDP(3)丟包總結

2022-06-23 01:39:12 字數 768 閱讀 5099

from here

如果socket緩衝區滿了,應用程式沒來得及處理在緩衝區中的udp包,那麼後續來的udp包會被核心丟棄,造成丟包。在socket緩衝區滿造成丟包的情況下,可以通過增大緩衝區的方法來緩解udp丟包問題。但是,如果服務已經過載了,簡單的增大緩衝區並不能解決問題,反而會造成滾雪球效應,造成請求全部超時,服務不可用。

如果client傳送的udp報文很大,而socket緩衝區過小無法容下該udp報文,那麼該報文就會丟失。

arp 的快取時間約10分鐘,apr 快取列表沒有對方的 mac 位址或快取過期的時候,會傳送 arp 請求獲取 mac 位址,在沒有獲取到 mac 位址之前,使用者傳送出去的 udp 資料報會被核心快取到 arp_queue 這個佇列中,預設最多快取3個包,多餘的 udp 包會被丟棄。被丟棄的 udp 包可以從 /proc/net/stat/arp_cache 的最後一列的 unresolved_discards 看到。當然我們可以通過 echo 30 > /proc/sys/net/ipv4/neigh/eth1/unres_qlen 來增大可以快取的 udp 包。

udp 的丟包資訊可以從 cat /proc/net/udp 的最後一列drops中得到,而倒數第四列 inode 是丟失 udp 資料報的 socket 的全域性唯一的虛擬i節點號,可以通過這個 inode 號結合 lsof ( lsof -p -n | grep 25445445)來查到具體的程序。

Linux網路程式設計 UDP接收資料丟包解決方案

收到資料報後進行包計數。記錄收端處理資料耗時,對比發端耗時。最大容量下耗時超過了發包耗時 2 recvfrom 接收到資料之後處理速度太慢 udp是沒有流量控制的 因此,如果socket接收快取設定過小,就會因為udp包過大或者發包速率過快而丟包 2 解決方法 重新設定udp接收緩衝區大小 udp接...

網路程式設計之 UDP包長的選擇

udp協議雖說沒有tcp協議應用那麼廣泛,但是udp也有自己的應用領域。在使用udp時,udp包長的選擇直接影響到整個設計是否成功。那麼udp包究竟多大合適呢?理論上,乙個udp包最大可以達到65535 20 8 65507,ip首部20個位元組,udp首部8個位元組 個位元組,但是許多平台實際的限...

udp丟包原因分析及總結

1 呼叫recv方法接收端收到資料後,處理資料花了一些時間,處理完後再次呼叫recv方法,在這二次呼叫間隔裡,發過來的包可能丟失。對於這種情況可以修改接收端,將包接收後存入乙個緩衝區 然後迅速返回繼續recv。2 傳送的包巨大丟包。雖然send方法會幫你做大包切割成小包傳送的事情,但包太大也不行。例...