【網絡協議】基于UDP的可靠協議:KCP

TCP是為流量設計的(每秒內可以傳輸多少KB的數據),講究的是充分利用帶寬。而 KCP是為流速設計的(單個數據包從一端發送到一端需要多少時間),以10%-20%帶寬浪費的代價換取了比 TCP快30%-40%的傳輸速度。TCP信道是一條流速很慢,但每秒流量很大的大運河,而KCP是水流湍急的小激流。KCP有正常模式和快速模式兩種,通過以下策略達到提高流速的結果:

RTO翻倍vs不翻倍:

TCP超時計算是RTOx2,這樣連續丟三次包就變成RTOx8了,十分恐怖,而KCP啟動快速模式后不x2,只是x1.5(實驗證明1.5這個值相對比較好),提高了傳輸速度。

選擇性重傳 vs 全部重傳:

TCP丟包時會全部重傳從丟的那個包開始以后的數據,KCP是選擇性重傳,只重傳真正丟失的數據包。

SACK機制,每次ACK時還返回一組標記,告知發送方哪些Segment已經發送了

快速重傳:

發送端發送了1,2,3,4,5幾個包,然后收到遠端的ACK: 1, 3, 4, 5,當收到ACK3時,KCP知道2被跳過1次,收到ACK4時,知道2被跳過了2次,此時可以認為2號丟失,不用等超時,直接重傳2號包,大大改善了丟包時的傳輸速度。

延遲ACK vs 非延遲ACK:

TCP為了充分利用帶寬,延遲發送ACK(NODELAY都沒用),這樣超時計算會算出較大 RTT時間,延長了丟包時的判斷過程。KCP的ACK是否延遲發送可以調節。

延遲ACK:TCP為了充分利用帶寬,在一些情況下,接收方可能會收到多個數據段。在延遲發送ACK的情況下,接收方可以在一定的小時間窗口內等待或聚合多個數據段的接收,從而一次性發送一個ACK確認多個數據段。這可以減少網絡中ACK報文的數量,從而降低網絡擁塞。

UNA vs ACK+UNA:

ARQ模型響應有兩種,UNA(此編號前所有包已收到,如TCP)和ACK(該編號包已收到),光用UNA將導致全部重傳,光用ACK則丟失成本太高,以往協議都是二選其一,而 KCP協議中,除去單獨的 ACK包外,所有包都有UNA信息。

非退讓流控:

KCP正常模式同TCP一樣使用公平退讓法則,即發送窗口大小由:發送緩存大小、接收端剩余接收緩存大小、丟包退讓及慢啟動這四要素決定。但傳送及時性要求很高的小數據時,可選擇通過配置跳過后兩步,僅用前兩項來控制發送頻率。以犧牲部分公平性及帶寬利用率之代價,換取了開著BT都能流暢傳輸的效果。

拋棄擁塞控制,追求極致速度

TCP的擁塞控制機制(如慢啟動、擁塞避免、快速重傳等)是為了保證網絡公平性和穩定性,但這也讓TCP在丟包時表現得過于“慫”。KCP直接拋棄了這些機制,采用更激進的策略,允許用戶自定義流控和擁塞控制,甚至可以不控制。這種“莽夫”式的方式讓KCP在丟包時依然能快速重傳,保持高吞吐量。

更小的協議頭開銷:

KCP的協議頭比TCP更精簡,減少了額外的開銷。雖然這點對性能提升有限,但在高頻率、小數據包場景下,積少成多也能帶來一定的優勢。

無連接狀態,輕量級:

KCP是無連接的,不需要像TCP那樣維護復雜的連接狀態(如三次握手、四次揮手、滑動窗口等)。這種輕量級的設計讓它更適合高頻、短連接場景。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/898532.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/898532.shtml
英文地址,請注明出處:http://en.pswp.cn/news/898532.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【論文閱讀】Contrastive Clustering Learning for Multi-Behavior Recommendation

論文地址:Contrastive Clustering Learning for Multi-Behavior Recommendation | ACM Transactions on Information Systems 摘要 近年來,多行為推薦模型取得了顯著成功。然而,許多模型未充分考慮不同行為之間的共性與差異性,以…

藍橋杯2023年第十四屆省賽真題-子矩陣

題目來自DOTCPP: 暴力思路(兩個測試點超時): 題目要求我們求出子矩陣的最大值和最小值的乘積,我們可以枚舉矩陣中的所有點,以這個點為其子矩陣的左上頂點,然后判斷一下能不能構成子矩陣。如果可…

centos 磁盤重新分割,將原來/home 下部分空間轉移到 / 根目錄下

上次重裝系統時,不小心將一半磁盤放在了 /home 下面,運行一段時間后,發現/home 空間沒有怎么用,反而是/ 目錄報警說磁盤用完了,準備將 /home下的空間分一部分給主目錄 / 先查看下 空間分布情況 df -lh 可以看到&…

【C#語言】C#同步與異步編程深度解析:讓程序學會“一心多用“

文章目錄 ?前言?一、同步編程:單線程的線性世界🌟1、尋找合適的對象?1) 🌟7、設計應支持變化 ?二、異步編程:多任務的協奏曲?三、async/await工作原理揭秘?四、最佳實踐與性能陷阱?五、異步編程適用場景?六、性能對比實測…

Redis命令詳解--集合

Redis set 是string類型的無序集合。集合成員是唯一的,這就意味著集合中不能出現重復的數據,常用命令: SADD key member1 [member2...] 向集合添加一個或多個成員 SREM key member1 [member2...] 移除集合中一個或多個成員 SMEMBERS key 獲…

學習筆記 ASP.NET Core Web API 8.0部署到iis

