UDP與TCP

用UDP一定比用TCP快嗎?

假設我們需要在a電腦的進程發一段數據到b電腦的進程我們可以選擇使用TCP或UDP協議進行通信。

對于TCP這樣的可靠性協議每次消息發出后都能明確知道對方有沒有收到,就像打電話一樣,只要“喂喂"兩下對方就能回你個"hi hi"你就知道對方有沒有在聽

UDP就像是給郵政的信箱寄信一樣,你寄出去的信根本就不知道對方有沒有正常收到丟了也是有可能的

可以通過創建socket的方式來選擇使用TCP還是UDP?

fd = socket(AF_INET,SOCK_STREAM,0):是指使用字節流傳輸數據,就是TCP協議

fd = socket(AF_INET,SOCK_DGRAM ,0):是指使用數據報傳輸數據,就是UDP協議

返回的FD是指socket句柄,可以理解為socket的身份證號,這時候根據協議的不同還要執行一些操作,如果一切順利就可以開始傳輸消息,如果不順利,比如消息發到一半丟包了,那UDP和TCP的態度就不太一樣了。

  • UDP:管我什么事
  • TCP(可靠性):是不是發的太快了,是不是鏈路太堵了,不過放心會重發的。

TCP為了保證可靠性:

重傳機制:TCP會給發出的消息打上一個編號,也就是sequence,接收方收到后回一個確認ack包,發送方可以通過ack的數值知道接收方收到了哪些sequence的包,如果長時間等不到對方的確認TCP就會重新發送消息這就是所謂的重傳機制,重傳對性能影響比較嚴重,是下下策。

TCP就需要思考怎么盡量避免重傳,因為數據發送方和接收方處理數據能力可能不同,以此可以根據雙方的能力去調整發送的數據量就好了,就有了發送和接收窗口

接收方當前能接收的數據量大小TCP根據窗口的大小去控制自己發送的數據量,這樣就能大大減少丟包的概率比如一開始窗口大小為2。

收到一個數據包之后窗口就變成了1,此刻只能再收一個數據包。

當接收窗口變為0時,也就是所謂的0窗口,此時發送端停止發送數據接收方接收到數據之后會不斷處理,處理能力也不是一成不變的,有時候處理的快一些就可以多收點數據,處理的慢點,就希望對方能少發點數據,像這種根據自身能力不斷調整窗口的機制就是所謂的滑動窗口機制

通過滑動窗口機制TCP實現了流量控制,但這還不夠,有時候發生丟包并不是因為發送方和接收方的處理能力問題導致的而是跟網絡環境有關,將網絡想象為一條公路,馬路上可能堵滿了別人家的車只留下三輛車的空間,你也沒辦法同時上路

TCP希望能感知到外部網絡環境根據網絡環境及時調整自己的發包數量,但外部環境這么復雜,TCP是怎么感知到的呢?

TCP會先慢慢試探的發數據,不斷加碼,數據量越發越多,先發一個,再發兩個,再發四個,直到出現丟包,這樣TCP就知道當前網絡大概吃得消幾個包了,這就是所謂的擁塞控制機制

流量控制和擁塞控制的關系

  • 流量控制:針對的是單個連接數據處理能力的控制
  • 擁塞控制:針對的是整個網絡環境數據處理能力的控制

都是怎么降低重傳的概率,降低帶來的影響

當我們需要發送一個超大的數據包時,如果數據包丟了就得重傳同樣大的數據包

但如果將其分成一小段一小段,就算丟了也就只需要傳那一小段就好了,大大減少了重傳的壓力

這就是TCP的分段機制

所謂一小段的機制在傳輸層叫MSS(maximum segment size),數據包長度大于MSS,則會分成n個小于等于MSS的包

如果數據包還大于MTU(maximum transmit unit):還會繼續分包

一般情況下MSS等于MTU減去40 byte

所以TCP分段后到了IP層大概率就不會再分片了,既然數據包會被分段,鏈路又這么復雜還會丟包,那么數據包亂序也就顯得不奇怪了。

亂序的問題TCP也考慮到了:依靠數據包的sequence,接收方就能知道數據包的先后順序,后發的數據包先到就先放到專門的亂序隊列中等數據都到齊后 重新整理好數據包順序后再給到用戶,這就是亂序重排機制

網絡環境列路很長還復雜,數據丟包是很常見的,平常用TCP做各種數據傳輸完全對這些事情無感知

