mac简介
mac即媒体介入控制层,属于osi模型中数据链路层下层子层。它定义了数据帧怎样在介质上进行传输。在共享同一个带宽的链路中,对连接介质的访问是“先来先服务”的。物理寻址在此处被定义,逻辑拓扑(信号通过物理拓扑的路径)也在此处被定义。线路控制、出错通知(不纠正)、帧的传递顺序和可选择的流量控制也在这一子层实现。
mac协议的种类
多个用户,多址接入的核心问题就是:对于一个信道,多个用户产生竞争的时候,如何采用一些协调机制,也就是采用何种mac协议。例如两种极端的mac协议,一种是完全自由的方式,用户自由发送,但是要解决一个问题是碰撞后如何办,一种是完全排序,每个用户都被规定了详细的规则来发送,接收包。但是,实际上不可能这样的,因为mac协议,主要决定了通信的吞吐量、延迟等性能,所以,这块是非常重要的,是多种方式的结合。mac协议主要分为以下三类
1、固定分配信道。信道基本上可以分为频分、时分、码分、空分,每个用户都被固定的分配了一个信道,这种方式实时性很高,但是有浪费。主要是面向语音。例如fdma(电话)、tdma(gsm)、cdma.
2、随机分配信道。。主要是面向数据。例如aloha,csma就是随机分配的典型例子。
3、按需分配信道。根据用户的要求,按照需求分配信道,例如802.16就是按照需求分配信道。主要是面型多媒体。
mac帧格式
mac帧基本格式如下图所示:
1、framecontrol字段
-protocolversion:目前为0
-type:帧类别,有下面三种,每个类别又有一些子类别(见subtype)
00:管理帧(managementframe)
01:控制帧(controlframe)
10:数据帧(dataframe)
11:保留未使用
-subtype:帧子类别,与type共同来决定一个帧的类型,详细如下表所示
-tods/fromds:指示帧目的地是否为ds(分布式系统),可以简单地理解为是否【发往/来自】ap
-morefragments:指示是否还有分片(除去最后一个分片)
-retry:指示当前帧是否为重传帧,接收方收到后会删掉重复帧
-powermanagement:指示sta的电源管理模式,1表示sta在数据交换完成后进入省电(power-save)模式,对于ap恒为0
-moredata:指示ap为进入省电模式的sta进行帧缓存(来自ds)
-wep:指示framebody是否使用wep加密
-order:指示将进行严格次序(strictlyordered)传送
2、其他字段
-duration/id:可以用在下面三个场景中
@1duration,第15位置0,用于设定nav,数值代表预计使用介质的微秒数
@2在cfp帧中,第14位置0,第15位置1,其他值为0,字段值为32768,让其他没有收到beacon帧的sta公告无竞争周期
@3在ps-poll(省电-轮询)帧中,第14、15位同时置1,用于从省电模式醒来的sta发送aid(关联标识符)以取得在ap中的缓存帧
-address:有以下几种类型,由帧类型决定使用哪几个地址字段,通常有三个,sa、da和bssid
bssid,基本服务集标识符
da,目的地址
sa,源地址
ra,接收端地址
ta,发送端地址
-sequencecontrol:包含两个子字段,4位的分片编号(fragmentnumber)和12位的顺序编号(sequencenumber)
顺序编号4096的模数,从0开始,每处理一个上层封包就加1
若上层封包分片处理,所有帧分片采用相同顺序编号
对于重传帧,顺序编号不变
-framebody:帧主体也称数据字段(datafield),用于传递上层有效载荷(payload),可为0
-fcs:帧校验序列,采用循环冗余校验(crc)码,计算范围包括mac头中所有字段及帧主体
3、帧主体数据
不同于以太网,802.11的framebody以802.2的逻辑链路控制(llc)来封装不同类型的网络协议
有两种封装方式:rfc1042、802.1h
下图是802.11里的ip封装
mac的修改地址
通用修改
需要根据mac芯片型号联系厂家拿到对应的固件刷写工具,以及mac地址文件,其中mac地址是需要向ieee联盟购买有效段的,并是唯一的,如果出现重复的则会报ip地址重复的错误而导致相同mac地址的计算机网络访问异常。
unix/linux系统下修改mac地址
进入保存mac信息文件
图形界面下alt+ctrl+space→打开命令行终端→
方法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
→显示相关网络数据
其中inetaddr为ip地址,hwaddr是主机的hardwareaddress即mac。
修改mac
方法1、修改mac的方法:在/etc/rc.d/init.d/中的network中加入ifconfigeth0hwetherxx:xx:xx:xx:xx:xx(mac)然后重新启动就会发现网卡地址已经是xxxxxxx了。
方法2、也可以将/sbin/ipconfigeth0hwethermacaddr加入到/etc/rc.local中去。
以太网的mac层
以太网的mac地址:
mac地址又称为硬件地址或者是物理地址,其实是指局域网上的每一台计算机中固化在适配器的rom中的地址。由于计算机的发展,世界上的计算机太多,为了能够标识每一台计算机,目前所采用的mac地址一般是6字节的48位的长度。这里我们可以这样简单的理解,所谓的mac地址,实际上就是适配器地址。
简述一下适配的作用:
适配器实际上就是每台计算机接入到互联网的一个接口,路由器因为要将数据在不同的局域网上面路由,所以路由器一般不止一个接口,就是说路由器一般不止一个硬件地址。
适配器有过滤的功能,它在局域网上每次收到一个mac帧时(局域网上面传输的数据),就检查mac帧中的目的地址,发现如果和自己的地址一样,则拿到该mac帧,然后做其他处理,如果发现和自己的mac地址不一样,则把刚刚拿到的mac帧再次丢到局域网中,以供其他的计算机使用。局域网上面的每一台计算机都是通过这种方式拿到自己需要的数据(mac帧)。
mac帧的格式:
首先看一下以太网v2的mac帧格式(mac格式标准有两个,一个是dixethernetv2标准,一个是ieee的802.3标准)上图中的第一个地段的6个字节放置的是目的地址,第二个字段的6个字节放置的内容是源地址,第三个字段的2个字节放置的内容是类型,用来标识上一层使用的是什么协议,比如0800是ip协议,0806是arp协议,8035是rarp协议,mac层根据这些字段的内容来把数据传递给特定的层去使用。第四个字段是数据字段,它的长度是46–1500字节,如果数据的长度不满46字节,mac帧就会加入一些数据进行填充,那么上层是如何知道数据的长度呢,因为mac帧并没有一个字段用来标识数据的长度,解决这个问题使用了一种曼彻斯特编码,大家可以上网查阅。最后一个字段是4个字节是帧检验序列,使用了crc校验。
这里还需要注意的一个问题是,当我们数据字段的数据长度没有46字节时,上层是如何把多余的由mac帧填充的数据丢掉呢,这里我们的上层协议中有字段长度,会自动的识别,然后把多余的数据丢掉。
mac子层主要功能
mac子层包括dcf和pcf。dcf:distributedcoordinationfunction。pcf:pointcoordinationfunction
1、载波监听(carriersense)
sta有两种方法来判断当前介质是否空闲
-检查phy层,是否有carrier存在
-使用虚拟carrier-sense功能,nav(networkallocationvector)
nav是mac层提供的一种定时器,保存了其他sta使用介质的持续时间
其他sta发送的数据中带有的duration大于所保存的时间时,sta就更新自己的nav
当nav为0并且phy层指示当前介质可用时,sta才能发送数据
2、dcf
dcf是基于csma/ca的接入方法,尽可能避免冲突,可以自动高效地共享介质
dcf提供基本模式和rts/cts模式两种介质访问方式
利用竞争窗口的二进制指数回退机制协调多个sta对共享链路的访问,避免出现因争抢介质而无法通信的情况
其核心思想是利用二进制指数回退机制减轻数据分组的碰撞以及实现发生碰撞后对分组的有限重传控制
sta发送数据帧时,首先检测介质的状态
如果介质空闲且持续一个difs时间(dcfinterframespace)后
-在基本模式下立即发送数据帧
-在rts/cts模式下,发送rts帧
并同时检测有没有发生分组碰撞
如果发生碰撞,sta随机在[0,wi]之间均匀选取一个值random()
øwi被称作竞争窗口,其大小依赖于数据分组重新传输次数
cwmin≤cw≤cwmax
并计算出backofftimer(=random()*slottime)
随后,当sta探测到介质空闲时间等于一个slottime时,计数器减1
而当检测到介质忙时,计数器值保持不变
并在介质空闲时间等于difs时,重新激活延时计数器且sta继续监测介质
直到计数器值减到0时sta才发送mac帧
另外,为了避免某sta长时间占用信道,sta在两次连续的数据帧发送之间也必须进行随机延迟。
3、应答帧
某些帧需要接收sta回应一个应答帧,称为ack帧
ack帧的传输不需要等待backofftimer
而是等待sifs(shortinterframespace)时间
sifs通常比difs少2个slottime
4、隐藏节点问题和rts/cts
rts:requesttosend
cts:cleartosend
由于信号的缘故(距离太远),某些sta之间无法直接通信,无法感知彼此的存在,
若此时同时给处于两者之间的sta发送帧,导致中间sta佷尴尬
因为只有中间sta知道发生了冲突
此时,需要使用rts/cts来解决该问题
sta发送rts帧,预约介质的使用权和要求接收sta保持沉默
接收sta以cts应答,cts帧要求附近的sta保持沉默直到过程结束
然后开始帧的传输过程
rts/cts通常用在高用量的环境下以及传输竞争比较显著的场合
5、帧分片(framefragmentation)
帧分片的作用在于提高无线介质中传输的可靠性
将一个完整帧分为几个更小的帧来分别传输,每个分片帧都需要ack
这样当某个分片帧出现错误时,只需要重新传输该帧即可
然而这也可能增加mac层过载问题(overhead)
注意:
-帧分片只发生在单播帧中
-每个分片帧具有相同的帧序列号和递增的帧编号
6、pcf
pcf作为dcf的补充,是一种可选的介质访问机制
提供了不必通过竞争即可使用介质的服务,为了满足实时业务需求
用于infrastructure模式网络架构中,由ap进行协调
pcf以周期的形式进行帧的传输
每个周期包括一个无竞争阶段和一个竞争阶段
-无竞争阶段(cfp:contention-freeperiod)
-竞争阶段(cp:contentionperiod)
cfp阶段传输实时业务,pcf起作用
cp阶段传输非实时业务,dcf起作用
中国集成电路发展将迎新时机 世界面临的挑战正是中国IC产业的机遇
24寸长城V247液晶显示器拆解评测 性价比最高的24寸LED
聚焦安全与通用领域,国产MCU如何实现突围
节省成本,精准分析:原厂二手X系列信号分析仪3折,限时抢购!
打工人的2.0时代,只需要一副AR眼镜!
mac层的主要功能介绍
噪声传感器的应用场景都有哪些?
中兴通讯实现2.1G NR领域技术突破,为商用化奠定了坚实基础
两分钟学会V20变频器的MODBUS RTU通讯
预测苹果iPhone将在明年破纪录
跑步运动必备:这几款运动蓝牙耳机,助你提高跑步出勤率,别选错了!
通过从引线键合切换到倒装芯片来提高DDR性能
元器件布局的10条规则 如何画出完美的PCB板子?
高性能单声道数模转换器SM5865CM的性能特点及原理
车载MAX20052ATC电源评估
光电液位开关常见的应用场合简介
浅谈投影融合的技术原理及其应用领域
迫于市场压力华为p10可能会迎来降价,与上一代p系列价格
智慧光网的演进与实践
安装压力变送器时需要注意什么