【网络】计算机网络笔记——链路层简要笔记

链路层的服务

运行链路层协议的设备被称为『节点』,它包括了主机、路由器、交换机、WIFI 接入点等等。节点之间沿通信路径连接的信道为链路。传输节点会将数据报封装于链路层帧中,并将帧传送到链路中。

链路层主要提供的服务如下:

  • 成帧:将网络层的数据报封装为链路层帧。
  • 链路接入:媒体访问控制(MAC)协议规定了帧在链路中的传输规则,MAC 协议用于协调多个节点的帧传输。
  • 可靠交付:有的链路层协议提供可靠交付服务,它保证无差错地经链路层移动每个网络层数据报。(与运输层的可靠交付服务类似,也是通过确认和重传实现)
  • 差错检测、纠正:有的链路层协议会提供一种机制来对差错进行检查和纠正。

链路层是硬件和软件的结合体,链路层的主体是在网络适配器(网络接口卡)实现,网络适配器的核心是链路层控制器,它通常是一个实现了很多链路层服务的专用芯片。

链路主要分为两种:点多点链路广播链路。点对点协议由链路一端的单个发送方和另一段的单个接收方组成,而广播链路可以让多个发送和接收节点都连接到相同、单一、共享的广播信道上。一般来说广播信道用于局域网中。

差错检测和纠正技术

链路层主要提供了一种 位级差错检测和纠正,下面有一些常用的差错检测技术:

奇偶校验

通过一个奇偶校验位实现,对于奇校验方案,通过这个奇偶校验位的选择,使得所有位中 1 对个数为一个奇数,而偶校验方案则是使得 1 的个数为偶数。

接收方接收后,如果偶校验方案中出现了奇数个 1,则说明出现了奇数个的 位 差错。但显然这样的方案无法检测偶数个位差错。

同时还有一种二维的奇偶校验方案,这种方案会对行和列进行奇偶校验么,这样的做法可以检测到出现的单个位 错误,并且还可以通过行和列对它进行定位并进行纠错

检验和

检验和技术会将 d 位数据作为一个 k 位的整数的序列处理,并将这些 k 位整数加起来作为差错检验 位。Internet 检验和就是用了这种方式,它将数据看作 16 位的整数对待并处理。

循环冗余检测

循环冗余检测(CRC)是目前广泛应用的一种差错检测技术,它基于 CRC 编码(多项式编码),将 bit 看作是系数为 1 和 0 的多项式,将对 bit 流的操作看作是多项式算法。

CRC 编码的过程:对于 d 位的数据 D,发送方和接收方首先会协商一个 r + 1 位的生成多项式 G,对于数据 D 的发送,发送方会选择 r 个附加位 R 附加到 D 上,得到了一个 d + r 位的序列。而接收方只需要用 G 去除收到的 d + r 位,若余数不为 0,则出现了差错。

CRC 的计算在加法、减法中不进行进位和借位。这就意味着加法和减法是等价的,它们都可以用异或来表达。

多路访问链路及协议

对于链路层来说,协调多个发送和接收节点对一个共享广播信道的访问的问题十分重要,这种问题称为多路访问问题。通过多路访问协议,可以对节点在共享的广播信道上的传输行为进行规范。

由于每个节点都可以对帧进行传输,因此可能出现所有节点同时收到多个帧的情况,此时多个传输的帧在接收方碰撞,导致没有节点能够有效地获得信息,从而导致了对广播信道带宽的浪费。因此为了确保广播信道的有效工作,需要有一种方式对节点的传输进行协调,这就上多路访问协议的工作。

多路访问协议可以大致分为:信道划分协议随机接入协议轮流协议三种。

信道划分协议

信道划分协议主要是对如何对信道进行划分进行了规范,如时分多路复用(TDM)、频分多路复用(FDM)等。TDM 主要是对时隙进行划分,而 FDM 主要是对频段进行划分。

还有一种码分多址(CDMA),它会对每个节点分配一种不同的编码,之后用它唯一的编码对发送的数据进行编码,通过码分复用可以实现不同的结点同时进行传输,CDMA 中的编码类似于 TDM 中的时隙和 FDM 中的频率。

