当前位置: 首页 > news >正文

【以太网硬件十四】以太网的MAC是干什么的?

        媒体访问控制MAC子层是OSI参考模型第二层数据链路层的一个子层,MAC子层和物理层由IEEE 802.3规范定义,主要功能如下:

        a) 数据封装(传输和接收)

                1)成帧(帧边界划分、帧同步)

                2)寻址(源地址和目标地址的处理)

                3)错误检测(物理介质传输错误的检测:CRC)

        b) 媒体访问管理

                1)介质分配(碰撞避免)

                2)争用解决(冲突处理)

1 数据封装

1.1 MAC帧结构

        先来看一下MAC的第一个功能:成帧。以太网上使用两种标准帧格式。第一种是上世纪80年代初提出的DIX v2格式,即Ethernet II帧格式。Ethernet II后来被IEEE 802标准接纳,并写进了IEEE 802.3x-1997的3.2.6节。第二种是1983年提出的IEEE 802.3格式。这两种格式的主要区别在于,Ethernet II格式中包含一个Type字段,标识以太帧处理完成之后将被发送到哪个上层协议进行处理。IEEE802.3格式中,同样的位置是长度字段。

        不同的Type字段值可以用来区别这两种帧的类型,当Type字段值小于等于1500(或者十六进制的0x05DC)时,帧使用的是IEEE 802.3格式。当Type字段值大于等于1536 (或者十六进制的0x0600)时,帧使用的是Ethernet II格式。以太网中大多数的数据帧使用的是Ethernet II格式。目前版本的802.3已经将当Type字段值大于等于1536列入到了标准帧格式中。

        802.3规定的MAC帧格式如下图:

1.1.1 前导码

        前导码共7个字节,其作用是为了给物理层电路达到稳定状态(即时钟恢复PLL锁定)留出时间,最终要与接收数据包时序同步。如果在传输前导码或开始帧定界符时,冲突检测变量变为true,剩余部分的前导码和开始定界符也应继续发送完。前导码的码型:

10101010 10101010 10101010 10101010 10101010 10101010 10101010

        比特位按从左到右的顺序传输。此码型为周期波形,便于实现位同步。应该注意的是,前导以“0”结尾。

1.1.2 定界符SPD

        紧跟着前导码的是定界符,表示一帧的开始,其码型为:10101011。

1.1.3 地址域

        每个MAC帧都包含两个地址域:源地址和目的地址。地址域有如下特点:

        a) 每个地址字段长度为48位。

        b) 第一位(LSB)在目标地址字段中用作地址类型指定位,将目标地址识别为个人地址或组地址。如果该位为0,则表明地址字段表示的是单个地址。如果该位为1,则表明地址字段表示一个组地址,该组地址表示所有连接到LAN的站点。在源地址字段中,保留第一位并将其设置为0。

        c) 第二位用于区分本地或全局管理的地址。对于全局管理(或U,通用)地址,位设置为0。如果要在本地分配地址,则该位应设置为1。注意,对于广播地址,该位也是1。全局地址由3字节制造商标识和3字节设备标识组成。

        d) 每个地址字段的每个八位字节应首先传输最低有效位。

1.1.4 长度/类型

        这两个字节具有两种含义之一,具体取决于其数值。

        a) 如果该字段的值小于或等于1500十进制(05DC十六进制),则长度/类型字段表示基本帧的后续MAC客户端数据字段中包含的字节数。

        b) 如果此字段的值大于或等于1536十进制(0600十六进制),则长度/类型字段表示MAC客户端协议的以太网类型。16’h0800代表IP 报文;16’h0806 代表ARP请求/应答报文;16’h8035代表RARP请求/应答报文。

1.1.5 数据及填充

        此为网络层传递给数据链路层的数据包,其长度为 46-1500 Bytes。协议规定MAC最小报文64字节(DA(6)+SD(6)+LENTH/TYPE(2)+FCS(4)+DATA and PAD(46)=64),因此当有效数据量(Length)小于46字节时需要用0对数据进行填充,保证数据和填充字段总和不低于46字节,注意,填充0并不会改变Length字段值。

        如下图所示,每层数据向下传输时都会进行封装,帧有效数据来源于上级网络层。

1.1.6 帧校验FCS

        FCS字段为CRC校验值,共4个字节。在MAC发送时,以preamble、SFD、DA、SA、Length/Type、DATA and Pading作为输入数据进行CRC计算,将计算校验结果填入此字段中,然后发送出去。在MAC接收时,将收到数据除FCS字段以外部分做CRC校验,将校验结果与原数据FCS字段值比较,结果相同表示帧有效,结果不同接收方认为发生了错误,进而将帧丢弃。

1.1.7 以太网的最小帧长64字节的来由

        CSMA/CD冲突避免的方法:先听后发、边听边发、随机延迟后重发。一旦发生冲突,必须让每台主机都能检测到。关于最小发送间隙和最小帧长的规定也是为了避免冲突。

        考虑如下的极限情况,主机发送的帧很小,而两台冲突主机相距很远。在主机A发送的帧传输到B的前一刻,B开始发送帧。这样,当A的帧到达B时,B检测到冲突,于是发送冲突信号。假如在B的冲突信号传输到A之前,A的帧已经发送完毕,那么A将检测不到冲突而误认为已发送成功。由于信号传播是有时延的,因此检测冲突也需要一定的时间。这也是为什么必须有个最小帧长的限制。

        这里可以把从A到B的传输时间设为T,在极限的情况下A要在2T的时间里才可以检测到有冲突的存在,也就是说A发送帧的持续时长至少要大于2T。

        根据如下两点常识:

        1、在理想情况下,电磁波在1KM电缆的传输时延约为5us。

        2、在10Mbps的以太网中有个5-4-3的问题:10 Mb/s以太网最多只能有5个网段,4个转发器,而其中只允许3个网段有设备,其他两个只是传输距离的延长。按照标准,10Mbps以太网采用中继器时,连接最大长度为2500米。2500米电磁波传输需要2500/1000*5=12.5us,如上假设的A收到冲突信号至少需要12.5us * 2=25us。

        那么在理想的情况下,A发出的持续帧时长至少为25us,但是事实上并非如此简单,考虑到端到端的各段时延,再加上其他的许多因素,如可能存在的转发器所增加的时延等等,以太网取51.2us为争用期,也就是时隙。

        对于10Mbps以太网来说,10Mb/s*51.2us=512bit,所以一般说的512bit时隙长度就是这样来的,这个长度为512/8=64字节。以太网在发送数据时,如果在前面64字节没有发生冲突的话,那么后续的数据就不会发生冲突,以太网就认为这个数据的发送是成功的。

