TCP與UDP:如何選擇最佳傳輸協議

應用場景選擇

如果需要可靠傳輸,首選 TCP

如果需要傳輸的數據包很大,也首選 TCP

絕大部分的場景,都可以優先考慮 TCP

UDP 相比于 TCP,最大的優點在于傳輸效率

有些情況,既需要可靠性又需要性能,這個時候時候就需要 KCP

TCP 是高可靠低效率,UDP 是無可靠高效率,KCP 是低可靠較高效率

如何使用 UDP 來實現可靠傳輸?

TCP 咋做我們就咋做

IP 協議主要完成的工作是兩方面

1.地址管理,使用一套地址體系,來描述互聯網上每個設備所處的位置

2.路由選擇

先認識一下 IP 協議報頭

上述拆包過程都是 IP(系統內核)自動完成的(IP 的拆包并不是因為達到 64 KB,而是在數據鏈路層還有限制)

包拆了之后,未來如何組包?

六度空間理論

世界上任何兩個人想認識一下,只需要六層朋友介紹(設想是每個人執行力都是一定的)

在計算機中,每個路由器都是“執行力最強的朋友”

所以想要通過網絡訪問到世界任何一個角落,最多經歷 32 / 64 次就足夠了

windous 有一個命令 tracert 這個命令就可以看到當前網絡通信的路徑是怎樣的

IP 協議如何管理的地址?

IP 地址本質上就是一個 32 整數,為了方便,就會把 IP 表示成 點分十進制 的方式,通過 3 個點分成 4 個部分,每個部分 1 個字節,每個部分的取值都是 0 - 255

IP 地址存在,目的就是為了能夠區分網絡上不同的設備,希望每個網絡設備都有唯一的一個 IP 地址

如何解決 IP地址不夠用?

1.動態分配 IP 地址

2.NAT地址

先把 IP 分成兩大類
1.私網 IP / 局域網 IP

IP 地址是以 10.*,172.16-172.31.*,192.168.*

這三類地址都是 私網 IP

2.公網IP / 廣域網 IP

要求公網上的設備,對應的公網 IP,都必須是唯一的

但是私網上 / 局域網上的設備,使用私網 IP,只要保證局域網內部的 IP 不重復即可,不同的局域網之間的 IP 允許重復

由于上述設定,就有一個重要的限制:
1.公網設備訪問公網設備,沒有任何問題,直接訪問即可
2.局域網設備訪問局域網設備(同一個局域網),也沒有問題
3.局域網設備訪問局域網設備(不同局域網),不允許訪問
4.局域網設備訪問公網設備,就需要對局域網設備的 IP 進行地址轉換
5.公網設備訪問局域網設備,不允許主動訪問

3.IPV6?

增加了 IP 地址個數

IPV4 使用了 4 個字節表示 IP 地址

IPV6 使用了 16 個字節 表示 IP 地址

IPV6 和 IPV4 不兼容

把一個 IP 地址,分成兩個部分,網絡號 + 主機號

我們的機器都是在一個局域網中的,網絡號都是相同的,主機號是不同的

一個局域網中,網絡號 和 主機號 都相同,是無法上網的

如果局域網中的設備,網絡號 和 路由器的網絡號不相同,無法上網

路由器 有一個功能 DHCP 自動把局域網這里的設備的 IP 分配好

1111 1111 1111 1111 1111 1111 0000 0000

左側全都是 1, 右側全是 0,不會出現 1 0 混著,位置為 1的撲粉都是“網絡號”,為 0 的部分就全都是主機號

家用寬帶來說的話,一般默認前三個字節是網絡號,主機號的范圍就表示局域網中可以有多少個設備,一個字節能表示 256

時間往前推移 20 到 30 年左右,當年的網段劃分方式不太一樣

在之前的網段劃分方式,沒有子網掩碼,直接通過設定 IP 的前綴來起到設置網段的效果

比較死板,尤其是 A B 類浪費了 很多 IP 地址

一些特殊的 IP地址

127.0.0.1? ? 127.*? 環回 IP

如果某個 IP 的主機號為全 0,表示 “這個網段”? 它不能分配給某個主機

如果某個 IP 的主機號全是 1,表示“廣播地址” ,表示二進制全是 1

192.168.0.255 這才是正確的

廣播一對多,這樣的傳輸,而且這里的多,指的是所有人

單播:一對一

組播:一對多(整體的一部分)

廣播:一對多(整體的所有)

往廣播地址上發消息,局域網中所有的設備都能收到,必須要發 UDP 的消息,TCP 不支持廣播

廣播的一個典型的應用場景:手機投屏 / 電腦投屏

