一、MAC 层的硬件地址

在局域网中,主机的硬件地址又称为物理地址,或 MAC 地址。6个字节。

IEEE 的注册管理机构 RA 负责向厂家分配地址字段的前三个字节(即高位 24 位,组织唯一标识符OUI)。
后三个字节(即低位 24 位)由厂家自行指派,称为扩展标识符,必须保证生产出的适配器没有重复地址。

一个地址块可以生成224个不同的地址。
这种 48 位地址称为 MAC-48,它的通用名称是EUI-48。
“MAC地址”实际上就是适配器地址,固化在网卡的ROM中。

第一个字节的最低位I/G(Individual/Group)
0:单个地址
1:组播地址

第一个字节的最低第二位为G/L(Globe/Local)
0:G全球管理,厂商购买的MAC地址
1:L本地管理,不用购买

例:MAC地址 f6-20-e9-8a-00-37
厂商代码:f6-20-e9。先发送f6
第一字节f6=11110110
I/G为0,单个地址,最高位最先发送;G/L为1,本地管理

适配器检查 MAC 地址

+“发往本站的帧”包括以下三种帧:
单播(unicast)帧(一对一),I/G=0
广播(broadcast)帧(一对全体,全1),ff-ff-ff-ff-ff-ff
多播(multicast)帧(一对多),I/G=1
所有适配器都能识别前两种,最后一种一般靠软件识别。

二、 MAC 帧的格式

常用的以太网MAC帧格式有两种标准 :
DIX Ethernet V2 标准
IEEE 的 802.3 标准
最常用的 MAC 帧是以太网 V2 的格式。

类型字段用来标志上一层使用的是什么协议,
以便把收到的 MAC 帧的数据上交给上一层的这个协议。

数据字段的正式名称是 MAC 客户数据字段
最小长度 64 字节-18 字节的首部和尾部 = 数据字段的最小长度

当数据字段的长度小于 46 字节时,
应在数据字段的后面加入整数字节的填充字段,
以保证以太网的 MAC 帧长不小于 64 字节。

在帧的前面插入的 8 字节中的第一个字段共 7 个字节,
是前同步码,用来迅速实现 MAC 帧的比特同步。
第二个字段是帧开始定界符,表示后面的信息就是MAC 帧。

为了达到比特同步,
在传输媒体上实际传送的
要比 MAC 帧还多 8 个字节

三、为什么MAC帧最短长度为512bit(64字节)

CSMA/CD协议的一个要点就是当发送站正在发送时,若检测到冲突则立即终止发送,然后推后一段时间再发送。如果所发送的帧太短,还没来得及检测到最远到来的冲突就已经发送完了,那么就无法进行冲突检测了。结果是:发送失败,但未察觉而不重发。
因此所发送帧的最短长度应当要保证在该帧发送完毕前,必须检测到可能最晚来到的冲突信号。该时间为往返时延2τ,取为51.2us,相当于发送512bit。
数据字段最短长度为46字节=64字节-18字节(目的地址(6)+原地址(6)+协议类型(2)+FCS(4))

四、MAC帧中没有标示帧长度

以太网采用曼彻斯特编码,当发送完一个帧后就不再发送任何码元了,发送方网络适配器的接口上的电压不再变化。
往前数4个字节就是FCS部分。

上层协议如何知道填充字段的长度

当数据字段长度不足46字节时,MAC子层会在数据段后面加入整数个字节的填充字段,以保证MAC帧长度不小于64字节。
那么上层协议如何知道填充字段的长度?
上层使用IP协议时,IP数据报首部有一个“总长度”字段。

五、无效的 MAC 帧

帧的长度不是整数个字节;
用收到的帧检验序列 FCS 查出有差错;
数据字段的长度不在 46 ~ 1500 字节之间。
有效的 MAC 帧长度为 64 ~ 1518 字节之间。
对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧。

六、帧间最小间隔

帧间最小间隔为 9.6 μs,相当于 96 bit 的发送时间(10M以太网)。
一个站在检测到总线开始空闲后,还要等待 9.6μ s 才能再次发送数据。
这样做是为了使刚刚收到数据帧的站的接收缓存来得及清理,做好接收下一帧的准备。

