链路层是协议栈的最低层,它用于将网络层的数据报通过路径中的单段链路节点到节点的传送,在路径上的不同链路可能具有不同的链路层协议。
链路层信道包括两种类型,广播信道和点对点信道。对于广播信道来说,在广播信道类型的链路层中,由于许多主机被连接到相同的通信信道,因而需要媒体访问协议来协调传输和避免冲突。

一、链路层提供的服务

链路层协议交换的数据单元称为,每个链路层帧通常都封装一个网络层报文。为了将数据报从源主机发送到目的主机,数据报必须在端到端的每段链路上传输。通过特定的链路时,传输节点将此数据封装到链路层帧中,再将该帧发送到链路上,接收节点接收该帧并取出数据。
链路层提供的服务可能包括:

  1. 成帧:将网络层数据封装到链路层帧中。每种链路层协议都有相应的协议定义了其地址格式及其分配方式。
  2. 链路接入:媒体访问协议规定了帧在链路上传输的规则。
  3. 可靠交付:当链路层协议提供可靠交付服务时,它必须保证无差错的经过链路层传输每个网络层数据报。链路层可靠交付常常用于易产生高差错率的链路(比如无线接入),其目的是纠正一个差错而不是由高层协议进行一次重传。
  4. 流量控制:链路的每一端节点都具有有限容量的帧缓存能力,流量控制用于防止链路一端的发送节点淹没另一端的接收节点。
  5. 差错检测:用于检测帧中的比特错误
  6. 差错纠正:它和差错检测类似,区别在于它不仅检测帧中是否有错误,还能判断哪个比特错了。
  7. 半双工和全双工:全双工模式下,链路两端可以同时传输,而半双工模式则不可以。
    链路层是由软件和硬件结合来完成其功能的。其中软件完成:
    • 发送端:从网络层接收数据报,装配链路层地址信息以及激活硬件控制器来触发发送
    • 接收端:响应硬件控制器,处理差错,将数据报向上送给网络层
      链路层不提供保证数据安全性的服务。

二、差错检测和纠错技术

网络中最基本的问题是接收方要确信其收到的数据就是数据发送的原始数据而没有错误,为了确保这一点,就需要一种差错检测机制来检测是否发生了差错。传输数据中检测差错的技术有3种:

  1. 奇偶校验:通过一个附加比特来使得整个比特串中由偶数(偶校验)或奇数(奇校验)个比特1。它是差错检测盒纠错的基础。
  2. 检验和:将数据看成n个比特为单位的比特流,将每个单位相加最后得到一个n比特的值,该值作为差错检测比特。在因特网中取2个字节即16比特。传输层采用该技术来实现差错检测。
  3. 循环冗余检测:也称为CRC检测。每个CRC标准都能检测小于r+1比特的突发错误(详细的可以参考CRC的详细介绍)。该技术更复杂,被用于链路层,由硬件实现。

三、多路访问协议

