【计算机网络】数据链路层究竟解决了什么问题?

在交换机出现以前,搭建一个小型局域网的方法是通过 集线器 完成的。

集线器(Hub):有多个端口,可以连接多台电脑,但是并没有交换机智能,完全在物理层上工作,它将自己收到的每一个字节都复制到其他端口上去(也就是 广播发送 ),是第一层物理层的联通设备。

 然而,通过集线器来连接各个电脑就出现了三个问题:

  • 这个包是发送给谁的?谁应该接收?
  • 大家都在发送,会不会产生混乱?怎么避免混乱的情况?
  • 如果发送的时候出现了错误,怎么解决?

这几个问题,都是在第二层,数据链路层,也即 MAC 层 要解决的问题。MAC(Medium Access Control),媒体访问控制。它就是控制在往媒体上发送数据的时候,谁先发,谁后发的问题。防止发送数据产生混乱,这就是解决了第二个问题。学名是多路访问。我们把信道看成一条马路,要发的数据看成马路上的车,研究多路访问的问题就形象很多了。

多路访问三种方式:

  1. 信道划分。划分多个车道,每个车一条车道,你走你的,我走我的。
  2. 轮流协议。相当于单双号限行,今天双号,明天单号。
  3. 随机接入协议。不管三七二十一,有事就直接出门,发现路上比较堵就退回来,随机等一定时间再出门。这方法也就是我们的 以太网 使用的方式。

 现在,我们已经解决了第二个问题。

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

由此,我们就需要引入第二层的网络包的格式。

对于以太网,第二层的最开始就是目的 MAC 地址和源 MAC 地址。

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

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

这时候肯定又有人会问了:“如果源机器不知道目标机器的 MAC 地址怎么办呢?”一个网络里有 N 台机器,我怎么知道每个 MAC 地址是谁的呢?这就是 ARP 协议ARP 协议可以通过已知的 IP 地址来求出对应的 MAC 地址。操作方法就是靠“吼”。广而告之,发送一个广播包,谁是这个 IP 谁来回答。为了避免每次都是用 ARP 来查找目标机器的 MAC 地址,在本地会有一个 ARP 缓存。当然,我们也知道 IP 是经常动态改变的,因此 ARP 缓存每过一段时间也会更新。

这时候看起来三个问题都解决了,是不是可以愉快的进行通信了呢?

当机器间数据传输量小的时候确实没有问题,但一旦数据量过高,那么“堵车”的概率就会大大增加。而且 集线器 只是简单的复制,很多没有意义的包也在局域网上跑来跑去,纯属浪费!这时候我们就希望,要是能避免这种广播的形式就好了,要是有一个机器能够记住每台电脑的 MAC 地址不就可以避免广播的情况了嘛,直接收到源主机的包后直接转发到目的主机上,不会出现无意义的复制了。

于是,交换机 诞生了!

交换机:工作在第二层(数据链路层),因为他要拆开看看 MAC 地址。

交换机是怎么知道每台电脑的 MAC 地址 呢?这需要交换机会学习。

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

有本事你别说话,你只要一说话我就知道你在哪了!

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

总结一下:

  • MAC 是用来解决多路访问堵车问题的。
  • ARP 是通过靠“吼”的方式来寻找目标 MAC 地址的。吼完后会记录下来,有缓存。
  • 交换机比集线器要聪明,有学习的功能,能记住对应 MAC 的机器在哪。
  • 交换机工作在第二层(数据链路层),集线器工作在第一层(物理层)。
发布了104 篇原创文章 · 获赞 27 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41960890/article/details/104974731