• 010 媒体访问控制(MAC,Media Access Control)


    一,MAC

    MAC是媒体访问控制器。以太网MAC由IEEE-802.3以太网标准定义。它实现了数据链路层。最新的MAC同时支持10/100/1000Mbps速率。通常情况下,它实现MII/GMII/RGMII接口,来同行业标准PHY器件实现接口。

    MAC由硬件控制器及MAC通信协议构成。该协议位于OSI七层协议中数据链路层的下半部分,它主要负责与物理层进行数据交接,如是否可以发送数据,发送的数据是否正确,对数据流进行控制等。

    它自动对来自上层的数据包加上一些控制信号,交给物理层。接收方得到正常数据时,自动去除 MAC 控制信号,把该数据包交给上层。 

    。MAC硬件框图如下图所示:

                             

    在发送数据的时候,MAC协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC协议首先判断输入的信息并是否发生传输错误,如果没有错误,则去掉控制信息发送至LLC(逻辑链路控制)层。该层协议是以太网MAC由IEEE-802. 3以太网标准定义。一般以太网MAC芯片的一端连接PCI总线,另一端连接PHY芯片上通过MII接口连接。

    扩展

           以太网数据链路层其实包含MAC(介质访问控制)子层和LLC(逻辑链路控制)子层。一块以太网卡MAC芯片的作用不但要实现MAC子层和LLC子层的功能,还要提供符合规范的PCI界面以实现和主机的数据交换。
      MAC从PCI总线收到IP数据包(或者其他网络层协议的数据包)后,将之拆分并重新打包成最大1518Byte、最小64Byte的帧。这个帧里面包括了目标MAC地址、自己的源MAC地址和数据包里面的协议类型(比如IP数据包的类型用80表示,最后还有一个DWORD(4Byte)的CRC码。
      可是目标的MAC地址是哪里来的呢?这牵扯到一个ARP协议(介乎于网络层和数据链路层的一个协议)。第一次传送某个目的IP地址的数据的时候,先会发出一个ARP包,其MAC的目标地址是广播地址,里面说到:“谁是xxx.xxx.xxx.xxx这个IP地址的主人?”因为是广播包,所有这个局域网的主机都收到了这个ARP请求。收到请求的主机将这个IP地址和自己的相比较,如果不相同就不予理会,如果相同就发出ARP响应包。这个IP地址的主机收到这个ARP请求包后回复的ARP响应里说到:“我是这个IP地址的主人”。这个包里面就包括了他的MAC地址。以后的给这个IP地址的帧的目标MAC地址就被确定了。(其它的协议如IPX/SPX也有相应的协议完成这些操作)
      IP地址和MAC地址之间的关联关系保存在主机系统里面,叫做ARP表。由驱动程序和操作系统完成。在Microsoft的系统里面可以用arp-a 的命令查看ARP表。收到数据帧的时候也是一样,做完CRC校验以后,如果没有CRC效验错误,就把帧头去掉,把数据包拿出来通过标准的接口传递给驱动和上层的协议栈。最终正确的达到我们的应用程序。

    这里还需要理解一个重要概念就是MAC地址,下面会详细介绍相关知识。

    二、MAC数据包

     MAC 数据包由前导字段、帧起始定界符、目标地址、源地址、数据包类型、数据域、填充域、校验和域组成。

    前导字段(7Byte),也称报头,这是一段方波,用于使收发节点的时钟同步。内容为连续 7 个字节的 0x55。字段和帧起始定界符在 MAC 收到数据包后会自动过滤掉。

    帧起始定界符(SFD1Byte): 用于区分前导段与数据段的,内容为 0xD5

    MAC 地址(6Byte)MAC 地址由 48 位数字组成,它是网卡的物理地址,在以太网传输的最底层,就是根据 MAC 地址来收发数据的。部分 MAC 地址用于广播和多播,在同一个网络里不能有两个相同的 MAC 地址。 PC 的网卡在出厂时已经设 置好了 MAC 地址,但也可以通过一些软件来进行修改,在嵌入式的以太网控制器中可由程序进行配置。数据包中的 DA 是目标地址, SA 是源地址。

    数据包类型(2Byte):本区域可以用来描述本 MAC 数据包是属于 TCP/IP 协议层的IP 包、 ARP 包还是 SNMP 包,也可以用来描述本 MAC 数据包数据段的长度。如果该值被设置大于 0x0600,不用于长度描述,而是用于类型描述功能,表示与以太网帧相关的 MAC 客户端协议的种类。

    数据段(46 - 1500Byte):数据段是 MAC 包的核心内容,它包含的数据来自 MAC 上层。其长度可以从 0~1500 字节间变化。

    填充域:由于协议要求整个 MAC 数据包的长度至少为 64 字节(接收到的数据包如果少于 64 字节会被认为发生冲突,数据包被自动丢弃),当数据段的字节少于 46字节时,在填充域会自动填上无效数据,以使数据包符合长度要求。

    校验和域(4Byte)MAC 数据包的尾部是校验和域,它保存了 CRC 校验序列,用于检错。

    以上是标准的 MAC 数据包, IEEE 802.3 同时还规定了扩展的 MAC 数据包,它是在标准的 MAC 数据包的 SA 和数据包类型之间添加 4 个字节的 QTag 缀字段,用于获取标志的 MAC 帧。

    2 个字节固定为 0x8100,用于识别 QTag前缀的存在;后两个字节内容分别为 3 个位的用户优先级、 1 个位的标准格式指示符(CFI)和一个 12 位的 VLAN 标识符。

    三、MAC 地址

    MAC 地址用于识别数据链路中互连的节点(如图 3.4),以太网或 FUDI 中,根据IEEE802.3的规范使用 MAC 地址。其他诸如无线 LAN ( IEEE802.lla/b/g/n等) 、 蓝牙等设备中也是用相同规格的 MAC 地址。

    图8‑5通过MAC地址判断目标地址

    在总线型与环路型的网络中,先暂时获取所有目标站的帧,然后再通MAC寻址如果是发给自已的就接收,如果不是就丢弃(在令牌环的这种情况下,依次转发给下一个站)。

    MAC 地址长 48 比特,结构如图XX所示。 在使用网卡 ( NIC ) 的情况下,MAC 地址一般会被烧人到 ROM 中。因此,任何一个网卡的 MAC 地址都是唯一。

    图8‑6 IEEE802.3 规范的 MAC地址格式

    MAC 地址中 3 ~ 24 位 ( 比特位) 表示厂商识別码, 每个 NIC 厂商都有特定唯一的识别数宇。 25 ~ 48 位是厂商内部为识別每个网卡而用。 因此. 可以保证全世界不会有相同MAC 地址的网卡。

    IEEE802.3 制定 MAC 地址规范时没有限定数据链路的类型,即不论哪种数据链路的网络 (以太网 、 FDD1 , ATM 、 无线 LAN 、 蓝牙等), 都不会有相同的 MAC地址出现。

    MAC 地址是不是一定是唯一的?

    在全世界,MAC 地址也并不总是唯一的。实际上,即使 MAC 地址相同,只要不是同属一个数据链路就不会出现问题。

    例如,人们可以在自己的网卡上自由设置自己的 MAC 地址。 再例如,一台主机上如果启动多个虚拟机,由于没有硬件的网卡只能由虚拟软件自己设定 MAC 地址给多个虚拟网卡,这时就很难保证所生成的 MAC 地址是独一无二的了。

    但是,无论哪个协议成员通信设备,设计前提都是 MAC 地址的唯一性。这也可以说是网络世界的基本准则。

    四、参考资料

    1、https://mp.weixin.qq.com/s/hZ4VhLKv7FTOJnzg6oAKUg

    2、https://blog.csdn.net/zcshoucsdn/article/details/80090802#comments

  • 相关阅读:
    使用Fiddler抓取手机APP数据包--360WIFI
    mysql 查询数据库表信息,字段信息
    jQuery动态移除和绑定事件
    Topshelf+Quatz.Net的简单使用
    教你花30分钟时间搭建一个个人博客
    泛型接口的抗变和协变
    Action<T>和Func<T>
    DateTime和DateTimeOffset的区别
    Expression<Func<TObject, bool>>与Func<TObject, bool>的区别
    C#学习笔记(1) --简叙.net体系结构
  • 原文地址:https://www.cnblogs.com/linford/p/15129703.html
Copyright © 2020-2023  润新知