days32 :零基礎學嵌入式之網絡2.0

一、wireshark :網絡抓包工具


1.功能:抓取通過電腦網卡的網絡數據

2.作用:排查故障、抓取數據做數據分析、

3.用法:

(1)sudo wireshark

(2)選擇需要抓取的網卡====》any

(3)設置抓取的條件 ===》dup.port == 50010? ? ?然后按一下回車

(4)開始抓取

(5)進行一次網絡通信

二、頭部信息

1.udp 頭部信息:8個字節

數據長度:真正發送的正文長度+8個字節的頭部

2.tcp【頭部信息】:可變長

(1)數據偏移:頭部的長度;固定頭部24字節+選項 :可變長的頭部長度

(2)標志位:

  • ? ? URG: 緊急指針標志, 為1時表示緊急指針有效, 該報文應該優先傳送。
  • ? ? ACK: 確認應答標志
  • ? ??PSH: ?表示發送數據,提示接收端從TCP接收緩沖區中讀走數據,為接收后續數據騰出空間
  • ? ?RST: 重置連接標志
  • ? ? ?SYN: 表示請求建立一個連接
  • ? ? FIN: finish標志, 表示釋放連接

? ?(3) 滑動窗口大小:是TCP流量控制得一個手段。目的是告訴對方, 本端得TCP接受緩沖區還能容納多少字節得數據,這樣對方就可以控制發送數據的速度,從而達到流量控制,16bit,因而窗口最大65535.

(4)序號和確認序號

發送端:0-999;

接收端返回:1000;

if(沒發全)

例如:

發送端:0-999;

接收端返回:500;

三、TCP?

1.TCPT特點:

(1)面向鏈接

(2)面向字節流

(3)安全可靠的傳輸協議,因為會先建立連接

(4)占用資源開銷大,效率低,實時性不佳,機制復雜

2.安全可靠機制

(1)三次握手:【客戶端發起】
指建立tcp連接時,需要客戶端和服務端總共發送三次報文確認連接。(確保雙方都已經 做好收發數據的準備)

ACK:響應報文

STN:請求建立一個連接


(2)四次揮手:【兩端都可發起】
斷開一個tcp連接,需要客戶端和服務端發送四個報文以確認斷開。(確保斷開前雙方都已經收發完畢)

FIN:finish標志,表示釋放連接

(3) 應答機制

每一個tcp頭部有個序列號和確認應答號,TCP給每一抱會有一個序列號,發送方會把第一個編號給序號,在接受方應答的時候,會把確認序列號置最后一個編號的下一個編號回應

通過序列號和確定序列號來確定收發的

(4)超時重傳機制

3.編程

1.socket

? ?socket(AF_INET, SOCK_STREAM, 0);

?2.connect

?int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

(1)功能:?發送三次握手鏈接請求
(2)參數:
sockfd:套接字文件描述符
addr:存放目的地址空間首地址
addrlen:目的地址長度
(3)返回值:
成功返回0?
失敗返回-1

3.send

?ssize_t send(int sockfd, const void *buf, size_t len, int flags);

(1)功能:發送數據
(2)參數:
sockfd:套接字文件描述符
buf:存放數據空間首地址
len:數據長度
(3)返回值:
成功返回發送字節數
失敗返回-1

4.recv

??? ? ?ssize_t recv(int sockfd, void *buf, size_t len, int flags);

(1)功能:接收數據?
(2)參數:
sockfd:套接字文件描述符
buf:存放數據空間首地址?
len:最多接收數據長度?
flags:接收屬性默認為0?
(3)返回值:
成功返回實際接收字節數
失敗返回-1?
對方連接斷開,直接返回,不在阻塞,沒有數據返回0;?

?? ?5.bind

int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);

6.listen

? int listen(int sockfd, int backlog);

(1)功能:監聽三次握手鏈接請求
(2)參數:
sockfd:套接字文件描述符
backlog:最多允許等待尚未處理的三次握手鏈接個數
(3)返回值:
成功返回0?
失敗返回-1?

10.accept

?? ? ? int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

(1)功能::處理三次握手等待隊列中的第一個請求并建立一個用來通信的新套接字
(2)參數:
sockfd:套接字文件描述符
addr:存放發送端IP地址空間首地址?
addrlen:想要接收的IP地址的長度?
(3) 返回值:
成功返通訊套接字
失敗返回-1?

4.提高效率

(1)延遲應答

(2)捎帶應答

(3)流量控制機制

發送端根據窗口的數據大小,去動態控制發送端的數據;0--65535,接收端根據自己的能力,去調整窗口的大小,65535的時候,接受端處理能力最強,發送端可以發快一點。

(4)滑動窗口

????????滑動窗口大小:是TCP流量控制得一個手段。目的是告訴對方, 本端得TCP接受緩沖區還能容納多少字節得數據,這樣對方就可以控制發送數據的速度,從而達到流量控制,16bit,因而窗口最大65535.

????????本質是一段緩沖區:通過指針把緩沖區分為幾個部分:

