主要物理傳輸媒介:線路/網路卡/二層交換機(網橋)
封裝好的乙太網幀由網路卡新增前導碼和FCS ->
由對端網路卡接收後去掉前導碼並使用CRC校驗,如果幀損壞則丟棄,如果沒有損壞則交給軟體驅動處理 ->
乙太網驅動接收物理層傳輸過來的包讀入記憶體 ->
檢視源mac和目的mac,如果是發給自己的則根據type欄位的值交給傳輸層繼續處理,如果不是則根據不同的拓撲設計會選擇丟掉或轉發。
在同一資料鏈路的MAC地址必須唯一,相當於身份證號,對於物理網路卡MAC地址會被廠商燒到ROM中。
乙太網幀格式不同標準之間略有差距,例如使用較多的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來提升效能)
抓包軟體看不到前導碼和FCS,因為是從硬體會去掉前導碼和FCS,將乙太網幀交給驅動才是我們抓包到的內容
以電腦到路由器的一個包為例,可以看到目的端是華為路由器,源端是我的macbook pro M2 MAX頂配版(狗頭),型別表明乙太網上一層的協定型別,wireshark已經給出瞭解析,type:0x0800
為IPv4,接下來的事情就交給處理IP的程式去做了。
Ethernet II的type欄位在此表示乙太網幀的長度,此外多了LLC和SNAP欄位,上層協定type包含在SNAP欄位中
IEEE802.3多了邏輯鏈路控制層(LLC)和SNAP,LLC部分各欄位作用:
AA
則表明是SNAP幀LLC
幀SNAP各欄位作用:
VLAN在企業中經常用到,用於在不改變物理線路的情況下邏輯上劃分網段,雖然如此,但是VLAN邏輯層面控制和物理佈線最好有明確整齊的規劃,否則會一團糟。
土黃色部分為VLAN幀相對於Ethernet II多出的部分,各欄位作用如下:
0x8100
標識是否為VLAN幀(IEEE 802.1q tagged frame)交換機通過查詢轉發表和資料鏈路層每個幀的目標MAC地址決定從哪個網口將資料框傳送出去,如果轉發表上沒有目標MAC地址,則除了接收該幀的埠,其他埠全部轉發該幀,主機收到幀後會判斷是否發給自己,如果不是則丟棄。
構造轉發表實際上是接收到幀時,將交換機埠和該幀的源MAC地址關聯。後續的幀如果目標MAC地址存在於表上,則直接從關聯的這個埠將包傳送出去。
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請求通過廣播的形式發出,這樣兩個區域網都可以收到廣播訊息,兩臺交換機都能從兩個區域網收到包,也都能向兩個區域網傳送包,當同一個包從區域網一和區域網二同時傳送到交換機時,就破壞了交換機的自學機制,根本無法判斷主機到底在哪裡,於是就開始了無限的廣播,這種現象就是環路問題。
解決環路問題的方法主流的有
學習自:
《趣談網路協定》劉超
《圖解TCP/IP》
《圖解HTTP》
《網路是怎樣連線的》
https://www.firewall.cx/networking/ethernet/ieee-8023-snap-frame.html