mac
ip https://blog.csdn.net/Wu000999/article/details/88617237
在计算机网络中,当主机通过适配器接收到一个MAC帧的时候,会先用硬件检测MAC帧中的目的地址。如果是发往本站的帧则收下,若否则丢失。一般,接收到的MAC帧有以下三种:
单播帧(一对一),即收到的帧的MAC地址与本站的硬件地址相同。
广播帧(一对全体),即发送给本局域网上所有站点的帧(全1地址)。
多播帧(一对多),即发送给本局域网上一部分站点的帧。
MAC帧的格式
我们以以太网V2标准的MAC帧做介绍,由上图可知,MAC帧主要由5个字段组成,前两个字段分别为6个字节的目的地址和6个字节的源地址。第三个字段是占2个字节的类型字段,该字段用于表明后面数据字段(来自上层)使用的是什么协议。第四个字段则是数据字段,其长度在46到1500个字节之间。最后一个字段是帧检验序列FCS(使用CRC校验)。
可以看出,在MAC帧中,并不包含帧的长度说明,那么问题来了,接收端是如何知道什么时候可以停止接收数据呢?这里涉及到曼彻斯特编码的概念。
我们知道,在以太网中,发送的数据都是使用二进制的基带数字信号,也就是高低电平表示的。一般,高电平代表“1”,低电平代表“0”。但是,若是使用这种信号就会遇到一个问题,就是当数据中出现一连串“1”或“0”的时候,接收端无法从接收的比特流中提取同步信号。而采用曼彻斯特编码的方式则可以避免这个问题。
我们可以看上图,在曼彻斯特编码中,我们用前一个间隔低电压,后一个间隔高电压来代表码元1,而前一个间隔高电压,后一个间隔低电压代表码元0。采用这种编码方式的优点,就是不管发送端发送什么样的数据,接收端都可以利用这种电压的转换把位同步信号提取出来。但是,从图中可以很明显地看出,这种编码方式也会导致数据传输占用的频带宽度直接增加了一倍。
这里回到我们前面的问题了,接收端是如何知道什么时候可以停止接收数据了?答案就是曼彻斯特编码。采用曼彻斯特编码方式传输的数据,当接收端适配器没有再检测到有电平变换了的时候,就可以判定此时这帧以太网帧传输已完毕。在这个位置往前移四个字节,就能确认数据帧的结束位置。
我们在上面那张介绍MAC帧格式的图中可以看到,MAC帧最终在物理层中传输的时候,前端会多出8个字节的数据。这是因为当一个接收站在刚开始接收数据时,由于适配器的时钟与到达的比特流尚未达成不同,因此MAC帧前若干位无法接收,从而导致数据的丢失。因此,为了防止这种情况导致的数据丢失,从MAC子层向下传到物理层时在帧的前面插入8个字节(由硬件生成)。这8个字节由两个字段构成,第一个字段是7个字节的前同步码(1和0交替码),主要作用是使接收端的适配器在接收MAC帧前能迅速调整其时钟频率,从而可以正常接收数据。第二个字段是帧开始定界符,定义为10101011,它的作用同前同步码一样,最后两个11是为了告诉接收端适配器MAC帧的数据即将到来,做好接收准备。(注:MAC帧的FCS字段检验范围不包括前同步码和帧开始定界符)
在以太网上传送数据时是以帧为单位传送。以太网在传送帧时,帧与帧之间存在一定的间隙。因此,接收端只需要找到帧开始定界符,后续比特流就可以知道属于同一个MAC帧。因此以太网不需要使用帧结束定界符,也不需要使用字节插入来保证透明传输。
通常我们将出现以下几种情况的定位为无效帧:
帧的长度不是整数个字节;
用收到的帧检验序列FCS查出有差错;
收到的帧的MAC客户数据字段的长度不在46~1500字节之间。考虑到MAC帧的首部和尾部的长度共有18字节,可以得出有效的MAC帧长度为64~1518字节之间。
对于检查出来的无效帧直接就丢弃掉,以太网不负责重传丢弃的帧。