mac地址規範及演算法

weixin_34117211發表於2017-11-08

概述

·MAC地址(MAC Address)

·MAC(Medium/Media Access Control)地址,用來表示網際網路上每一個站點的識別符號,採用十六進位制數表示,共六個位元組(48位)。其中,前三個位元組是由IEEE的註冊管理機構RA負責給不同廠家分配的程式碼(高位24位),也稱為“編制上唯一的識別符號”(Organizationally Unique Identifier),後三個位元組(低位24位)由各廠家自行指派給生產的介面卡介面,稱為擴充套件識別符號(唯一性)。一個地址塊可以生成224個不同的地址。MAC地址實際上就是介面卡地址或介面卡識別符號EUI-48。

解釋

·MAC(Media Access Control,介質訪問控制)地址,也叫硬體地址,長度是48位元(6位元組),由16進位制的數字組成,分為前24位和後24位:

·前24位叫做組織唯一標誌符(Organizationally Unique Identifier,即OUI),是由IEEE的註冊管理機構給不同廠家分配的程式碼,區分了不同的廠家。
·後24位是由廠家自己分配的,稱為擴充套件識別符號。同一個廠家生產的網路卡中MAC地址後24位是不同的。

·MAC地址對應於OSI參考模型的第二層資料鏈路層,工作在資料鏈路層的交換機維護著計算機MAC地址和自身埠的資料庫,交換機根據收到的資料幀中的“目的MAC地址”欄位來轉發資料幀。

1240

·其中第1位元組的第8Bit(如圖中00-50-BA-...對應的00000000-01010000-10111010-...,加粗字型的Bit)標識這個地址是組播地址還是單播地址。這是由乙太網的傳輸協議高位元組先傳,但每一位元組內低位先傳的特性所決定的,見IEEE 802.3 3.2.3 Address fields: “The first bit (LSB) shall be used in the Destination Address field as an address type designation bit to identify the Destination Address either as an individual or as a group address. If this bit is 0, it shall indicate that the address field contains an individual address. If this bit is 1, it shall indicate that the address field contains a group address that identifies none, one or more, or all of the stations connected to the LAN. In the Source Address field, the first bit is reserved and set to 0.”。事實上這傳輸的順序為000000000000101001011101...“The first bit (LSB)”即是前言的第8Bit。

·網路卡的實體地址通常是由網路卡生產廠家燒入網路卡的EPROM(一種快閃記憶體晶片,通常可以通過程式擦寫),它儲存的是傳輸資料時真正賴以標識發出資料的電腦和接收資料的主機的地址。

·也就是說,在網路底層的物理傳輸過程中,是通過實體地址來識別主機的,它一定是全球唯一的。比如,著名的乙太網卡,其實體地址是48bit(位元位)的整數,如:44-45-53-54-00-00,以機器可讀的方式存入主機介面中。乙太網地址管理機構(除了管這個外還管別的)(IEEE)(IEEE:電氣和電子工程師協會)將乙太網地址,也就是48位元的不同組合,分為若干獨立的連續地址組,生產乙太網網路卡的廠家就購買其中一組,具體生產時,逐個將唯一地址賦予乙太網卡。
形象地說,MAC地址就如同我們身份證上的身份證號碼,具有全球唯一性。

1240

演算法

-- lua實現 By:Wiger
-- 獲取隨機MAC地址
function getRandomAddress()
    local adrArray = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" }
    local adrStr = ""

    math.randomseed(tostring(os.time()):reverse():sub(1, 6))
    for i = 1, 12 do
        local index = 0
        if i ~= 2 then
            index = math.random(1, 16)
        else
            -- 第二位只能是偶數
            local indexArray    = { 1, 3, 5, 7, 9, 11, 13, 15 }
            index               = indexArray[math.random(1, 8)]
        end

        adrStr = adrStr .. adrArray[index]
    end

    return adrStr
end


轉載:簡書

參考文獻:http://baike.baidu.com/view/69334.htm





      本文轉自echoroot 51CTO部落格,原文連結:http://blog.51cto.com/echoroot/1958013,如需轉載請自行聯絡原作者




相關文章