5.1 链路层:概述和服务

沿着通信路径连接相邻节点的通信信道称为链路(link)

5.1.1 链路层提供的服务

链路层协议(link-layer protocol)定义了在链路两端的节点之间交互的分组格式,以及当发送和接收分组时这些节点采取的动作。链路层协议交换的数据单元称为帧(frame)。链路层协议能够提供的可能服务包括:成帧(framing)链路接入(link access)可靠交付(reliable delivery)流量控制(flow control)差错检测(error detection)差错纠正(error correction)半双工和全双工(half-duplex and full-duplex)

5.1.2 链路层在何处实现

链路层的主体部分是在网路适配器(network adapter)中实现的,网络适配器也称为了网络接口卡(Network Interface Card,NIC),网络适配器的内核是链路层控制器,该控制器通常是实现了许多链路层服务的单个特定目的的芯片。
在发送方,控制器取得了由协议栈较高层生成并存储在主机内存中的数据报,在链路层帧中封装该数据报,然后遵循链路接入协议将该帧传进通信链路中,在接收端,控制器接收整个帧,提取出网络层数据报,如果链路层执行差错检测,则需要发送适配器在该帧的首部设置差错检测比特,以及接收适配器执行差错检测,如果该链路层执行流量控制,则发送控制器和接收控制器交换流量控制信息,使得发送方以接收方能够处理的速率发送帧。

5.2 差错检测和纠错技术

比特级差错检测和纠错(bit-level error detection and correction)通常是链路层提供的两种服务:对一个节点发送到另一个物理上连接的邻近节点的链路层帧,检测和纠正其中的比特差错。
在发送节点,为了避免比特差错,使用差错检测和纠察比特(Error Detection and Correction bit,EDC bit)来增强数据。即使采用差错检测比特,也还是可能有未检出比特差错(undetected bit error)的情况。
传输数据中检测差错的3种技术:奇偶校验、检验和方法与循环冗余检测。

5.2.1 奇偶校验

差错检测最简单的方式是用单个的奇偶校验位(parity bit)。发送方只需要包含一个附加的比特,在偶校验方案中1的总数是偶数,在奇校验方案中1的总数是奇数。使用一种二维奇偶校验(two-dimensional parity)方案,包含比特值改变的列和行的校验值都将会出现差错,而且可以利用存在奇偶校验差错的列和行的下标来识别实际发生差错的比特并纠正它。接收方检测和纠正差错的能力被称为前向纠错(Forward Error Correction,FEC)

5.2.2 检验和方法

互联网检验和(Internet checksum),即(检验位设置为0)数据的两个字节作为16比特的整数对待并取反求和,这个和形成了携带在报文段首部的互联网检验和,可以让接收方通过对接收的数据的和取反码,并且检测其结果是否全为0比特来检测检验和。

5.2.3 循环冗余检测

循环冗余检验(Cyclic Redundancy Check,CRC)编码也称为多项式编码(polynomial code),因为该编码能够将要发送的比特串看作是系数为0和1的一个多项式。

5.3 多路访问协议

<stron>是由链路一端的单个发送方和链路另一端的单个接收方组成的。
<stron>和高级数据链路控制(High-level Data Link Control,HDLC)是两种为点对点链路设计的链路层协议。
广播链路(broadcast link)能够让多个发送和接收节点都连接到相同的、单一的、共享的广播信道上。多路访问问题(multiple access problem):如何协调多个发送和接收节点对一个共享广播信道的访问。
多路访问控制协议(Multiple Access Control protocol,MAC protocol)即节点通过这些协议来规范它们在共享的广播信道上的传输行为。
两个以上的节点可能会同时传输帧,这时所有节点同时接到多个帧,也就是说,传输的帧在所有的接收方处碰撞(collide)了。
多路访问协议划分为3种类型:信道划分协议(channel partitioning protocol)随机接入协议(random access protocol)轮流协议(taking-turns protocol)。</stron></stron>

5.3.1 信道划分协议

时分多路复用(TDM)和频分多路复用(FDM)是两种能在所有共享信道节点之间用于划分广播信道带宽的技术。
另一种信道划分协议是码分多址(Code Division Multiple Access,CDMA)

