可靠UDP淺入

2021-10-06 10:38:39 字數 1532 閱讀 1859

問題來了,既然想要使用可靠的udp,那就必須補充一些tcp的流控機制、超時機制、重排機制、重傳機制,那麼這和tcp有什麼區別,為何不直接使用tcp更省事呢?

google採用quic後連線速率能有效提公升75%。

google搜尋採用quic後頁面載入效能提公升3%。

youtube採用quic後重新緩衝次數減少了30%。

相對於tcp的強制性可靠傳輸,udp更像是一張白紙,可以實現自己需要的可靠性。實現起來和tcp有一些相同的策略,但可以更自由的實現一些tcp沒有的功能。要注意的是,如果要想建立乙個完全可靠的udp,那就可以說只不過是另乙個tcp罷了,沒有什麼太大的意義,可靠udp只不過是實時性與可靠性之間的一種折中方案,魚與熊掌不可兼得,這就是軟體工程的抉擇信條。

採用udp有3個關鍵點:

網路頻寬需求較小,而實時性要求高;

大部分應用無需維持連線;

需要低功耗。

1.對應用層的資料進行分片,以滿足mtu傳輸的要求

2.在傳送端給分片編號,在接收端重組分片,解決亂序資料報重組的問題

udp傳輸應用層需注意的問題

1.資料報確認機制,可以對資料報進行確認和排序

2.資料報重發機制,能避免資料報丟失

3.盡量不傳送大於路徑mtu的資料報

4.處理資料報重排

所以,總的來看,就是需要在應用層實現乙個簡單版的tcp,是不是覺得很好笑,放著好好的輪子不用,非要自己造乙個。

udp和mtu的關係

大資料,分塊傳輸,接收後通過附加資訊組合。

本端:首先在udp資料報定義乙個首部,首部包含確認序列號和時間戳,時間戳是用來計算rtt(資料報傳輸的往返時間),從何計算出合適的rto(重傳的超時時間)。然後以等-停的方式傳送資料報,即收到對端的確認之後才傳送下乙個的資料報。當時間超時,本端重傳資料報,同時rto擴大為原來的兩倍,重新開始計時。

對端:接受到乙個資料報之後取下該資料報首部的時間戳和確認序列號,並新增本端的確認資料報首部之後傳送給對端。根據此序列號對已收到的資料報進行排序並丟棄重複的資料報。

還在開發中,待完善

從他人的工作中汲取經驗來避免自己的錯誤重複,正如我們是站在巨人的肩膀上才能做出更好的成績。

UDP實現可靠傳輸

如何讓udp實現可靠傳輸 自定義通訊協議,在應用層定義一些可靠的協議,比如檢測包的順序,重複包等問題,如果沒有收到對方的ack,重新發包 udp沒有delievery garuantee,也沒有順序保證,所以如果你要求你的資料傳送與接受既要高效,又要保證有序,收包確認等,你就需要在udp協議上構建自...

XGBoost淺入淺出

xgboost風靡kaggle 天池 datacastle kesci等國內外資料競賽平台,是比賽奪冠的必備大殺器。我在之前參加過的一些比賽中,著實領略了其威力,也取得不少好成績。如果把資料競賽比作金庸筆下的武林,那麼xgboost可謂屠龍刀,號令天下,莫敢不從!倚天不出,誰與爭鋒?xgboost工...

XGBoost淺入淺出

xgboost風靡kaggle 天池 datacastle kesci等國內外資料競賽平台,是比賽奪冠的必備大殺器。我在之前參加過的一些比賽中,著實領略了其威力,也取得不少好成績。如果把資料競賽比作金庸筆下的武林,那麼xgboost可謂屠龍刀,號令天下,莫敢不從!倚天不出,誰與爭鋒?xgboost工...