MAC地址組成
網絡設備的MAC地址是全球唯一的。MAC地址長度為48比特,通常用十六進制表示。MAC地址包含兩部分:前24比特是組織唯一標識符(OUI,OrganizationallyUniqueIdentifier),由IEEE統一分配給設備制造商。
例如,華為的網絡產品的MAC地址前24比特是0x00e0fc。后24位序列號是廠商分配給每個產品的唯一數值,由各個廠商自行分配(這里所說的產品可以是網卡或者其他需要MAC地址的設備)。
MAC地址有單播、廣播、組播之分
單播
局域網上的幀可以通過三種方式發送。第一種是單播,指從單一的源端發送到單一的目的端。每個主機接口由一個MAC地址唯一標識,MAC地址的OUI中,第一字節第8個比特表示地址類型。對於主機MAC地址,這個比特固定為0,表示目的MAC地址為此MAC地址的幀都是發送到某個唯一的目的端。在沖突域中,所有主機都能收到源主機發送的單播幀,但是其他主機發現目的地址與本地MAC地址不一致后會丟棄收到的幀,只有真正的目的主機才會接收並處理收到的幀。
廣播
第二種發送方式是廣播,表示幀從單一的源發送到共享以太網上的所有主機。廣播幀的目的MAC地址為十六進制的FFFFFFFFFFFF,所有收到該廣播幀的主機都要接收並處理這個幀。
廣播方式會產生大量流量,導致帶寬利用率降低,進而影響整個網絡的性能。
當需要網絡中的所有主機都能接收到相同的信息並進行處理的情況下,通常會使用廣播方式。
組播
第三種發送方式為組播,組播比廣播更加高效。組播轉發可以理解為選擇性的廣播,主機偵聽特定組播地址,接收並處理目的MAC地址為該組播MAC地址的幀。
組播MAC地址和單播MAC地址是通過第一字節中的第8個比特區分的。組播MAC地址的第8個比特為1,而單播MAC地址的第8個比特為0。
當需要網絡上的一組主機(而不是全部主機)接收相同信息,並且其他主機不受影響的情況下通常會使用組播方式。
MAC在數據幀接收與發送的應用
幀從主機的物理接口發送出來后,通過傳輸介質傳輸到目的端。共享網絡中,這個幀可能到達多個主機。主機檢查幀頭中的目的MAC地址,如果目的MAC地址不是本機MAC地址,也不是本機偵聽的組播或廣播MAC地址,則主機會丟棄收到的幀。
如果目的MAC地址是本機MAC地址,則接收該幀,檢查幀校驗序列(FCS)字段,並與本機計算的值對比來確定幀在傳輸過程中是否保持了完整性。如果幀的FCS值與本機計算的值不同,主機會認為幀已被破壞,並會丟棄該幀。如果該幀通過了FCS校驗,則主機會根據幀頭部中的Type字段來確定將幀發送給上層哪個協議處理。本例中,Type字段的值為0x0800,表明該幀需要發送到IP協議上處理。在發送給IP協議之前,幀的頭部和尾部會被剝掉。
舉例說明:主機A要發數據給主機B,主機A在封裝Frame(OSI的第二層用的數據格式),要封裝對方的MAC,查找ARP表發現不知道B的MAC,只知道IP,它就發送一個ARP包,源IP是自己的,目的IP是B的,源MAC是自己的,目的MAC是廣播的。然后這個ARP請求在A所在的內網被廣播,當其他機器接到這個包時,用目的IP和自己的IP比較,不是的話就丟棄;是的話,B接收后,就應答這個請求,把自己的MAC送給A。如果B是其他子網的主機,那么路由器根據子網掩碼會判斷出B是其他子網,然后路由器把自己的MAC返回給A,A以后再給B發包時,目的MAC封裝的就是路由器的。總之,A和B如果是同一子網,A發送的目的MAC就是B的,否則A發送的目的MAC就是路由器的。
MAC出現的歷史原因:以太網發明出來的時候,IP還沒有壟斷網絡層協議,那時還有Novell網的IPX/SPX協議、DEC公司開發的CLNP網絡協議,以及Apple公司開發的Apple Talk協議,以太網需要支持這所有的網絡層協議,如果沒有MAC地址,勢必需要網卡解讀網絡層協議頭的地址信息,而每一種網絡層的地址都大相徑庭,所以增加了以太網卡的實現復雜度。
而網卡有了MAC地址,可以不依賴於任何網絡層協議,可以獨立判斷一個以太幀是否接收(依據MAC地址匹配),這樣大大簡化了網卡的實現。
即使以后出現更多的網絡層協議,網卡也無需太多的改變,這就是網絡分層的精髓,一層的內部實現無需知曉其上層、或下層協議字段。二層交換機:交換機工作主要依靠MAC表(MAC和以太網端口映射表),交換機會記錄每個端口連接的主機的MAC。當交換機收到主機的數據包,提取目的MAC地址,查看目的MAC地址的主機連接哪個端口,然后往那個端口發送數據。交換機不會改變數據包的任何信息,包括MAC。
無線路由器:目前的無線路由器同時扮演有線網絡中交換機與路由器的角色。傳統有線網絡中的交換機與路由器一般是分離的,客戶端要傳輸數據時,若在同一子網在交換機上傳輸無須經過路由器,若跨子網傳輸數據時就要通過交換機與路由器了。無線路由器能接收發送給子網的數據包,也能接收發往外網的數據包。當接收到子網的數據包,無線路由器只起到交換機的作用;當接收到發往外網的數據包,通過NAT協議發送出去。