【計算機網絡】 —— 數據鏈路層(壹)

文章目錄

前言

?一、概述

1. 基本概念

2. 數據鏈路層的三個主要問題

二、封裝成幀

1. 概念

2. 幀頭、幀尾的作用

3. 透明傳輸

4. 提高效率

三、差錯檢測

1. 概念

2. 奇偶校驗

3. 循環冗余校驗CRC

1. 步驟

2. 生成多項式

3. 例題

4. 總結

四、可靠傳輸

1. 基本概念:

2. 可靠傳輸的實現機制

1. 停止等待協議 SW

(1)否定分組NAK

(2)超時重傳

(3)分組重復

(4)確認遲到

(5)SW協議的信道利用率

2. 回退N幀協議GBN

(1)無差錯情況

(2)累積確認

(3)有差錯情況

(4)發送窗口尺寸超過上限

(5)總結

3. 選擇重傳協議SR

(1)SR協議工作過程

(2)SR協議的窗口尺寸

(3)窗口尺寸超出上限

(4)總結


前言

上篇文章中,對于計算機網絡的物理層相關內容進行了整理和總結,今天開始數據鏈路層的學習,還請多多支持!

回顧上期內容:計算機網絡 ——【物理層】icon-default.png?t=O83Ahttps://blog.csdn.net/2401_86777036/article/details/143993284?sharetype=blogdetail&shareId=143993284&sharerefer=APP&sharesource=2401_86777036&sharefrom=link

?一、概述

1. 基本概念

鏈路(Link):從一個節點到相鄰節點的一段物理線路,中間沒有任何其他的交換節點

數據鏈路(Data Link):把實現通信協議的硬件和軟件加到鏈路上,就構成了數據鏈路

數據鏈路層以為單位傳輸和處理數據?

2. 數據鏈路層的三個主要問題

封裝成幀:數據鏈路層給網絡層交付的協議數據單元添加幀頭和幀尾

差錯檢測:接收方主機收到幀后通過檢錯碼和檢錯算法判斷幀在傳輸過程中是否產生誤碼

可靠傳輸:可以簡單理解為發送方發送什么,接收方就接收到什么

二、封裝成幀

1. 概念

數據鏈路層對上層交付的協議數據單元添加幀頭和幀尾使之成為一個幀

2. 幀頭、幀尾的作用

? ? ? ? 1. 包含重要的控制信息

????????

? ? ? ? 2. 幀定界

? ? ? ? PPP幀:幀頭、幀尾各有一字節的標志字段

接收方主機的數據鏈路層依據幀定界標志,從物理層交付的比特流中提取出一個個幀

BUT!并不是每一個數據鏈路層協議的幀中都有幀定界標志!

例如:以太網V2的MAC幀中:幀頭和幀尾中并沒有幀定界標志

接收方如何提取出以太網幀呢???

發送方數據鏈路層封裝好以太網幀后交付給物理層,物理層收到后,會在以太網幀前添加8字節的前導碼

前導碼:

????????前7個字節為前同步碼 —— 作用:是接受方的時鐘同步

????????最后一個字節為幀開始定界符 —— 表名其后面緊跟的為以太網MAC幀

以太網還規定了幀間間隔為96比特時間 ——> MAC幀不需要幀結束定界符

3. 透明傳輸

數據鏈路層對上層交付的傳輸數據沒有限制,就好像數據鏈路層不存在一樣

幀定界標志也是一個特殊的數值

如果上層交付的協議數據單元中,也包括這個數值

接收方還能正確接收這個幀么?答案明顯是錯誤的,接收方會對幀是否結束產生誤判,這種情況下就不能稱為透明傳輸

數據鏈路層的處理辦法:

在發送幀之前,對幀的數據部分進行掃描,每發現一個幀定界符,就在前面插入一個轉義字符

接收方識別到轉義字符時,就可以識別之后的一個字符為數據,從而剔除轉義字符后提取數據

轉義字符ESC:特殊的控制字符,長度為一字節,十進制數值為27