1.1.8 千兆以太网的需要使用载波延展的原因

以太网的最小帧长,是因为使用CSMA/CD的原因;对于1000Mb/s的吉比特以太网,MAC层有两种选择,要么保留CSMA/CD,要么不用它。若保留CSMA/CD协议,必须面临碰撞检测问题,这就要再一次减小网络的最大有效传输距离到25米。当然您可以不缩短网络的距离,而是增加一个帧的程度,就如我们开始分析100Mb/s以太网那样,让一个帧持续足够长的时间。但因为上层来的数据没有这么多,所以就需要在MAC层进行一些无用数据的填充来满足这个要求。最终定义的是千兆以太网最小包长为512字节,于是要在标准以太网帧后增加EXTENSION字段,此字段为任意数据填充。

2 访问控制

        MAC媒体访问控制,顾名思义,就是控制如何访问媒体的意思,也就是通过CSMA/CD控制。在发送帧时,需要确认当前电缆上是否有其他工作站正在发送帧,这称为载波检测,载波检测的信息产生于物理层,在该信息的基础上,MAC层决定是否发送帧。

        一旦开始发送帧,就要开始进行冲突检测,在线路上如果发生了冲突,则物理层将向MAC发送检测到冲突的信号,MAC子层随机停止发送帧。然后开始退避运算,一段随机时间后再次尝试发送帧(同样也要在载波侦听之后),允许重复发送16次。

        发生冲突时,需要经过时隙(51.2us)的整数倍时间后才能再次尝试发送,令时隙为S,再次发送需要等待的时间为:T=S*n,n为0<=n<=2^K(K=min(m,10),m为冲突次数)范围所指定的随机整数。这样,随着冲突次数的增加,将增长等待再次发送的时间,同时再次发生冲突的概率也已指数函数降低。

        除了CSMA/CD控制外,MAC还进行如下操作:在发送端,接收网络层的数据,再将长度/类型字段、源地址、目的地址字段添加进包头中,然后计算CRC,随后在CSMA/CD控制下发送到物理层中。在接收端,将所接收到的进行CRC计算,如果出错则丢弃,并且检查地址字段和长度/类型字段,判断是否为本地的帧,然后只提取目的地址为本机地址的本地帧,在根据类型字段确定上层协议。

        另外说明:CSMA/CD是在10M以太网半双工时提出的冲突解决方案,因为最开始以太网实在同轴电缆上传输的,只有一根线芯,必然需要有冲突检测机制。随着技术的发展,如今的全双工设备并不需要再使用此技术,如万兆以太网只支持全双工,故标准中MAC子层不再有CSMA/CD这一功能,而千兆以太网支持自协商,为了兼容老设备,如集线器,标准中MAC子层还保留CSMA/CD功能定义。

相关文章:

  • RocketMQ 消费者Rebalance算法 解析——图解、源码级解析
  • 【网络安全】内网杀器之Cobalt Strike
  • 法国1油井反杀苏军2油井经典案例分析
  • 【一年总结】我的大三
  • 【TS系列】TypeScript进阶(三)
  • 动态内存管理
  • Linux05开机/重启/用户登录注销
  • MySQL索引-2聚集索引探讨
  • 【node.js从入门到精通】模块化+npm包详解
  • Android 面试需要哪些准备?
  • Vue进阶--render函数和jsx的使用
  • 嵌入式 Linux 入门(十、Linux 下的 C 编程)
  • Spring boot 使用QQ邮箱进行一个验证登入
  • <Linux系统复习>命令行参数和环境变量
  • Java框架详解1——Spring的设计思想
  • ES6之路之模块详解
  • java8 Stream Pipelines 浅析
  • Laravel Telescope:优雅的应用调试工具
  • Redis 中的布隆过滤器
  • 阿里研究院入选中国企业智库系统影响力榜
  • 爬虫模拟登陆 SegmentFault
  • 排序算法学习笔记
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 区块链共识机制优缺点对比都是什么
  • 全栈开发——Linux
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 算法系列——算法入门之递归分而治之思想的实现
  • 小程序 setData 学问多
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • # 达梦数据库知识点
  • # 计算机视觉入门
  • #QT项目实战(天气预报)
  • $$$$GB2312-80区位编码表$$$$
  • (10)STL算法之搜索(二) 二分查找
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十八)SpringBoot之发送QQ邮件
  • (转)四层和七层负载均衡的区别
  • .htaccess配置重写url引擎
  • .mysql secret在哪_MySQL如何使用索引
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .net中生成excel后调整宽度
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • :“Failed to access IIS metabase”解决方法
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @private @protected @public
  • [ NOI 2001 ] 食物链
  • [20180224]expdp query 写法问题.txt