网络协议

详解网络分层和网络协议工作原理
帅旋
关注
充电
IT宅站长,技术博主,共享单车手,全网id:arthinking。

数据链路层 | ARP,MAC,交换机,VLAN

发布于 2020-07-26 | 更新于 2024-01-28

1、数据帧格式

我们首先来看看数据链路层的传输数据帧的格式。

所有的以太网(802.3)帧都基于一个共同的格式。在原有规范的基础上,帧格式已被改进以支持额外功能。

当前以太网的帧格式[1]如下:

image-20211023115006429

前导:用在发送方和接收方之间同步时钟和bit流;

SFD:帧开始界定符,只有一个byte,内容固定为:10101011 (0xAB);

DST:目标MAC地址;

SRC:源MAC地址;

长度或类型:0800时,表示IP数据报,0806表示ARP请求/应答,0835表示RARP请求/应答;

FCS:帧检验序列,用于数据帧的差错检测;

这个包应该发给谁?

判断是否应该接受这个包,就是通过帧的MAC地址进行判断的。

这是一个物理地址,叫做链路层地址,因为链路层主要解决媒体接入控制问题,所以称为MAC地址(Media Access Control Address)。实际上,MAC地址就是适配器地址或适配器标识符,当适配器插入到某台计算机之后,适配器上的标识符就成为这台计算机的MAC地址了。

怎么校验包是否出现错误

FCS是帧校验序列,也就是循环冗余检测,收到数据报之后,会通过一个检验计算规则,把计算结果与FCS字段匹配,如果匹配补上,则帧可能在传输过程中受损,通常会丢弃该帧。

2、ARP: 如何获取目标机器的MAC地址?

我们知道,在数据链路层,是通过MAC地址判断某一个接收到的包是不是要进一步处理的。但是如果我们不知道对方的MAC地址的时候,如何发送数据链路层的帧呢?这就需要用到数据链路层的ARP协议了。

ARP协议:ARP为IP地址到硬件地址之间提供了动态映射,我们通过ARP可以把32位的Internet地址转换为48位的MAC地址。另外,我们可以使用RARP,把48位的MAC地址转换为32位的Internet地址。

image-20211023115232223

另外,为了保证ARP的高效运行,ARP会维护每个主机和路由器上的ARP缓存,把Internet地址和MAC地址的映射关系保存起来,缓存正常到期时间是20分钟。

下面是这个过程的演示,其中ARP数据帧只把关键信息描述出来了,想要了解完整的帧格式可以用参考 TCP/IP协议详解卷1[2]

image-20211024130459662

如上图:

主机A想知道192.168.1.4这个IP地址的MAC地址是什么,发现本地缓存中找不到,于是广播了一个ARP请求,主机B和主机D收到之后,发现自己不是192.168.1.4于是忽略这个消息,主机C发现自己就是192.168.1.4,于是响应了一个ARP数据帧。最终主机A收到主机C响应的数据帧,拿到了MAC地址,并把IP地址和MAC地址映射关系保存下来。

3、链路层设备之交换机

3.1、为什么需要交换机?

前面我们用了集线器组件网络,这个时候所有消息都会广播到其他端口,可以发现集线器转发了很多不必要的消息,能不能只发给需要的端口呢?这个时候就需要用到交换机了。

当一台电脑A向交换机发送数据时,交换机会把电脑A的IP和MAC地址记住,保存到一个转发表中,如果转发表中暂时找不到目标IP地址的MAC地址,那么首先还是会广播消息,最终转发表会记录所有请求过交换机的电脑IP和MAC。当然,转发表也是有过期时间的。

image-20211023115516387

如上图,看到交换机的奸笑没有,与集线器不同,交换机是有灵魂的的,你告诉他你的身份证号和住址了,他就会偷偷记下来。

3.2、为什么有了IP地址,还需要有MAC地址?

IP地址是工作在网络层的,后面会讲到;

MAC地址是工作在数据链路层的,也就是交换机这一层,交换机之间的主机进行通信,都是用的MAC地址,但是一旦走出了局域网,我们就得用大家都公认的IP地址了。

MAC地址就好像是我们的身份证,IP就像是我们的住址,可以根据住址寄送快递,但是不能根据身份证号码寄快递,别人不知道怎么走呢。

一个局域网,用身份证没有问题呀,因为要找某个人,ARP会大喊一声名字,那个人就会告诉你他的身份证号码了,这个时候直接以身份证作为标识传消息,别人听到不是自己的身份证就不管了。最终交换机这个小管家记住了所有人的名字跟身份证号码,就会使用悄悄话的方式传达消息了。这也就是用到了交换机的转发表。

3.3、交换机拓扑环路问题

假设我现在拉网线,搞了一个这样的拓扑结构:

image-20211023115557338

如上图,主机准备发送一个消息出去,结果交换机B收到后,复制数据帧,发送给了交换机A、C、D,此时交换机B认为主机是在左边。但是不妙的事情发生了,交换机D收到消息后,由于转发表还是空的,又是也复制数据帧,转发到了交换机A、B、C,这个时候交换机B发现怎么主机的数据又从右边传过来了,这些彻底晕了,不知道主机究竟在哪里。就这样数据一致在这个网络里面打转,这就拓扑环路导致的问题。

生成树协议

为了解决以上问题,于是 有了生成树协议(Spanning Tree Protocol,STP)。

STP通过在每个交换机禁用某些端口工作,来避免拓扑环路,保证不会出现重复路径。

STP会找到拓扑结构的一个生成树,通过生成树避免环路。生成树的形成和维护有多个网桥完成,在每个网桥上运行一个分布式算法。

以上拓扑,结构,最终应用了生成树,禁用一些端口之后,可能会是这样:

image-20211023115626829

这样,消息就不可能再传回左边的主机了,从而避免了拓扑环路导致的问题。

建立生成树:

网桥会发送一种称为网桥协议数据单元(BPDU)的帧来辅助形成和维护生成树。

STP首先会尝试选举根网桥,根网桥是在网络中标识符最小的网桥(也就是说优先级与MAC地址结合),网桥初始化的时候,假设自己是最小的网桥,然后用自己的网桥ID作为根ID字段的值发送配置BPDU消息,如果发现ID更小的网桥,那么会停止发送自己的帧,并基于接收到的ID更小的帧构造下一步发送的BPDU消息。发出根ID更小的BPDU端口被标记为根端口,剩余端口被设置为阻塞或者转发状态。

3.4、VLAN

References


  1. TCP/IP详解 卷1:协议(原书第2版). 机械工业出版社. P57 ↩︎

  2. TCP/IP详解 卷1:协议(原书第2版). 机械工业出版社. P116 ↩︎

本文作者: 帅旋

本文链接: https://www.itzhai.com/columns/network/data-link-layer.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。