TCP/IP第二層--數據鏈路層

分享一下我老師大神的人工智能教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow

               

     

數據鏈路層的知識點:

  1、數據鏈路層爲網絡層提供可靠的數據傳輸;

  2、基本數據單位爲幀;

  3、主要的協議:以太網協議;

  4、兩個重要設備名稱:網橋和交換機。


       不同的協議層對數據包有不同的稱謂,在傳輸層叫做段(segment),在網絡層叫做數據報(datagram),在鏈路層叫做幀(frame)。數據封裝成幀後發到傳輸介質上,到達目的主機後每層協議再剝掉相應的首部,最後將應用層數據交給應用程序處理。

       如果兩臺計算機在不同的網段中,那麼數據從一臺計算機到另一臺計算機傳輸過程中要經過一個或多個路由器,如下圖所示:

       圖 36.4. 跨路由器通訊過程



     其實在鏈路層之下還有物理層,指的是電信號的傳遞方式,比如現在以太網通用的網線(雙絞線)、早期以太網採用的的同軸電纜(現在主要用於有線電視)、光纖等都屬於物理層的概念。物理層的能力決定了最大傳輸速率、傳輸距離、抗干擾性等。集線器(Hub)是工作在物理層的網絡設備,用於雙絞線的連接和信號中繼(將已衰減的信號再次放大使之傳得更遠)。

      鏈路層有以太網、令牌環網等標準,鏈路層負責網卡設備的驅動、幀同步(就是說從網線上檢測到什麼信號算作新幀的開始)、衝突檢測(如果檢測到衝突就自動重發)、數據差錯校驗等工作。交換機是工作在鏈路層的網絡設備,可以在不同的鏈路層網絡之間轉發數據幀(比如十兆以太網和百兆以太網之間、以太網和令牌環網之間),由於不同鏈路層的幀格式不同,交換機要將進來的數據包拆掉鏈路層首部重新封裝之後再轉發。


      目的主機收到數據包後,如何經過各層協議棧最後到達應用程序呢?整個過程如下圖所示。

圖 36.5. Multiplexing過程



      以太網驅動程序首先根據以太網首部中的“上層協議”字段確定該數據幀的有效載荷(payload,指除去協議首部之外實際傳輸的數據)是IP、ARP還是RARP協議的數據報,然後交給相應的協議處理。假如是IP數據報,IP協議再根據IP首部中的“上層協議”字段確定該數據報的有效載荷是TCP、UDP、ICMP還是IGMP,然後交給相應的協議處理。假如是TCP段或UDP段,TCP或UDP協議再根據TCP首部或UDP首部的“端口號”字段確定應該將應用層數據交給哪個用戶進程。IP地址是標識網絡中不同主機的地址,而端口號就是同一臺主機上標識不同進程的地址,IP地址和端口號合起來標識網絡中唯一的進程。

       注意,雖然IP、ARP和RARP數據報都需要以太網驅動程序來封裝成幀,但是從功能上劃分,ARP和RARP屬於鏈路層,IP屬於網絡層。雖然ICMP、IGMP、TCP、UDP的數據都需要IP協議來封裝成數據報,但是從功能上劃分,ICMP、IGMP與IP同屬於網絡層,TCP和UDP屬於傳輸層。本文對RARP、ICMP、IGMP協議不做進一步介紹,有興趣的讀者可以看參考資料。


1.基本功能

