mac地址規範及算法

概述

·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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章