网络 | 数据链路层讲解 | MAC帧与APR协议

文章目录

    • 前言
    • 以太网的认识
    • 以太网的帧格式
      • 交换机,冲突域 VS 广播域
      • 三层交换机,二层交换机 VS 路由器
    • ARP协议
      • ARP报文的MAC地址
      • MAC表 VS ARP表
      • 免费ARP

前言

网络层负责数据包从源主机到达目的主机,这个过程包含了多次的路由转发,每次的路由转发被形象的称为“跳”。那么数据链路层就提供了数据包从一台路由跳到另一台路由的能力,也就是到达下一跳的能力

以太网的认识

以太网不是具体的网络,而是一种技术标准,即包含了数据链路层的内容,也包含了一些物理层的内容,是应用最广泛的局域网技术

比如以太网规定了网络的拓扑结构,访问控制方式,其网线必须使用双绞线,传输速率有10Mbps,100Mbps,1Gbps,10Gbps,100Gbps。以太网的主要特点是:多台设备使用同一条总线,同一时刻只允许一台设备在总线上通信,其他设备必须等待其传输结束才能进行通信

以太网的帧格式

网络 | 数据链路层讲解 | MAC帧与APR协议_第1张图片

图源网络
以上帧格式是最原始的版本,现在的帧格式与之有些出入

  • 前导码:7个字节,由交替的0和1构成,用于调整和同步发送和接收设备的时钟信号。
  • 帧起始符:1个字节,由10101011组成,用于标识帧的开始,让接收端准备接收数据。
  • 目的地址:6个字节,表示帧要发送到的目标设备的MAC地址。
  • 源地址:6个字节,表示帧从哪个设备发送出来的MAC地址。
  • 类型/长度:2个字节,表示帧携带的上层协议类型或者数据部分的长度。
    • 0800表示IP协议
    • 0806表示ARP协议
    • 0835表示RAPR协议
  • 数据:46~1500个字节,表示帧携带的上层协议数据或者用户数据。
  • 校验序列:4个字节,表示帧经过CRC算法计算得到的校验值,用于检测传输过程中是否有误码。

现在的帧格式加入了前导码和帧起始符,这两部分由物理层封装,不包含在以太网报头中,我们也可以将其忽略

在以太网中广播数据包时,接收到数据包的主机会对数据帧进行解析,判断其目的MAC是否和自己的MAC地址相同,不同则丢弃,相同则将数据帧的有效载荷向上交付。由于报头有2字节字段表示上层所使用的协议,所以链路层可以根据这个信息进行向上交付。

但是所有主机采用同一总线进行通信会导致数据碰撞的问题,为了减少碰撞发生的概率,发送的数据帧应该尽可能的小,所以有了MTU对大小限制。同一广播域下的主机是怎样通信的呢?

  • 当一台主机发送数据时,需要检测信道是否空闲,如果空闲则发送数据
  • 当一台主机发送数据时,其他主机处于监听状态,如果其他设备发送数据,将发生碰撞
  • 当碰撞发生,所有设备停止数据的发送,随机等待一段时间后重新发送数据
  • 当一台主机完成发送时,它会收到一个确认帧,表示传输的完成

交换机,冲突域 VS 广播域

交换机(一般指二层交换机)划分了不同的碰撞域,但没有划分不同的广播域,碰撞域是指竞争同一带宽的节点集合,而广播域是指接收同样广播信息的节点集合

交换机工作在数据链路层,它可以根据MAC地址进行数据转发,从而减少碰撞的发生概率,交换机的每一个端口都是一个碰撞域。当不同冲突域的主机要进行通信时,它们需要通过交换机(或者网桥)的连接,发送数据到交换机的某一端口上

交换机的所有端口都在同一广播域中,当收到广播或者组播数据时,它会泛洪到所有端口。如果要划分广播域,就需要用到路由器或者三层交换机这样的网络层设备,它们的每一个端口都是一个广播域