TCP三大特性:

UDP沒有這么多復雜的特性所以很快

這就是大部分人認為UDP比TCP快的原因,實際大部分情況下確實是這樣

有沒有用了UDP但卻比TCP慢的情況

UDP的用途,大部分人不會嘗試直接拿裸UDP放到生產環境中去做項目

UDP的價值:本質是內核提供的一個最小網絡傳輸功能,很多時候,都號稱自己用了UDP,但實際上都很忌憚他的丟包問題,所以大部分情況下都會在UDP的基礎上做各種不同程度的應用層可靠性保證,某些游戲為了追求低延遲,不同程度使用了UDP,比如王者農藥(KCP)

適合用于音視頻傳輸,因為這些場景允許丟包

雖然選擇了使用UDP,但是還是會在這一基礎上做一些重傳機制

如果現在需要傳一個特別大的數據包,在TCP內部會根據MSS的大小分段這時候進入到IP層之后每個包大小都不會超過MTU,因此IP層一般不會再進行分片,這時候發生丟包只需要重傳每個MSS分段就夠了。

但對于UDP本身并不會分段,如果數據過大到了IP層就會進行分片,此時發生丟包再次重傳就會重傳一整個大數據包,對于上面這種情況使用UDP就比TCP慢

解決起來也不復雜:如果使用UDP的應用層也實現了分段機制就不會出現上述的問題。

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

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

相關文章

【ELK】【Elasticsearch】數據查詢方式

1. 簡單查詢(URI Search) 通過 URL 參數直接進行查詢,適合簡單的搜索場景。 示例: bash 復制 GET /index_name/_search?qfield_name:search_value 說明: index_name:索引名稱。 field_name&#xf…

軟件測試:定義和實質

軟件缺陷的定義: 未實現說明書要求的功能出現了說明書指明不應出現的錯誤實現了說明書未提到的功能未實現說明書沒有明確提出但應該實現的目標軟件難以理解,不易使用,運行緩慢 或者從測試員客戶會認為不好的。 軟件缺陷的原因: …

【軟考】【2025年系統分析師拿證之路】【啃書】第十一章 軟件需求工程(十二)

目錄 需求的層次需求工程的主要活動需求的記錄技術需求分析需求定義 需求的層次 業務需求用戶需求系統需求 需求工程的主要活動 需求獲取需求分析形成需求規格需求確認和驗證需求管理 需求的記錄技術 任務卡片場景說明用戶故事 需求分析 方法: 結構化分析&a…

計算機網絡原理試題六

一、單項選擇 1.(單選題,5分)IP地址中網絡號的作用有 A.指定了設備能夠進行通信的網絡 B.指定了主機所屬的網絡 C.指定了被尋址的子網中的某個節點 D.標志了網絡中的主機 答案:B 2.(單選題,5分)關于IP主機地址,下列說法正確的是 A.網段部分不可以全1也不可以全0 B.主機部分可…

路由基礎 | 路由引入實驗 | 不同路由引入方式存在的問題

注:本文為 “路由基礎 | 路由表 | 路由引入” 相關文章合輯。 未整理去重。 路由基本概念 1—— 路由表信息、路由進表以及轉發流程、最長掩碼匹配原則 靜下心來敲木魚已于 2023-11-26 14:06:22 修改 什么是路由 路由就是指導報文轉發的路徑信息,可以…

更高效實用 vscode 的常用設置

VSCode 可以說是文本編輯神器, 不止程序員使用, 普通人用其作為文本編輯工具, 更是效率翻倍. 這里分享博主對于 VSCode 的好用設置, 讓 VSCode 如虎添翼 進入設置 首先進入設置界面, 后續都在這里進行配置修改 具體設置 每項配置通過搜索關鍵字, 來快速定位配置項 自動保存…

本地部署DeepSeek

1、下載ollama 瀏覽器輸入ollama,打開ollama網站,選擇版本下載 可以使用迅雷下載 打開迅雷,復制網址 2、安裝ollama ollama下載完成之后,安裝 3、查看ollama版本 Win R,cmd ollama -v 查看ollama版本 4、下載De…

大模型驅動的業務自動化

大模型輸出token的速度太低且為統計輸出,所以目前大模型主要應用在toP(人)的相關領域;但其智能方面的優勢又是如此的強大,自然就需要嘗試如何將其應用到更加廣泛的toM(物理系統、生產系統)領域中…

Leetcode1299:將每個元素替換為右側最大元素

