以太网的 MAC 层
一、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 层的更多相关文章
- 网络协议 3 - 从物理层到 MAC 层
在上一篇博文中,我们见证了 IP 地址的诞生,机器一旦有了 IP,就可以在网络的环境里和其他的机器展开沟通了. 今天,我们来认识下 物理层 和 MAC 层. 日常生活中,身为 ...
- MAC层作用
对于无线传感网 MAC,顾名思义,就是介质访问控制,是用来控制无线介质的访问的,由于无线传输是共享空中资源的,必然存在多个无线传感器节点对传输介质的争用,MAC层协议就是用来解决这个问题的,包括冲突的 ...
- 802.11 MAC层
1. 介绍 本文主要介绍了802.11 MAC层 2. 访问机制 CSMA/CA: Carrier Sense Multiple Access with Collision Avoidance Wi ...
- RK3288以太网的mac地址调试笔记【学习笔记】【原创】
平台信息:内核:linux3.1.0系统:android/android6.0平台:RK3288 作者:庄泽彬(欢迎转载,请注明作者) 邮箱:2760715357@qq.com 说明:提供以太网mac ...
- 网络协议 3 - 物理层 和 MAC 层
在上一篇博文中,我们见证了 IP 地址的诞生,机器一旦有了 IP,就可以在网络的环境里和其他的机器展开沟通了. 今天,我们来认识下 物理层 和 MAC 层. 日常生活中,身为 90 后 ...
- 5(计算机网络)从物理层到MAC层
故事就从我的大学宿舍开始讲起吧.作为一个八零后,我要暴露年龄了. 我们宿舍四个人,大一的时候学校不让上网,不给开通网络.但是,宿舍有一个人比较有钱,率先买了一台电脑.那买了电脑干什么呢? 首先,有单机 ...
- 第5讲 | 从物理层到MAC层:如何在宿舍里自己组网玩联机游戏?
第一层(物理层) 水晶头要做交叉线,用的就是所谓的 1-3.2-6 交叉接法. 有一个叫做 Hub 的东西,也就是集线器.这种设备有多个口,可以将宿舍里的多台电脑连接起来.但是,和交换机不同,集线器没 ...
- 计算机网络-3-5-以太网MAC层及交换机
MAC层的硬件地址 在局域网中,硬件地址又称为物理地址或者MAC地址(因为这种地址用在MAC帧中) IEEE 802标准为局域网规定了一种48位(6字节)的全球地址,固化在适配器的ROM中. 如果计算 ...
- 网络协议学习笔记(二)物理层到MAC层,交换机和VLAN,ICMP与ping原理
概述 之前网络学习笔记主要讲解了IP的诞生,或者说整个操作系统的诞生,一旦有了IP,就可以在网络的环境里和其他的机器展开沟通了.现在开始给大家讲解关于网络底层的相关知识. 从物理层到MAC层:如何在宿 ...
随机推荐
- JavaScript数据结构-6.优先队列
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- web开发之缓存
以数据为驱动的web站点,当访问量增大后,由于频繁的从DB中读取数据,使得DB服务器的压力大增,从而影响系统的性能.为了缓解这种来自于大访问量的频繁读取DB的压力,我们可以把一些数据缓存起来,当请求过 ...
- 通过开机广播(broadcast)通知应用
1. 概念 开机的时候,系统会发送一则广播,所有有标记的应用(通过广播接收者)都会获取得到,然后可以通过广播接收者去处理一些事情,比如启动该应用,或者处理数据: 代码:https://github.c ...
- 文件流FileStram类
本节课主要学习三个内容: 创建FileStram流 读取流 写入流 文件流FileStram类,是用来实现对文件的读取和写入.FileStram是操作字节的字节数组,当提供向文件读取和写入字节的方法时 ...
- 一、cent OS安装配置JDK
到oracle官网下载JDKhttp://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 在cent OS ...
- spring AOP为什么配置了没有效果?
spring Aop的配置一定要配置在springmvc配置文件中 springMVC.xml 1 <!-- AOP 注解方式 :定义Aspect --> <!-- ...
- Core.Java.Volume.I.Fundamentals.10th.Edition 14.5.8 Volatile域 中文版 章节勘误
今天重扫了corejava 14 并发的一章,在谈到volatile域代替synchronized 应用于并发更新时,看到如下内容,并发更新可用内部锁的方式但会带来阻塞问题,可用volatile域替代 ...
- 浏览器同源策略与ajax跨域方法汇总
原文 什么是同源策略 如果你进行过前端开发,肯定或多或少会听说过.接触过所谓的同源策略.那么什么是同源策略呢? 要了解同源策略,首先得理解“源”.在这个语境下,源(origin)其实就是指的URL.所 ...
- Generator函数自执行
Generator函数实现 function* gen(x){ var y = yield x + 2; return y } //1.调用g函数会返回一个内部的指针 var g = gen(1); ...
- LinkedList实现队列存储结构
package com.tercher.demo; import java.util.LinkedList; public class Queue { //用LinkedList 实现队列的数据存储结 ...