1、交換原理
我們知道交換機有若干個物理端口,端口可以接入主機、路由或其他交換機。同時接入交換機的設備都有一個MAC地址,交換機內部存儲着一張緩存表,表上記錄着各個端口對應設備的MAC地址。這樣當一臺主機需要向另一臺設備發送數據時,在數據幀中註明目的設備的MAC地址,交換機讀取該MAC地址,查詢緩存表找到對應的端口號,將幀直接發往該端口對應的設備即可。緩存表示意如下。
端口 | MAC地址 |
0 | 00-50-BA-CE-07-0C |
1 | 00-50-BA-CE-07-0D |
2 | 00-50-BA-CE-07-0E |
3 | 00-50-BA-CE-07-0F |
... |
2、交換機的功能
交換機主要有三個功能:交換、廣播、學習。
交換:交換機收到主機A的幀,它查看該幀的目的MAC地址,然後查詢緩存表中該MAC地址對應的端口,將幀轉發到對應端口即可。
廣播:交換機收到主機A的幀,它查看該幀的目的MAC地址,若目的MAC地址爲FF-FF-FF-FF-FF-FF,則表明這是一個廣播幀,交換機會將這個幀發往所有端口。若目的MAC地址在緩存表中找不到,交換機也會將這個幀廣播到所有端口。
學習:最初緩存表中是沒有任何MAC地址與端口的對應信息,當它收到某端口的幀時通過讀取源MAC地址就知道了該端口對應的MAC地址並記錄,通過這個過程就能把各端口對應的MAC地址都記錄下來,對於未記錄的目的MAC地址則採用廣播的方式發出去。
3、交換機的級聯
對於大型網絡爲接入更多設備必然出現級聯的情況,然而即使再複雜的級聯情況,交換機使用前面敘述的三種功能都能輕鬆應對。考慮下圖所示的連接,SW1連接的主機A1要向SW2連接的主機B1發送數據。這裏假設SW1和SW2中的緩存表都是空的。
1)當幀到達SW1時,SW1通過讀取幀的源MAC地址獲得瞭如下的緩存表。這裏假設A2和A3後續也發出了類似的幀分別發往B2和B3,將其MAC加入緩存表方便後面分析。
MAC | 端口 | ||
00-50-BA-CE-07-A1 | 0 | ||
00-50-BA-CE-07-A2 | 5 | ||
00-50-BA-CE-07-A3 | 10 |
2)SW1再對比幀中目的MAC地址是否記錄在緩存表中,當然是沒有的。於是SW1向所有端口轉發此幀。A2、A3通過查看目的MAC地址得知該幀不是發給自己的於是直接丟棄,與SW1連接的SW2自然也收到該幀,於是SW2通過讀取幀的源MAC地址獲得瞭如下的緩存表。因爲A1、A2、A3的幀都只會通過SW2的端口0進來,所以這幾個MAC地址對應的都是端口0。
MAC | 端口 | |
00-50-BA-CE-07-A1 | 0 | |
00-50-BA-CE-07-A2 | 0 | |
00-50-BA-CE-07-A3 | 0 |
3)SW2對比幀中目的MAC地址是否記錄在緩存表中,當然沒有。於是SW2向所有端口轉發這些幀,主機B1、B2、B3通過查看目的MAC地址分別獲取了發給自己的幀,同時SW2就得知了各端口連接主機的MAC地址並更新了其緩存表。
MAC | 端口 | |
00-50-BA-CE-07-A1 | 0 | |
00-50-BA-CE-07-A2 | 0 | |
00-50-BA-CE-07-A3 | 0 | |
00-50-BA-CE-07-B1 | 4 | |
00-50-BA-CE-07-B2 | 5 | |
00-50-BA-CE-07-B3 | 9 |
4)此時,若主機B1向A1返回一個幀,SW2通過查詢緩存表就知道將幀發往其端口0,SW1獲取該幀後也可通過查詢緩存表得知應將幀發往端口4,於是主機A1就能快速收到來自主機B1的幀的。同時SW1也能得知主機B1、B2、B3的幀來自端口0並將其MAC地址與端口對應關係記錄到緩存表中。
MAC | 端口 |
00-50-BA-CE-07-A1 | 4 |
00-50-BA-CE-07-A2 | 5 |
00-50-BA-CE-07-A3 | 10 |
00-50-BA-CE-07-B1 | 0 |
00-50-BA-CE-07-B2 | 0 |
00-50-BA-CE-07-B3 | 0 |
對於多層次的級聯也是通過這種廣播的方式來發現目標主機,交換機通過這種方式很好的實現了二層與三層的隔離,即幀轉發完全沒有涉及IP地址,僅靠MAC地址就能實現。
【MAC地址衝突的思考】通過前面的敘述我們知道,即使路由器工作在網絡層使用IP尋址查找目標主機,而在幀傳遞時還是依賴於MAC地址,這也就是爲什麼需要對接入網絡的網卡進行統一規劃,避免MAC地址衝突。
【級聯與廣播】我們知道當交換機緩存表中沒有目的MAC地址時就通過廣播的方式傳遞該幀,其次交換機會定期刪除不常用的緩存,那麼對於多層次的交換機級聯就有可能出現大量的廣播包在網絡中傳遞,對於環網甚至可能出現廣播包的循環傳遞導致廣播風暴。
【如何通過IP地址知道MAC地址】應用程序向外發送數據包時只指定目標的IP地址,那主機是如何得知IP對應的MAC地址呢,當然是前面講過的ARP協議啦,也是通過廣播的方式詢問網絡內所有主機的方式來得知目標IP的MAC地址。
【若目的IP位於其他網段】若數據要發往其他網段,主機會將目的MAC地址填爲默認網關的MAC,則交換機會將幀發往路由器,路由器根據IP地址進行包轉發,這就屬於網絡層的路由內容,後面會詳細講到。
【交換機與集線器】交換概念的提出是區別於早期的集線器技術,集線器的功能是將A端口收到的數據轉發往其餘所有端口,類似於廣播的概念。這種傳輸技術缺點在於同一時間只能有一臺接入的設備發送數據其他所有設備只能被動接收,對於大型網絡這極大地影響傳輸效率。作爲改良的交換技術它先是通過廣播的方式獲取網絡中設備的MAC地址與端口的對應關係並記錄到緩存表中,在以後的數據傳輸中就可以可以將A端口收到的數據轉發往目標主機所在的端口,這就實現了接入的主機可將數據直接發往任意指定的其他主機,同時不影響其他接入主機的互相通信,極大地提升了效率。
【衝突域】我們將同一時間只能有一臺設備發送數據的情況稱爲衝突域,即一臺設備發送數據時其他所有互連的設備都只能接受不能發送,即爲衝突,實際上只有集線器這種情況會形成一個衝突域。
【交換機隔離衝突域】交換機每一個端口的數據都可以併發的向另一個端口轉發,所以說交換機可以隔離衝突域。考慮實際情況就是交換機不同端口上接入了若干個集線器,這些集線器分別組成了若干個衝突域,當這些集線器通過交換機連接時,交換機就將這些個衝突域隔離了,通俗點說就是不會形成更大的衝突域,表現形式就是各端口可自由通信。
【不同網段設備連接在交換機上能通信嗎】若交換機上分別連接着多個網段的設備,根據交換機的轉發原理,似乎是可以通信的,但實際上又確實不能通信,這是怎麼回事呢?
我們先梳理一下兩臺設備互通的整個過程,首先主機A只知道主機B的IP地址不知道MAC地址的,IP報文到達網卡後,網卡可以通過ARP廣播的方式通過IP地址找到MAC地址。得到MAC地址的網卡就可以組裝幀啦,網卡將該幀發送給交換機,交換機通過MAC地址找到目標主機並轉發。但是在ARP廣播前發生了什麼呢。
原來主機A自己本身有個路由表,表中記錄着不同IP地址的數據該發往那個IP地址,其中同網段數據會標明直接從本地網卡出去,不同網段數據會默認發往網關。所以同網段的數據到達網卡後,網卡通過ARP查詢IP地址對應的MAC地址並組成幀。不同網段的數據到達網卡後,網卡得知該數據是發往網關的,於是網卡填寫目的MAC地址時就填寫的是網關的MAC,最後組成的幀將被交換機發往網關。若主機沒有配置網關,則發往不同網段的數據還沒有到網卡就已經被丟棄了,並提示網絡不可達。原因是在數據到達網卡前還要先查看自己的路由表,路由表上有註明的IP才能被髮出否則不能發出(默認不認識的IP都是發往網關的)。
所以交換機上連接着的不同網段的設備是不能通信的。