计算机网络3——数据链路层3以太网的MAC层

文章目录

  • 一、MAC 层的硬件地址
    • 1、介绍
    • 2、注意点
    • 3、定制标准
  • 二、MAC 帧的格式
    • 1、结构
    • 2、工作原理
    • 3、其他

一、MAC 层的硬件地址

1、介绍

在局域网中,硬件地址又称为物理地址或 MAC地址(因为这种地址用在MAC帧中)。

大家知道,在所有计算机系统的设计中,标识系统(identification system)"都是一个核心问题。在标识系统中,地址就是识别某个系统的一个非常重要的标识符。在讨论地址问题时,很多人常常引用著名文献ISHOC78]给出的如下定义:

“名字指出我们所要寻找的那个资源,地址指出那个资源在何处,路由告诉我们如何到达该处。”

2、注意点

这个非形式的定义固然很简单,但有时却不够准确。严格地讲,名字应当与系统的所在地无关。这就像我们每一个人的名字一样,不随我们所处的地点而改变。为此IEEE 802标准为局域网规定了一种 48位的全球地址(一般都简称为“地址”),这就是局域网上的每一台计算机中固化在适配器的 ROM 中的地址。因此,请特别注意下面两点:

  • 假定连接在局域网上的一台计算机的适配器坏了而我们更换了一个新的适配器,那么这台计算机的局域网的“地址”也就改变了,虽然这台计算机的地理位置一点也没有变化所接入的局域网也没有任何改变。
  • 假定我们把位于南京的某局域网上的一台笔记本电脑携带到北京,并连接在北京的某局域网上。虽然这台电脑的地理位置改变了,但只要电脑中的适配器不变,那么该电脑在北京的局域网中的“地址”仍然和它在南京的局域网中的“地址”一样。

由此可见,局域网上的某台主机的“地址”并不指明这台主机位于什么地方。因此,严格地讲,局域网的“地址”应当是每一个站的“名字”或标识符[PERLO0]。不过,计算机的名字通常都是比较适合人记忆的不太长的字符串,而这种48位二进制的“地址”却很不像一般计算机的名字。但现在人们还是习惯于把这种 48 位的“名字”称为“地址”。本书也采用这种习惯用法,尽管这种说法并不严格。

请注意,如果连接在局域网上的主机或路由器安装有多个适配器,那么这样的主机或路由器就有多个“地址”。实际上,这种48位“地址”应当是某个接口的标识符。

3、定制标准

在制定局域网的地址标准时,首先遇到的问题就是应当用多少位来表示一个网络的地址字段。为了减少不必要的开销,地址字段的长度应当尽可能地短些。起初人们觉得用两个字节(共16位)表示地址就够了,因为这一共可表示6万多个地址。但是,由于局域网的迅速发展,而处在不同地点的局域网之间又经常需要交换信息,这就希望在各地的局域网中的站具有互不相同的物理地址。为了使用户在买到适配器并把机器连到局域网后马上就能工作,而不需要等待网络管理员给他先分配一个地址,IEEE802标准规定MAC地址字段可采用6字节(48位)或2字节(16位)这两种中的一种。6字节地址字段对局部范围内使用的局域网的确是太长了,但是由于6字节的地址字段可使全世界所有的局域网适配器都具有不相同的地址,因此现在的局域网适配器实际上使用的都是6字节MAC地址。

现在 IEEE 的注册管理机构 RA(Registration Authority)是局域网全球地址的法定管理机构[W-IEEERA],它负责分配地址字段的6个字节中的前三个字节(即高位24位)。世界上凡要生产局域网适配器的厂家都必须向IEEE购买由这三个字节构成的这个号(即地址块)这个号的正式名称是组织唯一标识符 OUI(Organizationally Unique Identifier),通常也叫作公司标识符(company _id)[RFC 7042]。

但应注意,24 位的 OUI不能够单独用来标志一个公司因为一个公司可能购买了几个 OU,也可能有几个小公司合起来购买一个 OU。例如,华为公司购买了多个 OUI,其中的一个是 A8-E5-44。地址字段中的后三个字节(即低位 24位)则是由厂家自行指派,称为扩展标识符(extended identifier),只要保证生产出的适配器没有重复地址即可。