同樣!!轉義字符也是特殊的數值,如果數據中也存在轉義字符的數值呢???

處理方法同上,在發送幀之前,對幀的數據部分進行掃描,每發現一個幀定界符和轉義字符,就在前面插入一個轉義字符

對于面向比特的物理鏈路 ——> 比特填充法

——> 零比特填充法:在發送幀之前,對幀的數據部分進行掃描,每5個連續的1后插入一個0

——> 接收方接收時剔除0即可

4. 提高效率

為了提高幀的傳輸效率,應當使幀的數據部分的長度盡可能大一些

最大傳輸單元MTUMaximum Transfer Unit):考慮到差錯控制等多種因素,每一種數據鏈路層協議都規定了幀數據部分的長度上限

三、差錯檢測

1. 概念

  • 比特差錯:比特在傳輸過程中可能產生產錯(0變為1,1變為0)
  • 誤碼率BER(Bit Error Rate):在一段時間內,傳輸錯誤的比特占傳輸的比特總數的比率,BER?= 錯誤的比特 / 總的比特
  • 差錯檢測:使用差錯檢測碼來檢測數據在傳輸過程中是否產生了比特差錯
  • 差錯檢測碼:

其中FCS字段就是幀檢驗序列,讓接收方的數據鏈路層檢查幀在傳輸過程中是否產生了差錯

2. 奇偶校驗

在待發送的數據后添加一位奇偶校驗位,使整個數據(包括添加的校驗位)中1的個數為奇數(奇校驗)或偶數(偶校驗)

缺點:如果傳輸過程中比特1的奇偶性沒有發生變化,就檢測不出是否發生差錯

3. 循環冗余校驗CRC

循環冗余校驗CRC —— Cyclic Redundancy Check

1. 步驟

  1. 收發雙方約定好一個生成多項式G(x)
  2. 發送方基于待發送的數據和生成多項式計算出差錯檢測嗎(冗余碼),將其添加到待傳輸數據的后面一起傳輸
  3. 接收方通過生成多項式來計算是否產生了誤碼

2. 生成多項式

常用的生成多項式:

生成多項式必須包含最低次項1

3. 例題

發送方:

接收方:

4. 總結

  • 檢錯碼只能檢測幀在傳輸過程中是否出現差錯,但不能定位錯誤,因此無法糾錯;
  • 可以使用冗余信息更多的糾錯碼進行前向糾錯,但糾錯碼的開銷比較大,在計算機網絡中很少使用;
  • 循環冗余校驗CRC有很好的檢錯能力,雖然計算比較復雜,但易于硬件實現,因此被廣泛適用于數據鏈路層;
  • 計算機網絡中通常使用檢錯重傳的方式來糾正傳輸中的錯誤,或者丟掉檢測到差錯的幀,這取決于數據鏈路層向其上層提供的是否是可靠傳輸。

四、可靠傳輸

1. 基本概念:

????????對于檢測到差錯的數據:

? ? ? ? ????????不可靠傳輸:丟棄產生差錯的幀

? ? ? ? ? ? ? ? 可靠傳輸:想辦法實現發送方發送什么,接收方就收到什么

? ? ? ? 傳輸差錯:

? ? ? ? ? ? ? ? 分組丟失

? ? ? ? ? ? ? ? 分組失序

? ? ? ? ? ? ? ? 分組重復

2. 可靠傳輸的實現機制

1. 停止等待協議 SW

????????SW —— Stop-and-Wait

(1)否定分組NAK

接收方接收到數據之后,會對數據進行差錯檢測:

  • 如果檢測沒有產生誤碼,則返回確認分組ACK
  • 如果檢測到存在誤碼,則丟棄該分組,并返回否定分組NAK

發送方接收到否定分組NAK之后,會重新發送一份數據分組,直至接收到確認分組ACK,之后才會將數據從緩存中刪除

(2)超時重傳

