MAC簡(jiǎn)介
MAC即媒體介入控制層,屬于OSI模型中數據鏈路層下層子層。它定義了數據幀怎樣在介質(zhì)上進(jìn)行傳輸。在共享同一個(gè)帶寬的鏈路中,對連接介質(zhì)的訪(fǎng)問(wèn)是“先來(lái)先服務(wù)”的。物理尋址在此處被定義,邏輯拓撲(信號通過(guò)物理拓撲的路徑)也在此處被定義。線(xiàn)路控制、出錯通知(不糾正)、幀的傳遞順序和可選擇的流量控制也在這一子層實(shí)現。
MAC協(xié)議的種類(lèi)
多個(gè)用戶(hù),多址接入的核心問(wèn)題就是:對于一個(gè)信道,多個(gè)用戶(hù)產(chǎn)生競爭的時(shí)候,如何采用一些協(xié)調機制,也就是采用何種MAC協(xié)議。例如兩種極端的MAC協(xié)議,一種是完全自由的方式,用戶(hù)自由發(fā)送,但是要解決一個(gè)問(wèn)題是碰撞后如何辦,一種是完全排序,每個(gè)用戶(hù)都被規定了詳細的規則來(lái)發(fā)送,接收包。但是,實(shí)際上不可能這樣的,因為MAC協(xié)議,主要決定了通信的吞吐量、延遲等性能,所以,這塊是非常重要的,是多種方式的結合。MAC協(xié)議主要分為以下三類(lèi)
1、固定分配信道。信道基本上可以分為頻分、時(shí)分、碼分、空分,每個(gè)用戶(hù)都被固定的分配了一個(gè)信道,這種方式實(shí)時(shí)性很高,但是有浪費。主要是面向語(yǔ)音。例如FDMA(電話(huà))、TDMA(GSM)、CDMA.
2、隨機分配信道。。主要是面向數據。例如ALOHA,CSMA就是隨機分配的典型例子。
3、按需分配信道。根據用戶(hù)的要求,按照需求分配信道,例如802.16就是按照需求分配信道。主要是面型多媒體。
MAC幀格式
MAC幀基本格式如下圖所示:
1、FrameControl字段
-ProtocolVersion:目前為0
-Type:幀類(lèi)別,有下面三種,每個(gè)類(lèi)別又有一些子類(lèi)別(見(jiàn)Subtype)
00:管理幀(ManagementFrame)
01:控制幀(ControlFrame)
10:數據幀(DataFrame)
11:保留未使用
-Subtype:幀子類(lèi)別,與Type共同來(lái)決定一個(gè)幀的類(lèi)型,詳細如下表所示
-ToDS/FromDS:指示幀目的地是否為DS(分布式系統),可以簡(jiǎn)單地理解為是否【發(fā)往/來(lái)自】AP
-Morefragments:指示是否還有分片(除去最后一個(gè)分片)
-Retry:指示當前幀是否為重傳幀,接收方收到后會(huì )刪掉重復幀
-Powermanagement:指示STA的電源管理模式,1表示STA在數據交換完成后進(jìn)入省電(Power-Save)模式,對于A(yíng)P恒為0
-Moredata:指示AP為進(jìn)入省電模式的STA進(jìn)行幀緩存(來(lái)自DS)
-WEP:指示framebody是否使用WEP加密
-Order:指示將進(jìn)行嚴格次序(StrictlyOrdered)傳送
2、其他字段
-Duration/ID:可以用在下面三個(gè)場(chǎng)景中
@1Duration,第15位置0,用于設定NAV,數值代表預計使用介質(zhì)的微秒數
@2在CFP幀中,第14位置0,第15位置1,其他值為0,字段值為32768,讓其他沒(méi)有收到Beacon幀的STA公告無(wú)競爭周期
@3在PS-Poll(省電-輪詢(xún))幀中,第14、15位同時(shí)置1,用于從省電模式醒來(lái)的STA發(fā)送AID(關(guān)聯(lián)標識符)以取得在A(yíng)P中的緩存幀
-Address:有以下幾種類(lèi)型,由幀類(lèi)型決定使用哪幾個(gè)地址字段,通常有三個(gè),SA、DA和BSSID
BSSID,基本服務(wù)集標識符
DA,目的地址
SA,源地址
RA,接收端地址
TA,發(fā)送端地址
-SequenceControl:包含兩個(gè)子字段,4位的分片編號(FragmentNumber)和12位的順序編號(SequenceNumber)
順序編號4096的模數,從0開(kāi)始,每處理一個(gè)上層封包就加1
若上層封包分片處理,所有幀分片采用相同順序編號
對于重傳幀,順序編號不變
-FrameBody:幀主體也稱(chēng)數據字段(Datafield),用于傳遞上層有效載荷(Payload),可為0
-FCS:幀校驗序列,采用循環(huán)冗余校驗(CRC)碼,計算范圍包括MAC頭中所有字段及幀主體
3、幀主體數據
不同于以太網(wǎng),802.11的FrameBody以802.2的邏輯鏈路控制(LLC)來(lái)封裝不同類(lèi)型的網(wǎng)絡(luò )協(xié)議
有兩種封裝方式:RFC1042、802.1H
下圖是802.11里的IP封裝
MAC的修改地址
通用修改
需要根據MAC芯片型號聯(lián)系廠(chǎng)家拿到對應的固件刷寫(xiě)工具,以及MAC地址文件,其中MAC地址是需要向IEEE聯(lián)盟購買(mǎi)有效段的,并是唯一的,如果出現重復的則會(huì )報IP地址重復的錯誤而導致相同MAC地址的計算機網(wǎng)絡(luò )訪(fǎng)問(wèn)異常。
Unix/Linux系統下修改MAC地址
進(jìn)入保存MAC信息文件
圖形界面下Alt+Ctrl+Space→打開(kāi)命令行終端→
方法1、輸入:ifconfig
方法2、輸入:ifconfig|grep“inet”|cut-c0-36|sed-e‘s/[a-zA-Z:]//g’
方法3、輸入:hostname-i
方法4、輸入:netstat-r
方法5、輸入:cat/etc/resolv.conf
→顯示相關(guān)網(wǎng)絡(luò )數據
其中inetaddr為ip地址,HWaddr是主機的HardwareAddress即MAC。
修改MAC
方法1、修改MAC的方法:在/etc/rc.d/init.d/中的network中加入ifconfigeth0hwetherxx:xx:xx:xx:xx:xx(MAC)然后重新啟動(dòng)就會(huì )發(fā)現網(wǎng)卡地址已經(jīng)是xxxxxxx了。
方法2、也可以將/sbin/ipconfigeth0hwetherMACaddr加入到/etc/rc.local中去。
以太網(wǎng)的MAC層
以太網(wǎng)的MAC地址:
MAC地址又稱(chēng)為硬件地址或者是物理地址,其實(shí)是指局域網(wǎng)上的每一臺計算機中固化在適配器的ROM中的地址。由于計算機的發(fā)展,世界上的計算機太多,為了能夠標識每一臺計算機,目前所采用的MAC地址一般是6字節的48位的長(cháng)度。這里我們可以這樣簡(jiǎn)單的理解,所謂的MAC地址,實(shí)際上就是適配器地址。
簡(jiǎn)述一下適配的作用:
適配器實(shí)際上就是每臺計算機接入到互聯(lián)網(wǎng)的一個(gè)接口,路由器因為要將數據在不同的局域網(wǎng)上面路由,所以路由器一般不止一個(gè)接口,就是說(shuō)路由器一般不止一個(gè)硬件地址。
適配器有過(guò)濾的功能,它在局域網(wǎng)上每次收到一個(gè)MAC幀時(shí)(局域網(wǎng)上面傳輸的數據),就檢查MAC幀中的目的地址,發(fā)現如果和自己的地址一樣,則拿到該MAC幀,然后做其他處理,如果發(fā)現和自己的MAC地址不一樣,則把剛剛拿到的MAC幀再次丟到局域網(wǎng)中,以供其他的計算機使用。局域網(wǎng)上面的每一臺計算機都是通過(guò)這種方式拿到自己需要的數據(MAC幀)。
MAC幀的格式:
首先看一下以太網(wǎng)V2的MAC幀格式(MAC格式標準有兩個(gè),一個(gè)是DIXEthernetV2標準,一個(gè)是IEEE的802.3標準)上圖中的第一個(gè)地段的6個(gè)字節放置的是目的地址,第二個(gè)字段的6個(gè)字節放置的內容是源地址,第三個(gè)字段的2個(gè)字節放置的內容是類(lèi)型,用來(lái)標識上一層使用的是什么協(xié)議,比如0800是IP協(xié)議,0806是ARP協(xié)議,8035是RARP協(xié)議,MAC層根據這些字段的內容來(lái)把數據傳遞給特定的層去使用。第四個(gè)字段是數據字段,它的長(cháng)度是46–1500字節,如果數據的長(cháng)度不滿(mǎn)46字節,MAC幀就會(huì )加入一些數據進(jìn)行填充,那么上層是如何知道數據的長(cháng)度呢,因為MAC幀并沒(méi)有一個(gè)字段用來(lái)標識數據的長(cháng)度,解決這個(gè)問(wèn)題使用了一種曼徹斯特編碼,大家可以上網(wǎng)查閱。最后一個(gè)字段是4個(gè)字節是幀檢驗序列,使用了CRC校驗。
這里還需要注意的一個(gè)問(wèn)題是,當我們數據字段的數據長(cháng)度沒(méi)有46字節時(shí),上層是如何把多余的由MAC幀填充的數據丟掉呢,這里我們的上層協(xié)議中有字段長(cháng)度,會(huì )自動(dòng)的識別,然后把多余的數據丟掉。
MAC子層主要功能
MAC子層包括DCF和PCF。DCF:DistributedCoordinationFunction。PCF:PointCoordinationFunction
1、載波監聽(tīng)(CarrierSense)
STA有兩種方法來(lái)判斷當前介質(zhì)是否空閑
-檢查PHY層,是否有carrier存在
-使用虛擬carrier-sense功能,NAV(NetworkAllocationVector)
NAV是MAC層提供的一種定時(shí)器,保存了其他STA使用介質(zhì)的持續時(shí)間
其他STA發(fā)送的數據中帶有的Duration大于所保存的時(shí)間時(shí),STA就更新自己的NAV
當NAV為0并且PHY層指示當前介質(zhì)可用時(shí),STA才能發(fā)送數據
2、DCF
DCF是基于CSMA/CA的接入方法,盡可能避免沖突,可以自動(dòng)高效地共享介質(zhì)
DCF提供基本模式和RTS/CTS模式兩種介質(zhì)訪(fǎng)問(wèn)方式
利用競爭窗口的二進(jìn)制指數回退機制協(xié)調多個(gè)STA對共享鏈路的訪(fǎng)問(wèn),避免出現因爭搶介質(zhì)而無(wú)法通信的情況
其核心思想是利用二進(jìn)制指數回退機制減輕數據分組的碰撞以及實(shí)現發(fā)生碰撞后對分組的有限重傳控制
STA發(fā)送數據幀時(shí),首先檢測介質(zhì)的狀態(tài)
如果介質(zhì)空閑且持續一個(gè)DIFS時(shí)間(DCFInterFrameSpace)后
-在基本模式下立即發(fā)送數據幀
-在RTS/CTS模式下,發(fā)送RTS幀
并同時(shí)檢測有沒(méi)有發(fā)生分組碰撞
如果發(fā)生碰撞,STA隨機在[0,Wi]之間均勻選取一個(gè)值Random()
ØWi被稱(chēng)作競爭窗口,其大小依賴(lài)于數據分組重新傳輸次數
CWmin≤CW≤CWmax
并計算出backofftimer(=Random()*slottime)
隨后,當STA探測到介質(zhì)空閑時(shí)間等于一個(gè)slottime時(shí),計數器減1
而當檢測到介質(zhì)忙時(shí),計數器值保持不變
并在介質(zhì)空閑時(shí)間等于DIFS時(shí),重新激活延時(shí)計數器且STA繼續監測介質(zhì)
直到計數器值減到0時(shí)STA才發(fā)送MAC幀
另外,為了避免某STA長(cháng)時(shí)間占用信道,STA在兩次連續的數據幀發(fā)送之間也必須進(jìn)行隨機延遲。
3、應答幀
某些幀需要接收STA回應一個(gè)應答幀,稱(chēng)為ACK幀
ACK幀的傳輸不需要等待backofftimer
而是等待SIFS(ShortInterframeSpace)時(shí)間
SIFS通常比DIFS少2個(gè)slottime
4、隱藏節點(diǎn)問(wèn)題和RTS/CTS
RTS:Requesttosend
CTS:Cleartosend
由于信號的緣故(距離太遠),某些STA之間無(wú)法直接通信,無(wú)法感知彼此的存在,
若此時(shí)同時(shí)給處于兩者之間的STA發(fā)送幀,導致中間STA佷尷尬
因為只有中間STA知道發(fā)生了沖突
此時(shí),需要使用RTS/CTS來(lái)解決該問(wèn)題
STA發(fā)送RTS幀,預約介質(zhì)的使用權和要求接收STA保持沉默
接收STA以CTS應答,CTS幀要求附近的STA保持沉默直到過(guò)程結束
然后開(kāi)始幀的傳輸過(guò)程
RTS/CTS通常用在高用量的環(huán)境下以及傳輸競爭比較顯著(zhù)的場(chǎng)合
5、幀分片(FrameFragmentation)
幀分片的作用在于提高無(wú)線(xiàn)介質(zhì)中傳輸的可靠性
將一個(gè)完整幀分為幾個(gè)更小的幀來(lái)分別傳輸,每個(gè)分片幀都需要ACK
這樣當某個(gè)分片幀出現錯誤時(shí),只需要重新傳輸該幀即可
然而這也可能增加MAC層過(guò)載問(wèn)題(Overhead)
注意:
-幀分片只發(fā)生在單播幀中
-每個(gè)分片幀具有相同的幀序列號和遞增的幀編號
6、PCF
PCF作為DCF的補充,是一種可選的介質(zhì)訪(fǎng)問(wèn)機制
提供了不必通過(guò)競爭即可使用介質(zhì)的服務(wù),為了滿(mǎn)足實(shí)時(shí)業(yè)務(wù)需求
用于Infrastructure模式網(wǎng)絡(luò )架構中,由AP進(jìn)行協(xié)調
PCF以周期的形式進(jìn)行幀的傳輸
每個(gè)周期包括一個(gè)無(wú)競爭階段和一個(gè)競爭階段
-無(wú)競爭階段(CFP:Contention-FreePeriod)
-競爭階段(CP:ContentionPeriod)
CFP階段傳輸實(shí)時(shí)業(yè)務(wù),PCF起作用
CP階段傳輸非實(shí)時(shí)業(yè)務(wù),DCF起作用