链路层概述
上一章我们了解了网络层提供主机与主机间的通信服务。而数据报会封装在链路层帧并在链路中传输,而链路层则是提供了各种链路的传输服务。在这里,我们将运行链路层协议的任何设备均称为节点(例如主机、路由器、交换机等),并将沿着通信路径连接相邻节点的通信信道称为链路。
通过下图我们将了解到数据报是如何在网络中传输的,考虑从公司网络发送一个数据报给服务器,它将经过数段链路:发送主机与Wifi接入点之间的Wifi链路,接入点和链路层交换机之间的以太网链路,链路层交换机与路由器之间的链路,两台路由器之间的链路,最后是交换机和服务器之间的以太网链路。在通过每一段链路时,传输节点会将数据报封装在链路层帧中并发送到链路中。

链路层中,我们将看到两种不同类型的链路层信道。一种是广播信道,这种信道用于连接有线局域网、卫星网和混合光纤同轴电缆接入网中的多台主机。第二种链路层信道是点对点通信链路,这种信道用于连接诸如长距离链路连接的两台路由器或用户办公室计算机与它们所连接的邻近以太网交换机。
链路层提供的服务
- 成帧。几乎所有链路层协议都会将网络层的数据报封装成链路层帧。
- 链路接入。媒体访问控制协议(Medium Access Control, MAC)规定了帧在链路上传输的规则。
- 可靠交付。部分链路层协议提供可靠交付服务。
- 差错检测和纠正。检测链路层帧中出现的比特差错,在特定条件下某些检验方法可以纠正出现的比特差错。
链路层在何处实现
在路由器中链路层是在线路卡中实现的。而在主机中链路层的主体部分是在网络适配器(network adapter)中实现的,网络适配器有时也被称为网络接口卡(Network Interface Card),简称网卡。

差错检测和纠正技术
链路层的差错检测技术是为了对从一个节点发送到另一个相邻节点的链路层帧中的比特进行差错检测和纠正,典型的检测方式有三种:奇偶校验、检验和方法和循环冗余检测。一般检验方法都遵循下图所示模式,通过增加额外的检验字段并执行响应的算法来验证是否有比特差错。