广播信道是常见的信道,在广播信道上传输时,共享信道的每个节点都能收到一份拷贝。由于广播信道是共享信道,因而就需要一种技术来协调多个发送和接收者对一个共享广播信道的访问,多路访问协议就是用于该目的的。多路访问协议有很多,但是可以划分为三种类型:

  • 信道划分协议
  • 随机接入协议
  • 轮流协议
    1. 信道划分协议
      信道划分协议包括:
      时分复用TDM:它将时间划分为时间帧,并进一步将时间帧划分为N个时隙,然后把N个时隙分配给N个节点中的每一个。
      频分复用FDM:频分复用类似于时分复用,只是它划分的是频段。
      码分多址CDMA:TDM和FDM都能避免碰撞,并且在N个节点之间公平的划分了带宽,但是每一个节点只能用带宽/N的带宽,因而效率不高。CDMA则为每个节点分配一种不同的编码,然后每个节点用它唯一的编码来发送数据。如果精心选择编码,则CDMA网络允许不同的节点同时传输。
    2. 随机接入协议
      在随机接入协议中,每个传输节点总是以信道的速率来进行发送,当有碰撞时,涉及碰撞的每个节点反复的重发它的帧,直到该帧无碰撞的通过的位置。但是当一个节点经受一次碰撞时,它不立即重发,而是在重发之前等待一个随机时延。涉及碰撞的每个节点都独立的选择随机时延。
      CSMA/CD协议是一个重要的常用的随机接入协议,其工作方式:一个节点在传输前先侦听信道,如果来自其它节点的帧正在信道上发送,则节点等待一段随机时间,然后再侦听信道;如果侦听到信道是空闲的,则该节点开始帧传输,这部分工作成为CSMA(载波侦听多路访问)。节点在传输时会一直侦听信道,如果它检测到另一个节点正在传输,则它就停止传输,用某个协议来确定它应该在什么时候再尝试下一次传输,这部分工作称为CD(collison detection)。这种模式下,参与者都是君子 ,只有没有人在使用信道时,自己才会使用;如果使用时发现有人也在使用则就停止使用,这样减少了信道被已经被破坏了的数据占用的时间,因而这种模式可以提高信道的使用效率。
    3. 轮流协议
      轮流协议有两种工作模式:轮询协议和令牌传递协议。
      轮询协议:节点之一被指定为主节点,它来轮询每个节点,给它们分配带宽
      令牌传递协议:一个称为令牌的特殊目的帧在节点之间以某种次序进行交换,当节点收到了该帧,并且有帧要发送时,它就持有这个令牌,否则它就将令牌传递给下一个节点。

四、链路层编址

局域网(LAN)广泛使用了广播信道以及多路访问协议。
当数据报在链路中被传输时,其源地址和目的地址由链路层地址指定。链路层地址也称为MAC地址,物理地址。它和网络适配器紧密相连。对于大多数LAN而言,MAC地址长度为6个字节。MAC地址由IEEE管理和分配。适配器生产者从IEEE购买地址块,并将属于自己的一个地址设置到适配器中。适配器向另一个适配器发送报文时就将自己的MAC地址设置为链路层源地址,将目的适配器的地址设置为链路层目的地址。
MAC地址分为三类:

  1. 单播地址:标识一个节点
  2. 组播地址:标识一组节点
  3. 广播地址:标识该局域网内所有节点

从物理上来说,网络适配器可以从与其相连的线路上接收报文,但是否接收报文则取决于报文的链路层地址以及网络适配器的工作模式:

  • 如果网络适配器工作在混杂模式,则它接收该线路上的所有报文
  • 如果网络适配器工作在非混杂模式,则它只接收目的MAC地址属于本网络适配器的报文(包括单播地址,组播地址以及广播地址)

从某种意义上来说,链路层地址是用于在线路上标识一个网络设备器的(进一步的说标识一个拥有这个网络适配器的设备),因此它只在局部(即线路范围,更准确的说是在一个子网内部)有效。举例来说,加入你有两台电脑,一台在北京,一台在武汉,两台电脑的MAC地址你都知道,但是你无法直接使用MAC地址使得两台电脑可以通信。因此链路层地址是工作在局部范围的,它只在局部有效。

进一步的说,在有了链路层后,就可以组建可以在局部范围工作的网络了,在这个网络内部,设备之间可以通过网络适配器的MAC地址来进行通信,但是链路层只提供了有限的服务,而且链路层是和硬件即适配器紧密相关的,因而直接使用该层还需要处理大量的与硬件相关的细节,因此即便在局部网络内部也没有直接使用链路层进行通信的应用。

五、以太网