點擊投屏,手機就會在局域網中廣播一個查詢數據包,看哪些設備有回應,根據回應,就知道 IP

為哪個的設備是能夠支持投屏的

接下來選擇對應的設備,就可以把數據和這個設備進行通信了

IP 協議 地址管理

路由選擇

網絡結構太復雜,每個路由器都無法掌握全局的信息,只能掌握一部分局部信息,此時路由器規劃出來的路線,只能是一個“較優解”

路由器轉發數據包的過程就是類似的過程

數據報中包含了“目的 IP” 字段,就是要問路的目標,每個路由器都對于網絡環境(和他相鄰的設備情況)有一定了解的,此時,就可以根據它的了解告訴我們下一步往哪個方向走

路由器內部有一個數據結構,路由表

路由表? ?目的 IP 的網段? ? ? 對應的網絡接口(從路由器的哪個口出)

拿著目的 IP 去路由表匹配,很可能此時查詢結果在路由表不存在

數據鏈路層

以太網(橫跨數據鏈路層 和 物理層)

以太網

數據幀格式

數據鏈路層,引入了另外一套地址體系,稱為“mac地址” / 物理地址

mac 地址 和 IP 地址 是獨立的兩套地址體系

IP 地址 側重于 全局的轉發,從起點到終點,這整個轉發過程,通過 IP 地址 負責完成(查詢路由表,通過 IP 地址)

MAC 地址,側重于 局部的轉發,兩個相鄰設備之間的轉發

一般開發很少用到 mac 地址,而 IP 地址會用的很多

mac 地址通常按照 16 禁止的方式表示字節之間通常使用 - 或者 :分割

mac 地址表示的范圍比 IPV4 地址大很多,當前 mac 地址都是和主機 一對一綁定的

IP 地址很多時候都是動態分配的

mac 地址就是靜態分配的,網卡出廠時,mac 地址就寫死了

由于 mac 地址有這樣的特性,有些程序,就會使用 mac 地址來作為機器的身份標識

域名解析系統 DNS

使用 IP 地址來描述網絡設備的位置? ?域名 一串可讀性更好的單詞 把域名自動的轉換成對應的 IP 地址

上古時期,映入了一個 hosts 文件

這里的內容就是行文本,包含很多行,每一行都有 IP 和 域名,每次訪問某個域名就會進行查詢,獲取到對應的 IP

hosts 文件目前仍然是有效的

搭建域名服務器的時候還會對于域名進行分級管理,一級域名,二級域名,三級域名。。。。這樣就可以控制每個服務器管理的數據都不多

這時谷歌搞的一套 DNS 鏡像服務器

HTTP 協議

HTTP 也是基于 TCP 來實現的

“超文本傳輸協議”

文本 => 字符串 超文本 不僅僅是字符串,還可以攜帶一些圖片,特殊的格式

HTTP 協議最主要的應用場景,就是網站,瀏覽器 和 服務器之間,傳輸數據,客戶端 和 服務器之間的數據傳輸,也很可能是 HTTP

HTTP 協議交互過程

HTTP 報文格式

抓包工具 抓包工具本質上是一個 “代理程序”,能夠獲取到網絡上傳輸的數據,并顯示出來

代理分成兩種

正向代理(客戶端代言人)

反向代理(服務器代言人)

如果之前fidder 安裝配置沒問題的話,會抓到很多數據包

打開一個網站,瀏覽器和服務器之間進行的 HTTP 交互不是只有一次,通常有很多次,第一次交互拿到這個頁面的 html,html 還會依賴其他的 css 和 js,圖片等,html 被瀏覽器加載之后,又會觸發一些其他的 http 請求,獲取到 css,js等,當執行js 的時候,js 代碼里可能又要觸發很多的http請求,獲取到一些數據

藍色的表示返回的是一個 html,往往是一個網站的入口請求,選中請求并雙擊,能看到明細

右上角請求明細

右下角響應明細

http請求的原始數據

當前響應數據被壓縮了,網絡傳輸中,帶寬是一個比較貴的硬件資源,為了節省帶寬,就可以把相應數據進行壓縮

HTTP 請求,包含四個部分

1.首行

2.請求頭

3.空行

請求頭最下面會有一個空行,這個空行就可以表示結束標記

4.正文(body)

http 的載荷部分

有的 http 有 body 有的沒有

HTTP 響應的基本格式,分成 4 個部分

1.首行

2.響應頭 鍵值對

3.空行

4.響應正文

相應的載荷是 html

URL

描述一個網絡上的資源位置

唯一資源定位符

uri 是唯一資源標識符