5.3.2 随机接入协议

在随机接入协议中,一个传输节点总是以信道的全部速率进行发送,当有碰撞时,涉及碰撞的每个节点反复地重发它的帧,直到该帧无碰撞地通过为止,但是当一个节点经受一次碰撞时,它不必立刻重发该帧,相反,它在重传该帧之前等待一个随机时延,涉及碰撞的每个节点独立地选择随机时延,因为该随机时延是独立选择的,下述现象有可能发生:这些节点之一所选择的时延远远小于其他碰撞节点的时延,并因此能够无碰撞地将它的帧在信道中发出。
常用的随机接入协议:

  1. 时隙ALOHA
    假设:1)所有帧大小相同,2)时间被划分为等长的时隙,3)节点只能在时隙开始时刻发送帧,4)节点间时钟同步,5)如果2及以上个节点在同一时隙发送帧则立即检测到冲突;运行:1)当节点有新的帧时在下一个时隙发送,2)若无冲突则该节点在下一时隙发送新的帧,3)若有冲突则该节点在下一时隙以一个概率重传该帧直到成功。优点:1)单个节点活动时可连续以信道全部速率传输数据,2)高度分散化:只需同步时隙,3)简单;缺点:1)冲突造成时隙浪费,2)空闲时隙,3)节点也许能以远小于分组传输时间检测到冲突。
  2. ALOHA
    较之时隙ALOHA,当有新的帧生成时立即发送。
  3. 载波侦听多路访问(Carrier Sense Multiple Access,CSMA)
    CSMA协议:发送帧之前,监听信道(载波):若信道空闲,则发送完整帧;若信道忙,则推迟发送;若信号传播延迟,冲突仍然可能发生,继续发送冲突帧会浪费信道资源。具有碰撞检测的CSMA(CSMA with Collision Detection,CSMA/CD)(一般在有线网络中使用,用检测信号强度的方式):短时间内可检测到冲突,冲突后传输终止——减少信道浪费。

5.3.3 轮流协议

轮询协议(polling protocol):主节点以循环的方式轮询(poll)每个节点(即邀请其发数据),存在的问题是:轮询有开销、等待有延迟、单点会故障。
令牌传递协议(token-passing protocol):控制令牌(token)依次从一个节点传递到下一个节点(拿到令牌才有资格传数据,没数据可传了才将令牌转发至下一个节点),存在的问题是:令牌有开销、等待有延迟、单点会故障。

5.3.4 局域网

有两类LAN技术很流行:基于随机接入的以太网LAN和由令牌传递技术组成的LAN技术包括令牌环(token ring)以及光纤式分布数据接口(Fiber Distributed Data Interface,FDDI)

5.4 链路层编址

节点(即主机和路由器)的适配器具有链路层地址。

5.4.1 MAC地址

LAN地址有各种不同的称呼:LAN地址(LAN address)物理地址(physical address)MAC地址(MAC address)
对大多数LAN而言,MAC地址长度为6字节,共有2的48次方个可能的LAN地址,地址的每个字节被表示为一对十六进制数。
适配器的MAC地址具有扁平结构,而且不论适配器到哪里用都不会变化。
当某适配器要向某些目的适配器发送一个帧时,发送适配器将目的适配器的MAC地址插入到该帧中,并将该帧发送到LAN上,如果该LAN是一个广播LAN,这个帧会被该LAN上所有其他适配器接收和处理,特别是,接收到该帧的每个适配器将检查,看在该帧中的目的MAC地址是否与它自己的MAC地址匹配,如果匹配,该适配器提取出封装的数据报,并将该数据报沿协议栈向上传递给它的父节点,如果不匹配,该适配器丢弃该帧,则不会沿协议栈向上传递该网络层数据报,所以,当目的节点收到该帧时,仅有它将会中断其父节点。然而,有时某些发送适配器的确要让LAN上所有的其他适配器来接收并处理它打算发送的帧,在这种情况下,发送适配器在该帧的目的地址字段中插入一个特殊的MAC广播地址(broadcast address),对于使用6字节地址的LAN来说,广播地址是48个连续的1组成的字符串(即以十六进制表示法表示的FF-FF-FF-FF-FF-FF)。

