天天看點

計算機網絡通信中的資料鍊路層首先要明确一個問題,鍊路層幹了什麼事情?鍊路層的作用是什麼?

首先要明确一個問題,鍊路層幹了什麼事情?鍊路層的作用是什麼?

實體層是解決了實際的連線問題,傳輸的是比特位,鍊路層就是規定一次發送多少個01,這就是幀。

鍊路層的作用有三個

1:封裝成幀

2:透明傳輸

3:差錯檢測

在實體層搭建好的時候,人們提對外連結路層這個概念後,就有各種各樣的協定騰空出世,在衆多的協定中有一種要以太網的協定脫引而出,這個協定放在後面介紹。現在我們将一講另一種形式。

那還是要講講資料傳輸的形式。在鍊路層資料傳輸有倆種方式

一:點對點。

二:廣播

A:點對點

計算機網絡通信中的資料鍊路層首先要明确一個問題,鍊路層幹了什麼事情?鍊路層的作用是什麼?

image.png

如圖,結點a和結點b傳輸資料,鍊路層接過網絡層下傳的資料,經過處理(封裝為幀),交給實體層,實體層傳輸資料到結點b,結點b收到資料後,将資料一層一層上傳最後到網絡層。網際網路采用分層的好處就是在與每一層幹的事情不影響别的層,鍊路層不必考慮實體層怎麼實作,在實體上是如上這樣傳輸的,但是在邏輯上就可以簡單的看為,結點a的鍊路層直接和結點b的鍊路層直接交流。

封裝成幀——就是規定多少個01為一組

就是在一段資料前後加上一個标記為,說明這幾個資料是一個幀,接受放就能根據這些标記點,分辨幀,幀的頭部放一些控制資訊,比如裡面資料是什麼那個協定,比如裡面放的是ip協定的資料。 要發送的資料放在幀的資料部分。頭部+資料=幀的長度。規定了一個幀的資料的最大長度——MTU,那為了傳輸的效率,就要盡量的讓資料部分大于頭部的長度。
           

幀的形式:

計算機網絡通信中的資料鍊路層首先要明确一個問題,鍊路層幹了什麼事情?鍊路層的作用是什麼?

那在資料流裡怎麼規定一幀是有多少個資料,也就是說怎麼來規定一個幀?

規定在幀的和結尾都有一個特殊的字元來标示就好了,幀開始用SOH,幀結束用EOH。那這樣就可以限制一個幀了,發送方西安發送一個SOH表示幀開始,幀結束的時候發送EOH,标示幀結束,接收方收到資料,如果有SOH,但是沒有EOH,則就丢棄這個幀,若是SOH,EOH都有就表明這是一個完整的幀,則收下這個幀。

那現在出現了一個問題,标示一個幀是用兩個字元來标示的,那如果傳送的資料裡面有這倆特殊字元怎麼辦?怎麼還繼續标示一個完整的幀?

這就是透明傳輸解決的問題。

透明 傳輸就是不管發送方發送的是什麼資料,都可以按照原樣沒有差錯的通過資料鍊路層傳送出去。

那解決的方法就是 在資料裡面出現的控制符不被解釋為控制符号。具體就是在資料中出現的控制符号前面加上一個轉義字元(“ESC”)如果轉義字元也出現在資料中,那就繼續在前面再加一個轉義字元。接收方在接受的時候删掉之前添加的這些轉義字元就好。這有個專業的名詞——字元填充或者位元組填充。

那請在思考一個問題?——傳送的時候要是出現了差錯怎麼辦,接收方如是收下這些個錯誤的資料,那這就大錯特錯了。必須要采取一個措施來針對這些事。

此時,,差錯檢測就千呼萬喚始出來