設計數據鏈路層的原因
1、在原始的物理線路上傳輸數據信號是有差錯的。
2、設計數據鏈路層的主要目的就是在原始的、有差錯的物理傳輸線路的基礎上,採取差錯檢測、差錯控制與流量控制等方法,將有差錯的物理線路改進成邏輯上無差錯的數據鏈路,向網絡層提供高質量的服務。
3、從網絡參考模型的角度看,物理層之上的各層都有改善數據傳輸質量的責任,數據鏈路層是最重要的一層。
數據鏈路層的最基本的功能是向該層用戶提供透明的和可靠的數據傳送基本服務。透明性是指該層上傳輸的數據的內容、格式及編碼沒有限制,也沒有必要解釋信息結構的意義;可靠的傳輸使用戶免去對丟失信息、干擾信息及順序不正確等的擔心。在物理層中這些情況都可能發生,在數據鏈路層中必須用糾錯碼來檢錯與糾錯。數據鏈路層是對物理層傳輸原始比特流的功能的加強,將物理層提供的可能出錯的物理連接改造成爲邏輯上無差錯的數據鏈路,使之對網絡層表現爲一無差錯的線路。如果您想用盡量少的詞來記住數據鏈路層,那就是:“介質訪問控制”。

    在TCP/IP協議族中,數據鏈路層主要有三個目的:
          1)爲IP模塊發送和接收數據
          2)爲ARP模塊發送ARP請求和接收ARP應答
          3)爲RARP模塊發送RARP請求和接收RARP應答
    
    TCP/IP支持多種不同的鏈路層協議,這取決於網絡所使用的硬件,如以太網,令牌環網,FDDI(光纖分佈式數據接口)及RS-232串行線路等。
     
     數據鏈路層的協議數據單元——幀:將IP層(網絡層)的數據報添加首部和尾部封裝成幀。
     數據鏈路層協議有許多種,都會解決三個基本問題,封裝成幀,透明傳輸,差錯檢測

幀同步:從接收到的比特流中準確區分幀的邊界

爲了使傳輸中發生差錯後只將有錯的有限數據進行重發,數據鏈路層將比特流組合成以幀爲單位傳送。每個幀除了要傳送的數據外,還包括校驗碼,以使接收方能發現傳輸中的差錯。幀的組織結構必須設計成使接收方能夠 明確地從物理層收到的比特流中對其進行識別,也即能從比特流中區分出幀的起始與終止,這就是幀同步要解決的問題。由於網絡傳輸中很難保證計時的正確和一致,所以不可採用依靠時間間隔關係來確定一幀的起始與終止的方法。
(1)字節計數法:這是一種以一個特殊字符表示一幀的起始並以一個專門字段來標明幀內字節數的幀同步方法。接收方可以通過對該特殊字符的識別從比特流中區分出幀的起始並從專門字段中獲知該幀中隨後跟隨的數據字節數,從而可確定出幀的終止位置。面向字節計數的同步規程的典型代表是DEC公司的數字數據通信報文協議DDCMP(Digital Data Communications Message Protocol)。DDCMP採用的幀格式如圖3-1。

控制字符SOH標誌數據幀的起始。實際傳輸中,SOH前還要以兩個或更多個同步字符來確定一幀的起始,有時也允許本幀的頭緊接着上幀的尾,此時兩幀間就不必再加同步字符。 count字段共有14位,用以指示幀中數據段中數據的字節數,14位二進制數的最大值爲2-1=16383,所以數據最大長度爲8×16383=131064。DDCMP協議就是靠這個字節計數來確定幀的終止位置的。DDCMP幀格式中的ACK、SEG、ADDR及FLAG中的第2位,CRC1、CRC2分別對標題部分和數據部分進行雙重校驗,強調標題部分單獨校驗的原因是,一旦標題部分中的CONUT字段出錯,即失卻了幀邊界劃分的依據,將造成災難性的後果。由於採用字符計數方法來確定幀的終止邊界不會引起數據及其它信息的混淆,因而不必採用任何措施便可實現數據的透明性(即任何數據均可不受限制地傳輸)。
(2)使用字符填充的首尾定界符法:該法用一些特定的字符來定界一幀的起始與終止,爲了不使數據信息位中出現的與特定字符相同的字符被誤判爲幀的首尾定界符,可以在這種數據字符前填充一個轉義控制字符(DLE)以示區別,從而達到數據的透明性。但這種方法使用起來比較麻煩,而且所用的特定字符過份依賴於所採用的字符編碼集,兼容性比較差。

    (3)使用比特填充的首尾標誌法:該法以一組特定的比特模式(如01111110)來標誌一幀的起始與終止。本章稍後要詳細介紹的HDLC規程即採用該法。爲了不使信息位中出現的與特定比特模式相似的比特串被誤判爲幀的首尾標誌,可以採用比特填充的方法。比如,採用特定模式01111110,則對信息位中的任何連續出現的五個“1”,發送方自動在其後插入一個“0”,而接收則做該過程的逆操作,即每接收到連續五個“1”,則自動刪去其後所跟的“0”,以此恢復原始信息,實現數據傳輸的透明性。比特填充很容易由硬件來實現,性能優於字符填充方法。
