網絡協議棧

網絡協議棧的位置

用戶在應用層的各種請求最終會下達給操作系統,操作系統內除了進程管理、文件管理、內存管理、驅動管理之外,還有一個內嵌的軟件協議棧,協議棧將用戶的數據進行各種封包后,通過網卡將數據傳遞到網絡當中,數據在網絡內部經過各種路由轉發,最終將數據傳送到了目標服務器。

網絡協議棧各部分所處位置:

應用層是位于用戶層的。 這部分代碼是由網絡協議的開發人員來編寫的,比如HTTP協議、HTTPS協議以及SSH協議等。
傳輸層和網絡層是位于操作系統層的。 其中傳輸層最經典的協議叫做TCP協議,網絡層最經典的協議叫做IP協議,這就是我們平常所說的TCP/IP協議。
數據鏈路層是位于驅動層的。 其負責真正的數據傳輸。

網絡協議棧中各層的功能

  1. 物理層
    傳輸原始比特流(0/1),定義電壓、光信號等物理特性。

  2. 數據鏈路層
    節點間幀傳輸(如 MAC 地址),錯誤檢測(CRC 校驗),控制物理層訪問。(負責數據真正的發送過程)

  3. 網絡層
    IP 地址尋址與路由選擇(如路由器跨網絡轉發數據包)。(發去哪)

  4. 傳輸層
    端到端可靠傳輸(TCP)或快速傳輸(UDP),通過端口號區分應用。

  5. 應用層
    為應用程序提供協議(HTTP/FTP/DNS 等),直接處理用戶數據

    • 層狀結構的本質是軟件工程上面的解耦,此時層與層之間只有接口的相互調用關系,此時我們就可以讓研究不同領域的開發人員編寫不同層的代碼,最后再將各層的代碼聯調起來,由于每一層的代碼都是對應領域的專業人員編寫的,因此代碼聯調后整體的性能也是很高的。

      并且這樣的層狀結構可以增加代碼的可維護性和可擴展性。比如有一天你覺得數據鏈路層的代碼已經無法承擔起通信的能力了,那么此時我們就可以用一個新的協議對它進行替換,而其他各層對應的協議都不用換,這就叫做可擴展性。而如果協議棧的某一層出現了問題,我們只要確定了是哪一層出了問題,就可以直接去對應層去找問題,這就叫做代碼的可維護性。

      1. MAC 地址?

        • 定義:唯一標識網絡設備的物理地址,固化在網卡中,格式為00:1A:2B:3C:4D:5E(6 字節)。
        • 作用:在局域網(如以太網)中直接定位設備,數據鏈路層通過 MAC 地址實現設備間幀的精確投遞。
        • 特點
          • 前 3 字節為廠商標識(由 IEEE 分配),后 3 字節由廠商自定義。
          • 用于交換機 / 路由器轉發數據時構建 MAC 地址表。
        • CRC 校驗(循環冗余校驗)
        • 定義:一種數據鏈路層的錯誤檢測技術,通過數學算法生成校驗碼,附加到數據幀尾部。
        • 原理:發送方用生成多項式(如 CRC-32)計算數據的余數作為校驗值;接收方重新計算并比對,不一致則判定數據損壞。
        • 特點
          • 檢測能力極強(如 CRC-32 可檢測所有≤32 位的突發錯誤)。
          • 僅用于檢錯,不糾錯(發現錯誤后直接丟棄幀,觸發重傳)。
      #include <iostream>
      #include <vector>// 計算 CRC-16 校驗值
      uint16_t crc16(const std::vector<uint8_t>& data) {const uint16_t polynomial = 0x8005;uint16_t crc = 0xFFFF;for (uint8_t byte : data) {crc ^= static_cast<uint16_t>(byte) << 8;for (int i = 0; i < 8; ++i) {if (crc & 0x8000) {crc = (crc << 1) ^ polynomial;} else {crc <<= 1;}}}return crc;
      }int main() {std::vector<uint8_t> data = {0x01, 0x02, 0x03, 0x04};uint16_t result = crc16(data);std::cout << "CRC-16 校驗值: 0x" << std::hex << result << std::endl;return 0;
      }    

      不同協議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做數據報(datagram),在鏈路層叫做幀

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

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

      相關文章

      C#索引器基礎到實踐

      1. 封裝和隱藏內部實現 數組是一個簡單的數據結構,它的內部實現是固定的(基于連續內存)。而索引器可以隱藏內部的實現細節,允許開發者使用更復雜的數據結構來存儲數據,同時對外提供類似數組的訪問方式。 示例: 假設你有一個類,內部使用 Dictionary 或 List 來存儲數據…

      C++之list類(超詳細)

      在上一節中我們學習了STL中的vector這個容器&#xff0c;這節我們來學習一下另外一個常用的容器——list。 文章目錄 前言 一、list的介紹 二、list的使用及相關接口 1.list的使用 2.list的迭代器使用 3.list的相關接口 3.1 list capacity 3.2 list element access 3.3…

      mysql、oracle、SQLserver之間的區別和優勢

      MySQL、Oracle和SQL Server都是常見的關系型數據庫管理系統&#xff08;RDBMS&#xff09;&#xff0c;它們在某些方面有一些區別和優勢。 MySQL&#xff1a; MySQL是一種開源的RDBMS&#xff0c;由Oracle公司開發和維護。它具有快速、穩定和易于使用的特點。MySQL適用于中小型…

      Python依賴包遷移到斷網環境安裝

      首先&#xff0c;我應該確認兩臺電腦的操作系統都是Windows&#xff0c;所以架構和版本應該兼容。Python版本必須一致&#xff0c;否則可能會有問題。比如&#xff0c;如果電腦B用的是Python 3.8.5&#xff0c;電腦A也得裝同樣的版本&#xff0c;否則有些包可能不兼容。所以第一…

      75.HarmonyOS NEXT ImageItemView組件深度剖析:手勢交互與動畫實現(二)

      溫馨提示&#xff1a;本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦&#xff01; HarmonyOS NEXT ImageItemView組件深度剖析&#xff1a;手勢交互與動畫實現(二) 一、手勢系統架構 .gesture(GestureGroup(GestureMode.Exclusiv…

      Qt 控件概述 QWdiget

      Qt為我們提供了很多控件&#xff0c;這些控件拿過來就可以使用 目錄 QWidget 屬性 WindowFrame的影響 QWidget Qt中所有的組件都是繼承自QWidget Qt Creator中的右側可以看到QWidget的各種屬性 其中各種屬性都可以在Qt文檔中找到說明 ? 屬性 enabled&#xff1a;描述該組…

      適合企業內訓的AI工具實操培訓教程(37頁PPT)(文末有下載方式)

      詳細資料請看本解讀文章的最后內容。 資料解讀&#xff1a;適合企業內訓的 AI 工具實操培訓教程 在當今數字化時代&#xff0c;人工智能&#xff08;AI&#xff09;技術迅速發展&#xff0c;深度融入到各個領域&#xff0c;AIGC&#xff08;人工智能生成內容&#xff09;更是成…

      Axios 請求取消:從原理到實踐

      Axios 請求取消&#xff1a;從原理到實踐 在現代前端開發中&#xff0c;網絡請求是不可或缺的一部分。Axios 是一個基于 Promise 的 HTTP 客戶端&#xff0c;廣泛應用于瀏覽器和 Node.js 環境中。然而&#xff0c;在某些場景下&#xff0c;我們可能需要取消正在進行的請求&…

      Spring Boot對接twilio發送郵件信息

      要在Spring Boot應用程序中對接Twilio發送郵件信息&#xff0c;您可以使用Twilio的SendGrid API。以下是一個簡單的步驟指南&#xff0c;幫助您完成這一過程&#xff1a; 1. 創建Twilio賬戶并獲取API密鑰 注冊一個Twilio賬戶&#xff08;如果您還沒有的話&#xff09;。在Twi…

      【最后203篇系列】015 幾種消息隊列的思考

      背景 隊列還是非常重要的中間件&#xff0c;可以幫助我們&#xff1a;提高處理效率、完成更復雜的處理流程 最初&#xff0c;我覺得只要掌握一種消息隊列就夠了&#xff0c;現在想想挺好笑的。 過去的探索 因為我用python&#xff0c;而rabbitmq比較貼合快速和復雜的數據處…

      TensorFlow 與 TensorFlow Lite:核心解析與層應用

      1. 引言 TensorFlow 是 Google 開發的開源機器學習框架&#xff0c;支持從數據預處理、模型訓練到推理部署的完整生命周期。然而&#xff0c;在嵌入式和移動設備上&#xff0c;原生 TensorFlow 過于龐大&#xff0c;因此 Google 推出了輕量級版本——TensorFlow Lite&#xff…

      DeepSeek大模型在政務服務領域的應用

      DeepSeek大模型作為國產人工智能技術的代表&#xff0c;近年來在政務服務領域的應用呈現多點開花的態勢。通過多地實踐&#xff0c;該技術不僅顯著提升了政務服務的效率與智能化水平&#xff0c;還推動了政府治理模式的創新。以下從技術應用場景、典型案例及發展趨勢三個維度進…

      電子電氣架構 --- 分布到集中的動カ系統及基于域控制器的架構

      我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 所有人的看法和評價都是暫時的,只有自己的經歷是伴隨一生的,幾乎所有的擔憂和畏懼,都是來源于自己的想象,只有你真的去做了,才會發現有多快樂。…

      深入理解C/C++堆數據結構:從原理到實戰

      一、堆的本質與特性 1.1 什么是堆數據結構&#xff1f; 堆&#xff08;Heap&#xff09;是一種特殊的完全二叉樹&#xff0c;它滿足以下核心性質&#xff1a; 堆序性&#xff1a;每個節點的值都滿足特定順序關系 結構性&#xff1a;完全二叉樹的結構特性&#xff08;除最后一…

      Python學習第十七天

      Django框架-SQLite3 介紹 Django內置了對 SQLite3 數據庫的支持。SQLite3 是一個輕量級的嵌入式數據庫引擎&#xff0c;非常適合開發、測試和小型項目。以下是關于 Django 中 SQLite3 的介紹和應用指南。&#xff08;除了這些還支持mysql、oracle以及其他查詢文檔&#xff0c;…

      Docker 》》Docker Compose 》》network 網絡 compose

      docker 默認的網絡 三種模式 # 列出所有當前主機上或Swarm集群上的網絡 docker network ls#查看網絡詳情 docker network inspect network名稱# 清除未使用的docker網絡 docker network prune -f# 創建網絡 ocker network create -d bridge 網絡名稱 docker network create –s…

      Python數字信號處理之最佳等波紋濾波器階數估計原理

      Matlab中的階數估計函數 在MATLAB中&#xff0c;使用firpmord函數可以估算等波紋FIR濾波器的最小階數。該方法基于Parks-McClellan算法&#xff0c;通過通帶和阻帶的頻率邊界、幅度響應及允許的最大誤差來自動計算參數。 rp 3; % Passband ripple in dB rs 40; …

      JumpServer基礎功能介紹演示

      堡壘機可以讓運維人員通過統一的平臺對設備進行維護&#xff0c;集中的進行權限的管理&#xff0c;同時也會對每個操作進行記錄&#xff0c;方便后期的溯源和審查&#xff0c;JumpServer是由飛致云推出的開源堡壘機&#xff0c;通過簡單的安裝配置即可投入使用&#xff0c;本文…

      C++和C的區別

      C和C語言雖然共享相似的語法&#xff0c;但在設計理念和功能特性上有顯著區別。以下是兩者的主要差異&#xff1a; 1. 編程范式 C&#xff1a;純過程式編程&#xff0c;強調函數和步驟。C&#xff1a;支持多范式&#xff0c;包括面向對象編程&#xff08;類、繼承、多態&…

      Android LeakCanary 使用 · 原理詳解

      一、簡介 LeakCanary 是 Square 公司開源的 Android 內存泄漏檢測工具&#xff0c;通過自動化監控和堆轉儲分析&#xff0c;幫助開發者快速定位內存泄漏根源。其核心設計輕量高效&#xff0c;已成為 Android 開發中必備的調試工具。 二、使用方式 1. 集成步驟 在項目的 buil…