如果發送方發送數據后,數據在傳播過程中丟失,接收方接收不到數據,就不會給發送方返回ACK或者NAK,發送方就會一直阻塞等待;

超時重傳:發送方中存在一個重傳計時器,重傳計時器中設置有一個重傳時間,發送方發送數據后,如果在規定的重傳時間內沒有收到ACK,就會重傳上一份數據。

如果接收方接收到數據之后,檢測到存在誤碼:

????????可以不立即返回NAK,而是等待發送方的超時重傳;

????????但對于誤碼率較高的點對點鏈路,為了使對方盡快重傳,也可選擇發送NAK

(3)分組重復

接收方正確接收數據后,返回ACK確認分組,ACK在傳播過程中丟失,觸發了發送方的超時重傳機制,此時就會導致接收方接收到兩份一樣的數據,而接受方無法判斷是否是重復分組

為避免分組重復問題,就需要給每個數據分組添加序號,對于停止等待協議,每次發送一個數據分組后就會停止等待,所以只需要保證每次發送的數據序號和上一次發送的數據序號不同即可,因此只需要一個比特位來編號即可

(4)確認遲到

接收方正確接受數據之后,返回ACK,但ACK在傳輸過程中因某些原因,未能及時到達發送方,從而觸發了發送方的超時重傳,重傳0號數據分組,之后才接收到ACK,此時就會立即發送1號數據分組

接收方再次收到0號數據分組之后,發現是重復的數據分組,就會丟棄并返回一個ACK,于是發送方就收到了對0號分組的重復確認,發送方無法正確辨別ACK

此時需要才取的措施就是,對確認分組ACK也進行編號,只需要保證每次的ACK序號和上一次發送的ACK序號不同即可,因此也只需要一個比特位來編號即可

發送方在接收到重復的確認分組ACK0時,會直接忽略該確認分組,等待正確的確認分組

(5)SW協議的信道利用率

信道利用率U計算公式:

由此可見,我們可以得出

當往返時延RTT遠大于數據的發送時延時(例如衛星鏈路),信道的利用率就會非常低

如果出現重傳,信道的利用率還會進一步降低

于是為了解決停止等待協議信道利用率低的問題,就出現了回退N幀協議和選擇重傳協議

2. 回退N幀協議GBN

? ? ? ? GBN —— Go-Back-N

對于停止等待協議,每次發送一個數據分組后就會停止等待,所以每發送一個數據分組就至少需要等待一個收發雙方的往返時間,信道利用率很低

此時如果采用流水線傳輸:

回退N幀協議:在流水線傳輸的基礎上,通過發送窗口來限制發送方可連續發送的數據分組個數

發送窗口W_T{}尺寸:1< W_{T}\leqslant 2^{n}-1(n為數據分組的比特位)

當發送窗口W_T{}=1時,就是停止等待協議

(1)無差錯情況

發送方的發送窗口序號落在0~4號分組,一次發送給接收方

接收方依次進行接收,每接收一個數據分組,接收窗口向后滑動一個位置,并返回一個對應的ACK分組

發送方每接收一個ACK分組,發送窗口就向后滑動一個位置

發送方就可將收到確認的數據分組就可以從緩存中刪除了

(2)累積確認

接收方沒必要對接收到的數據分組逐個發送確認分組,接收方在接收到一批數據分組后,可以對按序到達的最后一個數據分組發送確認ACK_{n}

ACK_{n}表示:序號n之前的所有數據分組都已經正確接收

此時,就算ACK1丟失了,發送方只接受到了ACK4,就會知道0~4號分組被正確接收

(3)有差錯情況

5號數據分組檢測到存在誤碼,丟棄該數據分組

前四個數據分組也不會被接受,也會被丟棄,此時,每丟棄一個數據分組,就會返回一個上一批接收到的最后一個數據分組對應的確認分組

發送方接收到重復的確認分組,就知道之前發送的數據分組存在差錯,就可以立即重傳這批數據,至于收到幾個重復的就會立即重傳和具體實現有關