奇偶校验:简单奇偶检验使用1个奇偶检验位,假设发送信息有d比特,如果是偶校验,则信息数据加上校验位中的1的个数一共是偶数,奇校验则是奇数个。在接收方只需要验证信息数据加上校验位中1的个数是否是偶数个/奇数个就能检验是否出现比特差错,但是奇偶检验的健壮性并不强,如果出现偶数个比特差错则无法检测出是否出错。
检验和方法:检验和技术会将发送的信息数据作为一个k比特整数的序列处理,给所有k比特求和,求和后的反码存储在首部检验和字段中。接收方只需要将包括检验和首部字段在内的信息数据字段作为k比特序列求和即可,如果记过全为1则表示没检测出差错,否则表示有比特差错。这种比特检测方式,比起奇偶校验有更强的健壮性,只有极低的概率会出现有比特差错而未能检测出的情况。
循环冗余检测:给定一个数据段D,发送方将D的比特数据(d比特)左移r比特位,然后除以一个特定的除数G(r+1比特)得到CRC校验位R(r比特),将这个校验位附加到数据末尾发送给接收方。接收方用D·2^r + R除以G,如果能整除则表示没有检测出比特差错,如果有余数则表示有比特差错。CRC一般在硬件中实现,优点是速度快,健壮性强。
多路访问链路和协议
前面我们提到过链路层有两种类型的链路,即点对点链路和广播链路。点对点链路由链路一端的单个发送方和链路另一端的单个接收方组成。而广播链路能够让多个发送和接收节点都连接到相同的、单一的、共享的广播信道上。这时就会存在一个很重要的问题,即如何协调多个发送和接收节点对一个共享广播信道的访问,这就是多路访问问题。
具体分析多路访问问题,将会有如下的典型场景:因所有节点都能够传输帧,所以多个节点可能会同时传输帧。这时当多个节点同时传输帧时,接收方会同时接收到多个帧,即多个帧在接收方处产生了碰撞。在某种意义上,碰撞帧的信号纠缠在一起,所以涉及此次碰撞的所有帧都丢失了,在发生碰撞时间间隔内的广播信道都被浪费了。
为了解决上述问题,设计出了多种多路访问协议,我们可以将这些协议分为3中类型,分别为信道划分协议、随机接入协议和轮流协议。
假设存在一个Rbps速率的广播信道,在理想情况下,我们希望多路访问协议符合以下特性:
- 当仅有一个节点发送数据时,该节点具有R bps的吞吐量
- 当有M个节点发送数据时,每个节点的吞吐量为R/M bps(此处指的一段时间内的平均传输速率在R/M,并不要求每个时刻的瞬时传输速率都是R/M)。
- 协议是分散的;就是说不会因为某节点故障而使整个系统崩溃。
- 协议事件单的,使实现不昂贵。
信道划分协议
信道划分协议有三种,分别是时分多路复用(TDM)、频分多路复用(FDM)和码分多址。
- 时分多路复用(TDM)。假设有一个支持N个节点传输速率为R bps的信道。TDM将时间划分为时间帧,并进一步将时间帧划分为N个时隙,分别对应于N个节点,当某个节点想要发送分组时,只需把分组放入它对应的时隙中。时分复用的优点是公平,在一个时间帧内,每个节点都能在发送分组时获得R/N bps的吞吐量,但是在只有一个节点发送分组时,不能独占信道,吞吐量也只有R/N bps,这就造成信道资源的浪费。
- 频分多路复用(FDM)。依然假现有一个支持N个节点且传输速率为R bps的信道,FDM将信道划分为不同的频段,并把每个频率分配给N个节点中的一个,而每个频段都将具有R/N 的带宽。FDM的优点和缺点和TDM一样。
- 码分多址(CDMA)。CDMA为每个节点分配一种不同的编码方式。然后每一个节点用它唯一的编码来对对它发送的数据进行编码。如果精心选择这些编码,CDMA网络既有一种奇妙的特性,即不同的节点能够同时传输,并且他们格子响应的接收方仍能正确接收发送方编码的数据比特,而不在乎其他节点的干扰传输。
随机接入协议
第二大类多路访问协议是随机接入协议。在随机接入协议中,一个传输节点总是以信道的全部速率进行发送。当有碰撞时,设计碰撞的每个节点反复地重发它的帧,到该帧无碰撞地通过位置。但是当一个节点经历一次碰撞时,它不必立刻重发该帧。相反,它在重发该帧之前等待一个随机时延。涉及碰撞的每个节点独立地选择时延。因为该随机时延是独立地选择的,所以下属现象是可能出现的:这些节点之一所选择的时延充分小于其他碰撞节点的时延,并因此能够无碰撞地将它的帧在信道中发出。
常用的随机接入协议包括时隙ALOHA协议、ALOHA协议、载波侦听多路访问(CSMA)和具有碰撞检测的载波侦听多路访问(CSMA/CD),协议的细节原理我们暂时忽略,只给出协议响应的传输效率,其中时隙ALOHA协议的效率为0.37R bps;ALOHA协议只有其一半的效率;而CSMA/CD的效率则取决于两个参数,分别为传输一个最大长度的以太网帧的时间dtrans 和表示信号能量在任意两个适配器中传播所需的最大时间dprop ,效率= 1/ 1 + ( 5dprop / dtrans ) , 当dtrans 很大或dprop 接近于0时,效率接近于1。
随机接入协议可以保证当只有一个节点传输时R bps的吞吐量,但是并不能在N个节点活跃时,保证每个节点的传输效率为R/N。
轮流协议
两种比较重要的轮流协议为轮询协议和令牌传递协议。
轮询协议会在节点间指定一个主节点。主节点以循环的方式轮询每个节点。例如,主节点首先向节点1发送一个报文,告诉它能够传输的帧的最多数量。在节点1传输了某些帧后,主节点告诉节点2它能够传输的帧的最多数量,以此类推,主节点将以循环的方式轮询每个节点。轮询协议消除了困扰随机接入协议的碰撞和空时隙,这使得轮询取得高得多的效率。而它也存在一些缺点。第一个缺点是它引入了轮序时延,降低了单位时间内的传输效率,即当只有一个节点活跃时,传输速率将小于R bps。第二个缺点则是当主节点故障时,整个信道都将变得不可操作。
令牌传递协议则没有主节点,它通过一个成为令牌的特殊帧来赋予节点传输帧的权利,并且令牌将在节点间循环交换。当一个节点收到令牌时,仅当它有帧要发送时,它才持有这个令牌,并在发送最大数目的帧数后,把令牌转发给下一个节点;否则,立即向下一个节点转发该令牌。该协议也存在一些缺点,如一个节点的故障可能会使整个信道崩溃;在节点丢失或者忘记释放令牌后需要对令牌进行恢复以保证协议的正常运行。
交换局域网
局域网是一种在有限的地理范围内将大量PC机互联在一起实现数据传输和资源共享的计算机网络。而交换局域网是以交换机为核心部件的局域网。而典型的交换局域网是交换式以太网,它的核心部件是以太网交换机。
链路层寻址和ARP
链路层寻址有其不同于网络层的方式,它需要用到网络层的IP地址和链路层地址。
链路层地址(MAC地址)
链路层地址有很多不同的称呼,比如LAN地址,物理地址等,但我们对它最常用的称谓还是MAC地址。MAC地址具有以下特征:
- MAC地址是与适配器绑定的。并不是主机或路由器具有链路层地址,而是它们的适配器具有链路层地址,这意味着如果主机或路由器拥有多个适配器,与之对应的它将拥有多个关联的MAC地址。值得注意的是,如果链路层交换机只负责转发链路层帧,不需要对帧进行拆封和封装,那往往它并不具有MAC地址。
- 唯一性。没有两块适配器具有相同的MAC地址。
- 扁平结构。适配器的MAC地址始终与硬件绑定,即不论适配器到哪都不会发生变化。与之相比,网络层IP地址为层次结构,具有网络地址和主机地址,当主机移动时,IP地址中的网络地址需要进行响应的改变。
为什么需要链路层地址
主机和路由器也具有网络层的IP地址,使用网络层IP地址不能让交换局域网正常运行吗?为什么需要链路层地址,主要有以下几个原因:
- 局域网是为任意网络层协议而设计的,而不是只用于IP和因特网。除了网络层的IP协议外,还有许多种不同的网络层协议,如果只使用IP地址,则其他网络层协议不能正常使用。
- 为了使网络体系结构中各层次成为极为独立的构建模块,不同的层次需要有它们自己的寻址方式。
链路层地址如何寻址(地址解析协议,ARP)