這種差錯檢測的方法有好幾種,現在主要采用的 循環備援檢驗法 ,在這裡就不介紹了,總之,采用這種方法能檢測出來資料有沒有出現差錯,接受方收到這個幀,采用這種方法若是檢測出出現了差錯,則就丢掉這個幀,反之,則接受。但是需要注意的是,在鍊路層沒有機制能實作出現差錯的幀重新發送,這不是資料鍊路層該幹的事情,但是我們可以這樣認為,因為在接收方全都收到了發送方發的資料,至于丢不丢掉這個幀是接收方的事情,發送方并不知道,在發送方看來,我發送的資料你接收方全部都接受了,是以這實作了無差錯傳輸,即就是凡在接收端資料鍊路層接受的幀無差錯。

在點對點傳輸形式中 ppp(point-to-point Practical是用的最廣泛的協定

我們知道上網要聯入一個ISP才可以上網。ppp協定就是使用者在和ISP進行通信的時候所使用的資料鍊路層協定。

ppp協定的特點:

簡單——這個很明了不用解釋,當然是越簡單越好

封裝為幀,——這本就是資料鍊路層實作的基本問題

透明傳輸,——這本就是資料鍊路層實作的基本問題

差錯檢測 ——這本就是資料鍊路層實作的基本問題

各種網絡協定——要能傳送各種的協定,要不然他的功能太單一

各種的鍊路網絡——因為實體層的鍊路形式有多種。

檢測連結狀态——要有一種機制來檢測鍊路的狀态,比如一段鍊路出現發生故障,要過多長時間重新發送。

最大傳送單元(MTU)

網路位址協商——要有一種機制能確定兩個實體知道彼此的網絡層位址

資料壓縮協商——傳送的越小越好,越快嘛

那ppp協定中還包含了LCP和NCP

LCP(Link Control Protocol):配置和測試資料鍊路連接配接的鍊路層控制協定

NCP:(Network Control Protocol):網絡控制協定

ppp協定的資料幀格式如下:

計算機網絡通信中的資料鍊路層首先要明确一個問題,鍊路層幹了什麼事情?鍊路層的作用是什麼?

那ppp協定在使用者和ISP中是怎麼工作的呢?

當使用者通過撥号接入ISP中,就建立了一條使用者到IS的實體連接配接,因為IP位址是動态配置設定的,使用者要向ISP申請一個ip位址,,那就是當使用者向ISP發送一系列的鍊路控制協定ICP分組(封裝為多個ppp資料包)就建立LCP連接配接,這些分組就回送給使用者一些PPP參數,接下來還要建立網絡配置,網絡控制協定NCP給接入的使用者非配一個臨時的IP位址,這樣個人電腦就成網際網路上的一個有IP位址的主機。當使用者通信完畢後,NCP釋放網絡層連接配接,收回原來配置設定出去的IP位址,然後釋放鍊路層的連接配接,最後釋放實體層的連接配接。 ppp鍊路的開始和結束都是鍊路靜止的。
           

B:廣播

廣播就是在一個區域網路上傳輸是一對多的形式,在同一個區域網路中,存在a,b,c,d四台主機,a要發送資料給d,其實在一個區域網路上的b,c,d都能接受到,這就是廣播的形式。

區域網路有三種連線方式

1,星形網——連接配接在集線器上

2: 環形網——直接連接配接在總線上

3:總線網——直接連接配接在總線上

以太網的幀的形式:

計算機網絡通信中的資料鍊路層首先要明确一個問題,鍊路層幹了什麼事情?鍊路層的作用是什麼?

頭部的長度固定為18位元組,資料的長度最短為46位元組,最長為1500位元組,是以整個幀最短為64位元組,最長為1518位元組,如果資料很長,那就要分割為多個幀發送。

以太網也是一種區域網路,在鍊路層剛提出的時候,會用各種各樣的區域網路,也會有各種各樣的協定,在這些協定中, **以太網協定**被廣泛應用。

       以太網規定為了适應各種各樣的區域網路,它将以太網劃分為倆個子層,邏輯鍊路控制——LLC(Logical link control)和媒體接入控制——MAC(Medium Access Control)但是随着發展,LLC層被逐漸廢棄

      那一個區域網路中一個電腦要向一個電腦發送資料,就想a給b打電話,起碼要知道b的電話号碼,并且b這個号碼是唯一的,這樣才能打通電話,那現在就是怎麼用一串數字來表示一個計算機。以太網規定,聯入網際網路的裝置都有一個擴充卡(也叫做網卡),擴充卡都有一個唯一的數字來表示,這也就是這個裝置的唯一标示。

        發送資料的時候,在資料包的頭部放入發送方mac位址,接收方的mac位址,還有各種版本控制資訊,在資料部分放入資料,通過廣播的形式發送,同一個區域網路上的所有裝置都能接受到這個資料包,然後檢測頭部資訊中接受方的位址是不是發送給自己的,若是,則接受,反之,丢棄。
           

擴充卡在接受和發送資料包的時候不使用CPU,CPU可以處理别的事情,當擴充卡收到有差錯的幀的時候,就丢掉,而不用通知CPU,擴充卡接受正确的幀的時,就使用中斷來通知計算機,交給上一層。計算機的硬體位址就在适配的ROM中。這樣就利用廣播的特性實作了一對一的通信。

為了是以太網盡可能的簡單規定了一下幾點:

1:以太網不先建立就可以發送資料,這不像ppp協定一樣,先是建立連接配接,然後再才是通信,網卡對發送的資料不編号,也不要求對方回發ACK(确認),以太網提供的是不可靠的傳遞,如果運輸層要求對出現差錯的幀重新傳送,則以太網并不知這個是重傳的幀。

        2:使用曼切斯特編碼(即就是用一個周期的特殊的波形來表示0和1)波形的變化就說明有資料在傳輸,反之,就沒有。
           

既然以太網是用總線的方式連接配接在一塊的。那在同一時刻,總線上不可能有倆計算機同時發送消息。那計算機怎麼知道總線現在有沒有計算機在發送資料?

在這裡采用了CSMA/CD協定——載波監聽多點接入/碰撞檢測(Carrier Sense Multiple Access with Collision Detection)。

CSMA/CD協定的基本要點

1:多點接入: 說明這是總線型網絡,很多計算機以多點接入的方式連接配接在總線上,

2:載波監聽: 利用電子技術檢測總線上有沒有其他計算機在發送資料,其實就是檢測信道上的波形有沒有變化。無論在發送前,還是發送中,亦或是發送後,每個裝置都要必須不停的檢測信道。如果沒有裝置發送,則獲得發送權,反之,則要等待信道為空閑發送。在發送中檢測信道是為了及時發現有沒有其他站的發送和本站發送碰撞。這就是碰撞檢測

3:碰撞檢測: 也就是邊發送邊檢測 ,網卡檢測信道上的信号電壓的變化情況,當好幾個裝置同時都在發送資料,總線上的信号電壓變化比較大,當大于一定的值的時候,就可以認為總線上至少有倆站在發送資料,發生了碰撞。總線上的傳輸的信号就會産生嚴重的失真,無法從中恢複出有用的資訊來,是以,一旦發生碰撞檢測,網卡就要立即停止發送,等待一段時間後繼續發送。

那具體是要等待多上時間才繼續發送呢?

以太網使用截斷二進制指數退避算法實作,大體的概念就是在讓發送碰撞的站在停止發送資料後,并不是等待信道變為空閑後就立即發送資料,而是**推遲**
           

一個随機數時間,時間到了後繼續發送。那要下一次還是沒有發送成功呢,規定,發送16次後還是沒發送成功,就認為出現了錯誤。

那各位有沒有想過,發生碰撞的檢測的前提是已經發送了資料,然後發生了碰撞,那既然都發送了資料,為什麼還發生了碰撞檢測?

因為信道有延遲,電磁波傳輸速率是有限的,比如a發送資料給b,要經過5µs,此時b發送資料給a,因為資料要等待5µs才可以,按在b看來,此時信道就是空閑的,特别很開心的發送資料,然後就碰撞了。那a發送的資料最遲要經過 總線端到端的往返傳播時延 能到達b。 有一個最小的幀間最小間隔為9.6µs。

很明顯,在CSMA/CD協定時,一個幀不可能同時發送資料和接受資料,但是必須一邊發送一遍監聽信道,是以,使用這種協定的以太網不可能進行全雙工通信而隻能進行雙向交替通信(半雙工通信)
           

總結:

1:網卡将上一層的資料包放在mac資料包裡面,經過一系列的精加工(發送方的mac位址,接收方的mac位址,等)放入網卡的緩存中,準備發送

2:檢測信道:若是檢測信道為空閑,并且在9.6µs内保持信道空閑,則發送。反之,等待。

3:發送中不斷的檢測信道,有沒有發生碰撞,若是沒有,則沒有發生碰撞,若是發生了碰撞,就立即停止發送資料,并按規定發送人為幹擾後,網卡就執行退避算法,若是傳了16次不成功,就停止發送上一層報告出現了錯誤。

以太網有好幾種連線方式下面就說說這個

開始就直接連接配接在總線上。不過後來啊,集線器出現了,集線器采用星形網。因為集線器還是使用電子器件來模拟實際電纜線的工作,整個系統還是一一個傳統以太網運作,使用的還是CSMA/CD協定。而且,有好幾個接口,集線器工作在實體層,因為它是個連線的嘛。隻是簡單的轉發資料,收到1就轉發1,也不緩存,要是幾個接口發生了碰撞,那所有的接口都不能收到正确的幀。

      随着發展,出現了以太網分組交換機,工作在鍊路層。它每個接口都直接和一個主機或者另一個以太網交換機連接配接,而且以全雙工方式,同時連通多對接口,使得多對主機能夠直接通信,互相通行的主機都是獨占媒體,無碰撞的傳輸資料。,而且它還是緩存,當一個接口的主機比較繁忙時,還能緩存資料。它有一個交換表(位址表)裡面存放着連接配接在它上面的主機的接口号,它采用自學習的算法自動建立這個表(後面講)而且呢,轉發速度比較快,因為采用了專門的晶片。
           

以太網交換機的自學習的算法。

計算機網絡通信中的資料鍊路層首先要明确一個問題,鍊路層幹了什麼事情?鍊路層的作用是什麼?
計算機網絡通信中的資料鍊路層首先要明确一個問題,鍊路層幹了什麼事情?鍊路層的作用是什麼?
交換了兩幀後的交換表
           

它的這樣的,A向B發送資料,剛開始的時候表是空的,交換機就用廣播的形式發送資料,每個裝置都能收到資料包,然後看頭部裡面的接受方是不是自己的mac位址。此時以太網交換機就記下A主機在一号接口。B發送資料給A,以太網交換機查找表發現了A在一号接口,就講這個資料資料包從一号接口發送出去,并且它發現交換表裡面沒有B,就記下B 在二号口,如此一來,就知道所有的主機的接口了,這個表也就完善了。

但是有時候為了增加一些網絡的可靠性,在使用以太網交換機的時候,往往會添加一些備援的鍊路,那這樣可能就會導緻以太網交換機 在網絡中的某個環路中無限的重複,為了防止這樣的情況,規定不該表網絡的實際拓撲結構,但是邏輯上則切段了某切鍊路,使得一台主機到其他主機都是無環路的樹狀結構,而從消除兜圈子。拓撲排序就是消除圖的環路的算法。
           

以太網交換機沒有采取CSMA/CD的協定,并且還是雙全工的方式工作的,因為不會産生碰撞嘛。但是它還是繼續采用了以太網的幀結構。

繼續閱讀