查詢字符串,是客戶端給服務器傳遞信息的重要途徑,這里的組織方式是按照鍵值對的方式來組織的

關于 URL encode

query string 里是自定義的鍵值對

在 URL 中,本身有些特殊符號具有特定的含義

如果 url 的 query string 中也包含同樣的符號,咋辦?
如果直接寫進去,可能就會使服務器 / 瀏覽器 解析失敗,靠譜的方法就是對上述符號進行 “轉義”

對于漢字,也是要進行轉義的

漢字的 utf8 / gbk 等編碼值其中可能某個字節就恰好和某可符號的 ascil 碼一致

這里的 urlencode 編碼十分重要

實際開發中,當要構造一個 url,尤其是 url 的 query string 中要包含中文的時候,務必要進行編碼

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

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

相關文章

《Leetcode》-面試題-hot100-棧

題目列表 20. 有效的括號 簡單難度 leetcode鏈接 155. 最小棧 中等難度 leetcode鏈接 394. 字符串解碼 中等難度 leetcode鏈接 739. 每日溫度 中等難度 leetcode鏈接 84. 柱狀圖中最大的矩形 困難難度 leetcode鏈接 題目 (1)有效的括號 題目 給…

GPT-5、Claude-4 同臺亮相!OneEval發布全新“大模型+知識庫”評測白皮書!

OneEval官網地址:http://OneEval.OpenKG.cnOneEval文章鏈接:https://arxiv.org/abs/2506.12577要點導讀 今年4月,OpenKG發布“大模型知識庫”融合能力評估榜單OneEval v1.0。近期,OpenKG在此基礎上,組織撰寫了OneEv…

【最新版】沃德云商協系統全開源+uniapp小程序

一.介紹沃德云商協是一款基于FastAdmin(thinkphp)Uniapp開發的“多組織”的云服務平臺,打造總商會、總協會、總校友會、工商聯等多組織無障礙溝通合作平臺,讓各大分會、各大分校友會、分組織實現輕松管理,線上宣傳展示…

Wireshark專家模式定位網絡故障:14種TCP異常深度解剖