以太网的 MAC 层的更多相关文章

  1. 网络协议 3 - 从物理层到 MAC 层

        在上一篇博文中,我们见证了 IP 地址的诞生,机器一旦有了 IP,就可以在网络的环境里和其他的机器展开沟通了.     今天,我们来认识下 物理层 和 MAC 层.     日常生活中,身为 ...

  2. MAC层作用

    对于无线传感网 MAC,顾名思义,就是介质访问控制,是用来控制无线介质的访问的,由于无线传输是共享空中资源的,必然存在多个无线传感器节点对传输介质的争用,MAC层协议就是用来解决这个问题的,包括冲突的 ...

  3. 802.11 MAC层

    1. 介绍 本文主要介绍了802.11 MAC层 2. 访问机制 CSMA/CA:  Carrier Sense Multiple Access with Collision Avoidance Wi ...

  4. RK3288以太网的mac地址调试笔记【学习笔记】【原创】

    平台信息:内核:linux3.1.0系统:android/android6.0平台:RK3288 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 说明:提供以太网mac ...

  5. 网络协议 3 - 物理层 和 MAC 层

    在上一篇博文中,我们见证了 IP 地址的诞生,机器一旦有了 IP,就可以在网络的环境里和其他的机器展开沟通了.     今天,我们来认识下 物理层 和 MAC 层.     日常生活中,身为 90 后 ...

  6. 5(计算机网络)从物理层到MAC层

    故事就从我的大学宿舍开始讲起吧.作为一个八零后,我要暴露年龄了. 我们宿舍四个人,大一的时候学校不让上网,不给开通网络.但是,宿舍有一个人比较有钱,率先买了一台电脑.那买了电脑干什么呢? 首先,有单机 ...

  7. 第5讲 | 从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?

    第一层(物理层) 水晶头要做交叉线,用的就是所谓的 1-3.2-6 交叉接法. 有一个叫做 Hub 的东西,也就是集线器.这种设备有多个口,可以将宿舍里的多台电脑连接起来.但是,和交换机不同,集线器没 ...

  8. 计算机网络-3-5-以太网MAC层及交换机

    MAC层的硬件地址 在局域网中,硬件地址又称为物理地址或者MAC地址(因为这种地址用在MAC帧中) IEEE 802标准为局域网规定了一种48位(6字节)的全球地址,固化在适配器的ROM中. 如果计算 ...

  9. 网络协议学习笔记(二)物理层到MAC层,交换机和VLAN,ICMP与ping原理

    概述 之前网络学习笔记主要讲解了IP的诞生,或者说整个操作系统的诞生,一旦有了IP,就可以在网络的环境里和其他的机器展开沟通了.现在开始给大家讲解关于网络底层的相关知识. 从物理层到MAC层:如何在宿 ...

随机推荐

  1. rspec 笔记

    rspec的expect方法接收任何对象作为参数,并且返回一个rspec代理对象 叫做 ExpectationTarget. ExpectationTarget存储了传递给expect方法的对象,他响 ...

  2. 计算2..n的素数

    def check(2) , do: true def check(n) when n >2 do b = for x <- (Enum.into 2..n-1,[]),do: x if ...

  3. 【LESS系列】内置函数说明

    本文转自 http://www.cnblogs.com/zfc2201/p/3493335.html escape(@string); // 通过 URL-encoding 编码字符串 e(@stri ...

  4. 关系型数据库MySQL多实例

    简介 MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司.在2008年1月16号被Sun公司收购后Sun公司又被oracle公司收购.目前MySQL被广泛地应用在I ...

  5. JAVA泛型——逆变

    在上篇<JAVA泛型——协变>这篇文章中遗留以下问题——协变不能解决将子类型添加到父类型的泛型列表中.本篇将用逆变来解决这个问题. 实验准备 我们首先增加以下方法,见代码清单1所示. 代码 ...

  6. LINQ的查询标准操作汇总

    记录LINQ的查询标准操作

  7. .net core mvc 类库读取配置文件

      appsettings.json,给类库项目引入 Microsoft.Extensions.Configuration 和 Microsoft.Extensions.Configuration.J ...

  8. [PHP] PHP数组的实现哈希表(HashTable)结构

    PHP中使用最为频繁的数据类型非字符串和数组莫属,使用哈希表实现的PHP数组.1.数据结构:保存哈希表容器,保存数据的容器2.哈希函数实现:需要尽可能的将不同的key映射到不同的槽(bucket)中, ...

  9. 实例-sprintf() 函数详解-输出格式转换函数

    Part1:实例 $filterfile = basename(PHP_SELF, '.php'); if (isset($_GET['uselastfilter']) && isse ...

  10. spring boot2 使用log4j2

    spring boot默认使用的是logback,看到好多地方说logback比log4j耗性能,具体么我也没试过,不过个人还是log4j用得更多. 先看pom依赖 <dependency> ...