前面已經寫了好幾篇的技術文章了,每天肝到凌晨兩三點,在室友看來我就成了神仙,睡的晚,還起得賊早。言歸正傳,不知不覺就來到了網絡層,這在計算機網絡模型中算是底層的了,學好這部分的知識對咱們後面的學習有着舉足輕重的做用。算法
先把這篇文章的結構圖奉上:網絡
數據鏈路層接收來自網絡層的IP數據報,經過必定的封裝,讓IP數據報能在數據鏈路層上傳輸。像這樣,裝好了的IP數據報,咱們稱之爲以太網幀,也叫MAC幀。MAC幀由如下幾個重要的部分組成:post
目的MAC地址:MAC幀的目的地址佔據6個字節,它標誌了目標主機的地址。學習
源MAC地址:和目的地址同樣,源地址也佔據6個字節,它標誌的源主機的地址。計算機網絡
類型:類型佔據2個字節,它記錄上層使用的協議0X0800表示IP協議。3d
數據部分:數據部分天然是來自上層的IP數據報。cdn
FCS:FCS佔據4個字節,它是用來進行差錯檢測的,若是一個MAC幀發生了錯誤,則不能發送到目的主機上。blog
爲何要進行差錯檢測?接口
現實的通訊鏈路都不會是理想的。這就是說,比特在傳輸的過程當中可能會產生差錯:1可能會變成0,0可能會變成1,這就叫作比特差錯。在一段是時間內,傳輸錯誤的比特佔所傳輸比特總數的比率成爲誤碼率BER(Bit Error Rate)。誤碼率與信噪比有很大的關係,在實際通訊中不可能使誤碼率降低到零。 所以,爲了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須採用各類差錯檢測措施。get
MAC幀在傳播的過程當中會產生差錯,差錯的產生是不可避免的。前面在以太網幀部分咱們提到過差錯檢測序列FCS,根據FCS咱們就能夠知道這個MAC幀在傳輸的過程當中是否出現了錯誤或者丟失。
後面講到傳輸層的時候咱們也會提到差錯檢測,那麼這二者到底有啥區別了?總結起來,能夠用一句話歸納:
差錯檢測的方法主要有兩種:奇偶校驗法(PCC)和循環冗餘校驗CRC,PCC很是簡單,不是這篇文章的重點,下面主要講一下CRC循環冗餘校驗。
循環冗餘校驗是一種根據傳輸或保存的數據而產生固定位數校驗碼的方法,主要用來檢測或校驗數據傳輸或者保存後可能出現的錯誤。生成的數字在傳輸或者儲存以前計算出來而且附加到數據後面,而後接收端進行檢驗肯定數據是否發生變化。
經過CRC,咱們能夠計算出FCS冗餘校驗碼,FCS位於MAC幀的尾部。經過FCS,咱們就能夠知道這個MAC幀是否發送了錯誤。
說到適配器,其實徹底可聯想一下生活中的適配器。好比咱們給手機充電的時候須要有電源適配器,電源適配器無非就是轉換的做用,或者做爲一個載體,實現能量的轉移。實際上,電腦裏的適配器也是同樣。結合下面這張圖來理解:
咱們都知道,數據在外部媒介中的傳輸方式是串行傳輸,然而計算機處理內部指令的時候,用的是並行的方式。怎樣把串行傳輸的數據轉換成並行傳輸呢?這就須要適配器了。適配器就像是起到了橋樑的做用,經過它,就能夠輕鬆實現數據傳輸方式的轉換。
咱們都知道交換機,交換機是一種多端口的網橋,在數據鏈路層使用MAC地址轉發數據。在交換機類不實際存儲以一張表,叫作CAM表。這張表記錄了主機的MAC地址以及對應的接口,看看下面的這張圖:
有三臺主機A,B,C和交換機鏈接在一塊兒,最開始,CAM裏沒有存儲任何信息。
忽然有一天,主機A(源MAC)想要給主機B(目的MAC)發送消息。這個時候,交換機就會檢查本身的CAM表裏是否存儲了主機A的信息,交換機一看沒有A的信息,就把A的信息寫進本身的CAM表裏。如今,交換機的CAM表變成了這樣:
這個時候,交換機的CAM表裏已經存儲了主機A的信息,可是主機A卻想要給主機B發送信息。這可怎麼辦呢?首先,交換機會檢查本身的CAM表裏是否存在B的信息,若是存在,就直接把信息轉發給B。若是不存在,那又怎麼辦呢?猶豫了一下,交換機又有了一個想法,它把主機A發給主機B的消息以廣播的形式發給了全部連在它身上的主機。主機C也收到了這條消息,可是主機C檢查了一下目的地址,不是發給本身的,就果斷丟棄了這條消息。主機B收到了這條消息後,一樣也檢查了收件人(目的地址),發現是給本身的消息,因而就收下了這條消息。以後,交換機就更新了本身的CAM表,上面增長了一條信息:
就這樣,CAM表裏存儲了主機A,和主機B的信息。下一次,主機A想要給主機B發送信息的時候,交換機就不須要廣播了。
前一篇文章講到過計算機網絡結構,這裏講CSMA/CD協議須要知道計算機網絡的總線結構,不清楚的朋友能夠先去看看:走進計算機網絡:物理層
到目前爲止CSMA/CD的使用已經至關少了,它的使用有兩個前提:
使用CSMA/CD協議的的網絡有如下三個特色:
補充一下退避算法的特色: