07_OSI_第二层:机器间通信。MAC_地址和以太网协议
网络协议那些事儿
内容简介 特殊的 MAC 地址 以太网协议:第二层的语言 总结 1. 特殊的 MAC 地址 上一课我们介绍了 OSI 第二层的主要作用(连接局域网的机器),学习了 MAC 地址。
内容简介
-
特殊的 MAC 地址
-
以太网协议:第二层的语言
-
总结
-
特殊的 MAC 地址
上一课我们介绍了 OSI 第二层的主要作用(连接局域网的机器),学习了 MAC 地址。
MAC 地址实际上是网卡的地址,而不是机器的地址。MAC 地址是由 6 个字节编码的,用十六进制的形式来表示,每个字节(8 个二进制位)之间用冒号隔开,例如:
在众多 MAC 地址中,有一个地址很特殊,其每一个二进制位都是 1,因此是:
这个 MAC 地址被称为广播地址(Broadcast Address。broadcast 是 “广播” 的意思,address 是 “地址” 的意思)。
广播的意思就是向大家播放,因此顾名思义,广播地址可以代表任意一个网卡,因此发向广播地址的信息就会发送到所在网络的所有网卡上。
既然我们已经知道如何用 OSI 第一层将机器连接起来,并且用第二层的 MAC 地址来标识每一台机器的网卡。
那么是时候定义一个互相通信所需要用的语言了。
- 以太网协议:第二层的语言
第二层的语言,是什么呀?
为了使连接到网络上的各个机器之间能相互交流,需要定义一种语言。这种语言规定了机器之间交换的信息的格式。
在网络知识中,我们把通信所用的语言称为 “协议”,英语是 protocol,用术语才显专业嘛。
协议这个术语非常重要,毕竟我们的整个课程就是围绕网络协议这个中心来展开的。网络领域有许多的协议,我们会循序渐进地介绍。
其实可以把协议类比成我们人类用的语言,我们和老外交流,双方得说一样的语言,就好像遵从同样的 “协议”。网络上的两台机器之间要交流,也是如此。
在众多协议中,我们使用最多的是 Ethernet,也就是以太网。
以太网协议并不是第二层的唯一协议,但却是最常用的。就好比英语不是唯一的语言,但却是国际上最常用的。
协议的作用
网络的作用,简单来说就是交换信息。既然在网络中的每台机器(通常是电脑)都那么不同,其中所安装的操作系统又各式各样(Windows、Linux、macOS 等等),我们就需要定义一种统一的交流语言,以便各台机器可以相互 “理解”。此处的语言就是我们所说的协议。
既然网线中传输的都是 0 和 1 这样的二进制数据,因此我们接收到的信息也像这样:
011010111011010101100011001
但是我们人类并不知道这样一串信息的意义啊。因此,协议就被用来定义什么样的信息会被传输,以及传输的顺序。
在传输的信息里,至少要包含:
这样一个信息的总的单元,术语称为帧(Frame),也有称之为数据帧(Data Frame)的。这个术语有点抽象,我们慢慢来学习。
帧是 OSI 第二层中传输的信息单元,可以将其看成数据的封包。
以太网帧的形式
上面说了一个帧的大致形式,现在我们来学习一下实际的格式。首先来看上面提到的两个地址,发送方和接收方的地址,在 OSI 第二层中,这两个地址都是用 MAC 地址来表示的。
在一个帧中,到底是发送方的 MAC 地址在前还是接收方的在前呢?
为了回答这个问题,我们需要换位思考,想象自己就是那台接收信息的机器。
对于机器来说,发送方的 MAC 地址和接收方的 MAC 地址,哪一个更有价值呢?
网络的先驱者们认为接收方的 MAC 地址对一台机器来说更有价值,因为可以立即得知信息是不是发给我们的。如果信息是发给我们的,那么我们阅读信息;如果不是发给我们的,那么大可不必理会。
因此我们在一个帧中,将接收方的 MAC 地址(也叫 MAC 目标地址)放在前,后面跟着发送方的 MAC 地址(也叫 MAC 源地址)。目前我们的以太网帧大致如下:

-
DST 是 destination(目的地)的缩写,表示接收方;
-
SRC 是 source(源头)的缩写,表示发送方。
接着,我们需要一个比较特殊的信息。为了便于理解,我们重新展示 OSI 七层模型,如下图所示:

发送方在发送信息时,需要从上到下依次穿过 OSI 的各层:

因此,在穿越第 2 层前,我们需要穿越第 3 层(不禁想起了《盗梦空间》… ),这样,第 3 层就可以告诉第 2 层在第 3 层使用的协议是什么了。
这很有用,因为当信息到达接收方的时侯,接收方的机器的第 2 层首先检验 MAC 目标地址,如果和自己的 MAC 地址一样,那么接收方的机器的第 2 层需要将信息发送到第 3 层的对应协议。
在接收方,需要反向穿越 OSI,如下图所示:

因此,我们的以太网帧变成了这样:

一帧的信息已经差不多了。为什么是差不多呢?
因为还缺了:
我们把这两个信息放在第 3 层使用的协议后面。至于错误检测,我们使用 CRC。
CRC 是什么呢?
CRC 是循环冗余校验(Cyclic Redundancy Check)的缩写,这名字也比较抽象。
CRC 是一个数学的值,可以作为要发送的数据的一种代表。
简单说来,CRC 对于每条发送的信息都是不一样的。发送方使用某公式计算出被传送数据所含信息的一个 CRC 值,并将此值附在被传送数据后,接收方则对接收到的同一数据进行相同的计算,得到另一个 CRC 值。
如果这两个 CRC 一致,说明发送中没有出错;如果不一致,说明发送中出现了差错,接收方可要求发送方重新发送该数据。
假设机器 A 发送一条信息给机器 B:
-
发送前,机器 A 根据发送的信息,来计算 CRC 值(假设值为 X),将这个值放在一帧的结尾处;
-
机器 B 接收到 机器 A 发送来的一帧数据后,也计算一个 CRC 值(假设值为 Y);
-
机器 B 比较自己计算出来的 CRC 值(Y)和机器 A 发送过来的帧中的 CRC 值(X):
-
如果 X 和 Y 相等,说明机器 A 发送的帧和机器 B 收到的帧是一样的;
-
如果 X 和 Y 不相等,说明发送时出了问题,机器 A 发送的帧和机器 B 收到的帧不一样,就成功检测到了错误。
完整的一帧
现在我们有了所有元素,因此我们完整的一帧如下:

一帧的大小是多少呢?
在一帧中,有些元素的大小(尺寸)是不变的。这些元素的集合我们称之为帧头。下图中的粗体表示帧头里的数据:

帧头的格式是固定的,因此我们可以定义其大小:
-
接收方和发送方的 MAC 地址分别占用 6 个字节;
-
第 3 层的协议用 2 个字节编码;
-
CRC 用 4 个字节编码。
6 x 2 + 2 + 4 = 18。
因此以太网的帧头一共有 18 个字节。
当然,也有一种分法是将一帧分为帧头、数据部分、帧尾三部分。接收方和发送方的 MAC 地址和第 3 层使用的协议作为帧头,而 CRC 作为帧尾。
那么,一帧有最小尺寸和最大尺寸吗?
是的。至于为什么有最小尺寸,原理比较复杂,就不详述了。以太网帧的最小尺寸是 64 字节。
规定帧的最大尺寸的目的很好理解。假如没有限制,那么有可能一台机器发送了很大一串数据,占据了网络的所有带宽,其他的机器就发送不了数据了。
以太网帧的最大尺寸是 1518 字节。
1518 字节中有 18 个字节是帧头,因此我们最多可以在一帧中放入 1500 个字节大小的数据。
现在,我们了解了以太网帧的几乎所有元素了。我们小结一下,在机器 A 和机器 B 之间交换数据的过程如下:
-
机器 A 上的一个应用(application,在 OSI 的第 7 层应用层,以后我们会学习应用层)发送数据到机器 B 的应用上;
-
在 机器 A 这个发送方这端,此数据从上到下穿过 OSI 的各层;
-
发送方的第 3 层告知第 2 层所使用的协议是什么;
-
第 2 层就用这些信息,包装成一个帧,通过网络传输;
-
机器 B 收到了机器 A 发送的这个帧,首先检查帧头部的第一个元素:接收方的 MAC 地址;
-
如果等于机器 B 的 MAC 地址,那么机器 B 读取帧中接下来的信息;
-
依据帧中的协议部分,接收方(机器 B)的第 2 层就把数据正确地发送给第 3 层;
-
数据在接收方就从下到上,直达机器 B 的应用了。
太棒了,我们已经知道局域网中机器之间如何通信了!
但是,我们还不知道机器如何连接在一起,因为这需要一个特殊的设备,我们下节课再学习。
- 总结
-
在众多 MAC 地址中,有一个是特殊的,就是广播地址 ff:ff:ff:ff:ff:ff ;
-
OSI 第二层使用的主要协议是 Ethernet(以太网)协议;
-
第二层的辅助作用是侦测传输错误,常用 CRC 值来校验。
既然我们已经了解了 OSI 第二层的主要原理,下一课我们就要学习第二层中可以使机器之间互联的设备:交换机(Switch)咯!
今天的课就到这里,一起加油吧!
}如果您想了解更多技术资源,欢迎加入点击这里钉钉群交流IT技术资源查看“IT技术交流群一”群的钉钉群号: 129605002953