一周學完計算機網絡之三:1、數據鏈路層概述

簡單的概述

數據鏈路層是計算機網絡體系結構中的第二層,它在物理層提供的基本服務基礎上,負責將數據從一個節點可靠地傳輸到相鄰節點。可以將其想象成一個負責在兩個相鄰的網絡設備之間進行數據 “搬運” 和 “整理” 的 “快遞中轉站”。

在這里插入圖片描述

幾個重要概念:

  • :封裝成幀是指數據鏈路層給上層交付的協議數據單元添加幀頭和幀尾使之成為幀。通俗的來說就是:網絡層傳遞給數據鏈路層的數據,會被分割成大小不一的數據“包裹”,這個數據會被插入幀頭和幀尾,構成數據幀。
  • 幀頭和幀尾:幀里面包括了目的地址,就是讓目的主機通過幀的這個地址知道這個信息是發送給自己的。此外還包含標志位,比如PPP幀格式中就有標志位來進行幀的定界(兩個幀之間的數據邊界)。

在這里插入圖片描述

在這里插入圖片描述

  • **幀定界:**如果幀頭和幀尾的標志位,如何區分邊界呢?比如以太網V2的MAC幀。

    • 以太網V2的MAC幀,會在幀中插入8個字節(64比特)的前導碼,前導碼由 7 個字節的前同步碼和 1 個字節的即幀開始定界符,SFD組成,總共 8 個字節。它位于 MAC 幀的最前端,在物理層傳輸時,會先于目的地址、源地址等其他字段被發送出去。作用主要有二:

      • 時鐘同步:以太網中數據的傳輸是基于時鐘信號的,發送方按照自己的時鐘節奏發送數據,接收方需要與發送方的時鐘保持同步,才能準確地接收和解析數據。
      • 幀起始標識:最后的(SFD)作為幀開始定界符,用于標識 MAC 幀的正式開始。接收方在檢測到 SFD 后,就知道接下來的比特流是一個 MAC 幀的數據部分,從而開始對幀進行解析和處理。

      在這里插入圖片描述

  • 可靠傳輸:就是能夠實現,發送方發的數據,和接收方接受的數據完全一樣,不能有任何丟失或者錯誤。需要用到差錯檢測、確認與重傳、序號與排序的技術手段。這種傳輸方法的成本會比較高。

    • 差錯檢測:發送方在數據中加入一些冗余信息,如校驗和、循環冗余校驗(CRC)碼等。接收方通過對收到的數據進行相應的計算,來檢查數據在傳輸過程中是否發生了錯誤。例如,若計算出的 CRC 碼與收到的 CRC 碼不一致,就知道數據出現了差錯。
    • 確認與重傳:接收方收到數據后,會向發送方發送確認信息(ACK),告知發送方數據已正確接收。如果發送方在一定時間內沒有收到接收方的確認信息,或者收到了否定確認信息(NAK),就會認為數據傳輸出現了問題,然后重新發送數據。這種自動重傳請求(ARQ)機制可以有效地解決數據丟失或出錯的問題。
    • 序號與排序:為了保證數據的順序性,發送方會給每個數據分組加上一個序號。接收方根據序號對收到的數據進行排序,將亂序的數據調整到正確的順序后再提交給上層應用。
  • 透明傳輸:用這種前導碼的形式來區分幀,如果幀里面的數據和這個幀定界一樣的時候,接收數據的時候,就會把這個數據誤認為是幀定界來處理。容易引發誤判。解決方法就是使用透明傳輸,實現方法就是如下方法:

    • 字節填充:當數據中出現與幀定界符相同的字節時,為了避免接收方將其誤認為是幀的邊界,發送方會在該字節前面插入一個轉義字節。接收方收到數據后,會自動刪除這個轉義字節,恢復數據的原樣。例如,下面這種情況:(ESC表示轉義字符)

    在這里插入圖片描述

    ? 但是有的時候,轉義字符就是數據本身怎么搞,因此就在轉義字符前面也加入一個轉義字符。

    在這里插入圖片描述

    • 比特填充:在一些數據鏈路層協議中,如 HDLC 協議,采用比特填充的方式來實現透明傳輸。當數據中出現連續的若干個 1(通常是 5 個 1)時,發送方會在其后插入一個 0。接收方收到數據后,會自動刪除這些插入的 0,從而保證數據的透明傳輸。

