Lucas0413

学习笔记

以太网控制器(MAC)

0
阅读(1131)

一、以太网的基本原理

        我们一般所说的以太网指的是由IEEE802.3规范制定的局域网协议(LAN,Local Area Network)中的CSMA/CD协议。科普一下CSMA/CD协议原理。

        CSMA/CD协议(Carrier sense multiple Access with Collision Detection),意思是说:带有检测冲突的载波侦听多路存取协议。故协议的重点就是:载波侦听、多点接入、冲突检测、、。基本原理是,每个节点共享网络传输信道,在每个站要发送数据之前,都会检测信道是否为空闲状态。如果空闲,则发送,否则就等待;在发送出信息后,则对冲突进行检测,当发现冲突时,则取消发送。

        载波侦听:在发送数据前要先确认总线上有没有数据传输。若有数据传输(总线忙),则不发送数据;若无数据传输(总线空),则立即发送准备好的数据。

        多点接入:计算机以多点接入的方式连接在同一条总线上。

        冲突检测:边发送边监听,判断是否发生冲突(同一时刻,有没有其他节点也在发送信息帧)。当冲突之后还继续发送32bits或48bits的干扰信号,让所有用户知道发生了冲突。

        目前以太网可实现的传输速率有:

            10Mbit/s:10Base-T以太网

            100Mbit/s:快速以太网

            1000Mbit/s:千兆位以太网802.3z

            10 千兆位以太网:IEEE802.2ae

        以太网协议的逻辑关系遵循OSI参考模型

image.png

          MAC子层的两个基本职能:

                数据封装:包括传输之前的帧集合和接收中、接收后的帧解析/差错监控;

                媒体访问控制:包括帧传输初始化和传输失效恢复。


二、MAC子层

        MAC子层在上层协议和以太网网络之间传输和接收数据,主要功能是为了确保以太网上每一帧数据的传输都遵循IEEE802.3规范所规定的介质存取规则。

        1.  基本帧数据格式

            IEEE802.3规范为实现MAC定义了一套基本的帧数据格式,如下图所示:

image.png

        各个字段的含义及规定如下:

  • Preamble(PRE):报头,字段中'1'和'0'交替使用,接收方通过该字段知道导入帧,并且该字段提供了同步接收物理层帧接收和导入数据流的方法。

  • Start-of-frame delimiter(SFD):帧起始分隔符,字段中'1'和'0'交替使用,结尾是两个连续的'1',即10101011,表示下一位是目的地址的第一个字节的第一位。

  • Destination Address(DA):目的地址,用于识别需要接收帧的目的地。

  • Source Address(SA):源地址,用于识别发送帧的源地址。

  • Length/Type:长度/类型,值小于1500(0x05DC),表示长度字段,IEEE802.3帧格式;值大于1500(0x05DC),表示以太网类型字段,Ethernet II 帧格式。

  • Data:数据,是一组n(46≤n≤1500)字节的任意值序列。

  • Pad:填充,当Data的数据不足46字节时,缺少的字节需要补上。

  • Frame check sequence(FCS):帧数据校验序列,该序列包括32位的循环冗余校验(CRC)值,由发送方生成,通过接收方进行计算以校验帧是否被破坏。

      

          2.  帧传输

            MAC层从上层协议接收到发送帧数据的请求,首先按照下面的次序将数据和地址信息保存到MAC层的帧数据缓冲区中。

  • 插入报头和真起始分隔符

  • 插入目的地址和源地址

  • 统计来自上层协议数据的数量,插入数量值

  • 插入来自上层协议的数据,如果数据量小于46字节,则插入填充补足

  • 根据目的地址、源地址、长度/类型和数据产生CRC校验序列,并插入校验序列

  •     MAC发送帧数据的两种方式:

            半双工:一个时刻内只能进行发送或者接受。IEEE802.3规范规定所有的以太网MAC都要支持半双工方式。

            全双工:一个时钟内发送和接收可以同时进行。


            3.  帧接收

              帧接收过程与发送过程是相反的。

  • 检查帧数据中的目的地址和当前地址是否相符

  • 检查接收到的帧数据中的数据长度、CRC校验序列和实际的数据长度、CRC校验序列是否相符

  • 若都符合,则将数据交给上层协议进行解析,MAC层的传输任务完成。