三层交换机,二层交换机 VS 路由器

  • 二层交换机工作在数据链路层,三层交换机和路由器工作在网络层。
  • 二层交换机维护MAC表,根据设备的MAC地址进行数据帧的转发
  • 二层交换机划分了同一广播域下的不同碰撞域,只能在同一广播域下进行通信,如果想跨广播域进行通信,需要用到三层交换机或者路由器
  • 三层交换机和路由器都是负责不同局域网之间的通信
  • 三层交换机的主要功能是数据交换,只提供一些基本的路由功能,适用于相同局域网间的连接。路由器的主要功能是路由转发,提供了二层和三层交换机端口,防火墙,网络管理等附加功能,适用于连接不同类型的网络,如局域网和广域网
  • 三层交换机通过硬件执行数据交换,而路由器通过软件路由引擎实现数据交换,因此,三层交换机比路由器拥有更快的转发效率和更低的延迟
  • 三层交换机只支持静态路由或者单一动态路由协议,配置简单。而路由器支持更复杂和丰富的协议栈和配置选项,支持多种路由协议,NAT技术,访问控制列表等功能
  • 三层交换机可以利用流缓存条目进行快速转发,而路由器每次的转发都需要路由查找+转发决策,效率更低

ARP协议

在OSI模型中,ARP协议属于数据链路层,因为它是通过以太网帧进行封装和转发的。在TCP/IP模型中,ARP协议属于网路层,因为它是TCP/IP协议簇的一部分,负责用IP地址获取MAC地址。

可以理解为ARP协议位于网络层和数据链路层之间

网络 | 数据链路层讲解 | MAC帧与APR协议_第2张图片
图源网络
数据包在不同网段间转发,每次的转发都要决定下一跳的地址,也就是说,只有源IP和目的IP是保存不变的,而源MAC和目的MAC总是在变化,这是由于网关在不断的变化。所以源主机无法直接得知对方的MAC地址,我们只能根据下一跳的IP地址,用ARP协议获取其MAC地址

  • 2字节硬件类型:指明发送方想知道的硬件接口类型,以太网的值为1
  • 2字节长度类型:表示网络层使用的协议,如0800表示IP协议
  • 1字节硬件地址长度:表示MAC地址的长度,以太网为6
  • 1字节协议地址长度:表示协议地址长度,IP为4
  • 2位操作码:表示操作类型,1为请求报文,2为响应报文
  • 6位发送方MAC地址:表示源主机MAC地址
  • 4位发送方IP地址:表示源主机IP地址
  • 6位接收方MAC地址:表示目的主机MAC地址,在请求报文中为全0,响应报文为正常值
  • 4位接收方IP地址:表示目的主机IP地址
  1. 其中ARP请求报文是一个广播包,因为源主机不知道目的主机的MAC地址,所以需要广播。在数据链路层的封装中,目的MAC地址为全1,表示广播,在ARP报文的封装中,目的MAC地址为全0,表示目的主机未知
  2. ARP响应包是一个单播包,在数据链路层报头和ARP报文中都填写了自己和源主机的IP地址和MAC地址
  • 广播包是指一台主机发送的数据包可以被同一网段内的所有主机接收,它是一对多的通信方式
  • 单播包是指一台主机发送的数据包只能被同一网段内的指定主机接收,它是一对一的通信方式

广播包发送后:

  • 当广播域下的主机收到数据帧时,会进行报头解析,发现其目的MAC地址为全1,是一个ARP广播包
  • 这时链路层会将其向上交付,交付给ARP层,ARP解析其中的信息,假设其中的op字段为1,表示ARP请求,接着判断目的IP地址是否与自己的IP地址相等
  • 如果不等,则丢弃
  • 如果相等,则制作一个ARP应答包,以单播包的方式发送给ARP请求方,告知自己的MAC地址和IP地址

ARP应答包中,目的IP和目的MAC分别为ARP请求包中的源IP和源MAC,而源IP和源MAC分别为自己的IP和MAC地址。

  • 发送单播包时,同一广播域下的所有主机都能接收到,数据链路层对其解析,判断其报头中的目的MAC地址是否与自己相等
  • 如果不等,则丢弃
  • 如果相等,则向上交付,判断ARP报文中op字段是否为2,如果是:记录源IP与源MAC地址之间的映射关系,更新ARP表
  • 如果不是:说明这是一个ARP请求报文,则制作ARP应答包,以单播包的方式发送给ARP请求方,告知自己的MAC地址和IP地址