假设存在上图中的网络,现在C已知的是本机的IP地址、本机的MAC地址和A的IP地址,现在C主机想向A主机发送数据报。因为在链路层信道中发送数据需要将数据报封装在链路层帧中,而链路层帧进行寻址的方式是基于链路层地址即MAC地址的,所以C如果想要成功地将数据报发送给A主机,则还需要知道A主机的MAC地址,这时ARP闪亮登场。

ARP的用途是将一个IP地址解析为一个MAC地址。每个主机和路由器中都存在一个ARP模块,且在内存中存在一个ARP表(如上图所示)。ARP表的主要作用是记录IP地址和MAC地址的映射关系,除了IP地址和MAC地址外,它还具有一个维度,即TTL–过期时间,主要记录表项每条数据的过期时间。与同为解析协议的DNS不同,ARP协议只为同一个子网内的主机和路由器接口解析IP地址,即ARP协议的服务范围局限在一个一个的子网中;而DNS则是为因特网中的任意位置的任意主机解析主机名。而基于是否在同一子网的区别,我们可以将数据报的发送分为两种情况,一种是在同一子网内的两台主机上发送数据报,另一种情况是跨子网的数据报发送,我们将分情况讨论。
同一子网数据报传输
已知上图中C主机要向A主机发送数据报,此时C主机不知道A主机的MAC地址,它会向本机的ARP表获取A主机IP的对应的MAC地址。如果ARP表中存在对应表项,则会走正常的数据报封装流程;如果不存在对应表项,则发送方会用ARP协议来解析这个地址。首先,发送方构造一个成为ARP分组的特殊分组,并通过MAC广播地址来广播封装查询分组后的链路层帧。此时子网中的主机或路由器接收到该帧,则会将ARP分组中的IP地址与自己的IP地址进行匹配,如果相匹配,则会给发送方返回一个ARP响应分组,该分组中包含查询的IP的映射关系。最后发送者接收到ARP响应分组后,将返回的映射关系更新到本机的ARP表中,这样后续后续的数据报封装流程就能正常执行了。
简单介绍一下ARP分组:ARP分组分为查询分组和响应分组,且查询分组和响应分组都有相同的格式。分组包含的字段包括发送和接收IP地址及MAC地址。
跨子网数据报传输

