从集线器的广播到交换机的mac地址

132 阅读3分钟

集线器引发的问题

集线器 有多个口,可以将多台电脑连接。但是集线器完全在物理层工作。它会将自己收到的每一个字节,都复制到其他端口上去。这是第一层物理层联通的方案。

集线器采取的是广播的模式,如果每一台电脑发出的包其他所有电脑都能收到,那就麻烦了。这就需要解决几个问题:

  1. 这个包是发给谁的?谁应该接收?
  2. 大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?
  3. 如果发送的时候出现了错误,怎么办?

这几个问题,都是数据链路层要解决的问题。MAC的全称是Medium Access Control,即媒体访问控制。 控制什么呢?其实就是控制在往媒体上发数据时,谁先发、谁后发的问题。解决的是第二个问题。这个问题中的规则,学名叫多路访问。有很多算法可以解决这个问题。

比如接下来这三种方式:

  • 方式一:分多个车道。每个车一个车道,你走你的,我走我的。这在计算机网络里叫作信道划分;
  • 方式二:今天单号出行,明天双号出行,轮着来。这在计算机网络里叫作轮流协议;
  • 方式三:不管三七二十一,有事儿先出门,发现特堵,就回去。错过高峰再出。我们叫作随机接入协议。 著名的以太网,用的就是这个方式。

接下来要解决第一个问题:发给谁,谁接收?这里用到一个物理地址,叫作链路层地址。 但是因为第二层主要解决媒体接入控制的问题,所以它常被称为MAC 地址

解决第一个问题就牵扯到第二层的网络包格式。对于以太网,第二层的最开始,就是目标的 MAC 地址和源的 MAC 地址。

image.png

接下来是类型,大部分的类型是 IP 数据包,IP 里面包含 TCP、UDP,以及 HTTP 等,这都是里层封装的事情。

有了目标 MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。MAC 的网卡把包收进来,然后打开 IP 包,发现 IP 地址也是自己的,再打开 TCP 包...

对于以太网,第二层的最后面是CRC,也就是循环冗余检测。通过 XOR 异或的算法,来计算整个包是否在发送的过程中出现了错误,主要解决第三个问题。

交换机怎么知道每个口的电脑的 MAC 地址呢

一台 MAC1 电脑将一个包发送给另一台 MAC2 电脑,当这个包到达交换机时,一开始交换机也不知道 MAC2 在哪个口,所以只能将包转发给除了来的那个口之外的其他所有的口。这时交换机会记住 MAC1 是来自一个明确的口。以后有包的目的地址是 MAC1 的,直接发送到这个口就可以了。

一段时间后,交换机就有了整个网络的结构了,这时基本上不用广播,全部可以准确转发。当然,每个机器的 IP 地址会变,所在的口也会变,因而交换机上的学习的结果,称为转发表,是有一个过期时间的。