在這里插入圖片描述

  • 差錯檢測:檢驗碼會被封裝在幀尾,比如圖片中的FCS就是。發送方把數據送到接收方以后,可以根據這個來判斷是否有誤碼(就是本來是0變成1,本來是1變成了0)。

    • 奇偶校驗:奇偶校驗法是根據被傳輸數據中 “1” 的個數的奇偶性來進行校驗的。具體來說,在發送數據時,會在數據后面添加一個奇偶校驗位,使得整個數據(包括校驗位)中 “1” 的個數為奇數或偶數。接收方收到數據后,會根據事先約定的奇偶性規則來檢查 “1” 的個數,如果 “1” 的個數不符合約定的奇偶性,則認為數據在傳輸過程中出現了錯誤。

      缺點是,無法識別出偶數位的比特誤碼情況。而且只能檢驗,不能糾錯。

    • 循環冗余校驗CRC:CRC 的基本原理是將待傳輸的數據比特序列看作是一個多項式的系數,通過特定的生成多項式對這個多項式進行除法運算,得到的余數作為校驗碼附加在數據后面一起傳輸。接收方收到數據后,用同樣的生成多項式對收到的數據進行除法運算,如果余數為零,則認為數據傳輸正確;否則,說明數據在傳輸過程中出現了錯誤。

    img

  1. 確定生成多項式:生成多項式是一個預先選定的二進制多項式,通常用 G ( x ) G(x) G(x) 表示。不同的應用場景會使用不同的生成多項式,例如,在以太網中常用的生成多項式是 G ( x ) = x 32 + x 26 + x 23 + x 22 + x 16 + x 12 + x 11 + x 10 + x 8 + x 7 + x 5 + x 4 + x 2 + x + 1 G(x)=x^{32}+x^{26}+x^{23}+x^{22}+x^{16}+x^{12}+x^{11}+x^{10}+x^8+x^7+x^5+x^4+x^2+x+1 G(x)=x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1
  2. 在數據后面添加 n 個零:n 是生成多項式$ G(x)$ 的最高次數。例如,對于上述以太網中的生成多項式, n = 32 n = 32 n=32。假設待傳輸的數據為 D ( x ) D(x) D(x),將 D ( x ) D(x) D(x)左移 n 位,即相當于在數據后面添加 n 個零,得到 D ( x ) × x n D(x) \times x^n D(x)×xn
  3. 進行模二除法:用 D ( x ) × x n D(x) \times x^n D(x)×xn 除以生成多項式 G ( x ) G(x) G(x),得到的余數 R ( x ) R(x) R(x) 就是 CRC 校驗碼。這里的除法是模二除法,即采用異或運算進行減法,不考慮借位。
  4. 附加校驗碼:將得到的 CRC 校驗碼 R ( x ) R(x) R(x) 附加在原始數據 D ( x ) D(x) D(x) 的后面,形成最終要傳輸的數據幀 T ( x ) = D ( x ) × x n + R ( x ) T(x)=D(x) \times x^n + R(x) T(x)=D(x)×xn+R(x)

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

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

相關文章

?WordToCard使用分享?

https://www.wordtocard.com 家人們,今天發現了一個超好用的工具——WordToCard!😜 它可以把WordToCard文檔轉換成漂亮的知識卡片,學習筆記、知識整理和內容分享都變得超輕松~🤗 支持各種WordToCard語法…

擴展:React 項目執行 yarn eject 后的 package.json 變化詳解及參數解析

擴展:React 項目執行 yarn eject 后的 package.json 變化詳解及參數解析 什么是 yarn eject?React 項目執行 yarn eject 后的 package.json 變化詳解1. 腳本部分 Scripts 被替換2. 新增構建依賴 dependencies(部分)3. 新增 Babel …

[Java實戰]Spring Boot 整合 Redis(十八)

[Java實戰]Spring Boot 整合 Redis(十八) 在現代的分布式應用開發中,Redis 作為一種高性能的鍵值存儲數據庫,被廣泛用于緩存、消息隊列、排行榜等多種場景。Spring Boot 提供了強大的支持,使得整合 Redis 變得非常簡單…

【氮化鎵】GaN在不同電子能量損失的SHI輻射下的損傷

該文的主要發現和結論如下: GaN的再結晶特性 :GaN在離子撞擊區域具有較高的再結晶傾向,這導致其形成永久損傷的閾值較高。在所有研究的電子能量損失 regime 下,GaN都表現出這種傾向,但在電子能量損失增加時,其效率會降低,尤其是在材料發生解離并形成N?氣泡時。 能量損失…

R語言實戰第5章(1)

第一部分:數學、統計和字符處理函數 數學和統計函數:R提供了豐富的數學和統計函數,用于執行各種計算和分析。這些函數可以幫助用戶快速完成復雜的數學運算、統計分析等任務,例如計算均值、方差、相關系數、進行假設檢驗等。字符處…

k8s術語之Horizontal Pod Autoscaling

應用的資源使用率通常都有高峰和低谷的時候,如何削峰填谷,提高整體的整體資源利用率,讓service中的Pod個數自動調整呢?Horizontal Pod Autoscaling:使pod水平自動縮放。這個Object也是最能體現kubernetes之于傳統運維價值的地方&a…

Linux復習筆記(三) 網絡服務配置(web)

遇到的問題,都有解決方案,希望我的博客能為你提供一點幫助。 二、網絡服務配置 2.3 web服務配置 2.3.1通信基礎:HTTP協議與C/S架構(了解) ??HTTP協議的核心作用?? Web服務基于HTTP/HTTPS協議實現客戶端&#xff…