????????已發送并且收到應答的數據、已發送未收到應答的數據、未發送但在對方處理能力內的數據;未發送但不在對方處理能力內的數據;

慢慢滑動,已發送并且收到的數據滑出。

四. TCP粘包問題【高頻面試題】


TCP協議是面向字節流的協議,接收方不知道消息的界限,不知道一次提取多少數據,這就造成了粘包問題。

1.?粘包問題出現的原因:?

(1)發送端:需要等緩沖區滿時才發送出去,造成粘包;發送數據太快

(2)接收端:不及時的接收緩沖區內的包,造成多個包接收。處理數據太慢導致數據在緩沖區緩存

2.避免粘包問題的方法:

(1)對于定長的包,保證每次都按固定大小發送和讀取即可;// ?結構體

????????1)問題:

  • ????????結構體對齊問題:假設發送方和接收方分別32字節、64字節;在不同字節平臺結構體對齊長度不一樣;所以要確保雙方結構體對齊方式一樣;或者指定按照1個字節對齊,注意,結構體不可放指針;
  • ? ? ? ? 在雙方通信時,發送方的發送數據類型不一樣,接收很難確認和區分接受的大小;所以不適用于數據類型多樣化;

(2) 對于變長的包,還可以在包和包之間使用明確的分隔符,這個分隔符是由程序員自己來定的,只要保證分隔符不和正文沖突即可。應用層根據分隔符進行解析

(3)自定義一個應用層的數據協議幀;

如果數據里面有幀頭或者幀尾 ====》在幀頭后面加入一個長度,這個長度規定,向后°多少個

首先找幀頭和有效字節長度,向后讀有效字節長度并且讀完了看最后是不是幀尾

在后面加個校驗

所以包含:幀頭(AA)、幀尾(BB)、有效數據長度(len)、校驗(例如8位和校驗()、16位和校驗、CRC校驗、和其他復雜校驗算法)

tcp和UDP:

1都是網絡中傳輸層的傳輸協議

U叫做,無需建立鏈接、直接發送給接收方,需要對方的地址,面向數據包;存在丟包,盡最大努力叫覅,不安全不可靠;由于沒有很多機制,頭部小,資源開銷打;要求實時性、不要求數據;

T需要建立TXP鏈接,面向字節流,有一系列機制可以確保安全機制,三次握手四次揮手、應答機制、流量控制、流動窗口、超時重傳;由于很多機制。頭部大。資源開銷打,要求數據傳輸安全性高


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

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

相關文章

數字護網:一次深刻的企業安全體系靈魂演練

🧩 引言:什么是“護網”?—— 不止是攻防,更是企業安全能力的年度大考 每年,由國家相關部門牽頭的“護網行動”都如期而至,各大企事業單位的安全團隊也隨之進入高度戒備狀態。然而,“護網”遠非…

基于 NumPy 的高效數值計算技術解析與實踐指引

在數據處理與科學計算領域,高效是核心訴求。NumPy 作為 Python 生態高效數值計算的基石,以高性能多維數組對象及配套函數,成為數據從業者的必備工具。其數組支持算術、比較、邏輯等豐富運算,通過向量化操作直接處理每個元素&#…

Kafka MQ 控制器 broker

Kafka MQ 控制器 broker 1 控制器broker的選舉 在 Kafka 集群中會有一個或多個 broker,其中有一個 broker 會被選舉為控制器(Kafka Controller)?,它負責管理整個集群中所有分區和副本的狀態。當某個分區的leader副本出現故障時,由控制器負責為該分區選舉新的leader副本…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | ImageCarousel(圖片輪播組件)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— ImageCarousel組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 <script setup> 語法以及 Tailwind CSS …

基于springboot的智能物流管理系統(源碼+論文)

一、開發環境 MYSQL數據庫 MySQL是一個真正的多用戶、多線程SQL數據庫服務器&#xff0c;基于SQL的客戶/服務器模式的關系數據庫管理系統。其特點包括&#xff1a; 功能強大&#xff1a;支持多用戶、多線程操作。使用簡單&#xff1a;管理方便&#xff0c;安全可靠性高。跨平…

Collection接口的詳細介紹以及底層原理——包括數據結構紅黑樹、二叉樹等,從0到徹底掌握Collection只需這篇文章

目錄 Collection簡介 Collection的遍歷方式 迭代器遍歷 增強for遍歷 Lambda表達式遍歷 List集合 List集合的遍歷方式 列表迭代器遍歷以及普通for循環 數據結構 棧 隊列 數組 鏈表 單向鏈表 雙向鏈表 二叉樹 遍歷方式 普通二叉樹 二叉查找樹 平衡二叉樹 旋轉…

《安順棒壘球》世界十大運動·棒球1號位

Worlds Top 10 Sports for Newbies | 棒球排第幾&#xff1f; 全球青訓體系大揭秘 ?添加圖片注釋&#xff0c;不超過 140 字&#xff08;可選&#xff09;神王棒球世界十大運動排名 Top 10 Global Sports&#xff08;按參與度/商業價值/影響力綜合排序&#xff09;足球 Footba…

