计算机网络——链路层
链路层的主体是在网络适配器中实现的,有时也称为网络接口卡。位于网络适配器核心的是链路层控制器,该控制器通常是一个实现了许多链路层服务(成帧、链路接入、差错检测等)的专用芯片,因此链路层的许多功能是由硬件实现的。
有两种类型的网络链路:点对点链路和广播链路。点对点链路由链路一段的单个发送方和链路另一端的单个接收方组成,如点对点协议(point-to-point protocol,PPP)就是这样的协议。广播链路能够让多个发送和接收结点都连接到相同的、单一的、共享的广播信道上。当任何一个结点传输一个帧时,信道广播该帧,每个其它结点都收到一个副本。广播信道通常用于局域网中。
多路访问链路和协议
因为所有结点都能传输帧,所以多个结点可能会同时传输帧。当发生这种情况时,所有结点同时接到多个帧,传输的帧在所有的接收方处碰撞。通常,当碰撞发生时,碰撞的帧纠缠在一起,没有一个接收结点能有效地获取任何传输的帧。因此,需要研究如何协调多个发送和接收结点对一个共享广播信道的访问,这就是多路访问问题。目前,链路层技术中已经实现了几十种多路访问协议,能将其分为三类:信道划分协议,随机接入协议和轮流协议。
在理想情况下,对于速率为 R bps 的关闭信道,一个好的多路访问协议应当尽量有以下特性:
- 当仅有一个节点有数据发送时,该结点具有 R bps 的吞吐量。
- 当有 M 个结点要发送数据时,每个结点的平均吞吐量为 R/M bps。
- 协议是分散的,不会有为某结点的故障而使整个系统崩溃。
- 协议是简单的,实现不昂贵。
信道划分协议
TDM和FDM是两种能够划分广播信道带宽的技术。假如一个支持 N 个结点的信道且信道的传输速率为 R bps。
- 时分多路复用(TDM)
TDM将时间划分为时间帧,并进一步将划分每个时间帧为 N 个时隙。然后把每个时隙分给 N 个结点中的一个。无论何时某个结点在有分组要发送的时候,它只能在指派给它的时隙内传输分组比特。TDM是有吸引力的,它消除了碰撞而且非常公平:每个结点在帧时间内得到了专用的传输速率 R/N bps。但缺点就是结点被限制于 R/N bps的平均速率,即使它是唯一有分组要发送的结点;其次,结点必须总是等待它在传输序列中的轮次。 - 频分多路复用(FDM)
FDM将 R bps信道划分为不同的频段,每个频段具有 R/N 带宽。FDM和TDM是相似的,其缺点一是一样的。 - 码分多址(Code Division Multiple Access,CDMA)
CDMA对每个结点分配一种不同的编码,然后每个结点用它唯一的编码来对它发送的数据进行编码。如果精心选择这些编码,能使不同的结点能够同时传输。
随机接入协议
在随机接入协议中,一个传输结点总是以信道的全部速率进行发送,当有碰撞时,涉及碰撞的每个结点反复地重发它的帧,到该帧无碰撞地通过为止。当然,经历一次碰撞时,它不必立刻重发该帧,等待一个随机延时。
时隙ALOHA
最简单的随机接入协议之一。我们做出以下假设:
- 所有帧有 L 比特组成。
- 时间被划分成长度为 L/R 秒的时隙(也就是说,一个时隙等于传输一帧的时间)。
- 结点只在时隙起点开始传输帧。
- 结点是同步的,每个结点都知道时隙合适开始。
- 如果一个时隙中有两个或者更多帧碰撞,则所有结点在该时隙结束之前检测到该帧碰撞事件。
在每个结点中,时隙ALOHA的操作是简单的: - 当结点有一个新帧要发送时,它等待下一个时隙开始并在该时隙传输整个帧。
- 如果没有碰撞,该结点成功地传输它的帧。
- 如果有碰撞,结点在时隙结束之前检测到这次碰撞。该节点以概率 p 在后续的每个时隙中重传它的帧,直到该帧无碰撞地传输出去。
ALOHA
第一个ALOHA协议实际上是一个非时隙、完全分散的协议。在纯ALOHA协议中,当一帧首次到达,结点立刻将该帧完整地传输进广播信道。如果帧与其它传输经历了碰撞,这个结点将立刻以概率 p 重传该帧,否则等待一个帧传输时间。
纯ALOHA协议的最大效率刚好是时隙ALOHA的一半,这就是完全分散的ALOHA协议付出的代价。
具有碰撞检测的载波侦听多路访问(CSMA/CD)
在时隙和纯ALOHA中,一个结点不关心在它开始传输时是否有其他结点碰巧在传输,即便有另一个结点开始干扰其传输也不会停止传输。而CSMA/CD的流程如下:
- 适配器从网络层获得数据报,将其放入帧适配缓存中。
- 如果适配器侦听到信道空闲,它开始传输帧。如果信道忙,将一直等待。
- 在传输过程中,适配器监视来自其他使用该广播信道的适配器的信号能量的存在。
- 如果在整个传输过程中未检测到其他适配器的信号能量,该适配器就完成了该帧。如果检测到其他适配器的能量。它终止传输。
- 终止传输后,适配器等待一个随机事件,然后返回步骤2。
轮流协议
上面说到一个理想的协议应当具备四个特性,ALOHA和CSMA满足第一个特性,但不满足第二个特性。轮询协议具有第二个特性。有几十种轮询协议,这里只说明两种比较重要的。
第一种是轮询协议。轮询协议要求这些结点之一要被指定为主结点。主结点以循环的方式轮询每个结点。主结点首先向结点1发送一个报文,告诉它能够传输的帧的最多数量,在1传输了某些帧之后,主结点告诉结点2能够传输的帧的最多数量,一次类推。轮询协议消除了困扰随机协议的碰撞和空时隙,有了更高的效率,但引入了轮询延时,哪怕只有一个活跃结点,也需要不停地轮询,第二个更大的缺点是如果主结点故障,信道将不可用。
第二种轮流协议是令牌传递协议。在这种协议中没有主结点。一个称为令牌的特殊帧在结点之间也某种固定的次序进行交换,它就像是一把分布式锁。当一个结点收到令牌时,仅当它有一些帧要发送时才会持有该令牌,否则立即向下一个结点转发令牌。这种协议也有问题,一个结点的故障也可能导致信道的崩溃。如果一个结点忘记释放令牌,也必须要有一些恢复步骤使令牌返回到循环中去。
交换局域网
链路层寻址和ARP
MAC地址
事实上不是主机和路由器具有链路层地址,而是它们的适配器(即网络接口)具有链路层地址。因此,具有多个网络接口的主机或路由器将具有与之相关联的多个链路层地址,就行它也具有与之相关联的多个IP地址一样。
链路层地址有各种不同的称呼:LAN地址、物理地址或MAC地址,MAC地址是最流行的。MAC地址长度为6字节,共有 $2^48$个可能的MAC地址。MAC地址尽管被设置为永久的,但用软件可以改变一块适配器的MAC地址。
没有两块适配器具有相同的MAC地址。考虑到适配器是由许多国家的不同公司生产的,为保证不同公司生产的设备具有不同的MAC地址,每个公司要向MAC的地址空间的管理机构IEEE象征性地购买组成$2^24$个地址的一块地址空间作为前缀,让公司自己为每个适配器生产后24比特的唯一组合。
当适配器在广播信道中接收到一个帧时,将检查该帧中的目的MAC笛子是否与自己的MAC地址匹配。如果匹配,该适配器提取出封装的数据报,并将数据报沿协议栈向上传递。如果不匹配,该适配器丢掉该帧。
为什么还需要MAC地址
主机和路由器接口除了网络层地址之外还有MAC地址,有如下几个原因:
- 局域网是为任意网络层协议而设计的,而不只是用于IP和因特网。如果适配器被派指IP地址而不是“中性”的MAC地址的话,则适配器将不能够方便地支持其他网络层协议(如IPX或DECnet)。
- 如果使用网络层地址而不是MAC地址,网络层地址必须存储在适配器的RAM中,并且在每次适配器移动(或加电)时要重新配置。另一种选择是在适配器中不使用任何地址,让适配器将它收到的每帧数据(大部分是IP)沿协议栈向上传递,然后网络层能够核对网络地址层的IP是否匹配,这样的一个问题是主机将被局域网上发送的每个帧中断。
&emsp总之,为了使网络体系结构中各层次成为极为独立的构建模块,不同的层次需要有它们自己的寻址方案。已经看到三种类型的地址:应用层的主机名,网络层的IP地址以及链路层的MAC地址。
地址解析协议
因为存在网络层地址(IP)和链路层地址(MAC),所以需要在它们之间进行转换,这就是地址解析协议(Address Resolution Protocol,ARP)的任务。
假设IP地址为222.222.220的主机要向主机222.222.222发送IP数据报。在本例中,源和目的均位于相同的子网中。为了发送数据报,该源必须要向它的适配器不仅提供IP数据报,而且要提供目的主机222.222.222.222的MAC地址。然后发送适配器将构造一个包含目的地的MAC地址的链路层帧,并把该帧发送进局域网。
发送主机如何确定IP地址为222.222.222.222的目的主机的MAC地址呢,它使用ARP。在发送主机中的ARP模块取在相同局域网下的任何IP作为输入,然后返回相应的MAC地址。
ARP将一个IP地址解析为一个MAC地址。在很多方面它和DNS类似,DNS将主机名解析为IP地址。两者的一个重要区别是DNS为在因特网中任何地方的主机解析主机名,而ARP只为在同一个子网上的主机和路由器解析IP地址。
每台主机或路由器在内存中具有一个ARP表,这张表包含IP地址到MAC地址的映射关系。假设某主机要发送一个数据报,发送主机要获得给定IP地址的目的主机的MAC地址。如果发送方的ARP表具有该目的结点的表项,这个任务是很容易完成的。如果ARP表中没有该目的主机的表项,发送方则构造一个ARP分组,分组包括发送和接收方IP及MAC地址。ARP分组的目的地是子网上的所有其它主机和路由器,目的MAC地址是MAC广播地址(FF-FF-FF-FF-FF-FF)。包含该ARP查询的帧能被子网上的所有其它适配器接收到,并且每个适配器都把在该帧中的ARP分组向上传递给ARP模块。这些ARP模块检查它的IP地址是否与ARP分组中的目的IP地址相匹配。与之匹配的一个给查询主机发送回一个带有所希望映射的相应ARP分组。然后查询主机更新其ARP表,并发送它的IP数据报。
发送数据到子网外
假设子网1上的111.111.111.111主机要向子网2上的222.222.222.222发送一个IP数据报。和往常一样,发送主机向它的适配器传递数据报,但发送主机还必须向它的适配器指示一个适当的MAC地址。由于ARP是作用于子网的,所以为了发送数据到另外一个子网,数据报必须先发送给路由器接口111.111.111.110,因此,对于该帧来说,适当的MAC地址就是路由器的MAC地址。
发送主机通过ARP获取到了路由器的MAC地址,接着创建一个帧(包含了寻址到222.222.222.222的数据报)并发送到子网1中。在子网1上的路由器适配器看到该链路层帧时向它寻址的,因此把这个帧传递给路由器的网络层。
路由器还需要将数据报传递给目的主机,路由器通过转发表知道该数据报需要通过路由器接口222.222.222.220转发。然后该接口把这个数据报传递给它的适配器,该适配器把该数据报封装到一个新帧中,并且把帧发送到子网2中,此时该帧的目的地址就是最终的目的地的MAC地址,目的MAC地址仍然是使用ARP来获取到的。
链路层交换机
当某主机/路由器向另一个主机/路由器寻址一个帧(而不是向交换机寻址该帧),顺利地将该帧发送进局域网,并不知道某交换机会接收该帧并将它转发到另一个结点,因此交换机自身对子网中的主机和路由器是透明的。
交换机转发和过滤
过滤是决定一个帧应该转发到某个接口还是应当将其丢弃的交换机功能。转发是决定一个帧应该被到导向哪个接口,并把该帧移动到那些接口的交换机功能。交换机的过滤和转发借助于交换机表完成。交换机表中的一个表项包括:一个MAC地址;通向该MAC地址的交换机接口;表项放在表中的时间。以下就是交换机表的一个示例:
地址 | 接口 | 时间 |
---|---|---|
88-B2-2F-54-1A-0F | 1 | 9:32 |
63-23-F9-CD-06-9B | 3 | 9:36 |
… | … | … |
假设目的地址为 DD-DD-DD-DD-DD-DD 的帧从交换机接口 x 到达。交换机用MAC地址DD-DD-DD-DD-DD-DD索引它的表,有3种可能的情况:
- 表中没有DD-DD-DD-DD-DD-DD的表项,这种情况下,交换机向出接口x外的所有接口转发该帧,也就是广播。
- 表中有一个表项将DD-DD-DD-DD-DD-DD与接口x联系起来,那么交换机通过丢弃该帧执行过滤功能。
- 表中有一个表项将DD-DD-DD-DD-DD-DD与接口y≠x联系起来,那么叫交换机向y接口转发该帧。
自学习
交换机是自学习的,通过以下方式实现:
- 交换机的表初始为空。
- 对于在每个接口接收到的入帧,交换机在其表中存储:源地址字段中的MAC地址;该帧到达的交换机接口;当前时间。交换机以这种方式在它的表中记录了发送结点所在的局域网网段。如果每个结点都发送了一个帧,则每个结点都将在这张表中留有记录。
- 如果一段时间后,交换机没有收到以该地址作为源地址的帧,那么就在表中删除。
使用链路层交换机的优势
- 消除碰撞。在使用交换机(不使用集线器)构建的局域网中,没有因碰撞而浪费的带宽。交换机能提供了比使用广播链路的局域网高得多的性能改善。
- 异质的链路。交换机将链路彼此隔离,因此局域网中的不同链路能够以不同的速率并且在不同的谋体上运行。对于原有的设备与新设备混用,交换机是理想的。
- 管理。除了提供强化的安全性,交换机也易于进行网络管理。例如,如果一个适配器工作异常并持续发送帧,交换机能检测到该问题并内部断开异常适配器。
交换机和路由器比较
交换机使用MAC地址转发分组,路由器使用IP转发分组。交换机是第二层的分组交换机,路由器是第三次的分组交换机。
交换机是即插即用的。交换机还具有相对高的分组过滤和转发速率。但是交换机对于广播风暴不提供任何保护措施,如果某主机出了故障并传输出没完没了的以太网关闭帧流,该交换机将转发所有这些帧使得整个以太网的崩溃。而路由器对第二层的广播风暴提供了防火墙保护,路由器对每个分组的处理时间通常比交换机长,因为必须处理高达第三层的字段。
通常,由几百台主机构成的小网络通常有几个局域网网段,对于这些小网络,交换机就足够了。但是由几千台主机构成的更大网络中,通常在网络中还包括路由器。路由器提供了更健壮的流量隔离方式和对广播风暴的控制。
虚拟局域网
现代机构的局域网常常是配置为等级结构的,每个工作组(部门)有自己的交换局域网,经过一个交换机等级结构与其他工作组的交换局域网互联。但这种配置有以下缺点:
- 缺乏流量隔离。尽管该等级结构吧组流量局域化到一个单一交换机中,但广播流量仍然必须跨越整个机构网络。限制这些广播流量的范围将改善局域网的性能。为了安全/隐私的目的也可能希望限制局域网的广播流量。
- 交换机的无效使用。如果该机构有10个组,那么就要求有10个第一级交换机。如果每组都少于10人,那么单台96端口的交换机就足以容纳每个人。
- 管理用户。如果一个雇员在不同组之间移动,则必须改变物理线路。
通过使用支持虚拟局域网(Virtual Local Network,VLAN)的交换机可以解决以上问题。支持VLAN的交换机允许经一个单一的物理局域网基础设施定义多个虚拟局域网。在一个机遇端口的VLAN中,交换机的端口由管理员划分成组。每个组构成一个VLAN,在每个VLAN中的端口形成一个广播域。