可见购买了一个OU,就可以生成出 2 24 2^{24} 224个不同的6字节(48位)MAC 地址,这种地址又称为EUI-48,这里 EUI表示扩展的唯一标识符(Extended UniqueIdentifier)。EUI-48 的使用范围并不局限于局域网的硬件地址,而是可以用于软件接口。在生产适配器时,这种6字节的MAC地址已被固化在适配器的ROM中。因此,MAC地址也叫作硬件地址(hardware address)或物理地址。

IEEE 规定地址字段的第一字节的最低有效位为I/G位。IG表示Individual/Group。当I/G 位为0时,地址字段表示一个单个站地址。当 I/G 位为1时表示组地址,用来进行多播(以前曾译为组播)。需要指出,有的书把上述最低有效位写为“第一位”,但“第一”的定义是含糊不清的。这是因为在地址记法中有两种标准:第一种记法是把每一字节的最低位(即最低有效位)写在最左边(第一位)。IEEE802.3标准就采用这种记法。例如,十进制数 11的二进制表示是1011,最高位写在最左边。但若使用IEEE 802.3标准的记法,就应当记为 1101,把最低位写在最左边。当我们阅读802.3标准的有关文档时,需要特别注意。第二种记法是把每一字节的最高位(即最高有效位)写在最左边(这也叫第一位)。

在发送数据时,两种记法都是按照字节的顺序发送,但每一个字节中先发送哪一位则不同:第一种记法先发送最低位,但第二种记法则先发送最高位。

IEEE还考虑到可能有人并不愿意向EEE的RA购买OUI。为此,IEEE把地址字段第一字节的最低第二位规定为G几位,表示 Global/Local。当G儿位为0时是全球管理(保证在全球没有相同的地址),厂商向IEEE购买的OUI都属于全球管理。当地址字段的G儿 位为1时是本地管理,这时用户可任意分配网络上的地址。采用2字节地址字段时全都是本地管理。但应当指出,以太网几乎不理会这个G位。

这样,在全球管理时,对每一个站的地址可用46位的二进制数字来表示(最低位和最低第二位均为0时)。剩下的46位组成的地址空间可以有 2 46 2^{46} 246个地址,已经超过70万亿个可保证世界上的每一个适配器都可有一个唯一的地址。当然,非无限大的地址空间总有用完的时候。但据测算,至少在近期还不需要考虑 MAC 地址耗尽的问题。

当路由器通过适配器连接到局域网时,适配器上的硬件地址就用来标志路由器的某个接口。路由器如果同时连接到两个网络上,那么它就需要两个适配器和两个硬件地址。

我们知道适配器有过滤功能。当适配器从网络上每收到一个MAC帧就先用硬件检查MAC 帧中的目的地址。如果是发往本站的帧则收下,然后再进行其他的处理。否则就将此帧丢弃,不再进行其他的处理。这样做就不浪费主机的处理机和内存资源了。这里“发往本站的帧”包括以下三种帧:

  • 单播(unicast)帧(一对一),即收到的帧的 MAC 地址与本站的 MAC 地址相同。
  • 广播(broadcast)帧(一对全体),即发送给本局域网上所有站点的帧(全1地址)。
  • 多播(multicast)帧(一对多),即发送给本局域网上一部分站点的帧。

所有的适配器都至少应当能够识别前两种帧,即能够识别单播和广播地址。有的适配器可用编程方法识别多播地址。当操作系统启动时,它就把适配器初始化,使适配器能够识别某些多播地址。显然,只有目的地址才能使用广播地址和多播地址。

以太网适配器还可设置为一种特殊的工作方式,即混杂方式(promiscuous mode)。工作在混杂方式的适配器只要“听到”有帧在以太网上传输就都悄悄地接收下来,而不管这些帧发往哪个站。请注意,这样做实际上是“窃听”其他站点的通信而并不中断其他站点的通信网络上的黑客(hacker 或 cracker)常利用这种方法非法获取网上用户的口令。因此,以太网上的用户不愿意网络上有工作在混杂方式的适配器。

但混杂方式有时却非常有用。例如,网络维护和管理人员需要用这种方式来监视和分析以太网上的流量,以便找出提高网络性能的具体措施。有一种很有用的网络工具叫作嗅探器(Snifer)就使用了设置为混杂方式的网络适配器。此外,这种嗅探器还可帮助学习网络的人员更好地理解各种网络协议的工作原理。因此,混杂方式就像一把双刃剑,是利是弊要看你怎样使用它。

二、MAC 帧的格式

常用的以太网 MAC 帧格式有两种标准,一种是DIXEthermet V2标准(即以太网 V2 标准),另一种是IEEE的802.3标准。这里只介绍使用得最多的以太网V2的MAC 帧格式(如下图所示)。图中假定网络层使用的是IP协议。实际上使用其他的协议也是可以的。

在这里插入图片描述

1、结构

以太网 V2的 MAC 帧较为简单,由五个字段组成。前两个字段分别为6字节长的目的地址和源地址字段。

第三个字段是2字节的类型字段,用来标志上一层使用的是什么协议,以便把收到的 MAC 帧的数据上交给上一层的这个协议。例如,当类型字段的值是0x0800时,就表示上层使用的是I数据报。

第四个字段是数据字段,其长度在46到1500字节之间(46字节是这样得出的:最小长度64字节减去18字节的首部和尾部就得出数据字段的最小长度)。最后一个字段是4字节的帧检验序列FCS(使用CRC检验)。当传输媒体的误码率为 1 x 1 0 − 14 1x10^{-14} 1x1014时,MAC 子层可使未检测到的差错小于1x10-14。FCS检验的范围就是整个的 MAC 帧,从目的地址开始到 FCS 为止的这五个字段,但不包括物理层插入的8字节的前同步码和帧开始定界符。

2、工作原理

这里我们要指出,在以太网V2的MAC 帧格式中,其首部并没有一个帧长度(或数据长度)字段。那么,MAC 子层又怎样知道从接收到的以太网帧中取出多少字节的数据交付上一层协议呢?我们在前面讲述曼彻斯特编码时已经讲过,这种曼彻斯特编码的一个重要特点就是:在曼彻斯特编码的每一个码元(不管码元是1或0)的正中间一定有一次电压的转换(从高到低或从低到高)。当发送方把一个以太网帧发送完毕后,就不再发送其他码元了(既不发送1,也不发送0)。因此,发送方网络适配器的接口上的电压也就不再变化了。这样,接收方就可以很容易地找到以太网帧的结束位置。在这个位置往前数4字节(FCS字段长度是4字节),就能确定数据字段的结束位置。

当数据字段的长度小于46字节时,MAC 子层就会在数据字段的后面加入一个整数字节的填充字段,以保证以太网的 MAC帧长不小于64字节。我们应当注意到,MAC帧的首部并没有指出在数据字段中是否有填充字段。接收端的MAC子层在剥去MAC帧的首部和尾部后,就把剩下的部分交给上面的IP层。那么IP层怎样知道这里有没有填充字段呢?大家知道,IP协议的首部有一个“总长度”字段。如果IP 数据报的“总长度”超过或等于 46字节,那么肯定就没有填充字段。反之,如果“总长度”小于46字节,那么就很容易把填充字段计算出。例如,若IP数据报的总长度为42字节,填充字段就应当是4字节。当MAC 帧把 46 字节的数据上交给IP 层后,IP层就把其中最后4字节的填充字段丢弃。

从上图可看出,在传输媒体上实际传送的要比MAC帧还多8个字节。这是因为当一个站在刚开始接收 MAC 帧时,由于适配器的时钟尚未与到达的比特流达成同步,因此MAC 帧的最前面的若干位就无法接收,结果使整个的MAC成为无用的帧。为了接收端迅速实现位同步,从MAC子层向下传到物理层时还要在帧的前面插入8个字节(由硬件生成),它由两个字段构成。第一个字段是7个字节的前同步码(1和0交替码),它的作用是使接收端的适配器在接收 MAC 帧时能够迅速调整其时钟频率,使它和发送端的时钟同步,也就是“实现位同步”(位同步就是比特同步的意思)。第二个字段是帧开始定界符,定义为10101011。它的前六位的作用和前同步码一样,最后的两个连续的1就是告诉接收端适配器“MAC 帧的信息马上就要来了,请适配器注意接收。”MAC 帧的 FCS 字段的检验范围不包括前同步码和帧开始定界符。顺便指出,在使用SONET/SDH进行同步传输时则不需要用前同步码,因为在同步传输时收发双方的位同步总是一直保持着的。

还需注意,在以太网上传送数据时是以帧为单位传送的。以太网在传送帧时,各帧之间还必须有一定的间隙。因此,接收端只要找到帧开始定界符,其后面的连续到达的比特流就都属于同一个 MAC帧。可见以太网不需要使用帧结束定界符,也不需要使用字节插入来保证透明传输。

3、其他