如上图所示,存在一个通过路由器连接的两个子网,假设现在C主机要向A主机发送数据报,前文中我们了解到ARP协议只能对同一个子网内的IP地址进行MAC寻址,因为C和A不在同一个子网内,所以在C主机中封装的帧的链路层目的地址不能直接指定成A主机的MAC地址。而从C到A的数据报转发过程将分为以下几个步骤进行:
- C主机发送数据报到E路由器的。首先C主机向本机的ARP表获取在本子网中IP地址对应的表项,没有则通过ARP协议进行获取并更新。在得到111.111.111.110对应的MAC地址后,将数据报封装成链路层帧并发送给第一跳路由。
- E路由器的数据报转发。路由器收到帧后进行拆包,基于路由选择算法,将数据报转发到222.222.222.220端口。
- E路由器发送数据报到A主机。路由器向本机的ARP表获取222.222.222.222IP地址对应的表项,没有则通过ARP协议进行获取并更新。在得到222.222.222.222对应的MAC地址后,将数据报封装成链路层帧并发送给C主机。
- A主机接收。A主机接收到由E路由器发送的帧,确定本机的适配器的MAC地址与帧的目的地址匹配后,就将帧进行拆包,最终获取到由C主机发送的数据报。
以太网
以太网是到目前为止最为流行的有限局域网技术,在可预见的未来都将会保持这一地位,其对于本地区域联网有着非比寻常的重要性。
以太网的成功主要体现在以下几个方面:
- 以太网是第一个广泛部署的高速局域网。
- 其他局域网技术包括令牌环、FDDI和ATM比以太网更加复杂、更加昂贵。
- 以太网持续的版本更迭,让其他以太网技术的最大优势(数据传输速率)不复存在。
以太网框架的历史
- 20世纪80年代到90年代中期,以太网一般使用同轴电缆总线来互联节点(即初始以太网的互联方式)使用总线拓补的以太网是一种广播局域网,即所有传输的帧传送到与该总线连接的所有适配器并被处理。
- 20世纪90年代后期,出现一种新的以太网结构,其是一种使用基于集线器的星形拓扑以太网结构。在这种结构中,主机(和路由器)直接用双绞对铜线与以太集线器相连。采用基于集线器的星形拓扑的以太网也是一个广播局域网,即无论何时集线器从它的一个接口接收到一个比特,它向其他所有接口发送该比特的副本。
- 21世纪初,以太网安装继续使用星形拓扑,但是位于中心的集线器被交换机所替代。我们知道以上两种交换机结构的以太网是一种广播局域网,其帧在传输过程中会出现碰撞,而交换以太网相对于之前两者的最大不同就在于交换机是“无碰撞的”,并且交换机本身还能存储转发的分组。
以太网帧结构

