UDP丟包(Linux)並測試

2021-09-24 23:33:42 字數 914 閱讀 7439

一、udp丟包現象

udp丟包是正常現象,因為它是不安全的。

udp是無連線的,面向訊息的資料傳輸協議,與tcp相比,有兩個致命的缺點,一是資料報容易丟失,二是資料報無序。

要實現檔案的可靠傳輸,就必須在上層對資料丟包和亂序作特殊處理,必須要有要有丟包重發機制和超時機制。

常見的可靠傳輸演算法有模擬tcp協議,重發請求(arq)協議,它又可分為連續arq協議、選擇重發arq協議、滑動視窗協議等等。

1、我感覺原因可能有兩個:

(1)、客戶端傳送過快,網路狀況不好或者超過伺服器接收速度,就會丟包。

(2)、原因是伺服器收到包後,還要進行一些處理,而這段時間客戶端傳送的包沒有去收,造成丟包。

2、解決方法:

(1)、客戶端降低傳送速度,可以等待回包,或者加一些延遲。

(2)、伺服器部分單獨開乙個執行緒,去接收udp資料,存放在乙個緩衝區中,又另外的執行緒去處理收到的資料,儘量減少因為處理資料延時造成的丟包。

3、總結:

如果必須使用udp,而且丟包又是不能接受的,只好自己實現確認和重傳,說白了,就是自己實現tcp(當然是部分和有限的簡單實現)。

二、如何製造udp丟包?

如果只是小規模程式,也可以自己實現丟包處理,原理基本上就是給檔案分塊,每個資料報的頭部新增乙個唯一標識序號的id值,當接收的包頭部id不是期望中的id號,則判定丟包,將丟包id發回服務端,伺服器端接到丟包響應則重發丟失的資料報。

udp是面向無連線的,使用者在實施udp程式設計時,必須制定上層的協議,包括流控制,簡單的超時和重傳機制,如果不要求是實時資料,我想tcp可能會更適合你!

三、怎樣測試udp併發效能?

1、連續把程式跑24個小時。

2、一般就是在同乙個時間段內採用大量的客戶端或者乙個客戶端採用多執行緒的方式向伺服器傳送資料,因此也就是多執行緒或者多程序的的方式來模擬傳送資料的形式

UDP丟包原因

一 主要丟包原因 1 接收端處理時間過長導致丟包 呼叫recv方法接收端收到資料後,處理資料花了一些時間,處理完後再次呼叫recv方法,在這二次呼叫間隔裡,發過來的包可能丟失。對於這種情況可以修改接收端,將包接收後存入乙個緩衝區,然後迅速返回繼續recv。2 傳送的包巨大丟包 雖然send方法會幫你...

linux系統核心UDP丟包原因分析

linux系統核心udp丟包原因分析 1 udp校驗和錯誤 現象 可以用netstat su 檢視到有udp錯包。tcpdump捕包,在wireshark開啟捕獲的udp報文,開啟校驗和選項,有錯包。方案 查詢鏈路故障 www.ahlinux.com 2 防火牆開啟 現象 特定埠的包收不到 方案 使...

Linux系統核心UDP丟包原因分析

本文討論的udp丟包是指網絡卡接收到資料報後,linux核心的tcp ip協議棧在udp資料報處理過程中的丟包,主要原因有兩個 1 udp資料報格式錯誤或校驗和檢查失敗 2 應用程式來不及處理udp資料報 對於原因1 udp資料報本身的錯誤很少見,應用程式也不可控,本文不討論。首先介紹通用的udp丟...