title: 《计算机网络》笔记-第6章链路层和局域网
date: 2020-11-02 11:00:05
0. 前言
通过网络层,我们知道网络如何选择最优路径,将分组从一个主机发送到另一个主机。
而通过链路层,我们将知道:分组是如何在构成端到端最优路径的各段物理链路上进行传输的。
同样类比物流寄件,如果说网络层解决的是:将邮件从一个地址邮寄到另一个地址;那么链路层解决的就是:将邮件从一个节点交付给下一个节点,是采用卡车、还是飞机、还是轮船呢。
1. 概述
在链路层中,任何设备将称作节点(node),包括主机、路由器、交换机等。
连接相邻节点的通信信道则称为链路(link)。
链路层传输的分组称为帧(frame)。
在链路层的讨论中,将介绍两种不同类型的链路层通信:
- 广播信道。它用于连接有线局域网、卫星网中的多台主机等。
- 点对点信道。它用于长距离链路连接的两台路由器之间等。
链路层协议所提供的服务包括:
- 成帧。将网络层数据封装进链路层分组——帧中。
- 链路接入。媒体访问控制(Medium Access Control,MAC)协议规定了帧在链路上传输的规则。根据信道的不同,MAC 协议可分为点对点协议和多路访问协议两大类。在点对点信道上,MAC 协议比较简单;而在广播信道上,MAC 协议比较复杂。
- 可靠交付。有些高差错率的链路会提供可靠交付服务,但大部分都不提供。
- 差错检测和纠正。
链路层主体部分在**网络适配器/网络接口卡/网卡(Network adapter)**中实现,网卡的核心是一个实现了大部分链路层服务的芯片——链路层控制器(Controller)。剩余小部分链路层功能在 CPU 中实现。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OmAbiexc-1611933479271)(《计算机网络》笔记-第6章链路层和局域网/2.png)]](https://i-blog.csdnimg.cn/blog_migrate/498b2ab4f4276c107f6e4e64fca44b6f.png#pic_center)
2. 差错检测和纠正技术
上文提到,对链路层帧中的比特差错进行检测和纠正,是链路层提供的服务之一。接下来,将介绍3种差错检测技术:
- 奇偶校验
- 校验和方法
- 循环冗余检测
2.1. 奇偶校验
最简单的奇偶校验即使用单个奇偶校验位(parity bit)。假设发送 d 比特的信息,在偶校验方案中,发送方只需附加一个比特,使得这 d+1 比特中 1 的总数是偶数。奇校验则使 1 的个数是奇数。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iqbxiavH-1611933479278)(《计算机网络》笔记-第6章链路层和局域网/3.png)]](https://i-blog.csdnimg.cn/blog_migrate/12f0041413b215c673490660ac3e63c3.png#pic_center)
实践证明,单个奇偶校验位方案,检测出差错的概率为 50% 。
二维奇偶校验是一种更强大的方案。发送数据的 d 个比特被划分为 i 行 j 列,对每行每列计算奇偶值,产生 i+j+1 个差错检测比特。它还能用来纠正出现差错的比特。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bThKPeMk-1611933479283)(《计算机网络》笔记-第6章链路层和局域网/4.png)]](https://i-blog.csdnimg.cn/blog_migrate/d3deb14f646b9e865638204f3269d298.png#pic_center)
2.2. 校验和方法
与运输层校验和方法相同。
2.3. 循环冗余检测
当下使用最广泛的差错检测技术为循环冗余检测(cyclic redundancy check,CRC)编码,也被称为多项式编码。
其操作过程为:
-
发送方和接收方事先协商一个
r+1的比特串(最高位必须是1),称为生成多项式,我们将其表示为G。 -
对于要发送的
d字节数据D,发送方要得出r个比特的附加比特串R,并附加到D右边,使得这个d+r个比特能被G“整除”(除的过程中,加不进位、减不借位,等价于异或)。那如何得出R呢?示例:D=101110, d=6, G=1001, r=3,其计算过程如下,最后得到R为011,d+r个比特为101110 011。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ujpCIZRW-1611933479289)(《计算机网络》笔记-第6章链路层和局域网/5.png)]](https://i-blog.csdnimg.cn/blog_migrate/82af75b934db69f75279354931144fd9.png#pic_center)
-
接收方接收到
d+r个比特的数据后,会用G去除。如果余数非零,则表示出现差错;余数为零,则表示正确。
3. 多路访问链路和协议
此前提到,有两种类型的链路:
- 点对点链路。由单个发送方和单个接收方组成,相关协议有:点对点协议(point-to-point protocol,PPP)、高级数据链路控制(high-level data link control,HDLC)。
- 广播链路。当某节点发送数据时,它会以广播的方式发送,同一广播链路上的节点都能接收到。而当多个发送发同时发送数据时,数据会在链路中发生碰撞,以致数据被损坏。如以太网、无线局域网等都是广播链路。
我们将主要讨论广播链路,而广播链路中最重要的问题即多路访问问题(multiple access problem)。什么是多路访问问题呢?举个例子:有许多人聚集在一个房间中讨论问题,每个人都能发言。但讨论时,有可能每个人都争抢着发言、互不礼让,导致场面混乱不堪。
而为了让讨论井然有序地进行,我们需要指定一些规则:
- 每个人都有讲话的权力
- 不要一个人讲太久,导致其它人没有发言机会
- 想发言可以举手示意
- 不要贸然打断他人的讲话
- 当有人讲话时,不能睡觉
这些规则同样适用于解决多路访问问题,这也就是多路访问协议(multiple access protocols)。
当下,有十几种多路访问协议,我们将其划分为 3 种类型:
- 信道划分协议(channel partitioning protocols)
- 随机接入协议(random access protocols)
- 轮流协议(taking-turns protocols)
3.1. 信道划分协议
为了避免碰撞,我们可以将广播信道以不同的方式平均地分配给每个节点,这就是信道划分协议。
主要有三种信道划分方法:
-
时分多路复用(time-division multiplexing,TDM)。TDM 将时间划分为时间帧(time frame),并进一步将每个时间帧划分成 N 个时隙(slot),然后把 N 个时隙分配给 N 个节点。节点发送数据时,必须在指定时隙中传输比特。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sG6xOQWY-1611933479297)(《计算机网络》笔记-第6章链路层和局域网/6.png)]](https://i-blog.csdnimg.cn/blog_migrate/534541c1a71df61348d9e8b85f9bbc7a.png#pic_center)
其主要缺点为:节点速率被限制为 R / N b p s R/N bps R/Nbps ( R R R 为整个信道的速率),且必须等待它所属的时隙,即使它是唯一要发送的时隙。
-
频分多路复用(frequency-division multiplexing,FDM)。将信道划分为不同的频段(每个频段具有 R / N R/N R/N 带宽),并把 N 个频段分配给 N 个节点。它也有着与 TDM 相同的缺点。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C7DKLiFQ-1611933479298)(《计算机网络》笔记-第6章链路层和局域网/7.png)]](https://i-blog.csdnimg.cn/blog_migrate/639e43f7b84e3365c1cce0e8a58cc140.png#pic_center)
-
码分多址(code division multiple access,CDMA)。一种神奇的方法,目前已广泛地用于蜂窝电话中,我们将在之后详细讲解。
3.2. 随机接入协议
在随机接入协议中,节点总是以 R R R 速率发送数据。当发生碰撞时,节点会在等待随机时间后重新发送,如此循环。
我们将主要介绍两种常用的随机接入协议:
- ALOHA 协议
- 载波侦听多路访问协议(CSMA)
3.2.1. 时隙 ALOHA
时隙 ALOHA 结合了时分多路复用的方法,但进行了改进。
时隙 ALOHA 先进行了如下规定:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-odeJT44V-1611933479302)(《计算机网络》笔记-第6章链路层和局域网/8.png)]](https://i-blog.csdnimg.cn/blog_migrate/08f709b01bd68070796413f53092081d.png#pic_center)
然后,其操作过程为:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M1rINPGR-1611933479304)(《计算机网络》笔记-第6章链路层和局域网/9.png)]](https://i-blog.csdnimg.cn/blog_migrate/84b09a4a1558ffdf588599782ee46f1e.png#pic_center)
与信道划分不同,当只有一个节点发送数据时,它可以独占整个信道,也就是能以 R R R 速率发送数据。
但它的效率并不高。
分享一个历史小故事:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XdTS8oNp-1611933479308)(《计算机网络》笔记-第6章链路层和局域网/10.png)]](https://i-blog.csdnimg.cn/blog_migrate/084bc16b568f4c26be00bf79cd08fc8f.png#pic_center)
3.2.2. 载波侦听多路访问(CSMA)
CSMA 的关键在于 载波侦听(carrier sensing),它的本质很简单:一个节点在传输前先听信道,如果没有数据在传输,则发送数据;反之,则等待直到检测到信道一段时间都没有数据传输,再开始传输。
但 CSMA 存在一个问题:当两个节点都监听到信道空闲时,它们会同时发送数据,最终导致数据碰撞。
3.2.3. 具有碰撞检测的载波侦听多路访问(CSMA/CD)
CSMA/CD 在 CSMA 的基础上,加入了碰撞检测(collision detection)。传输节点在传输时会一直监听此信道,如果它检测到另一个节点正在发送干扰帧并产生碰撞,就停止传输,并等待一段随机时间后,重复“侦听——当空闲时传输——碰撞则等待”。
CSMA/CD 具体过程如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dfzpYc6D-1611933479310)(《计算机网络》笔记-第6章链路层和局域网/11.png)]](https://i-blog.csdnimg.cn/blog_migrate/c100ef84997ba02a1af2c8b7a4b90eea.png#pic_center)
算法中有一个很重要的随机时间,如果随机范围太大,则会降低节点效率;如果随即范围太小,则可能会再次碰撞。
为了解决这个问题,人们提出了 二进制指数后退(binary exponential backoff) 算法。算法十分简单,即:当该帧经历了 n n n 次碰撞后,节点将随机从 { 0 , 1 , 2... 2 n − 1 } \{0,1,2...2^n-1\} {0,1,2...2n−1} 中选择一个 K K K 值,等待 K K K 倍数的时间。因此,一个帧经历的碰撞越多, K K K 选择的范围也会越大。
3.3. 轮流协议
多路访问协议的两个理想特性是:
- 当只有一个节点活跃时,该节点具有 R b p s R bps Rbps 的吞吐量。
- 当有 M M M 个节点活跃时,每个节点都有接近 R / M b p s R/M bps R/Mbps 的吞吐量。
信道划分协议具备第2个特性,却不具备第1个;随机接入协议具备第1个特性,却不具备第2个。
为了同时实现这两种特性,人们又发明了轮流协议(taking-turns protocol)。轮流协议有很多,我们只讨论两种比较重要的协议:
-
轮询协议(polling protocol)。协议会从所有节点中指定一个主节点,主节点 轮询(poll) 每个节点。例如,主节点会先询问节点1,如果它要发送数据,那么主节点会告诉它能传输的帧的最多数量,传输完毕后主节点会接着询问节点,周而复始。虽然轮询协议避免了碰撞和空时隙的问题,提高了效率,但也有一些缺点:
- 引入了轮询时延。节点需要等待主节点轮询到它,才能发送数据。
- 若主节点发生故障,整个信道就不能使用了。
-
令牌传递协议(token-passing protocol)。一个称为 令牌(token) 的小特殊帧会在节点之间循环传递。当一个节点要发送数据时,它会持有这个令牌,并传输所有数据,然后再释放令牌;当不需要发送数据时,则传给下一个节点。令牌传递协议同样也存在着一些问题,例如:一个节点故障可能导致整个信道崩溃,或者一个节点忘记释放令牌等。
4. 交换局域网
4.1. 链路层寻址——MAC地址
主机与路由器都拥有链路层地址。但严格来讲,并不是主机和路由器拥有链路层地址,而是网络适配器(网络接口/网卡)拥有链路层地址。具有多个网卡的主机或路由器将具有多个链路层地址,也具有多个IP地址。
链路层地址有许多不同的称呼:LAN 地址、物理地址 或 MAC 地址,其中 MAC 地址最为常用。
对大多数局域网而言,MAC 地址长度为 6 字节,通常用十六进制表示,如 1A-23-F9-CD-06-9B 。网卡上的 MAC 地址是与生俱来的,也是固定的(现在可以改变,但我们不考虑),而且没有两块网卡的 MAC 地址是相同的。不论网卡到何处,MAC 地址都不会改变。
到此,你或许会疑惑:为什么网络层与链路层都需要地址呢?且听我慢慢道来。
- MAC 地址是扁平结构,且每个地址全球唯一,不论身在何处,它相当于身份证;IP 地址则是层次结构,主机移动时 IP 地址需要改变,它用来定位,相当于邮政地址。
- 链路层是为任意网络层协议而设计的,而不只是用于 IP 协议。如果网卡被指派 IP 地址,而不是“中性”的 MAC 地址,那将不能用于其它网络层协议。
- 若网卡使用网络层地址,那网络层地址就不能“刻”在网卡上,每次移动主机都得重新配置;或者网卡不使用任何地址,而直接交付给网络层,但这样的话,主机将被局域网发送的每个帧而中断,即使帧的目的地不是自己。
在局域网中,网卡会接收每一个发送的帧,并检查帧中目的 MAC 地址是否与自己 MAC 地址匹配。如果匹配,则取出帧中数据,向上层传递;如果不匹配,则丢弃该帧。
与 IP 协议一样,MAC 也有广播地址,即比特全为 1 的 MAC 地址,用于向局域网所有其它主机广播信息。
4.2. 地址解析协议 ARP
当网络层将数据报传给链路层时,链路层只知道目的 IP 地址,那它如何才能知道帧的目的 MAC 地址呢?这就是 地址解析协议(Address Resolution Protocol,ARP) 的任务了。
接下来,将通过两种情况了解 ARP 协议。
4.2.1. 在子网内发送数据报
每台主机或路由器在内存中都有一个 ARP 表,它包含 IP 地址到 MAC 地址的映射关系,以及每个映射的寿命(TTL)。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6KvwRLd3-1611933479313)(《计算机网络》笔记-第6章链路层和局域网/12.png)]](https://i-blog.csdnimg.cn/blog_migrate/87592d9e697678cb61dd72e0270004be.png#pic_center)
现假设主机 222.222.222.220 要向主机 222.222.222.222 发送数据报,但它的 ARP 表并未存在映射关系。当数据报传至链路层时,主机 222.222.222.220 需要用 ARP 解析协议来获取目的主机的 MAC 地址:
-
首先,
222.222.222.220主机会发送一个 ARP 查询分组,并使用 MAC 广播地址(FF-FF-FF-FF-FF-FF)为目的 MAC 地址。 -
该分组将被子网中所有主机或路由器接收到,这些主机或路由器将检查分组中的目的 IP 地址是否与自己的 IP 地址相同。若相同,则发送一个 ARP 响应分组。
-
源主机收到响应分组后,便会更新它的 ARP 表,然后正式发送数据报到
222.222.222.222主机。
4.2.2. 发送数据报到子网外
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8g0gUxkt-1611933479315)(《计算机网络》笔记-第6章链路层和局域网/13.png)]](https://i-blog.csdnimg.cn/blog_migrate/efd3dceb02b9ebddf6897e2636040eec.png#pic_center)
如上图所示,现有两个子网 111.111.111/24 和 222.222.222/24,假设主机 111.111.111.111 要向主机 222.222.222.222 发送数据报。由于子网 111.111.111/24 中并不存在主机 222.222.222.222 ,所以 ARP 协议并不能获取目的 MAC 地址,那怎么办呢?
-
首先,主机通过自己的子网信息,得知目的 IP 地址并不在自己的子网中,所以它会把目的 MAC 地址设为网关(路由器)接口的 MAC 地址。由于主机联网时便知道网关路由器的 IP 地址,所以它可以通过 ARP 协议获取网关路由器的 MAC 地址。
-
将数据报发送到网关路由器后,路由器会根据路由表选择输出链路接口,将数据报传递到对应接口的适配器中,准备发送。
-
帧的源 MAC 地址是路由器输出接口的 MAC 地址,而目的 MAC 地址是如何知道的呢?当然是 ARP !路由器会向对应子网中发送 ARP 查询分组,从而获取目的 IP 地址对应的 MAC 地址。
4.3. 以太网(Ethernet)
以太网(Ethernet)是当今最流行的有线局域网技术,甚至将一直保持这一位置。
它的成功有很多原因:首先,它是第一个广泛部署的高速局域网;其次,它比令牌环等技术更加简单、便宜;第三,它奋发上进,不断产生更高速率的版本,以抵抗其他技术的竞争。
20世纪80年代到90年代,初始的以太网,使用基于同轴电缆的 总线拓扑 结构,是广播局域网。
20世纪90年代后其,人们使用基于集线器的星形拓扑结构,依旧是广播局域网。
21世纪初,以太网经历了革命性变化,交换机代替了集线器,以太网成为了“无碰撞”局域网。
以太网帧结构如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ldos8Rzj-1611933479316)(《计算机网络》笔记-第6章链路层和局域网/15.png)]](https://i-blog.csdnimg.cn/blog_migrate/04e8cea929fd1d1a62e6b54a5719c535.png#pic_center)
各字段详情如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXNnvswm-1611933479318)(《计算机网络》笔记-第6章链路层和局域网/16.png)]](https://i-blog.csdnimg.cn/blog_migrate/59c9c51f20d765a93c8881d4206eed75.png#pic_center)
特此说明,以太网提供的是无连接、不可靠服务。即适配器在发送帧之前,不会与目标适配器握手;发送帧之后,也不知道目标适配器是否收到,而且如果某帧出现差错没有通过 CRC 效验,目标适配器则会丢弃该帧。
如今,以太网已发展了多种类型,各有各的特色。这些以太网技术,在多年中已经被 IEEE 802.3 工作组标准化了。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fSGRUVz8-1611933479321)(《计算机网络》笔记-第6章链路层和局域网/23.png)]](https://i-blog.csdnimg.cn/blog_migrate/3be26e6e154789764eaab441b67ad432.png#pic_center)
4.4. 链路层交换机
此前提到,基于交换机的以太网已成为主流。由于交换机是全双工的(同时向对方发送消息不会受到干扰),而且具有存储转发的功能,只转发帧到对应的端口。所以交换以太网不再是广播信道,也不会出现碰撞,甚至都不再需要使用多路访问协议了。
为什么交换机如此神奇呢?它的原理是什么呢?
4.4.1. 交换机的转发和过滤
过滤是决定一个帧应该转发还是丢弃,转发是决定一个帧该被导向到哪个接口。
这两个功能都借助于交换机表(switch table),表中每个表项都包含:一个 MAC 地址;通向该地址的交换机接口;表项放置在表中的时间。示例如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uadalZl6-1611933479323)(《计算机网络》笔记-第6章链路层和局域网/17.png)]](https://i-blog.csdnimg.cn/blog_migrate/ce241e05763a9f8ac5fab52234651cef.png#pic_center)
现假设目的 MAC 地址为 DD-DD-DD-DD-DD-DD 的帧从接口 x 到达交换机:
- 表中没有
DD-DD-DD-DD-DD-DD的表项,则向所有接口广播该帧。 - 表中存在
DD-DD-DD-DD-DD-DD但对应的接口是x,则丢弃该帧。 - 表中存在
DD-DD-DD-DD-DD-DD且接口为y,则将帧转发到该接口。
4.4.2. 自学习
交换机另一个神奇的特性是:自学习。交换机表是自动、动态地建立的,不需要人为配置,所以交换机是一个即插即用设备。
那交换机是如何实现自学习的呢?
- 交换机表初始为空。
- 对于每一个到达交换机的入帧,交换机都会在表中存储一个表项:该帧的源 MAC 地址;该帧进入的接口;当前时间。只要局域网中的主机发送了一个帧,那它就会在交换机中留下记录。
- 如果一段时间后,交换机没有收到以该地址为源地址的帧,就会从表中删除这个地址。
4.5. 虚拟局域网
虽然交换机简单又好用,但也存在着一些问题(以下图为例):
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4cWtbzP6-1611933479325)(《计算机网络》笔记-第6章链路层和局域网/19.png)]](https://i-blog.csdnimg.cn/blog_migrate/4cc5495a9ba28f764b1301484291bafd.png#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WImVsIAL-1611933479327)(《计算机网络》笔记-第6章链路层和局域网/18.png)]](https://i-blog.csdnimg.cn/blog_migrate/702ec8d427f3a0db040d3d1773bf1fb0.png#pic_center)
为了解决这些问题,虚拟局域网(VLAN) 出现了,它可以将一个物理局域网划分成多个虚拟局域网,虚拟局域网之间互不干扰。如下图:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kPIfklYZ-1611933479330)(《计算机网络》笔记-第6章链路层和局域网/20.png)]](https://i-blog.csdnimg.cn/blog_migrate/5b0e49370177681d0e4d33c6b1d0cb2d.png#pic_center)
但新的问题是:不同 VLAN 之间如何通信呢?
最简单的方法是,用一个路由器将两个 VLAN 连接起来。幸运的是,综合 VLAN 交换机和路由器的单一设备的出现,使这个方法更为容易。
另一种方法则被称为 VLAN 干线连接(VLAN trunking):
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VyfXCUAV-1611933479332)(《计算机网络》笔记-第6章链路层和局域网/21.png)]](https://i-blog.csdnimg.cn/blog_migrate/b6ae818e01482ffe680cc8e9b1d363dc.png#pic_center)
5. Web 页面请求历程
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pp5044Nr-1611933479334)(《计算机网络》笔记-第6章链路层和局域网/22.png)]](https://i-blog.csdnimg.cn/blog_migrate/5860c1d40f9cd768005050153e2aff12.png#pic_center)
本文详细介绍了计算机网络的链路层,涵盖差错检测技术、多路访问协议(如CSMA/CD)、交换局域网(MAC地址、ARP、以太网和交换机原理)以及虚拟局域网的应用。
1750

被折叠的 条评论
为什么被折叠?