什么是“差分“?

1. 什么是"差分"&#xff1f;想象兩個人在玩蹺蹺板&#xff1a;當兩人同時向上跳&#xff08;同向移動&#xff09;→ 蹺蹺板不動 → 這叫"共模"當一人向上&#xff0c;另一人向下&#xff08;反向移動&#xff09;→ 蹺蹺板傾斜 → 這叫"差分"差…

4.組合式API知識點(2)

10 組合式API - 模版引用模板引用的概念如何使用&#xff08;以獲取dom為例 組件同理&#xff09;組件實例對象defineExpose()11 組合式API - provide和inject作用和場景跨層傳遞普通數據跨層傳遞響應式數據跨層傳遞方法需求解決思考

GitLab企業版部署與許可證生成完整指南

GitLab企業版部署與許可證生成完整指南一、背景二、環境準備三、部署步驟1. 創建目錄結構2. 生成GitLab許可證2.1 克隆許可證生成器2.2 修改生成器腳本2.3 構建Docker鏡像2.4 生成許可證文件3. 創建Docker Compose配置文件4. 啟動GitLab容器4.1 初始啟動4.2 修改GitLab配置4.3 …

Jenkins 不同節點間文件傳遞:跨 Job 與 同 Job 的實現方法

在日常的 DevOps 運維實踐中&#xff0c;Jenkins 通常被用于串聯多個自動化流程&#xff0c;而這些流程往往需要在不同的構建節點&#xff08;agent&#xff09;上執行。例如&#xff0c;在以下場景中&#xff1a; &#x1f4cc; 場景需求描述&#xff08;實際問題&#xff09;…

Java中AQS原理

一、核心架構&#xff1a;AQS抽象隊列同步器二、AQS核心機制1. 三大核心組件&#xff1a;state狀態變量&#xff1a;volatile int&#xff0c;表示鎖狀態&#xff08;0未鎖定&#xff0c;≥1鎖定/重入次數&#xff09;CLH隊列&#xff1a;雙向鏈表實現的線程等待隊列Node節點&a…

深入理解程序鏈接機制:靜態鏈接、ELF加載與動態庫實現原理

目錄 一、靜態鏈接 1、靜態鏈接的基本概念 1. 靜態鏈接實例分析 2. 目標文件分析 3. 關鍵觀察 4. 重定位機制 5. 注意事項 2、靜態鏈接過程詳解 1. 目標文件反匯編分析&#xff08;上面已分析&#xff09; 2. 符號表分析 code.o 符號表 hello.o 符號表 3. 鏈接后的…

python基礎復習

復習python基礎語法,最好能做到使用python 寫一些簡單的算法。 1基礎基礎語法 1.0 輸入輸出 一個實用的print:format函數print(站點列表 {0}, {1}, 和 {other}。.format(Google, Runoob, other=Taobao)) 站點列表 Google, Runoob, 和 Taobao。print("a", "b…

ZLMediaKit 入門

什么是ZLMediaKit&#xff1f; ZLMediaKit 是一個基于C11的高性能流媒體服務器框架&#xff0c;支持RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV等多種流媒體協議。它具有以下特點&#xff1a; 跨平臺支持&#xff08;Linux、Windows、macOS&#xff09; 高性能&#xff0c;支持高…

接口測試Postman工具高級使用技巧

目錄 一、環境與變量的深度應用 多環境動態切換 動態變量與腳本生成 二、Pre-request Script 的妙用 參數簽名/加密 接口依賴處理 三、Test Script 的進階斷言 復雜 JSON Schema 校驗 數據庫斷言 四、數據驅動測試 CSV/JSON 文件驅動 動態生成測試用例 環境與變量的…

ZooKeeper學習專欄(四):單機模式部署與基礎操作詳解

文章目錄前言一、單機模式部署架構圖部署流程&#xff1a;二、zkCli.sh命令行工具基礎操作三、ACL權限控制實踐學習資源前言 本文是Zookeeper學習系列的第四篇&#xff0c;將詳細講解Zookeeper的單機模式部署過程以及基礎命令行操作&#xff0c;包括節點管理、Watcher機制和AC…

靜態登錄界面

代碼&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用戶登錄</title><st…

Three.js 全景圖(Equirectangular Texture)教程:從加載到球面映射

全景圖(Equirectangular Texture)是一種特殊的 2D 圖像,能通過數學轉換模擬 360 環繞視角,常用于創建沉浸式環境(如虛擬全景、天空盒替代方案)。本文將通過完整示例,帶你掌握 Three.js 中全景圖的加載、映射原理與實際應用。 什么是全景圖(Equirectangular Texture)?…

Rocky Linux 9 快速安裝 Node.js

Rocky Linux 9 快速安裝 Node.js 大家好&#xff0c;我是星哥&#xff01;今天給大家帶來 Rocky Linux 9 環境下 Node.js 的安裝教程。 本文將詳細介紹兩種安裝方法&#xff0c;幫你快速搭建穩定的 Node.js 環境。 Node.js 是一個非常流行的 JavaScript 運行時環境&#xff…