随机接入协议

随机接入协议中,一个传输节点总是以信道的全部速度进行发送,有碰撞时,则涉及碰撞的每个节点都会反复重发,直至这个帧无碰撞位置,这个反复重发不是立即进行重发,它会等待一个随机的时延,再进行重发

轮流协议

轮流协议主要有两种:轮询协议令牌传递协议

轮询协议会将节点中的其中一个指定为主节点,主节点会以循环的方式对每个节点进行轮询,告知每个节点它所能够传输的帧的最大数量,并让该节点进行传输。它有两个缺点,一是引入了轮询时延,二是主节点的故障会导致整个信道不可用。

令牌传递协议会将一个称为令牌(token)的特殊帧在节点之间以一种固定次序进行交换,当节点收到令牌时,它会进行数据的传输,之后将令牌转发给下一个节点。令牌传递协议的效率非常高,但它的缺点在于任何一个节点的崩溃都会导致整个信道的崩溃。

链路层寻址和 ARP 协议

主机和路由器都具有自己的链路层地址,它与网络层的地址不同,通过地址解析协议(ARP)可以实现 IP 地址到链路层地址的转换。

MAC 地址

地址其实并不是主机和路由器具有的,而是它们的适配器(网络接口)具有链路层的地址,因此有多个网络接口的主机、路由器有多个链路层地址。而链路层的交换机并不具有它的接口相关联的链路层地址,因为交换机的主要任务是在主机、路由器之间承载数据报,主机和路由器并不会直接将帧寻址到交换机。

链路层地址有不同的称呼:LAN 地址MAC 地址物理地址,我们往往都叫它 MAC 地址。对于局域网而言,MAC 地址长 6 字节。

虽然 MAC 地址被设计为了永久的,也就是不会随时间而变动,但仍然可以通过软件改变一块适配器的 MAC 地址,但我们往往假设适配器的 MAC 地址是固定的。

当某个适配器要向目的适配器发送一个帧时,发送适配器会将目的适配器的 MAC 地址填入帧中,并将帧发送到局域网中,由于存在广播帧,因此适配器可以接受一个并非向它寻址的帧。当适配器接收到一个帧时,它会检查帧中的目的 MAC 地址是否与自己的 MAC 地址匹配。若匹配,则适配器会提取出封装的数据报并向协议栈上层传递,若不匹配,该适配器会丢弃该帧。

但有时发送适配器想要让局域网上所有其他适配器来接受并处理它发送的帧,此时它会在目的帧地址字段插入一个特殊的 MAC 广播地址,这个地址是用 1 来填满的。例如对 6 字节地址的局域网来说,该地址为 FF-FF-FF-FF-FF-FF。

地址解析协议 ARP

由于存在网络层地址(IP 地址)和链路层地址(MAC 地址),因此需要在它们之间进行转换,这由 地址解析协议(ARP) 来完成。

ARP 与 DNS 相似,DNS 是将 url 解析为 IP 地址,而 ARP 则是将 IP 地址解析为 MAC 地址,但 DNS 是针对整个 Internet 中的任何位置的,而 ARP 只是针对同一个子网上的主机和路由器接口解析 IP 地址

每台主机、路由器中具有一个 ARP 表,它包含了 IP 地址到 MAC 地址的映射关系。同时该 ARP 表还包含了一个 TTL 值,指示了该映射被删除的时间。通常一个表项的过期时间是 20 分钟。

IP 地址 MAC 地址 TTL
222.222.222.221 88-B2-2F-54-1A-0F 13:45:00
222.222.222.223 5C-66-AB-90-75-B1 13:52:00