每台主机都维护了一张ARP表,其存储了MAC地址和IP地址之间的映射关系。ARP表分为动态和静态两种,动态ARP表中,每个表项都有一个老化时间(一般是20分钟),时间一到,每隔一段探测时间,就会发送一个ARP请求给对方,以更新该表项。如果探测次数到达一定次数,却没有收到响应,即认为对方主机不可达或者离开了网络,并删除该表项。默认探测时间是5秒,探测次数是3或6次,这些都可以通过命令修改

ARP报文的MAC地址

ARP报文中,MAC地址出现了两次,它们有什么区别?

  • 第一对源MAC和目的MAC是数据链路层的封装,表示二层帧的发送方和接收方。在ARP请求中,源MAC为自己的MAC地址,目的MAC为全1,表示广播
  • 第二对源MAC和目的MAC是ARP数据包中的字段,在ARP请求中,源MAC地址为自己的MAC地址,目的MAC为全0,表示要查询指定IP的MAC地址,但是该地址现在未知

至于说为什么出现两次

  • 二层帧的MAC地址用来进行数据链路层的帧转发
  • 而ARP报文中的MAC地址用来进行网络层的地址解析,两者的用途不同,当然要出现两次

MAC表 VS ARP表

  • 二层交换机会维护一张MAC地址表,存储MAC地址与端口号之间的映射关系,ARP表是存储MAC地址和IP之间映射关系的表
  • 当数据帧需要经过交换机转发时,交换机会查询这张表。当数据报在数据链路层被封装时,会用到ARP表查询目的MAC地址
  • 当交换机转发数据帧时,会更新MAC表。当收到ARP请求或者ARP应答时,主机会更新ARP表
  • 交换机的MAC表不能存储全1的地址,主机的ARP表不能存储自己的地址

免费ARP

免费ARP是一种特殊的ARP报文,其目的是:告知对方自己的MAC地址,更新ARP表项,检测IP地址冲突。

免费ARP分为两种:免费ARP请求和免费ARP应答。它们的数据链路层报头中,目的MAC都是全1,表示广播。免费ARP请求一般不需要应答,当IP冲突时,有冲突的主机会发送免费ARP应答来抢占IP

  • 当虚拟网关发生切换时,为了通知其他主机自己的浮动IP和浮动MAC地址,可以发送免费ARP请求,其内容如下
    • 二层帧中,源MAC地址是自己的新地址,目的MAC是全1,表示广播包
    • ARP报文中,源IP和目的IP都是自己,表示这是一个免费ARP,一般不需要应答。源MAC地址是自己的新地址,而目的MAC地址为全0,表示目的主机的MAC地址未知
  • 当主机切换了网卡或MAC地址时,为了通知其他主机或网关,自己的新MAC地址,可以发送免费ARP应答。或者主机接收到免费ARP请求后,发现两者的IP冲突,此时可以发送免费ARP应答,以告知对方,IP地址已被使用。其内容如下
  • 二层帧中,源MAC地址是自己的新地址,目的MAC是全1,表示广播包
  • ARP报文中,源IP和目的IP都是自己,表示这是一个免费ARP,一般不需要应答。源MAC和目的MAC都是自己的MAC地址,表示这是一个免费ARP应答

至于两者之间的区别:

  • 免费ARP请求用来声明自己的源MAC和目的MAC之间的新映射关系,用来检测IP冲突,ARP报文中,目的MAC和源MAC不同
  • 免费ARP应答用来声明自己的新MAC地址,ARP报文中目的MAC和源MAC相同
  • 它们都可以使其他主机更新ARP表

如果你看到这了,下面是一些自测问题,用来检测你对链路层的掌握情况:

广播域是否等价于网段?
冲突域和广播域的区别?
三层交换机与路由器的区别?
ARP报文中源MAC和目的MAC出现两次?为什么,它们的含义一样吗?

你可能感兴趣的:(Linux网络,网络,macos,linux)