如果不足以立即重傳,就會在重傳計時器超時時,對發送窗口內的數據全部重傳

此時,可以看出,在第一次發送中,就算6,7,0,1號數據分組沒有產生差錯,也會受到牽連不會被接收,發送方依舊需要重傳這些數據

所以,當網絡質量不好時,回退N幀協議并不一定比停止等待協議高

(4)發送窗口尺寸超過上限

接收方正確按序接收后,給發送方返回累計確認ACK7

此時,如果ACK7在返回過程中丟失......發送方就會接收不到確認分組,于是在重傳計時器超時后,就會重傳之前的全部分組

重傳的0~7到達接收方,接收方無法分辨新舊分組,會再次接收,于是就會發生分組重復的現象

(5)總結

回退N幀協議是在流水線傳輸的基礎上,通過發送窗口來限制發送方可連續發送的數據分組個數,是一種連續的ARQ協議,在協議工作的過程中,發送窗口和接收窗口不斷向后滑動,于是這類協議又被稱作滑動窗口協議

3. 選擇重傳協議SR

? ? ? ? SR —— Selective-Request

為了進一步提高性能,可以設法只對產生誤碼到的數據分組進行重傳。因此,接收方的接收窗口不應只為1,以便接收方先收下失序到達但無誤碼并且序號落在接收窗口內的那些數據分組,等到所缺分組收齊后一并提交上層。

此時!為了使發送方僅重傳出現差錯的分組,接收方不能再使用累積確認的方式,而需要對每個正確接受的數據分組進行逐一確認

發送窗口W_{T}1< W_{T}\leqslant 2^{n-1}

接收窗口W_{R}W_{R}?=?W_{T}

(1)SR協議工作過程

假設:發送方對落在發送窗口的數據分組進行發送:

傳播過程中,2號數據分組丟失,接收方接收到0、1號數據時,接收窗口向后滑動,并返回對應的ACK分組;接收3號數據時,窗口不向后移動,但返回對應ACK分組(3號不是按序到達的分組);并將0、1號數據交給上層

接收方接收到0、1號ACK分組,窗口向后滑動,發送方可以將0、1號數據從緩存中刪除;此時4、5號數據分組出現在發送窗口中,發送方對其進行發送;接收到ACK3,發送窗口不向后滑動,因為不是按序到達的ACK分組,同時記錄已經收到ACK3,確保不會超時重傳3號數據分組

發送方接收4、5號數據,并返回對應ACK分組,但是窗口不向后滑動;發送方接收到4、5號ACK分組,記錄已經收到4、5號數據

等重傳計時器超時,對2號數據分組進行重傳

接收方正確接收2號數據分組,返回對應ACK,接收窗口向后滑動

發送方接收到ACK2,發送窗口也向后滑動

(2)SR協議的窗口尺寸

(3)窗口尺寸超出上限

假設:將W_{T}W_{R}都設置為5

發送方將發送窗口的數據進行發送

接收方正確接收數據,并返回對應ACK分組,接收窗口向后滑動

假設確認分組返回過程中,ACK0丟失

發送方接收到1-4號ACK分組,并記錄已經接收,過一段時間,重傳計時器超時,就會重傳0號數據分組

接收方無法分辨新舊數據分組,就會接收這個0號數據分組,就會出現分組重復的差錯

(4)總結

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

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

相關文章

golang實現簡單的redis服務

golang 手搓redis服務器倉庫地址:實現思路: golang 手搓redis服務器 倉庫地址: 倉庫: https://github.com/dengjiayue/my-redis.git 實現思路: ● 協議: tcp通信 ● 數據包: 長度(4byte)方法(1byte)數據json ● 數據處理: 單線程map讀寫 ○ 依次處理待處理隊列的請求(chan)…

智慧銀行反欺詐大數據管控平臺方案(八)

智慧銀行反欺詐大數據管控平臺的核心理念&#xff0c;在于通過整合先進的大數據技術、算法模型和人工智能技術&#xff0c;構建一個全面、智能、動態的反欺詐管理框架&#xff0c;以實現對金融交易的全方位監控、欺詐行為的精準識別和高效處理。這一理念強調數據驅動決策&#…