例如现在假设 222.222.222.220 需要发送一个数据报,这个数据报需要 IP 寻址到另一台主机、路由器上。则发送方需要获得 IP 地址对应主机所对应的 MAC 地址:

  • 若 ARP 表中具有这个目的节点的表项,则可以很容易地获取该 IP 地址所对应的 MAC 地址。
  • 若 ARP 表中没用该目的节点的表项,则发送方会使用 ARP 协议进行解析:
    1. 发送方构造一个称为 ARP 分组的特殊分组,它包括了发送和接收 IP 地址及 MAC 地址。(ARP 查询分组和响应分组都有这样的形式),对于这个 ARP 查询分组,适配器会将它的目的 MAC 地址设置为 MAC 广播地址(FF-FF-FF-FF-FF-FF),并将其传输进入子网中。
    2. 子网上的其他适配器都能够收到这个 ARP 查询帧,并将其向上传递给 ARP 模块。
    3. ARP 模块会检查 IP 地址是否与该 ARP 分组的 IP 地址匹配,若相匹配则会给查询主机发送一个带有期望的映射的 ARP 分组。
    4. 查询主机收到后,则会更新它的 ARP 表,并发送它想要发送的 IP 数据报。

可以发现,ARP 协议在发送查询分组的时候,是通过广播帧发送的,而发送响应分组时,则是通过标准帧,这是由于查询时并不知道目的主机的 MAC 地址,只能通过广播向子网中的其他主机进行确认。而发送响应分组时,由于查询方发送来的查询分组中已经包含了自己的 IP 及 MAC 地址,所以可以有目的性的指向该主机进行发送,没必要再以广播的形式发送。

ARP 协议基于链路层帧实现,但同时它又包含了网络层的 IP 地址等信息,因此它可以说是一个跨越了链路层和网络层的协议

发送数据到子网之外

image-20191218113227536

如上图,每台主机有 1 个 IP 和 MAC 地址,而一台路由器对它的每个接口都有一个 IP 地址和 MAC 地址。

如果现在子网 1 想要给子网 2 的一台设备发送数据报, 此时发送主机该指示怎样的地址呢?由于子网 1 不包含要发送的目的主机,而适配器发送帧是发送到局域网内的,因此显然不能直接填入目的主机的 MAC 地址。

因此,它发送的目的地址实际上是路由器接口 111.111.111.110 的 MAC 地址,也就是 E6-E9-00-17-BB-4B。要获得路由器的 MAC 地址,则可以通过 ARP 协议做到。

为了将数据报移动到目的主机,路由器之后会查询转发表,然后发现通过接口 2 可以向目的主机发送数据,之后便尝试获取目的主机的 MAC 地址(也是通过 ARP 协议),并将数据推入对应链路。

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

《自顶向下》中还提出了一个比较有趣的问题,既然链路层已经存在了一个 MAC 地址,我们为何还需要 IP 地址呢?

核心原因在于:网络层寻址是分层次的,而链路层寻址则是扁平的

首先,我们都知道,MAC 地址是网络适配器生产的时候就已经决定的,与地域无关。也就是说我们无法通过 MAC 地址去确定它所处的局域网,从而让路由器确定该如何转发。如果我们想要让一个报文能够通过 MAC 地址实现对整个全球互联网中的其他机器进行数据传输,那么我们必须要知道每个 MAC 地址所对应的局域网,也就是说每台路由器中都需要记录下世界上所有的 MAC 地址所对应的位置,这显然不现实。

而 IP 地址则是由最上级开始一级一级划分子网从而派发的,它具有地域性,同一个子网下的设备的 IP 地址前缀是相同的,通过这个前缀的匹配,我们可以确定 IP 地址所对应的子网,而路由器也只需要记录对应子网对应的接口即可。

我们可以将 MAC 地址当作我们的身份证,而 IP 地址则可以当作我们的一个地址。显然快递员(路由器)是无法通过我们的身份证号来找到我们具体的位置并将快递(报文)交给我们的,除非他们知道世界上每一个身份证号对应的地址。而他们则可以通过地址由发送地一级一级转发,根据地址来确定我们的具体位置并交给我们。

(从这个角度来看快递系统和网络的系统还真是挺像的)

以太网

以太网是一种现在主流的局域网。

以太网帧

以太网帧的格式如下:

image-20191218120338332