(4)違法編碼法:該法在物理層採用特定的比特編碼方法時採用。例如,一種被稱作曼徹斯特編碼的方法,是將數據比特“1”編碼成“高-低”電平對,而將數據比特“0”編碼成“低-高”電平對。而“高-高”電平對和“低-低”電平對在數據比特中是違法的。可以借用這些違法編碼序列來定界幀的起始與終止。局域網IEEE 802標準中就採用了這種方法。違法編碼法不需要任何填充技術,便能實現數據的透明性,但它只適用於採用冗餘編碼的特殊編碼環境。由於字節計數法中COUNT字段的脆弱性以及字符填充法實現上的複雜性和不兼容性,較普遍使用的幀同步法是比特填充和違法編碼法。

差錯控制:差錯檢查和差錯糾正

一個實用的通信系統必須具備發現(即檢測)這種差錯的能力,並採取某種措施糾正之,使差錯被控制在所能允許的儘可能小的範圍內,這就是差錯控制過程,也是數據鏈路層的主要功能之一。對差錯編碼(如奇偶校驗碼,檢查和或CRC)的檢查,可以判定一幀在傳輸過程中是否發生了錯誤。一旦發現錯誤,一般可以採用反饋重發的方法來糾正。這就要求接收方收完一幀後,向發送方反饋一個接收是否正確的信息,使發送方所在此作出是不需要重新發送的決定,也即發送方僅當收到接收方已正確接收的反饋信號後才能認爲該幀已經正確發送完畢,否則需要重新發送直至正確爲止。物理信道的突發噪聲可能完全“淹沒”一幀,即使得整個數據幀或反饋信息幀丟失,這將導致發送方永遠收不到接收方發來的反饋信息,從而使傳輸過程停滯.爲了避免出現這種情況,通常引入計時器(Timer)來限定接收方發回反饋信息的時間間隔,當發送方發送一幀的同時也啓動計時器,若在限定時間間隔內未能收到接收方的反饋信息,即計時器超時(Timeout),則可認爲傳的幀已出錯或丟失,繼而要重新發送。由於同一幀數據可能被重複發送多次,就可能引起接收方多次收到同一幀並將其遞交給網絡層的危險。爲了防止發生這種危險,可以採用對發送的幀編號的方法,即賦予每幀一個序號,從而使接收方能從該序號來區分是新發送來的幀還是已經接收但又重新發送來的幀,以此來確定要不要將接收到的幀遞交給網絡層。數據鏈路層通過使用計數器和序號來保證每幀最終都被正確地遞交給目標網絡層一次。

流量控制:收發雙方速度保持協調

流量控制並不是數據鏈路層所特有的功能,許多高層協議中也提供流時控功能,只不過流量控制的對象不同而已。比如,對於數據鏈路層來說,控制的是相鄰兩節點之間數據鏈路上的流量,而對於運輸層來說,控制的則是從源到最終目的之間端的流量。由於收發雙方各自使用的設備工作速率和緩衝存儲的空間的差異,可能出現發送方發送能力大於接收方接收能力的現象,如若此時不對發送方的發送速率(也即鏈路上的信息流量)作適當的限制,前面來不及接收的幀將被後面不斷髮送來的幀“淹沒”,從而造成幀的丟失而出錯。由此可見,流量控制實際上是對發送方數據流量的控制,使其發送率不致超過接收方所能承受的能力。這個過程需要通過某種反饋機制使發送方知道接收方是否能跟上發送方,也即需要有一些規則使得發送方知道在什麼情況下可以接着發送下一幀,而在什麼情況下必須暫停發送,以等待收到某種反饋信息後繼續發送。