IEEE 802.3标准规定凡出现下列情况之一的即为无效的 MAC 帧:

  • 帧的长度不是整数个字节;
  • 用收到的帧检验序列 FCS 查出有差错:
  • 收到的帧的 MAC 客户数据字段的长度不在 46~1500 字节之间。考虑到 MAC 帧首部和尾部的长度共有18字节,可以得出有效的 MAC帧长度为64~1518字节之间。

对于检查出的无效 MAC 帧就简单地丢弃。以太网不负责重传丢弃的帧。最后要提一下,IEEE 802.3标准规定的MAC帧格式与上面所讲的以太网V2MAC帧格式的区别就是以下三点。

  • 第一,IEEE 802.3 规定的MAC帧的第三个字段是“长度/类型”。由于以太网有效帧的最大长度是1518字节。因此当这个字段值大于0x0600时(相当于十进制的1536),这个字段就表示“类型”。这样的帧格式就和以太网V2MAC帧格式完全一样。只有当这个字段值小于 0x0600 时才表示“长度”,即MAC帧的数据部分长度。显然,在这种情况下,若数据字段的长度与实际的长度字段的值不一致,则该帧为无效的 MAC 帧。实际上,前面我们已经讲过,由于以太网采用了曼彻斯特编码,长度字段本来并无实际意义。
  • 第二,当“长度/类型”字段值小于 0x0600时,数据字段必须装入上面的逻辑链路控制LLC 子层的 LLC 帧。
  • 第三,在802.3标准的文档中,MAC帧的帧格式包括了8字节的前同步码和帧开始定界符。有些教科书也是这样引用的。不过这并不影响我们对以太网工作原理的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/3128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉——两视图几何求解投影矩阵

上文我提到了通过图像匹配得到基本矩阵,接下来我们要接着求解投影矩阵。 计算投影矩阵思路 假设两个投影矩阵为规范化相机,因此采用基本矩阵进行恢复。在规范化相机下, P [ I ∣ 0 ] P[I|0] P[I∣0], P ′ [ M ∣ m ] P[M|m] P′[M∣m]。…

apache和IIS区别?内网本地服务器项目怎么让外网访问?

Apache和IIS是比较常用的搭建服务器的中间件,它们之间还是有一些区别差异的,下面就详细说说 Apache和IIS有哪些区别,以及如何利用快解析实现内网主机应用让外网访问。 首先说说apache和IIS最基本的区别。Apache运行的操作系统通常为Unix或Lin…

Mysql — 刷题知识点

一. 功能函数 1. 大小写转换 UCASE/LCASE (列名) LCASE是将内容转换为小写 UCASE将内容转换为大写 CASE是条件控制语句的关键字 二、join ... on 问题 1. right join ..on RIGHT JOIN 关键字会返回右表 (t2) 所有的行,即使在左表 (t1) 中没有匹配的行。或者更…

【每日刷题】Day22

【每日刷题】Day22 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1669. 合并两个链表 - 力扣(LeetCode) 2. 11. 盛最多水的容器 - 力扣&#…

回归用户本真的业务价值需求,聚焦成本优化与内核能力提升——专访云和恩墨张程伟、金毅...

数据库作为企业核心业务系统的重要基座,其技术架构和性能都将直接影响企业的运营效率与成本。在2024“数据技术嘉年华”大会现场,笔者采访到了云和恩墨本原数据的两位技术合伙人——MogDB数据库研发负责人张程伟、下一代原生HTAP企业级数据库研发负责人金…

NSQ消息队列---总结篇

架构 概念 nsqlookup:存储了nsqd的元数据和服务信息(endpoind),向消费者提供服务发现功能, 向nsqadmin提供数据查询功能。 nsqd: 是接收、队列和传送消息到客户端的守护进程。 nsqadmin:简单的管理界面,展示了topic, channel以及channel上的消费者,也…

【漏洞复现】号卡极团管理系统 index.php SQL注入漏洞

0x01 产品简介 号卡极团管理系统是一款专为号卡行业打造的管理系统,它具备一系列强大的功能,能够满足号卡行业推广人员在业务运营中的各类需求。 0x02 漏洞概述 号卡极团管理系统存在SQL注入漏洞,未授权的攻击者可以通过该漏洞获取数据库敏…

数据库关系模式分解 - 无损连接和保持函数依赖性

文章目录 1 概述1.1 关系模式分解的好坏标准 2 无损连接验证算法 1 概述 1.1 关系模式分解的好坏标准 书上的算法太抽象了,咱不好理解,以下举例说明。一个关系可以有很多种分解方法,如何判断分解的好与坏呢? ① 查询时的连接操作…