它有如下六个字段:

  • 数据字段(46-1500字节):承载了 IP 数据报,以太网最大传输单元为 1500 字节,若超过则需要进行分片处理,低于 46 字节会被填充到 46 字节。
  • 目的地址(6 字节):包含了目的适配器的 MAC 地址。
  • 源地址(6 字节):包含了传输该帧到局域网的适配器的 MAC 地址。
  • 类型字段(2 字节):表示了上层的网络层协议,其中 ARP 协议也有自己的类型编号。
  • CRC(4字节):用于进行差错检测(循环冗余检测)。
  • 前同步码(8字节):这个前同步码的前 7 个字节固定为 10101010,最后一个字节为 10101011。前 7 个字节用于『唤醒』接收适配器,并将它们的时钟与发送方时钟进行同步。

以太网技术

所有以太网技术都向网络层提供不可靠服务,比如若发现 CRC 校验不通过时,它会直接进行丢弃,不会进行如确认之类的操作,因此发送方无法知道传输的帧是否到达并通过 CRC 校验。

链路层交换机

交换机的主要任务是接收链路层帧并转发到出链路。它就像链路中的一部分一样,主机、路由器并不知道它的存在。

交换机转发、过滤

过滤则决定了帧应当被转发还是应当被丢弃,而转发决定了一个帧应该导向哪个接口。这个过滤、转发的过程通过交换机表完成。

交换机表包含了局域网中某些但并不是全部的主机和路由器的表项,一个表项主要由地址、接口、到达时间构成。

地址 接口 时间
62-FE-F7-11-89-A3 1 9:32
7C-BA-B2-B4-91-10 3 9:36
... ... ...

例如现在有一个目的 MAC 地址为 DD-DD-DD-DD-DD-DD 的帧从接口 x 到达,则交换机尝试在交换机表中寻找,可能有以下情况:

  • 若没有对应的表项,则交换机会向除接口 x 以外所有接口转发这个帧的副本(放入对应接口的输出缓存,这里实际上是在广播这个帧)
  • 若有对应表项,但指向的是接口 x,则无需将其转发至其他接口,交换机会丢弃该帧。
  • 若有对应表项,并且是指向接口 y,则这个帧会被转发到接口 y 相连的局域网网段(放入 y 的输出缓存)。

交换机的自学习

交换机的交换机表不需要进行配置,它是动态,自行建立的(自学习)。ARP 表可以通过 ARP 响应报文来确定解析表项从而实现自学习,那交换机传输帧这种提供不可靠服务,收不到反馈的机制又是如何实现自学习的呢?

其具体方式如下:

  1. 交换机表初始状态为空
  2. 对于从每个接口收到的每个帧,交换机都会在其交换机表中记录下源地址段到达接口当前时间。如果局域网中每个节点都发送了一个帧,则这个节点会在表中有记录。
  3. 若一段时间(老化期)后,交换机没有继续接收到该地址为源地址的帧,则将其从表中移除。

因此交换机与 ARP 协议一样,都具有即插即用的特点,不需要对他们进行额外的配置。

交换机的性质

交换机具有如下的几个优点:

  • 消除碰撞:由于交换机不会在网段上同时传输多个帧,因此不存在碰撞的问题。
  • 异质的链路:由于交换机将链路之间彼此隔离,因此它能使得不同的链路以不同的速率运行,可以实现原有设备与新设备的混用
  • 管理:它提供了强大的安全性。

交换机与路由器

交换机与路由器非常相似,它们都是存储转发分组交换机,但路由器是基于网络层地址(IP)进行转发,而交换机是基于链路层地址(MAC)进行转发。

交换机具有如下的特点

  • 优点
    • 即插即用
    • 较高的分组过滤和转发速率
  • 缺点
    • 主机和路由器中需要有大量的 ARP 表
    • 对广播风暴问题不提供任何保护措施

而路由器则具有以下的特点:

  • 优点
    • 允许以丰富的拓扑结构构建因特网
    • 有着更健壮的流量隔离方式和对广播风暴的控制。
  • 缺点
    • 并非即插即用,需要人为对路由器和主机进行配置(DHCP 可以解决)
    • 分组的处理速率相对更慢

参考资料

《计算机网络:自顶向下方法》

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

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注

%d 博主赞过: