06_OSI_第二层:机器间通信。MAC_地址和以太网协议
网络协议那些事儿
内容简介 前言 OSI 第二层的作用 MAC 地址:唯一标识 总结 1. 前言 学完了前几课,相信 OSI 的第一层对你来说已经没有什么秘密了。
内容简介
-
前言
-
OSI 第二层的作用
-
MAC 地址:唯一标识
-
总结
-
前言
学完了前几课,相信 OSI 的第一层对你来说已经没有什么秘密了。你已经知道如何用线缆来构建一个简单的网络,并且了解了相关的设备。
那么,现在我们就该一起来学习如何从一台机器向另一台机器发送信息了。要达到这个目的,光有第一层(物理层)的那些硬件是不够的。
因此,我们来认识一下 OSI 的第二层:数据链路层(Data Link Layer)。我们终于要从第一层跨越到第二层了,这是人类的一小步,却是我们的一大步!
从这一课开始,我们就要正式学习很多网络方面非常基础和关键的概念了。保证精彩!
-
OSI 第二层的作用
我们之前说过,OSI 的第二层叫做:数据链路层。这个名字比较抽象。不过我们不要在意这个名字,了解第二层的作用更加重要。
那么第二层的作用是什么呢?我们再回顾一下之前课程中对 OSI 第二层的简单概述:
第 2 层或者数据链路层(Data Link layer)
-
名字:数据链路层
-
作用:使局域网中的机器互相连接
-
辅助作用:侦测传输错误
-
相关设备:交换机(也就是常说的 Switch)
简单地说,第二层的作用是:使局域网中的机器互相连接。更准确地说,第二层的目标是使得这些连接的机器能互相通信。因此我们将学习如何在两台或多台机器间建立通信。
除此之外,数据链路层还有一个作用:侦测传输错误。
注意:是侦测,而不是修正。也就是说只是发现错误,但是不负责修复错误(好像很不负责任的说)。
-
MAC 地址:唯一标识
日常生活中,两个人之间的对话是相对简单的。一个人讲的时候,另一个人就负责听。
一旦参与对话的人数增多起来,情况就会变得复杂。因为也许我们想对其中一个人说一些悄悄话。
在网络世界,也是类似的。毕竟网络是人发明的嘛,必定有人类惯有思维的痕迹。虽然有时我们想和所有机器通信(好比对着大家说话),但大部分时候,我们每次都是与单独的一台机器通信。
“茫茫人海中,有你有我,相遇相识相互琢磨…”
在茫茫机海的那么多机器中,我们如何找到那一台我们要与之通信的机器呢?
为了定位某台机器,就需要给每台机器一个身份标识了,就好比中华人民共和国的一个合法公民拥有一个身份证号一样。
网络的先驱者们就在 OSI 的第二层创建了一个标识,用于标明在茫茫机海中的一台机器,这个标识就是 MAC 地址。
哇,那就是说,每台机器(通常是电脑)都有一个 MAC 地址来作为标识咯?
这样说并不准确。为什么呢?既然我们是在 OSI 的第二层,离第一层很近,因此 MAC 地址还是和硬件设备有关的,就是网卡(Network Card)。下图展示了一张普通网卡:

