資料鏈路層的七七八八

2023-10-21 06:00:19

主要物理傳輸媒介:線路/網路卡/二層交換機(網橋)

乙太網

封裝好的乙太網幀由網路卡新增前導碼和FCS ->
由對端網路卡接收後去掉前導碼並使用CRC校驗,如果幀損壞則丟棄,如果沒有損壞則交給軟體驅動處理 ->
乙太網驅動接收物理層傳輸過來的包讀入記憶體 ->
檢視源mac和目的mac,如果是發給自己的則根據type欄位的值交給傳輸層繼續處理,如果不是則根據不同的拓撲設計會選擇丟掉或轉發。

MAC地址

在同一資料鏈路的MAC地址必須唯一,相當於身份證號,對於物理網路卡MAC地址會被廠商燒到ROM中。

幀格式

乙太網幀格式不同標準之間略有差距,例如使用較多的Ethernet II、IEEE802.3、VLAN幀體。

  • Ethernet II 應用最廣,從個人電腦上抓包看到的基本都是這類幀體
  • IEEE802.3 可以做到對資料鏈路層更細節的控制
  • VLAN 可以在邏輯上劃分不同的網段

Preamble:在乙太網幀前端有大小8 bytes的前導碼,能夠確保傳送端與接收端時鐘同步,相容不同速率的NIC。前導碼最後一個byte末尾為11,稱為SFD(Start Frame Delimiter),表示後面傳送的是乙太網幀。
MTU:乙太網幀的最大傳輸單元(MTU)預設為1500,即承載的最大IP資料包文的最大長度為1500 bytes,超過了就要分片傳輸。1500 + 6(dst mac addr)+ 6(src mac addr)+ 2(type)+4(FCS)= 1518 bytes,所以乙太網傳輸的最大的資料框為1518 bytes。(MTU可以在系統做設定,在做mellanox適配時,ROCE模式可以通過調大MTU來提升效能)

Ethernet II

抓包軟體看不到前導碼和FCS,因為是從硬體會去掉前導碼和FCS,將乙太網幀交給驅動才是我們抓包到的內容

以電腦到路由器的一個包為例,可以看到目的端是華為路由器,源端是我的macbook pro M2 MAX頂配版(狗頭),型別表明乙太網上一層的協定型別,wireshark已經給出瞭解析,type:0x0800為IPv4,接下來的事情就交給處理IP的程式去做了。

IEEE802.3

Ethernet II的type欄位在此表示乙太網幀的長度,此外多了LLC和SNAP欄位,上層協定type包含在SNAP欄位中

IEEE802.3多了邏輯鏈路控制層(LLC)和SNAP,LLC部分各欄位作用:

  • DSAP(Destination Service Access Point): 使用多協定棧時,告訴接收端在哪個協定棧緩衝區放置該資訊
  • SSAP(Source Service Access Point ):傳送源,如果設定為AA則表明是SNAP幀
  • CTRL(Control Byte):表明是LLC

SNAP各欄位作用:

  • 廠商(Vendor Code):廠家資訊,通常設定為全0
  • 型別(Local Code):包含標識上層協定型別的code,該欄位保證了對Ethernet II的相容

VLAN

VLAN在企業中經常用到,用於在不改變物理線路的情況下邏輯上劃分網段,雖然如此,但是VLAN邏輯層面控制和物理佈線最好有明確整齊的規劃,否則會一團糟。

土黃色部分為VLAN幀相對於Ethernet II多出的部分,各欄位作用如下:

  • TPID(Tag Protocol IDentifier):0x8100標識是否為VLAN幀(IEEE 802.1q tagged frame)
  • Priority:幀的優先順序,3bit分為0~7個等級,值越大優先順序越高
  • CFI(Canonical Format Indicator):主要用於令牌環網路和乙太網之間的相容,乙太網交換機該欄位設定為0

交換機自學

交換機通過查詢轉發表和資料鏈路層每個幀的目標MAC地址決定從哪個網口將資料框傳送出去,如果轉發表上沒有目標MAC地址,則除了接收該幀的埠,其他埠全部轉發該幀,主機收到幀後會判斷是否發給自己,如果不是則丟棄。
構造轉發表實際上是接收到幀時,將交換機埠和該幀的源MAC地址關聯。後續的幀如果目標MAC地址存在於表上,則直接從關聯的這個埠將包傳送出去。

ARP(Address Resolution Protocol)

ARP是根據IP地址找MAC地址的協定,如果封包中含有源MAC地址和目的MAC地址,則交換機通過查轉發表將包從關聯埠傳送出去,如果此封包中只有目標IP地址而沒有目標MAC地址,就需要廣播傳送ARP請求,同網段收到包的主機如果不是發給自己丟棄,如果是發給自己則需要進行單播傳送ARP應答,告訴請求者我的IP地址和我的MAC地址。

抓包看看ARP的請求包,通過廣播傳送出去,上層協定使用0x0806(ARP)。ARP的target MAC address全0,還可以看到硬體型別為1(乙太網),協定型別為0x800(IPv4),操作為1(請求)

再看看ARP的應答包,單播的方式進行應答,附加了MAC地址

環路問題

當兩個交換機將兩個區域網連起來的時候就很容易出現環路,因為ARP請求通過廣播的形式發出,這樣兩個區域網都可以收到廣播訊息,兩臺交換機都能從兩個區域網收到包,也都能向兩個區域網傳送包,當同一個包從區域網一和區域網二同時傳送到交換機時,就破壞了交換機的自學機制,根本無法判斷主機到底在哪裡,於是就開始了無限的廣播,這種現象就是環路問題。
解決環路問題的方法主流的有

  1. 生成樹協定:通過優先順序向量將各交換機節點組成生成樹(Spanning Tree Protocol),網路包根據樹的路徑傳輸,避免環路。
  2. 源路由法:記錄發出資料的源地址是通過哪個交換機傳輸的,如果出現了環路,不會重複轉發。

學習自:
《趣談網路協定》劉超
《圖解TCP/IP》
《圖解HTTP》
《網路是怎樣連線的》
https://www.firewall.cx/networking/ethernet/ieee-8023-snap-frame.html