为了更好的理解以太网帧结构,我们假设有这样的传输流程:适配器A的MAC地址是AA-AA-AA-AA-AA-AA,适配器B的MAC地址是BB-BB-BB-BB-BB-BB,发送适配器在一个以太网帧中封装了一个IP数据报,并把该帧传递到物理层。接受适配器从物理层收到以太网帧,并提取出IP数据报,并传递给网络层。我这个过程中存在以下以太网帧字段:
- 数据字段。此字段承载了IP数据报。
- 目的地址。此字段包含了目的适配器的MAC地址。
- 源地址。此字段包含了传输该帧到局域网上的适配器的MAC地址。
- 类型字段。指明网络层协议类型,如IP协议、ARP协议等。
- CRC。差错检验和纠正字段。
- 前同步码。起到时钟同步的作用。
以太网服务
- 以太网技术都向网络层提供无连接服务。
- 以太网技术向网络层提供不可靠服务。
链路层交换机
交换机的任务是接受入链路帧并将它们转发到出链路。
交换机的转发与过滤
交换机提供链路层帧的过滤和转发服务:
- 过滤。过滤是决定一个帧应该转发到某个接口还是应当将其丢弃的交换机功能。
- 转发。转发是决定一个帧应该被导向那个接口,并把该帧移动到那些接口的交换机功能。
交换机的过滤和转发功能需要借助于交换机表来完成。交换机表的每一个表项包括几个维度:
- MAC地址。
- 通向该MAC地址的交换机接口。
- 表项放置在表中的时间。交换机会基于该时间清理过期的表项。
为理解交换机过滤和转发的工作过程。现假设交换机x接口接收到目的地址为DD-DD-DD-DD-DD-DD的帧,交换机将用目的地址索引它的表。有以下三种可以能情况:
- 表中没有对应DD-DD-DD-DD-DD-DD的表项。这时交换机会向除x外的其他接口广播该帧。
- 表中有一个表项,该表项将DD-DD-DD-DD-DD-DD与接口x相关联。这时因为发送接口即为接收接口,交换机会将该帧丢弃(交换机过滤功能)。
- 表中有一个表项,该表项将DD-DD-DD-DD-DD-DD与接口y相关联,y≠x。此时交换机会将该帧放入接口y的输出缓存中(交换机的转发功能)。
自学习(交换机表的自治过程)
这节我们将介绍交换机表是如何自动建立的:
- 交换机表初始为空。
- 对于在每个接口接收到的入帧,交换机会遵循以下方式更新表项:将入帧的源地址作为该表项的MAC地址,将该帧到达的接口作为表项的接口号,当前时间作为表项的时间。交换机通过这种方式记录发送节点与交换机接口的映射关系。如果局域网上的每个主机最终都发送了一个帧,则表中将存储有每个节点的MAC地址和接口的映射记录。
- 如果在一段时间后,交换机没有接收某地址作为源地址的帧,将在表中删除对应的记录。交换机通过这种方式清除表中过期的记录。
以上过程体现出了交换机的自学习能力,即不需要网络管理员或用户的干预,交换机也能自行建立交换机表。所以我们称交换机是即插即用的设备。
链路层交换机的特性
相较于20世纪的总线结构或者基于集线器的星形拓扑结构,交换以太网具有以下优点:
- 消除碰撞。在使用交换机构建的局域网中,没有因碰撞而良妃的带宽。交换机缓存帧并且绝不会再网段上同时传输多于一个帧。因此,交换机提供了比使用广播链路的局域网高得多的性能改善。
- 异质的链路。交换机将链路彼此隔离,因此局域网中的不同链路能够以不同的速率运行并且能够在不同的媒体上运行。
- 管理。除了提供强化的安全性,交换机也易于进行网络管理。例如,如果一个适配器工作异常并持续发送以太网帧,交换机能够检测到该问题,并在内部断开异常适配器。交换机也收集贷款使用的统计数据、碰撞率和流量类型并使这些信息为网络管理者所用。
交换机和路由器比较
交换机的优缺点:
- 即插即用。交换机自学习的特性让其能在不需要人为配置的情况下也能正常使用。
- 有相对较高的分组过滤和转发速率。
- 为了防止广播帧的循环,交换网络的活跃拓扑限制为一颗生成树。
- 只具备部分网络安全防护能力。例如交换机对于广播风暴并不提供任何保护措施。
路由器的优缺点:
- 因为网络寻址通常是分层次的,所以,分组不会被限制到一颗生成树上,并可以使用源和目的地址之间的最佳路径。
- 提供更健壮的安全防护能力。
- 非即插即用。路由器和连接到它们的主机都需要人为配置IP地址。
- 分组过滤和转发时间相对交换机更长。
虚拟局域网
我们注意到现代机构的局域网常常配置为等级结构,每个工作组(部门)有自己的交换局域网,经过一个交换机等级结构与其他工作组的交换局域网互联。虽然这样的配置在理想情况下能够很好的工作,但是在现实世界常常不尽如人意,存在以下缺点:
- 缺乏流量隔离。等级结构不能隔离广播流,这将造成性能和安全性的问题。
- 交换机的无效使用。如果机构组织分支过多且零散,第一级交换机的利用率将会很低。如果使用一台足以容纳所有主机的交换机,则不会提供流量隔离。
- 管理用户。如果一个用户在不同组间移动,则必须改变物理布线,以将其连接到对应交换机上,同属于多个组的用户将更难实现组件移动。
以上问题都能通过支持虚拟局域网(Virtual Local Network,VLAN)的交换机来处理。支持VLAN的交换机允许经一个单一的物理局域网基础设施定义多个虚拟局域网。如下图所示,通过将各接口划分为不同的VLAN,每个VLAN内的主机彼此互通,方法它们与交换机连接。并且每个VLAN中的端口形成一个广播域(即来自一个端口的广播流量仅能到达该VLAN中的其他端口),这就实现了流量隔离。使用VLAN交换机后,交换机的端口都能充分使用,就无须担心交换机的无效使用问题。最后,当用户想要组间移动时,可以让网络管理员重新配置VLAN软件,就能改变端口所属的VLAN,达到组间移动的目的。

发表回复