實驗目的
- 了解交換機的MAC地址學習過程。
- 了解交換機對已知單播、未知單播和廣播幀的轉發方式。
實驗原理
MAC(media access control,介質訪問控制)地址是識別LAN節點的標識。MAC對設備(通常是網卡)接口是全球唯一的,MAC地址為48位,用12個16進制數表示。前6個16進制數字由IEEE管理,用來識別生產商或者廠商,構成OUI(Organization Unique Identifier,組織唯一識別符)。后6個包括網卡序列號,或者特定硬件廠商的設定值。對於一個網卡來說,MAC地址是它的一個物理地址,是不可變的,而IP地址是它對應的一個邏輯地址,是可以更改的。
我們設想一個模型,有A、B、C、D這四台PC接在一台交換機上, 首先交換機最初加電時它里面的MAC地址表為空,也就是還沒學習,在學習的最初狀態。首先,比如A發給D一個數據, 這個時候交換機首先在連接A那台PC的端口上學習到A的MAC地址,並且把這個MAC地址記錄到交換機里的MAC地址表里, 但是這個時候交換機並不知道D是在哪,因為MAC表里還沒有D的MAC. 這個時候怎么辦呢?交換機會復制多份這個數據(多幀復制),向交換機的所有端口都轉發這個數據(除A接的那個端口外),這個稱為泛洪,flooding 。當B和C接到這個數據時,首先檢查目的地址,發現不是發給我的,那么就丟棄這個幀。 當D接到這個幀時,發現這是發給自己的,然后D便會發給A數據,這個時候交換機在D的接口又學習到了D的MAC地址 , 這個時候交換機學習到了兩條MAC地址。
實驗內容
本次實驗采用一個模擬二層交換機和兩個主機拓撲圖如下:

1.啟動mininet創建一個線性拓撲,這里我們是使用screen來創建,可以在兩個窗口之間切換。如果系統沒有screen,可以直接sudo apt install screen。 screen mn --topo linear --mac --switch ovsk --controller=none 這里控制器設置為無,ovsk表示虛擬交換機為ovs Kernel mode。 ps:這里建議直接使用管理員root來執行screen,我用自己的賬戶執行screen會直接退出。或者在之前加上一個sudo。 sudo screen mn -topo linear --mac --switch ovsk --controller=none 然后得到下圖,拓撲創建完畢。

2.輸入nodes查看全部結點,理論上會返回兩台交換機和兩個主機。

3.輸入net查看鏈路信息,按照拓撲,兩台交換機之間相連,下分別掛載一個主機。

4.輸入dump查看節點信息。

5.因為此時交換機s1和交換機s2是兩個SDN交換機,而在啟動Mininet時我們沒有指定任何控制器,交換機中沒有流表的存在,無法進行轉發操作。此時主機h1和主機h2是無法進行通信的。我們需要按ctl+a+d跳出當前Mininet窗口,在主窗口命令行中輸入如下命令來打開交換機s1和交換機s2的二層。操作完成后,s1和s2就是兩台普通的二層交換機了。 然后我們回到主窗口命令行輸入:
1 #ovs-vsctl del-fail-mode s1 2 #ovs-vsctl del-fail-mode s2
打開兩個交換機的二層。接着我們可以ping一下兩台主機得到下圖:

6.接着我們查看數據幀轉發表
1 # ovs-ofctl dump-flows s1 2 # ovs-ofctl dump-flows s2

可以看出來交換機已經進行過了mac地址學習。
原lab上還有關於學習過程的分析,就先不黏貼以后自己再寫吧。