鏈路管理:數據鏈路的建立,維持,釋放

鏈路管理功能主要用於面向連接的服務。當鏈路兩端的節點要進行通信前,必須首先確認對方已處於就緒狀態,並交換一些必要的信息以對幀序號初始化,然後才能建立連接,在傳輸過程中則要能維持該連接。如果出現差錯,需要重新初始化,重新自動建立連接。傳輸完畢後則要釋放連接。數據連路層連接的建立維持和釋放就稱作鏈路管理。在多個站點共享同一物理信道的情況下(例如在LAN中)如何在要求通信的站點間分配和管理信道也屬於數據鏈路層管理的範疇。

2.主要協議

數據鏈路層的主要協議有:
(1)點對點ppp協議(Point-to-Point Protocol),是從SLIP的替代品。他們都提供了一種低速接入的解決方案。
(2)以太網(Ethernet);
(3)高級數據鏈路協議(High-Level Data Link Protocol);
(4) 幀中繼(Frame Relay);
(5) 異步傳輸模式(Asynchronous Transfer Mode);

以太網協議並不是第二層的唯一協議,但卻是最常用的。就好比英語不是大家說的唯一語言,但卻是最常用的。


3.常用的數據鏈路層

  1. TCP/IP支持多種不同的數據鏈路層協議,這取決於網絡使用的硬件,如以太網、令牌環、FDDI等局域網,串行線路、X.25、幀中繼FR、ATM等廣域網。
  2. 早期,由於各網絡公司的競爭,局域網沒有形成統一標準,爲了將各種局域網融合,將鏈路層拆分成兩層,邏輯鏈路層(LLC)和媒體接入控制(MAC)(802.3封裝:SAP),
  3. 90年代,以太網取得壟斷地位,以太網成爲局域網代名詞。數據鏈路層僅需要MAC層,採用以太網幀格式(Ethernet V2封裝:ARPA)。

4.以太網和IEEE802的封裝

    以太網Ethernet: 1980年,數字設備公司(DEC)、Intel公司、施樂(Xerox)公司推出了DIX V1.0標準。1982年又推出了DIX V2.0標準,也就是現在通常所說的Ethernet II, 它採用了CSMA/CD(Carrier Sense, Multiple Access with Collision Detection)含衝突檢測的載波偵聽多路接入。

   802.3:1985年,IEEE推出了"802.3 含衝突檢測的載波偵聽多路訪問(CSMA/CD)訪問方式和物理層規範",即802.3CSMA/CD標準


   如圖所示,顯示了兩種不同形式的封裝格式。最常使用的封裝格式是RFC894定義的格式。兩種幀格式均採用48bit(6 byte)的目的地址和源地址。

       

    以太網的幀格式纔有6字節的目的地址和源頭地址。幀長度字段是指它後續數據的字節長度,但不包括CRC校驗碼。這個長度是提供給上層協議的數據負載,也就是上層協議封裝的數據最長度不要超過以太網幀的數據長度。最小數據幀尾46,最大數據幀長爲1500.
      

    這兩個標準稍有不同,TCP/IP協議對這種情況的處理方式如下:

  • 以太網的IP數據報封裝在RFC894中定義,而IEEE802網絡的IP數據報封裝在RFC1042中定義。
  • 一臺主機一定要能發送和接收RFC894定義的數據報。
  • 一臺主機可以接收RFC894和RFC1042的封裝格式的混合數據報。
  • 一臺主機也許能夠發送RFC1042數據報。。如果主機能同時發送兩種類型的分組數 據,那麼發送的分組必須是可以設置的,而且默認條件下必須是RFC 894分組。

       可見,RFC1042在TCP/IP裏面處於一個配角的地位。

        以太網協議實現RFC894規定的功能,能發送接收採用RFC894封裝格式的幀,同時也能夠兼容與RFC894混合的RFC1042(IEEE802)封裝格式的幀。

      數據鏈路層的協議還是很多的,有我們最常用的以太網(就是平時我們用的網卡)協議,也有不太常見的令牌環,還有FDDI,當然,還有國內現在相當普及的PPP協議(就是adsl寬帶),以及一個loopback協議。




      聯繫linux裏面的ifconfig -a命令,這個命令通常會得到如下的結果