3D 生成重建019-LERF用文本在Nerf中開啟上帝之眼

3D 生成重建019-LERF用文本在Nerf中開啟上帝之眼 文章目錄 0 論文工作1 論文方法2 實驗結果 0 論文工作 人類利用自然語言描述物理世界&#xff0c;根據各種特性&#xff08;視覺外觀、語義、抽象關聯&#xff09;尋找具體的3D位置。在這項工作中&#xff0c;作者提出了語言嵌…

如何選擇合適的期刊投稿?從課題組經驗到在線工具的使用全解析

~~~本文是作者個人的經驗分享&#xff0c;建立在導師讓自己選刊的情況下~~~ 投稿選刊是科研過程中至關重要的一步&#xff0c;選刊過程可能讓許多初投稿的研究者感到迷茫和困惑&#xff1a;期刊那么多&#xff0c;如何找到最合適的&#xff1f; 本文將從多個角度介紹如何選擇投…

024、Docker與SSH在分布式系統中的實踐指南

1. Docker SSH配置最佳實踐 Docker容器通常不需要SSH服務來運行&#xff0c;因為它們設計為輕量級、無狀態的&#xff0c;并且通常通過Docker命令行界面與宿主機進行交互。但是&#xff0c;在某些情況下&#xff0c;您可能需要通過SSH訪問Docker容器進行調試、維護或其他操作。…

【kafka】消息隊列的認識,Kafka與RabbitMQ的簡單對比

什么是消息隊列&#xff1f; 消息隊列&#xff08;Message Queue&#xff0c;簡稱 MQ&#xff09;是一個在不同應用程序、系統或服務之間傳遞數據的機制。 它允許系統間異步地交換信息&#xff0c;而無需直接交互&#xff0c;確保消息的可靠傳輸。 想象一下&#xff0c;你正在…

.NET MAUI與.NET for Android/IOS的關系

2024年11月13日微軟發布了.Net9.0,我打算體驗一下。安裝好.Net9.0 SDK后發現Visual Studio識別不到9.0&#xff0c;但是通過命令行dotnet --info查看是正常的&#xff0c;后面看到了VS有版本可以升級&#xff0c;把VS升級到17.12.0就可以了。更新完打開以后看到如下界面 這里…

SqlDataAdapter

SqlDataAdapter 是 .NET Framework 和 .NET Core 中提供的一個數據適配器類&#xff0c;屬于 System.Data.SqlClient 命名空間&#xff08;或在 .NET 6 中屬于 Microsoft.Data.SqlClient 命名空間&#xff09;。它的作用是充當數據源&#xff08;如 SQL Server 數據庫&#xff…

【vivado】時序報告--best時序和worst時序

利用vivado進行開發時&#xff0c;生成best時序報告和worst時序報告。 best時序報告 slow選擇min_max&#xff0c;fast選擇none。 worst時序報告 fast選擇min_max&#xff0c;slow選擇none。

FastAPI 響應狀態碼:管理和自定義 HTTP Status Code

FastAPI 響應狀態碼&#xff1a;管理和自定義 HTTP Status Code 本文介紹了如何在 FastAPI 中聲明、使用和修改 HTTP 狀態碼&#xff0c;涵蓋了常見的 HTTP 狀態碼分類&#xff0c;如信息響應&#xff08;1xx&#xff09;、成功狀態&#xff08;2xx&#xff09;、客戶端錯誤&a…

力扣題庫-擲骰子模擬詳細解析

題目如下&#xff1a; 有一個骰子模擬器會每次投擲的時候生成一個 1 到 6 的隨機數。 不過我們在使用它時有個約束&#xff0c;就是使得投擲骰子時&#xff0c;連續 擲出數字 i 的次數不能超過 rollMax[i]&#xff08;i 從 1 開始編號&#xff09;。 現在&#xff0c;給你一…