9.1.領域驅動設計

目錄 一、領域驅動設計核心哲學 戰略設計與戰術設計的分野 ? 戰略設計:限界上下文(Bounded Context)與上下文映射(Context Mapping) ? 戰術設計:實體、值對象、聚合根、領域服務的構建原則 統一語言&am…

CSS Layer 詳解

CSS Layer 詳解 前言 最近在整理CSS知識體系時,發現Layer這個特性特別有意思。它就像是給樣式規則提供了一個專屬的「VIP通道」,讓我們能更優雅地解決樣式沖突問題。今天我就用最通俗的語言,帶大家全面了解這個CSS新特性。 什么是CSS Laye…

【Dv3Admin】工具視圖配置文件解析

在開發后臺管理系統時,處理復雜的 CRUD 操作是常見的需求。Django Rest Framework(DRF)通過 ModelViewSet 提供了基礎的增刪改查功能,但在實際應用中,往往需要擴展更多的功能,如批量操作、權限控制、查詢優化等。dvadmin/utils/viewset.py 模塊通過繼承并擴展 ModelViewS…

?云原生CAE軟件

?云原生CAE軟件?是一種在設計和實現時就充分考慮了云環境特點的軟件,能夠充分利用云資源,實現高效、可擴展和靈活的仿真分析。 定義和特點 云原生CAE軟件是一種在云端構建和運行的CAE(Computer Aided Engineering,計算機輔助工…

若依定制pdf生成實戰

一、介紹 使用 Java Apache POI 將文字渲染到 Word 模板是一種常見的文檔自動化技術,廣泛應用于批量生成或定制 Word 文檔的場景。使用aspose可以將word轉成pdf從而達到定制化pdf的目的。 參考文檔:java實現Word轉Pdf(Windows、Linux通用&a…

Redis再次開源!reids8.0.0一鍵安裝腳本分享

準備工作 1. 下載 Redis 8 安裝包 # Redis 8.0.0 示例(請替換為實際版本) http://download.redis.io/releases/redis-8.0.0.tar.gz一、腳本內容: #!/usr/bin/python # -*- coding: UTF-8 -*-import os import time import shutil import s…

stm32之BKP備份寄存器和RTC時鐘

目錄 1.時間戳1.1 Unix時間戳1.2 UTC/GMT1.3 時間戳轉換**1.** time_t time(time_t*)**2.** struct tm* gmtime(const time_t*)**3.** struct tm* localtime(const time_t*)**4.** time_t mktime(struct tm*)**5.** char* ctime(const time_t*)**6.** char* asctime(const stru…

Android學習總結之算法篇八(二叉樹和數組)

路徑總和 import java.util.ArrayList; import java.util.List;// 定義二叉樹節點類 class TreeNode {int val;TreeNode left;TreeNode right;// 構造函數,用于初始化節點值TreeNode(int x) {val x;} }public class PathSumProblems {// 路徑總和 I:判…

Scala和Spark的介紹

Scala 1. Slaca的發展過程 由洛桑聯邦理工學院的馬丁 奧德斯在 2001 年基于 Funnel 的工作開始設計,設計初衷是想集成面向對象編程和函數式編程的各種特性。 Scala 是一種純粹的面向對象的語言,每個值都是對象。 Scala 也是一種函數式語言&#xff0…

配置Hadoop集群環境-使用腳本命令實現集群文件同步

在 Hadoop 集群環境中,確保各節點配置文件一致至關重要。以下是使用 rsync 結合 SSH 實現集群文件同步的腳本方案,支持批量同步文件到所有節點: 1. 前提條件 所有節點已配置 SSH 免密登錄主節點(NameNode)能通過主機…

Redis能保證數據不丟失嗎之RDB

有了AOF為什么還需要RDB? 上一篇我們介紹了Redis AOF持久化策略。Redis能保證數據不丟失嗎之AOF AOF雖然能實現持久化,但由于AOF恢復數據的時候是一條一條命令重新執行的,但數據量大的時候,Redis數據恢復的時間就會很久,這會導致Redis在重啟的時候,有一大段時間的不可用…

AI浪潮下的藝術突圍戰:對話《名人百科數據庫》執行主編劉鑫煒

當AI生成的畫作在國際賽事中摘冠,當算法推薦主導藝術傳播路徑,技術革命正以前所未有的速度重塑藝術生態。我們獨家專訪深耕藝術推廣領域的劉鑫煒主編,探討當代藝術家在智能時代的生存法則。 圖為《名人百科數據庫》執行主編劉鑫煒 技術重構創…

Python 實現失敗重試功能的幾種方法

更多內容請見: python3案例和總結-專欄介紹和目錄 文章目錄 方法 1:手動 `while` 循環 + 異常捕獲方法 2:使用 `tenacity` 庫(推薦)方法 3:使用 `retrying` 庫(舊版,已停止維護)方法 4:`requests` 自帶重試(適用于 HTTP 請求)方法 5:自定義裝飾器(靈活控制)方法…