em1       Link encap:Ethernet  HWaddr 34:17:EB:BB:ED:93  
          inet addr:192.168.1.48  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::3617:ebff:febb:ed93/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:847304 errors:0 dropped:0 overruns:0 frame:0
          TX packets:540883 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:277120836 (264.2 MiB)  TX bytes:195312995 (186.2 MiB)
          Interrupt:20 Memory:f7c00000-f7c20000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:3620024 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3620024 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1035581503 (987.6 MiB)  TX bytes:1035581503 (987.6 MiB)

       其中,em1就是以太網接口,而lo則是loopback接口。這也說明這個主機在網絡鏈路層上至少支持loopback協議和以太網協議。

      注意有的網卡標識是eth0等

       em=embedded device,表示系統識別出這塊網卡是集成在主板上的;而eth是傳統的以太網卡設備的命名機制。

        環回接口(loopback)。平時我們用127.0.0.1來嘗試自己的機器服務器好使不好使。走的就是這個loopback接口。對於環回接口,有如下三點值得注意:

  • 傳給環回地址(一般是127.0.0.1)的任何數據均作爲I P輸入。
  • 傳給廣播地址或多播地址的數據報復制一份傳給環回接口,然後送到以太網上。這是 因爲廣播傳送和多播傳送的定義包含主機本身。
  • 任何傳給該主機IP地址的數據均送到環回接口。

5.MTU最大傳輸單元

    最大傳輸單元(Maximum Transmission Unit,MTU)是指一種通信協議的某一層上面所能通過的最大數據包大小(以字節爲單位)。

      
    如果在IP層要傳輸一個數據報比鏈路層的MTU還大,那麼IP層就會對這個數據報進行分片(fragmentation)。一個數據報會被分爲若干片,每個分片的大小都小於或者等於鏈路層的MTU值。當同一網絡上的主機互相進行通信時,該網絡的MTU對通信雙方非常重要。但當主機間要通過很多網絡才能通信時,對通信雙方最重要的是通信 路徑中最小的MTU,因爲在通信路徑上不同網絡的鏈路層MTU不同。通信路徑中最小的MTU被稱爲路徑MTU。
     網絡中一些常見鏈路層協議MTU的缺省數值如下:
  • FDDI協議:4352字節
  • 以太網(Ethernet)協議:1500字節
  • PPPoE(ADSL)協議:1492字節
  • X.25協議(Dial Up/Modem):576字節
  • Point-to-Point:4470字節
      以太網和802.3對數據幀的長度有一個限制,其最大值分別是1500和1492字節。鏈路層的這個特性稱作MTU,最大傳輸單元,不同類型的網絡大多都有一個上限,這個值是根據硬件來確定的。

     我們上面使用ifconfig就可以看到MTU.

     也可以用netstat來打印出MTU的結果,比如鍵入netstat -in 

Kernel Interface table
Iface       MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
em1        1500   0   911211      0      0      0   582494      0      0      0 BMRU
lo        16436   0  3745238      0      0      0  3745238      0      0      0 LRU

      就可以觀察到em1的MTU是1500。而lo(環回接口)的MTU則是16436。

      


6.二層設備-交換機/網橋

交換機:

     二層交換機工作於OSI模型的第2層(數據鏈路層),故而稱爲二層交換機。二層交換技術是發展比較成熟,二層交換機數據鏈路層設備,可以識別數據包中的MAC地址信息,根據MAC地址進行轉發,並將這些MAC地址與對應的端口記錄在自己內部的一個地址表中。

     二層交換機一般只認幀中的源和目的MAC地址進行數據傳輸。根據MAC地址尋址,通過站表選擇路由,站表的建立和維護由交換機自動進行。而路由器屬於OSI第三層即網絡層設備,它根據IP地址進行尋址,通過路由表路由協議產生。

工作過程

(1) 當交換機從某個端口收到一個數據包,它先讀取包頭中的源MAC地址,這樣它就知道源MAC地址的機器是連在哪個端口上的;
(2) 再去讀取包頭中的目的MAC地址,並在地址表中查找相應的端口;
(3) 如表中有與這目的MAC地址對應的端口,把數據包直接複製到這端口上;
(4) 如表中找不到相應的端口則把數據包廣播到所有端口上,當目的機器對源機器迴應時,交換機又可以學習一目的MAC地址與哪個端口對應,在下次傳送數據時就不再需要對所有端口進行廣播了。
不斷的循環這個過程,對於全網的MAC地址信息都可以學習到,二層交換機就是這樣建立和維護它自己的地址表。


   二層交換機最大的好處是快速:由於交換機只須識別幀中MAC地址,直接根據MAC地址產生選擇轉發端口算法簡單,便於ASIC實現,因此轉發速度極高。

  但交換機的工作機制也帶來一些問題: 
     1.迴路:根據交換機地址學習和站表建立算法,交換機之間不允許存在迴路。一旦存在迴路,必須啓動生成樹算法,阻塞掉產生迴路的端口。而路由器的路由協議沒有這個問題,路由器之間可以有多條通路來平衡負載,提高可靠性。 

     2.負載集中:交換機之間只能有一條通路,使得信息集中在一條通信鏈路上,不能進行動態分配,以平衡負載。而路由器的路由協議算法可以避免這一點,OSPF路由協議算法不但能產生多條路由,而且能爲不同的網絡應用選擇各自不同的最佳路由。 
 

    3.廣播控制:交換機只能縮小衝突域,而不能縮小廣播域。整個交換式網絡就是一個大的廣播域,廣播報文散到整個交換式網絡。而路由器可以隔離廣播域,廣播報文不能通過路由器繼續進行廣播。 

    4.子網劃分:交換機只能識別MAC地址。MAC地址是物理地址,而且採用平坦的地址結構,因此不能根據MAC地址來劃分子網。而路由器識別IP地址,IP地址由網絡管理員分配,是邏輯地址且IP地址具有層次結構,被劃分成網絡號和主機號,可以非常方便地用於劃分子網,路由器的主要功能就是用於連接不同的網絡。 

    5.保密問題:雖說交換機也可以根據幀的源MAC地址、目的MAC地址和其他幀中內容對幀實施過濾,但路由器根據報文的源IP地址、目的IP地址、TCP端口地址等內容對報文實施過濾,更加直觀方便。

 
    6.介質相關:交換機作爲橋接設備也能完成不同鏈路層和物理層之間的轉換,但這種轉換過程比較複雜,不適合ASIC實現,勢必降低交換機的轉發速度。因此目前交換機主要完成相同或相似物理介質和鏈路協議的網絡互連,而不會用來在物理介質和鏈路層協議相差甚元的網絡之間進行互連。而路由器則不同,它主要用於不同網絡之間互連,因此能連接不同物理介質、鏈路層協議和網絡層協議的網絡。路由器在功能上雖然佔據了優勢,但價格昂貴,報文轉發速度低。近幾年,交換機爲提高性能做了許多改進,其中最突出的改進是虛擬網絡和三層交換。 

網橋(Bridge):

       是一個局域網與另一個局域網之間建立連接的橋樑。屬於數據鏈路層的一種設備。網橋的作用是擴展網絡和通信手段,在各種傳輸介質中轉發數據信號,擴展網絡的距離,同時又有選擇地將現有地址的信號從一個傳輸介質發送到另一個傳輸介質,並能有效地限制兩個介質系統中無關緊要的通信。
      網橋可分爲本地網橋和遠程網橋。本地網橋是指在傳輸介質允許長度範圍內互聯網絡的網橋;遠程網橋是指連接的距離超過網絡的常規範圍時使用的遠程橋,通過遠程橋互聯的局域網將成爲城域網或廣域網。如果使用遠程網橋,則遠程橋必須成對出現。


           

分享一下我老師大神的人工智能教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章