以太网是当今现有局域网采用的最通用的通信协议标准,它向上层协议提供的是无连接的不可靠的服务。当需要发送报文时,它在以太帧中封装报文,并且将其发送出去,无论接收端是否正确收到该报文,发送端都不会得到任何通知,因而说它提供的是无连接的不可靠的服务。

  1. 以太网帧格式
    ethernet.jpg
  2. CSMA/CD
    以太网采用总线型的网络拓扑,在总线上只要有一台计算机在发送数据,总线的资源就被占用了,因此必须协调总线上计算机的工作。以太网采用CSMA/CD来解决这个问题,即:载波监听多点接入/碰撞检测。
    多点接入:它是说总线型的网络,许多计算机以多点接入的方式连接在一根总线上,协议的实质是“载波监听”和“碰撞检测”。
    载波监听:它是指每一个站点在发送数据之前要先检查一下总线上是不是有其它计算机在发送数据,如果有就暂时不要发送数据,以免发生碰撞。实际上由于以太网标准规定计算机发送的数据使用曼彻斯特编码信号,因此总线上并没有载波,载波监听监听的是总线上是不是有其它计算机发送的数据信号。
    碰撞检测:它是指计算机边发送数据边检测信道上的信号电压大小。当几个站同时在总线上发送数据时,总线上的电压摆动值将会增大。当一个站点检测到的信号电压摆动超过一定的门限值时,就认为总线上至少有两个站点同时在发送数据,就发送了碰撞,一旦一个站点发现总线上出现了碰撞,就要立即停止发送。
    CSMA/CD的算法:
    (1) 侦听总线,观察是否有其它节点正在发送(检测载波信号)。若发现有节点正在发送,就继续侦听直到信道为空闲。
    (2) 若没有检测到信号,就开始发送消息。
    (3) 发送的时候继续侦听总线,若检测到冲突转(4),否则完成一个帧的发送
    (4) 发送拥塞序列(形式是未定义的)警告所有的节点现在已检测到碰撞,以保证网络中所有的设备都停止发送。转(5)
    (5) 等待一段随机的时间,在从第一步重新开始。
    在发生冲突时,以太网采用截断二进制指数类型的退避算法来进行退避。这个算法的简单描述如下:
    (1) 确定基本的退避时间,一般取为争用期
    (2) 定义参数k,它等于重传次数,但是k不能超过10,因此k=Min[重传次数,10]。
    (3) 从离散的整数集合[0,1,……,(2^k-1)]中随机的抽取一个数,记为r。重传所需的时间就时r倍的基本退避时间
    (4) 当重传次数达到16此仍不能成功时就丢弃该帧,并向高层报告。
    总线单程传播时延与帧的发送时延之比为:a=C*t/L
    其中t表示端到端的传播时延,C表示数据发送速率,L表示帧长。
    分子C*t为时延带宽积,或以比特为单位的信道的长度,而分母是以比特为单位的帧长,a描述了发送端数据填满信道地能力,a越小发送端的数据越容易把信道填满。
    极限信道利用率(T0+为帧发送占用线路的时间,T0为帧本身的发送时间)
    SM=T0/( T0+为帧发送占用线路的时间)=1/(1+a)

六、链路层交换机

以太网采用星型拓扑,每个节点都与一个交换机相连。链路层交换机接收链路层帧并将它们转发到出链路。

1.交换机转发和过滤

转发:决定一个帧应该被从哪个接口发送出去
过滤:是指交换机决定一个帧是应该被转发到某个接口还是被丢弃的功能。
交换机的转发和过滤借助其内部的表项完成。交换机的转发基于MAC地址进行。交换机是自学习的,其基本工作过程:

  1. 从某个接口收到一个帧
  2. 添加帧的源MAC地址,接口,老化时间到转发表中,如果已经存MAC和接口都相同的表项,则只更新其老化时间;如果已经存在该MAC地址的表项,但是接口不同,则原有的被删除
  3. 以帧的目的地址为关键字查询转发表,如果
    • 没有找到任何表项,则向除了接口该帧的接口之外的所有接口转发该报文
    • 找到了一个表项,且接口不同于接收该帧的接口,则向表象记录的接口转发该报文
    • 找到了一个表象,且接口和接收该帧的接口相同,丢弃报文
      另外转发表存在老化机制,如果在老化期后,交换机没有收到以某个地址为源地址的帧,则会从转发表删除以该地址为关键的表项。

      2.交换机的性质

      使用交换机构建网络可以得到很多好处:

  4. 消除碰撞:使用交换机构建网络后,每段链路都是独享的,因而就消除了碰撞,避免了因碰撞而产生的带宽浪费。
  5. 连接异质的链路:使用交换机可以将具有不同速率的链路连接起来
  6. 方便管理:使用交换机构建网络,管理员通过交换机就可以检测网络的运行情况,简化方便了管理