可以看到网卡上连接着我们之前学习过的 RJ45 接口(母头)。
MAC 地址其实是网卡的地址,而不是某台机器的地址。
因此:
MAC 地址用于在网络中唯一标识一个网卡,一台电脑会有一个或多个网卡,每个网卡都需要有一个唯一的 MAC 地址。
MAC 地址的概念
来一点数学计算
注意了,我们要进行一些数学运算,非战斗人员请迅速撤离。
开个玩笑,只是基本的二进制和十六进制运算,不难的,特别对于我们中华儿女来说小菜一碟啦。在网络世界中,我们要做不少这样的运算。
首先说说二进制,假如你熟悉了二进制,十六进制是很类似的。
那么二进制是什么呢?
二进制是计算技术中广泛采用的一种数制。二进制数据是用 0 和 1 两个数码来表示的数。它的基数为 2,进位规则是 “逢二进一”,借位规则是 “借一当二”,由 18 世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统。(摘自百度百科 )
日常生活中,我们惯用的是十进制,也就是 0 ~ 9 这十个数的组合,基数为 10,进位规则是 “逢十进一”。
我们到菜场去买菜的时候,阿姨找钱给我们都是根据十进制来找钱的。要是哪天碰到一个阿姨根据二进制来找钱,那… 她以前可能是个程序员啊~ 当然了,现在卖菜的阿姨收钱都用二维码了,真是 “多亏时代在进步,阿姨不必再数数”。
如果我用二进制来数数,那么是像这样的:
0
1
10
11
100
101
110
111
1000
1001
以上数字对应的十进制分别是:
但好好的十进制不用,为什么要用这奇怪的二进制呢?为什么要 “主动找虐” 呢?
其实,我们也不想 “主动找虐” 啊,是因为计算机等电子设备比较 “蠢笨”,只认识 0 和 1 这样的数据。我们没办法,只能“被动找虐” 啊。哼,计算机这个 “糟老头子” 可是坏得很…
我们之前的课程已经说过,在信息技术领域,我们用 1 和 0 来代表电信号的高电平和低电平,或两种状态(表示 “开” 和“关”)。
计算机中的许多元件都可以呈现两种状态,分别用 0 和 1 来表示,用来计算或储存数据。例如,磁盘未磁化的部分可以表示为 0,磁化的部分表示为 1,许多个这样的 0 和 1 就组成了二进制数据;半导体通电表示为 1,不通电表示为 0,CPU 等半导体芯片就是这样运算的。
用二进制的优点是容易表示,运算规则简单,节省设备。具有两种稳定状态的元件(如晶体管的导通和截止、继电器的接通和断开、电脉冲电平的高低等)容易找到,而要找到具有 10 种稳定状态的元件来对应十进制的 10 个数就困难了。
至于如何计算二进制,二进制与十进制之间的转换,甚至与十六进制的转换,有忘了的,赶紧回去补习数学知识。
我们只举一个简单的例子来说明如何将十进制的数转成二进制数。例如 47 = 32 + 8 + 4 + 2 + 1 :
-
2 的 5 次方是 32,所以这一位为 1 ;
-
2 的 4 次方(等于 16 )这一位没有,所以这一位为 0 ;
-
2 的 3 次方是 8,所以这一位为 1 ;
-
2 的 2 次方是 4,所以这一位为 1 ;
-
2 的 1 次方是 2,所以这一位为 1 ;
-
2 的 0 次方是 1,所以这一位为 1 。
因此,十进制数 47 转成二进制数就是 101111 。
MAC 地址以十六进制来编码
在十进制中,我们有 0 ~ 9 这十个数。
在十六进制中,我们有十六个字符。事实上,前面 10 个数字还是用 0 ~ 9,而之后的第 11 到第 16 个,我们用字母来表示,如下:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f
其中:
分别对应十进制的:
我们的 MAC 地址是以十六进制来表示的,类似这样:
MAC 地址编码
我们已经知道了 MAC 地址的大致形式,在更深入了解之前,还需要知道它的长度。
MAC 地址是由 6 个字节来编码的,每个字节用冒号隔开。
如上面的:
一个字节(Byte,简写为 B)是指明一定量的数据的信息元。例如,当我们买硬盘的时候,我们会关心它的大小。一个 500 GB 的硬盘,其实就是 500 个 G 的 Byte 的容量。G 是英语 giga 的意思,表示千兆,也就是十亿,10 的 9 次方。因此 500 GB 就有大约 500000000000 个字节。
为什么说是大约呢?因为如果精确来看,其实 1 GB = 1024 MB = 1024 x 1024 KB = 1024 x 1024 x 1024 B(1024 是 2 的 10 次方)。
硬盘厂商设计的是 1 GB = 1000 MB(近似地计算),而电脑却认为 1 GB = 1024 MB(精确地计算)。这也是为什么我们一般买来的硬盘,虽然写着容量那么多,比如 500 GB,但接入电脑之后显示容量不到 500 GB 的原因。
1 个字节(Byte)是 8 个比特位(bit),我们以前用过的下载工具 "比特精灵" 里的比特就是 bit 的谐音。一个 bit 就是一个二进制的位,等于 0 或者 1,只有这两个取值。
我们之前说过,一个二进制的值只能由 0 和 1 组成。因此一个 bit 就只能编码 2 个值(2 的 1 次方是 2),两个 bit 可以编码 4 个值(2 的 2 次方是 4),三个 bit 可以编码 8 个值(2 的 3 次方是 8)。以此类推。
比如我们拿两个 bit 位来举例子,一共可以取的值是:00,01,10,11,分别表示十进制的 0,1,2,3。你也可以自己试试其它位数的所有组合。
因此我们推断出 N 个 2 进制位可以编码 2 的 N 次方个数值。
一个字节有 8 个 bit 位,就可以表示:2 的 8 次方 = 256 个值,从 0 ~ 255 的整数。
之前说了,MAC 地址是由 6 个字节编码而成,因此就是 48 个二进制位,那么可以表示 2 的 48 次方个值咯,是 281474976710656,是一个很大的数,反正 MAC 地址暂时是用不完的了,肯定能保证每个 MAC 地址都是唯一的。
像上面这样的 MAC 地址中,用冒号分隔开的每两个字符,因为都是十六进制的字符,16 = 2 的 4 次方,所以两个十六进制的字符就是 2 的 8 次方,正好是 1 个字节(Byte)。
小窍门
如果你对计算 2 的多少次方(当然是比较大的次方)感觉比较麻烦,一定要用计算器的话,我们可以给出一个能计算出大概值的小窍门。
我们就用上面的 2 的 48 次方来举例好了。
2 的 48 次方 = 2 的 10 次方 x 2 的 10 次方 x 2 的 10 次方 x 2 的 10 次方 x 2 的 8 次方 。
我们知道 2 的 10 次方是 1024,近似就是 1000。2 的 8 次方是 256。
因此我们可以这样近似:
2 的 48 次方 约等于 1000 x 1000 x 1000 x 1000 x 256 = 256000000000000 ,就是 256 万亿。目前世界上还没有这么多网卡,因此暂时不必担心 MAC 地址会重复。
看吧,不必用计算器就可以知道大概值啦。
但是,我们如何保证每一块网卡的 MAC 地址不会和世界上已经存在的网卡地址重复呢?难道不会搞错吗?
一般来说不会。因为一个网卡制造商会购买 MAC 地址,更确切地说是 MAC 地址的区块。
MAC 地址最前面的三个字节是 IEEE(Institute of Electrical and Electronics Engineers,电气电子工程师学会)分配的,后面的三个字节由制造商自行分配。
当制造商要生产网卡之前,他们会买前三个字节(由 IEEE 分配),后三个字节自己分配。举个例子,某个网卡生产商买了 00:01:02 这三个字节,那么其生产的所有网卡就由这三个字节起首,例如 00:01:02:00:00:01 ,00:01:02:00:00:02 ,等等。
这样,IEEE 分配的前三个字节被各个网卡生产商买走,因此不担心会有重复的情况,而生产商只要保证自己生产的每块网卡使用不同的后三个自定义的字节,就不会有重复的 MAC 地址啦。
-
总结
-
OSI 第二层的主要作用是连接局域网的机器;
-
MAC 地址实际上是网卡的地址,而不是机器的地址;
-
世界上每块网卡拥有独一无二的 MAC 地址;
-
MAC 地址由 6 个字节编码(48 个二进制位);
-
借助 MAC 地址这个唯一标识,我们就可以向网卡发送信息了。
今天的课就到这里,一起加油吧!
}如果您想了解更多技术资源,欢迎加入点击这里钉钉群交流IT技术资源查看“IT技术交流群一”群的钉钉群号: 129605002953