TCP連接如同精密運轉的傳送帶,每一個異常數據包都是故障的早期信號。作為網絡工程師的“外科手術刀”,Wireshark在TCP故障診斷領域的價值無可替代。本文將通過14個真實故障場景,揭示如何利用Wireshark專家系統(Expert System&…

Python Day28 HTML 與 CSS 核心知識點 及例題分析

一、HTML 布局標簽(含 H5 語義化標簽)傳統布局多使用div標簽,H5 新增語義化標簽增強可讀性:核心知識點header:替代div#header,用于頁面頭部(如標題、導航)。footer:替代d…

MySQL 數據庫表操作與查詢實戰案例

MySQL 數據庫表操作與查詢實戰案例 在數據庫學習過程中,熟練掌握表的創建、數據插入及各類查詢操作是基礎且重要的技能。本文將通過實際案例,詳細介紹 MySQL 中數據庫表的設計、數據插入以及常用的查詢操作,幫助初學者快速上手。 項目一&…

THCV215一種高速視頻數據收發器,采用低電壓差分信號(LVDS)技術支持高速串行數據傳輸,支持1080p/60Hz高分辨率傳輸

THCV215 是一款符合 V-by-One HS 標準的 高速視頻數據收發器。THCV215和THCV216被設計為支持主機和顯示器之間的視頻數據傳輸。該芯片組可以在20MHz至100MHz的LVDS時鐘頻率下,僅通過一根差分電纜傳輸39bit視頻數據和3bit同步數據。該芯片組有兩個高速數據通道&#…

Linux 系統下 VS Code 降級至 1.85 版本教程:通過歷史版本網站解決兼容性問題

一、問題背景 當前使用的 VS Code 版本為 1.102.3,這一版本可能是未來版本、內部測試版或 Insiders 版本,而目前最新的穩定版屬于 1.8x 系列。由于版本過新,可能導致與部分插件(如舊版 Remote-SSH)或系統環境不兼容。…

一個基于 PyTorch 的完整模型訓練流程

一個基于 PyTorch 的完整模型訓練流程 flyfish訓練步驟具體操作目的1. 訓練前準備設置隨機種子、配置超參數(batch size、學習率等)、選擇計算設備(CPU/GPU)確保實驗可復現;統一控制訓練關鍵參數;利用硬件加…

ffmpeg,ffplay, vlc,rtsp-simple-server,推拉流命令使用方法,及測試(二)

一、常用命令 ffmpeg 推流命令 : ffmpeg -re -i input.mp4 -c copy -f flv rtmp://39.105.129.233/myapp/ffmpeg -re -i input.mp4 -c copy -f flv rtsp://39.105.129.233/myapp/-re 讀取流 -i 輸入文件 -f # 指定推流formatffplay 拉流命令 : ffplay rtmp://39.105.129.233/m…

使用行為樹控制機器人(三) ——通用端口

文章目錄一、通用端口功能實現1. 功能實現1.1 頭文件定義1.2 源文件實現1.3 main文件實現1.4 tree.xml 實現2. 執行結果使用行為樹控制機器人(一) —— 節點使用行為樹控制機器人(二) —— 黑板使用行為樹控制機器人(三) —— 通用端口有了上述前兩節我們已經可以實現節點間的通…

DataDome反爬蟲驗證技術深度解析:無感、滑塊與設備驗證全攻略

DataDome反爬蟲驗證技術深度解析:無感、滑塊與設備驗證全攻略 隨著網絡安全威脅的不斷演進,企業對數據保護的需求日益增強。DataDome作為業界領先的反爬蟲解決方案,以其三層防護機制在眾多知名網站中得到廣泛應用。本文將深入解析DataDome的…

RabbitMQ 消息轉換器詳解

RabbitMQ 消息轉換器詳解 一、為什么需要消息轉換器? RabbitMQ 的消息傳輸協議只識別字節流: 發送對象時,需要序列化成字節數組接收消息時,需要將字節數組反序列化成對象 如果不使用消息轉換器: 需要手動序列化和反序列…

內網穿透的應用-告別“現場救火”!用 cpolar遠程調試讓內網故障排查進入“云時代”

文章目錄前言**常見困境與解決方案****實際應用價值**1. Remote JVM Debug2. 系統要求與環境準備2.1 服務器環境2.2 本地開發環境3. 內網服務器準備及開始3.1 安裝cpolar配置支持遠程ssh登錄3.1.1 什么是cpolar?3.1.2 安裝cpolar3.1.3 注冊及配置cpolar系統服務3.1.…

Cherryusb UAC例程對接STM32內置ADC和PWM播放音樂和錄音(下)=>UAC+STM32 ADC+PWM實現錄音和播放

1. 程序基本框架整個程序框架, 與之前的一篇文章《Cherryusb UAC例程對接STM32內置ADC和DAC播放音樂和錄音(中)>UACSTM32 ADCDAC實現錄音和播放》基本一致, 只是這次將DAC替換成了PWM。因此這里不再贅述了。 2. audio_v1_mic_speaker_multichan_template.c的修改說明(略) 參…

1 JQ6500語音播報模塊詳解(STM32)

系列文章目錄 文章目錄系列文章目錄前言1 JQ6500簡介2 基本參數說明2.1 硬件參數2.2 模塊管腳說明3 控制方式3.1 通信格式3.2 通信指令4 硬件設計5 軟件設計5.1 main.c5.2 board_config5.2.1board_config.h5.2.2 board_config.c5.3 module_config5.3.1 module_config.h5.3.2 mo…

常用數據分析工具

Tableau丨Power BI丨FineBI丨SQL丨影刀丨Excel丨Python丨 參考視頻:【戴師兄】數據分析有哪些必學工具?2023最新版!Tableau丨Power BI丨FineBI丨SQL丨影刀丨Excel丨Python丨課程教程自學攻略_嗶哩嗶哩_bilibili 文檔資料: 【戴師兄…

OBOO鷗柏丨智能會議平板教學查詢一體機交互式觸摸終端招標投標核心標底參數要求

整機參數要求:55寸/65寸/75寸/85-86寸/98寸/100寸/110寸/115寸智能會議平板教學觸控一體機/智慧黑板觸摸屏招標投標核心標底參數要求1、整機屏幕采用≥采用超高清原廠原包原裝工業LCD液晶屏面板;具有高色域,顯示動態視頻、web及3D動畫時&…

無人機在環保監測中的應用:低空經濟發展的智能監測與高效治理

一、行業背景與技術革新 隨著全球環境問題日益嚴峻,傳統環保監測手段已難以滿足現代環境管理的需求。固定監測站點建設成本高、覆蓋范圍有限,地面巡查效率低下且存在安全風險。在此背景下,無人機技術憑借其獨特的空間優勢和技術特性&#xff…

PO、BO、VO、DTO、POJO、DAO、DO基本概念

一、圖解二、相關概念 1、PO(Persistant Object - 持久化對象) 核心定位: 直接與數據庫表結構一一映射的對象,通常用于 ORM(對象關系映射)框架(如 MyBatis、Hibernate)中。 特點&…