5.4.2 地址解析协议

网络层地址和链路层地址之间进行转换,这是地址解析协议(Address Resolution Protocol,ARP)
每个节点(主机或路由器)的ARP模块都在它的RAM中有一个ARP表(ARP table),这张表包含IP地址到MAC地址的映射关系,该表还包含一个生存期(TTL)值,它指示了从表中删除每个映射的时间。
将网络层数据报封装成链路层帧时,若目的IP地址在子网外,会将下一跳节点接口本侧MAC地址(用ARP表查询)设为目的MAC地址,等到了下一跳节点,拆分链路层帧为网络层数据报,依目的IP地址查询路由转发表找到下一跳的IP,通过ARP表查询另侧接口的MAC地址以及下一跳节点本侧接口的MAC地址,并将其设为源和目的MAC地址,从而将网络层数据报重新封装成链路层帧,以此类推。

5.5 以太网

以太网使用星型拓扑,位于中心的集线器(hub)交换机(switch)所替代。

5.5.1 以太网帧结构

以太网的6个字段:

  1. 数据字段(data field)
    承载了IP数据报,最大传输单元是1500字节,最小长度为46字节。
  2. 目的地址(destination address)
    包含目的适配器的MAC地址,长度为6字节。
  3. 源地址(source address)
    包含传输该帧到LAN上的适配器的MAC地址,长度为6字节。
  4. 类型字段(type field)
    允许以太网复用多种网络层协议,长度为2字节。
  5. 循环冗余检测(Cyclic Redundancy Check,CRC)
    使接收适配器检测帧中是否引入了差错,长度为4字节。
  6. 前同步码(preamble)
    用在发送方和接收方之间同步时钟和比特流,长度为8字节。

所有的以太网技术都向网络层提供无连接服务(connectionless service)不可靠服务(unreliable service)

5.5.2 CSMA/CD:以太网的多路访问协议

CSMA/CD协议使用了以下机制:

  1. 适配器可以在任何时刻开始传输,这就是说没有时隙的概念;
  2. 当一个适配器侦听到有某些其他的适配器正在传输,它决不会传输帧,这就是说它使用了载波侦听;
  3. 一旦传输中的适配器检测到另一个适配器正在传输,就中止它的传输,这就是说它使用了碰撞检测;
  4. 在尝试重传之前,适配器等待一个随机时间,这个时间通常比传输一帧的时间要短。

CSMA/CD协议按下列方式工作:

  1. 适配器从网络层得到一个数据报,准备一个以太网帧,并把该帧放到适配器缓存区中;
  2. 如果适配器帧听到信道空闲,它开始传输该帧,如果适配器侦听到信道忙,它等待到侦听不到信号能量,然后开始传输该帧;
  3. 在传输过程时,适配器监视来自其他适配器的信号能量的出现,如果该适配器传输了整个帧,而没有检测到来自其他适配器的信号能量,它就完成了该帧的传输;
  4. 如果适配器在传输中检测到来自其他适配器的信号能量,它就停止传输它的帧,而代之以传输一个48比特的阻塞(jam)信号;
  5. 在中止以后,适配器进入一个指数后退(exponential backoff)阶段。

以太网效率(efficiency of Ethernet):当有大量的活跃节点,且每个节点有大量的帧要发送时,帧在信道中无碰撞地传输的那部分时间占长期运行时的份额。

5.5.3 以太网技术

以太网通过使用转发器(repeater)能够得到更长的距离,而转发器是一种物理层设备,能在输入端接收信号,并在输出端再生该信号。

5.6 链路层交换机

交换机的任务是接收入链路层帧并将它们转发出链路。
交换机自身对节点是透明的(transparent)

5.6.1 交换机转发和过滤

过滤(filtering)是交换机决定一个帧是应该转发到某个接口还是应当将其丢弃的功能。
转发(forwarding)是决定一个帧应该被导向哪个接口,并把该帧接口移动到这些接口的交换机功能。
交换机的过滤和转发借助于交换机表(switch table)完成,交换机表中的一个表项包含:1)节点的MAC地址,2)到达该节点的交换机接口,3)用于节点的表项放置在表中的时间。

5.6.2 自学习

