07_OSI_第二层:机器间通信。MAC_地址和以太网协议 ## 网络协议那些事儿

60 阅读10分钟

07_OSI_第二层:机器间通信。MAC_地址和以太网协议

网络协议那些事儿

内容简介 特殊的 MAC 地址 以太网协议:第二层的语言 总结 1. 特殊的 MAC 地址 上一课我们介绍了 OSI 第二层的主要作用(连接局域网的机器),学习了 MAC 地址。

内容简介


  1. 特殊的 MAC 地址

  2. 以太网协议:第二层的语言

  3. 总结

  4. 特殊的 MAC 地址


上一课我们介绍了 OSI 第二层的主要作用(连接局域网的机器),学习了 MAC 地址。

MAC 地址实际上是网卡的地址,而不是机器的地址。MAC 地址是由 6 个字节编码的,用十六进制的形式来表示,每个字节(8 个二进制位)之间用冒号隔开,例如:

在众多 MAC 地址中,有一个地址很特殊,其每一个二进制位都是 1,因此是:

这个 MAC 地址被称为广播地址(Broadcast Address。broadcast 是 “广播” 的意思,address 是 “地址” 的意思)。

广播的意思就是向大家播放,因此顾名思义,广播地址可以代表任意一个网卡,因此发向广播地址的信息就会发送到所在网络的所有网卡上。

既然我们已经知道如何用 OSI 第一层将机器连接起来,并且用第二层的 MAC 地址来标识每一台机器的网卡。

那么是时候定义一个互相通信所需要用的语言了。

  1. 以太网协议:第二层的语言

第二层的语言,是什么呀?

为了使连接到网络上的各个机器之间能相互交流,需要定义一种语言。这种语言规定了机器之间交换的信息的格式。

在网络知识中,我们把通信所用的语言称为 “协议”,英语是 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:

  1. 发送前,机器 A 根据发送的信息,来计算 CRC 值(假设值为 X),将这个值放在一帧的结尾处;

  2. 机器 B 接收到 机器 A 发送来的一帧数据后,也计算一个 CRC 值(假设值为 Y);

  3. 机器 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 之间交换数据的过程如下:

  1. 机器 A 上的一个应用(application,在 OSI 的第 7 层应用层,以后我们会学习应用层)发送数据到机器 B 的应用上;

  2. 在 机器 A 这个发送方这端,此数据从上到下穿过 OSI 的各层;

  3. 发送方的第 3 层告知第 2 层所使用的协议是什么;

  4. 第 2 层就用这些信息,包装成一个帧,通过网络传输;

  5. 机器 B 收到了机器 A 发送的这个帧,首先检查帧头部的第一个元素:接收方的 MAC 地址;

  6. 如果等于机器 B 的 MAC 地址,那么机器 B 读取帧中接下来的信息;

  7. 依据帧中的协议部分,接收方(机器 B)的第 2 层就把数据正确地发送给第 3 层;

  8. 数据在接收方就从下到上,直达机器 B 的应用了。

太棒了,我们已经知道局域网中机器之间如何通信了!

但是,我们还不知道机器如何连接在一起,因为这需要一个特殊的设备,我们下节课再学习。

  1. 总结

  1. 在众多 MAC 地址中,有一个是特殊的,就是广播地址 ff:ff:ff:ff:ff:ff ;

  2. OSI 第二层使用的主要协议是 Ethernet(以太网)协议;

  3. 第二层的辅助作用是侦测传输错误,常用 CRC 值来校验。

既然我们已经了解了 OSI 第二层的主要原理,下一课我们就要学习第二层中可以使机器之间互联的设备:交换机(Switch)咯!

今天的课就到这里,一起加油吧!

}如果您想了解更多技术资源,欢迎加入点击这里钉钉群交流IT技术资源查看“IT技术交流群一”群的钉钉群号: 129605002953