一.修改配置文件 修改Program.cs配置文件將 if (app.Environment.IsDevelopment()) {app.UseSwagger();app.UseSwaggerUI(); }修改為 app.UseSwagger(); app.UseSwaggerUI(); 二.安裝ASP.NET Core Runtime 8.0.14 文件位置https://dotnet.microsoft.com/en-us/download/do…

配置 VSCode 的 C# 開發環境

1. 安裝必要的依賴 1.1 VSCode 擴展 安裝 C# 相關插件(如 C#、C# Extensions 等)。 1.2 .NET SDK 下載地址:.NET SDK 下載頁面 1.3 安裝檢測 在命令行輸入以下命令,如果正確返回了版本號,則表示 .NET SDK 安裝成…

從零搭建微服務項目Pro(第6-1章——Spring Security+JWT實現用戶鑒權訪問與token刷新)

前言: 在現代的微服務架構中,用戶鑒權和訪問控制是非常重要的一部分。Spring Security 是 Spring 生態中用于處理安全性的強大框架,而 JWT(JSON Web Token)則是一種輕量級的、自包含的令牌機制,廣泛用于分…

使用HAI來打通DeepSeek的任督二脈

一、什么是HAI HAI是一款專注于AI與科學計算領域的云服務產品,旨在為開發者、企業及科研人員提供高效、易用的算力支持與全棧解決方案。主要使用場景為: AI作畫,AI對話/寫作、AI開發/測試。 二、開通HAI 選擇CPU算力 16核32GB,這…

【保姆級】阿里云codeup配置Git的CI/CD步驟

以下是通過阿里云CodeUp的Git倉庫進行CI/CD配置的詳細步驟,涵蓋前端(Vue 3)和后端(Spring Boot)項目的自動化打包,并將前端打包結果嵌入到Nginx的Docker鏡像中,以及將后端打包的JAR文件拷貝至Do…

LINUX網絡編程API原型詳細解析

1. 網絡體系 1.1. 簡介 網絡采用分而治之的方法設計,將網絡的功能劃分為不同的模塊,以分層的形式有機組合在一起。 每層實現不同的功能,其內部實現方法對外部其他層次來說是透明的。每層向上層提供服務,同時使用下層提供…

藍橋杯 之 暴力回溯

文章目錄 數字接龍小u的最大連續移動次數問題迷宮 在藍橋杯中,十分喜歡考察對于網格的回溯的問題,對于這類的問題,常常會使用到這個DFS和BFS進行考察,不過無論怎么考察,都只是會在最基礎的模本的基礎上,根據…

微信小程序的業務域名配置(通過ingress網關的注解)

一、背景 微信小程序的業務域名配置(通過kong網關的pre-function配置)是依靠kong實現,本文將通過ingress網關實現。 而我們的服務是部署于阿里云K8S容器,當然內核與ingress無異。 找到k8s–>網絡–>路由 二、ingress注解 …

Python數據可視化工具:六西格瑪及其基礎工具概覽

在當今數據驅動的時代,數據分析和可視化工具成為了各行業優化流程、提升質量的關鍵手段。六西格瑪(Six Sigma)作為一種以數據為基礎、追求完美質量的管理理念,其實施依賴于一系列基礎工具的靈活運用。而Python,憑借其強…

集群環境下Redis 商品庫存系統設計

目錄 環境實現基本結構代碼業務代碼主體庫存管理模塊 后續問題高并發臨界值與樂觀鎖問題 完整代碼總結后話 環境 我們現在要做商品秒殺系統。功能很簡單,就是庫存刪減。用戶先下單減庫存,之后再進行扣款。 實現 基本結構代碼 那么我們先看下如何搭建…

Spring MVC響應數據

handler方法分析 /*** TODO: 一個controller的方法是控制層的一個處理器,我們稱為handler* TODO: handler需要使用RequestMapping/GetMapping系列,聲明路徑,在HandlerMapping中注冊,供DS查找!* TODO: handler作用總結:* 1.接收請求參數(param,json,pathVariable,共享域等…

基于圖像識別的醫學影像大數據診斷系統的設計與實現

標題:基于圖像識別的醫學影像大數據診斷系統的設計與實現 內容:1.摘要 隨著醫學影像技術的快速發展,醫學影像數據量呈爆炸式增長,傳統的人工診斷方式在處理海量數據時效率低下且容易出現誤差。本研究的目的是設計并實現一個基于圖像識別的醫學影像大數據…

Python散點圖(Scatter Plot):數據探索的“第一張圖表”

在數據可視化領域,散點圖是一種強大而靈活的工具,它能夠幫助我們直觀地理解和探索數據集中變量之間的關系。本文將深入探討散點圖的核心原理、應用場景以及如何使用Python進行高效繪制。 后續幾篇將介紹高級技巧、復雜應用場景。 Python散點圖(Scatter Plot):高階分析、散點…

【redis】在 Spring中操作 Redis

文章目錄 基礎設置依賴StringRedisTemplate庫的封裝 運行StringList刪庫 SetHashZset 基礎設置 依賴 需要選擇這個依賴 StringRedisTemplate // 后續 redis 測試的各種方法,都通過這個 Controller 提供的 http 接口來觸發 RestController public class MyC…

微服務》》Kubernetes (K8S) 集群 安裝

關閉交換空間 # 切換 超級管理員身份 # 查看交換空間 free -h # 關閉交換空間 swapoff -a避免開啟啟動交換空間 # 注釋swap開頭的行 vim /etc/fstab關閉防火墻 # 關閉防火墻 # 因為K8S 是集群形式存在的 至少三臺 一主二從 (一個master 兩個node&#xff09…