类的六个构造函数相关干货

构造函数 特点 1.名字与类名相同 2.无返回值 3.对象实例化的时候编译器自动调用这个函数 4.构造函数可以重载(无参构造函数,拷贝构造等) 5.如果类中没有显式定义构造函数(深拷贝),则编译器会自动生成一个…

抖音阳哥:选品师项目究竟能不能算蓝海项目?

在当今这个信息爆炸的时代,短视频平台如抖音已经成为了人们获取信息、娱乐休闲的重要渠道。抖音上涌现出许多具有影响力的网红,他们不仅分享自己的生活点滴,还常常推荐一些创业项目或商业模式。其中,阳哥分享的选品师项目引起了广…

STM32H750片外QSPI下载算法文件(stldr)生成

STM32H750片外QSPI下载算法文件(stldr)生成 🌿相关篇《STM32H750片外QSPI启动配置简要》📌参考实现资料: https://github.com/lchnu/STM32H750XBH_ARTPIQSPI_W25Q64JV https://gitee.com/wangchief/H750_W25QXX ✨利…

风格迁移adaIN 和iT的adaLN

文章目录 BN、LN、IN、GN的区别![](https://img-blog.csdnimg.cn/direct/d38c005616f145cba2aa1c4c2e046be0.png)图像风格迁移adaINDiT adaLN BN、LN、IN、GN的区别 BatchNorm:batch方向做归一化,算NxHxW的均值,对小batchsize效果不好&#x…

「Kafka」Kafka基础知识入门介绍(三)

「Kafka」Kafka基础知识入门介绍(三) 一、消息主题1. 创建主题 二、生产数据1. 命令行模式2. Java代码模式 三、消费数据1. 命令行模式2. Java代码模式 「Kafka」Kafka理论知识解读(一) 「Kafka」Kafka安装和启动(二&a…

【kotlin】利用by关键字更加方便地实现装饰器模式

关于kotlin中的by关键字的用法,kotlin官方文档属性委托这一节讲得很清楚。 简单来说就是这样的,假设存在一个接口Component如下: interface Component {fun method1(): IntArrayfun method2(a: Int)fun method3(a: Int, str: String) }那么对…

React-性能优化的手段

​🌈个人主页:前端青山 🔥系列专栏:React篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容:React-性能优化的手段 目录 React 性能优化的手段有哪些? 一、是什么 二、如何做…

【汇编语言】流程转移和子程序

【汇编语言】流程转移和子程序 文章目录 【汇编语言】流程转移和子程序前言一、“转移”综述二、操作符offset三、jmp指令jmp指令——无条件转移jmp指令:依据位移进行转移两种段内转移远转移:jmp far ptr 标号转移地址在寄存器中的jmp指令转移地址在内存…

Vue3种常用插槽的使用

插槽总结 &#xff1a; 插槽的作用&#xff1a;让父组件可以向子组件指定位置插入html结构&#xff0c;也是一种组件间通信的方式&#xff0c;适用于 父组件 > 子组件 。分类&#xff1a;默认插槽、具名插槽、作用域插槽 1、默认插槽 父组件中&#xff1a; <Category>…

鸿蒙HarmonyOS应用 - ArkUI组件

ArkUI组件 基础组件 Image 声明Image组件并设置图片源 网络权限&#xff1a;ohos.permission.INTERNET Image(scr: string | PixelMap | Resource)// 1. string&#xff1a;用于加载网络图片&#xff0c;需要申请网络权限 Image("https://xxx.png")// 2. PixelMap…

一线实战,一次底层超融合故障导致的Oracle异常恢复

背景概述 某客户数据由于底层超融合故障导致数据库产生有大量的坏块&#xff0c;最终导致数据库宕机&#xff0c;通过数据抢救&#xff0c;恢复了全部的数据。下面是详细的故障分析诊断过程&#xff0c;以及详细的解决方案描述&#xff1a; 故障现象 数据库宕机之后&#xff0c…

粤嵌—2024/4/24—删除有序数组中的重复项 ||

代码实现&#xff1a; 方法一&#xff1a;双指针 int removeDuplicates(int *nums, int numsSize) {int l 0, r 0;while (r < numsSize) {if (r > 1 && nums[r] nums[l - 1] && nums[r] nums[l - 2]) {r;} else {nums[l] nums[r];l;r;}}return l; }…