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地址”欄位來轉發資料幀。
·其中第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地址就如同我們身份證上的身份證號碼,具有全球唯一性。
演算法
-- 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,如需轉載請自行聯絡原作者
相關文章
- 如何規範化網站URL地址?網站
- IP地址分類及範圍
- Python語言規範及風格規範Python
- MySQL 規範及優化MySql優化
- mysql及php命名規範MySqlPHP
- CSS命名及書寫規範CSS
- 前端開發規範:命名規範、html規範、css規範、js規範前端HTMLCSSJS
- 資料開發流程及規範
- RESTful API定義及使用規範RESTAPI
- MySQL准入規範及容量評估MySql
- 程式碼分支及版本管理規範
- 教P於用java咼柚付IP範MAC地址JavaMac
- MySQL資料庫規範 (設計規範+開發規範+操作規範)MySql資料庫
- 機器學習演算法公式的書寫規範機器學習演算法公式
- 前端規範之javascript規範前端JavaScript
- 前端規範之CSS規範前端CSS
- 前端規範之HTML 規範前端HTML
- ubuntu修改mac地址及配置靜態ipUbuntuMac
- WebStorm mac 下載地址及註冊碼WebORMMac
- PHP 規範 - Symfony 程式碼規範PHP
- 前端規範之nodeJs 規範前端NodeJS
- 編碼規範系列:css規範CSS
- EntityFrameworkCore 開發實踐問題及規範Framework
- 軟體測試線上故障規範及模板
- Git工作流及釋出規範(App)GitAPP
- Sql Server系列:規範化及基本設計SQLServer
- 函式可重入性及編寫規範函式
- MAC 地址與IP地址Mac
- 『前端規範化』CSS命名規範化前端CSS
- 前端規範之vue 專案規範前端Vue
- 前端規範與思考(二)———css規範前端CSS
- 前端規範之CSS規範(Stylelint)前端CSS
- Android 程式碼規範 - 命名規範Android
- Android程式碼規範:命名規範Android
- 經典:詳解IP地址盜用常用方法及防範(轉)
- BEM命名規範入門及常用CSS class 命名CSS
- Promise 規範解讀及實現細節 (二)Promise
- git分支管理及git commit message規範GitMIT