交换机表是自动地、动态地、自治地建立的,即没有来自网络管理员或配置协议的任何干预,即交换机是自学习(self-learning)的,这种能力是以如下方式实现的:

  1. 交换机表初始为空;
  2. 对于在某接口接收到的每个入帧,该交换机在其表中存储:在该帧源地址字段中的MAC地址、该帧到达的接口、当前的时间;
  3. 如果在一段时间(称为老化期(aging time))后,交换机没有接收到以该址作为源地址的帧,就在表中删除这个地址。

交换机是即插即用设备(plug-and-play device),因为他们不需要网络管理员或用户的干预。

5.6.3 链路层交换机的性质

使用交换机的优点:1)消除碰撞,2)异质的链路,3)管理。

5.6.4 交换机和路由器的比较

交换机是链路层的分组交换机,路由器是网络层的分组交换机。
交换机是即插即用的,路由器不是的。
交换机的活跃拓扑限制为一棵生成树,路由器能用各种拓扑结构来构建因特网。

5.7 PPP:点对点协议

<stron>是一个运行于<stron>之上的链路层协议,即一条直接连接两个节点的链路,链路的每一端有一个节点。
对PPP协议的设计提出的初始要求:分组成帧、透明性、多种网络层协议、多种类型链路、差错检测、连接的活性、网络层地址协商和简单性。
不要求PPP实现的协议功能:差错纠正、流量控制、有序和多点链路。
PPP帧包含的字段:标志字段、地址字段、控制字段、协议、信息和检验和。
为解决接收方会错误地检测为PPP帧结束,可以使用一种称为字节填充(byte stuffing)的技术。</stron></stron>

5.8 链路虚拟化:网络作为链路层

5.8.1 异步传输方式

异步传输方式(Asynchronous Transfer Mode,ATM):将比特分成小组进行传送,发送方可以在任何时刻发送这些比特组,而接收方从不知道它们会在什么时候到达。
ATM是一种分组交换、虚电路网络体系结构。
3个ATM层次自顶向下为:ATM适配层(ATM Adaptation Layer,AAL)ATM层(ATM layer)ATM物理层(ATM physical layer),端系统拥有这个三个层次,而ATM交换机上拥有后两个层次。
AAL从或向较高层应用程序或协议传递数据。AAL已经被定义用于恒定比特率服务和电路仿真,用于如可变比特率视频这样的可变比特率服务,以及用于如IP数据报传输这样的数据服务。由AAL处理的数据单元称为AAL协议数据单元(Protocol Data Unit,PDU)
ATM层位于ATM体系结构的核心,定义了ATM信元的结构和该信元中各个字段的含义。ATM信元首部中的字段(信元的前5个字节,余下的48字节为有效载荷)为:虚通道标识(VCI)负载类型(PT)信元丢失优先级(CLP)比特首部差错控制(HEC)字节
ATM物理层位于ATM协议栈的最底层,处理物理媒体上的电压、比特定时和成帧。

5.8.2 多协议标签交换

多协议标签交换(Multiprotocol Label Switching,MPLS)是一种在开放的通信网上利用标签引导数据高速、高效传输的新技术。多协议的含义是指MPLS不但可以支持多种网络层层面上的协议,还可以兼容第二层的多种数据链路层技术。
一个MPLS加强的帧仅能在两个均为MPLS使能的路由器之间发送。
IP数据报进入MPLS网络时,MPLS入口的边缘路由器分析IP数据报的内容并且为这些IP数据报添加合适的标签,所有MPLS网络中的标签交换路由器根据标签转发数据,当该IP数据报离开MPLS网络时,标签由出口边缘路由器弹出。
使用MPLS的一种简单形式的流量工程(traffic engineering),其中网络运行者能够超越普通的IP选路,迫使某些流量沿着一条路径朝给定的目的地引导,并且朝着相同目的地的其他流量沿着另一条路径流动。
MPLS能够并且已经被用于实现虚拟专用网络(Virtual Private Network,VPN):利用公用网络架设专用网络。

5.9 小结

链路层的基本服务是将网络层的数据报从一个节点移动到一个相邻的节点。
ARP协议用于IP地址与MAC地址间的转换。