深入淺出:PHP中的數據類型全解析

文章目錄 引言理解數據類型標量類型整數 (integer)浮點數 (float)布爾值 (boolean)字符串 (string) 復合類型數組 (array)對象 (object)資源 (resource)NULL 特殊類型Callable強制類型轉換 實戰案例總結與展望參考資料 引言 在編程的世界里&#xff0c;數據類型是構建任何應用…

當linux可執行文件缺少或者不兼容so庫時候,如何查看版本以及缺少那些庫

解決方法&#xff1a; ldd 命令來驗證程序是否加載了正確的庫&#xff1a; 如檢查linear_elasticity可執行文件缺少的庫&#xff0c;用下面命令&#xff1a; ldd linear_elasticity 可以發現下面not found就是缺少的庫&#xff0c;還有對應的庫的位置已經版本 $ ldd lin…

第P1周:Pytorch實現mnist手寫數字識別

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 目標 1. 實現pytorch環境配置 2. 實現mnist手寫數字識別 3. 自己寫幾個數字識別試試具體實現 &#xff08;一&#xff09;環境 語言環境&#xff1a;Python…

Seq2Seq模型的發展歷史;深層RNN結構為什么出現梯度消失/爆炸問題,Transformer為什么不會;Seq2Seq模型存在問題

目錄 Seq2Seq模型的發展歷史 改進不足的地方 深層RNN結構為什么出現梯度消失/爆炸問題,Transformer為什么不會 深層RNN結構為什么出現梯度消失/爆炸問題: Transformer為什么不會出現梯度消失/爆炸問題: Seq2Seq模型存在問題 T5模型介紹 Seq2Seq模型的發展歷史 序列到…

網絡安全技術詳解:虛擬專用網絡(VPN) 安全信息與事件管理(SIEM)

虛擬專用網絡&#xff08;VPN&#xff09;詳細介紹 虛擬專用網絡&#xff08;VPN&#xff09;通過在公共網絡上創建加密連接來保護數據傳輸的安全性和隱私性。 工作原理 VPN的工作原理涉及建立安全隧道和數據加密&#xff1a; 隧道協議&#xff1a;使用協議如PPTP、L2TP/IP…

Hive 窗口函數與分析函數深度解析:開啟大數據分析的新維度

Hive 窗口函數與分析函數深度解析&#xff1a;開啟大數據分析的新維度 在當今大數據蓬勃發展的時代&#xff0c;Hive 作為一款強大的數據倉庫工具&#xff0c;其窗口函數和分析函數猶如一把把精巧的手術刀&#xff0c;助力數據分析師們精準地剖析海量數據&#xff0c;挖掘出深…

SCAU期末筆記 - 數據庫系統概念

我校使用Database System Concepts&#xff0c;9-12章不考所以跳過&#xff0c;因為課都逃了所以復習很倉促&#xff0c;只準備過一下每一章最后的概念辨析&#xff0c;我也不知道有沒有用 第1章 引言 數據庫管理系統&#xff08;DBMS&#xff09; 由一個互相關聯的數據的集合…

Android 12系統源碼_窗口管理(九)深淺主題切換流程源碼分析

前言 上一篇我們簡單介紹了應用的窗口屬性WindowConfiguration這個類&#xff0c;該類存儲了當前窗口的顯示區域、屏幕的旋轉方向、窗口模式等參數&#xff0c;當設備屏幕發生旋轉的時候就是通過該類將具體的旋轉數據傳遞給應用的、而應用在加載資源文件的時候也會結合該類的A…

河南省的教育部科技查新工作站有哪些?

鄭州大學圖書館&#xff08;Z12&#xff09;&#xff1a;2007年1月被批準設立“教育部綜合類科技查新工作站”&#xff0c;同年12月被河南省科技廳認定為河南省省級科技查新機構。主要面向河南省的高校、科研機構、企業提供科技查新、查收查引等服務。 河南大學圖書館&#xf…