題目描述: 給你一個數組 arr ,請你將每個元素用它右邊最大的元素替換,如果是最后一個元素,用 -1 替換。 完成所有替換操作后,請你返回這個數組。 代碼思路: 方法 replaceElements 輸入參數:…

Java 大視界 -- 人才需求與培養:Java 大數據領域的職業發展路徑(92)

💖親愛的朋友們,熱烈歡迎來到 青云交的博客!能與諸位在此相逢,我倍感榮幸。在這飛速更迭的時代,我們都渴望一方心靈凈土,而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識,也…

Weboffice在線Word權限控制:限制編輯,只讀、修訂、禁止復制等

在現代企業辦公中,文檔編輯是一項常見且重要的任務。尤其是在線辦公環境中,員工需要在網頁中打開和編輯文檔,但如何確保這些文檔只能進行預覽而無法被編輯或復制,成為許多企業面臨的一個痛點。尤其是在處理涉密文檔時,…

基于 Spring Boot 和微信小程序的倉儲管理系統設計與實現

大家好,今天要和大家聊的是一款基于 Spring Boot 和 微信小程序 的“倉儲管理系統”的設計與實現。項目源碼以及部署相關事宜請聯系我,文末附上聯系方式。 項目簡介 基于 Spring Boot 和 微信小程序 的“倉儲管理系統”主要使用者分為 員工、供應商 和…

Stable Diffusion本地化部署超詳細教程(手動+自動+整合包三種方式)

一、 Stable Diffusion簡介 2022年作為AIGC(Artificial Intelligence GeneratedContent)時代的元年,各個領域的AIGC技術都有一個迅猛的發展,給工業界、學術界、投資界甚至競賽界都注入了新的“[AI(https://so.csdn.net/so/search…

WPS的AI助手進化跟蹤(靈犀+插件)

Ver V0.0 250216: 如何給WPS安裝插件用以支持其他大模型LLM V0.1 250217: WPS的靈犀AI現在是DeepSeek R1(可能是全參數671B) 前言 WPS也有內置的AI,叫靈犀,之前應是自已的LLM模型,只能說是屬于“能用,有好過無”,所…

通俗理解-L、-rpath和-rpath-link編譯鏈接動態庫

一、參考資料 鏈接選項 rpath 的應用和原理 | BewareMyPower的博客 使用 rpath 和 rpath-link 確保 samba-util 庫正確鏈接-CSDN博客 編譯參數-Wl和rpath的理解_-wl,-rpath-CSDN博客 Using LD, the GNU linker - Options Directory Options (Using the GNU Compiler Colle…

SpringMVC環境搭建

文章目錄 1.模塊創建1.創建一個webapp的maven項目2.目錄結構 2.代碼1.HomeController.java2.home.jsp3.applicationContext.xml Spring配置文件4.spring-mvc.xml SpringMVC配置文件5.web.xml 配置中央控制器以及Spring和SpringMVC配置文件的路徑6.index.jsp 3.配置Tomcat1.配置…

window中git bash使用conda命令

window系統的終端cmd和linux不一樣,運行不了.sh文件,為了在window中模仿linux,可以使用gui bash模擬linux的終端。為了在gui bash中使用python環境,由于python環境是在anaconda中創建的,所以需要在gui bash使用conda命…

在線考試系統(代碼+數據庫+LW)

摘 要 使用舊方法對在線考試系統的信息進行系統化管理已經不再讓人們信賴了,把現在的網絡信息技術運用在在線考試系統的管理上面可以解決許多信息管理上面的難題,比如處理數據時間很長,數據存在錯誤不能及時糾正等問題。這次開發的在線考試…

c/c++藍橋杯經典編程題100道(19)漢諾塔問題

漢諾塔問題 ->返回c/c藍橋杯經典編程題100道-目錄 目錄 漢諾塔問題 一、題型解釋 二、例題問題描述 三、C語言實現 解法1:遞歸法(難度★) 解法2:迭代法(難度★★★) 四、C實現 解法1&#xff1…

趕AI大潮:在VSCode中使用DeepSeek及近百種模型的極簡方法

1 趕AI大潮:在VSCode中使用DeepSeek及近百種模型的極簡方法 1.1 背景 DeepSeek在春節期間突然大行其道,欣喜國力大增的同時,對于普通IT工作者,如何才能享受這一波AI紅利,讓自己的工作更出彩呢? ??很多人…