数据链路层

196 阅读10分钟

1、数据链路层的功能

  • 为网络层提供服务
    • 无确认的无连接服务

      源机器发送数据帧时不需要先建立链路连接,目的机器收到数据帧时不需要发回确认。对丢失的帧,数据链路层不负责重发而交给上层处理。适用于实时通信差或误码率较低的通信信道,如以太网。

    • 有确认的无连接服务

      源机器发送数据帧时不需要先建立链路连接,但目的机器收到数据帧时必须发回确认。源机器在所规定的时间内未收到确定信号时,就重传丢失的帧,以提高传输的可靠性。该服务适用于误码率较高的通信信道,如无线信道。

    • 有确认的面向连接服务

      帧传输过程分为三个过程:建立数据链路、传输帧、释放数据链路。目的机器对收到的每一帧都要给出确认,源机器收到确认后才能发送下一帧,因此该服务的可靠性最高。该服务适用于通信要求(可靠性、实时性)较高的场合。

有连接就一定要有确认,即不存在无确认的面向连接服务。

  • 链路管理

    数据链路层连接的建立、维持和释放过程称为链路管理,主要用于面向连接服务。链路两端的结点要进行通信,必须首先确认对方已处于就绪状态,并交换一些必要的信息以对帧序号初始化,然后才能建立连接,在传输过程中则要能维持连接,而在传输完毕后要释放该连接。在多个站点共享同一物理信道的情况下(如在局域网中)通信站点间分配和管理信道也属于数据链路层管理的范畴。

  • 帧定界、帧同步与透明传输

    • 帧定界

      两个工作站之间传输信息时,必须将网络层的分组封装成帧,以帧的格式进行传送。将一段数据的前后分别添加首部和尾部就构成了帧。首部和尾部中含有很多控制信息,他们的一个重要作用是确定帧的界限,即帧定界。

    • 帧同步

      帧同步是指接收方应能从接收到的二进制比特流中区分出帧的起始和终止。

      例如在HDLC通信规程中,用标识符F(01111110)来标识帧的开始和结束。通信过程中,检测到帧标识位F即认为是帧的开始,然后一旦再次检测到标识位F即表示帧的结束。

      HDLC标准帧格式

    • 透明传输

      如果在数据中恰好出现与帧定界符相同的比特组合(会误认为“传输结束”而丢弃掉后面的数据),那么就要采取某种有效的措施解决这个问题,即透明传输。更确切的说,透明传输就是不管所传数据是什么样的比特组合,都应当能在链路上传送。

  • 差错控制

    由于信道噪声等各种原因,帧在传输过程中可能会出现错误。用以使发送方确定接收方是否正确收到由其发送的数据的方法称为差错控制。通常,这些错误分为位错和帧错。

    • 位错

      位错指帧中某些位出现了差错。通常采用循环冗余校验(CRC) 方式发现位错,通过自动重传请求(ARQ) 方式来重传出错的帧。具体的做法是: 让发送方将要发送的数据帧附加一定的CRC冗余校错码一并发送,接收方则根据校错码对数据帧进行错误检测,若发现错误则丢弃,发送方超时重传该数据帧。这种差错控制方法称为ARQ法。ARQ法只需要返回很少的控制信息就可有效地确认所发送数据帧是否被正确接收。

    • 帧错

      帧错指帧的丢失、重复或失序等错误。在数据链路层引入定时器和编号机制,能保证每一帧最终都能有且仅有一次正确地交付给目的结点。

  • 流量控制

    由于收发双方各自的工作速率和缓存空间的差异,可能出现发送方的发送能力大于接收方的接收能力的现象,如若此时不适当限制发送方的发送速率(即链路上的信息流量),则会导致前面来不及接收的帧会被后面不断发送来的帧“淹没”,造成帧的丢失而出错。因此流量控制实际上就是限制发送方的数据流量,使其发送速率不超过接收方的接收能力。

    这个过程需要通过某种反馈机制使发送方能够知道接收方是否能跟上自己,即需要有一些规则使得发送方知道在什么情况下可以接着发送下一帧,而在什么情况下必须暂停发送,以等待收到某种反馈信息后继续发送。

2、组帧

数据链路层之所以要把比特组合成帧单位传输,是为了在出错时只重发出错的帧,而不必重发全部数据,从而提高效率。为了使接收方能正确地接收并检查所传输的帧,发送方必须依据一定的规则把网络层递交的分组封装成帧(称组帧)。组帧主要解决帧定界、帧同步、透明传输等问题。通常由4种方法实现组帧。

组帧时既要加首部又要加尾部。因为在网络中信息是以帧为最小单位进行传输的,所以接收端要正确地接收帧,必须要清楚该帧在一串比特流中从哪里开始到哪里结束(因为接收端收到的是一串比特流,没有首部和尾部是不能正确区分帧的)。而分组(即IP数据报)仅是包含在帧中的数据部分,所以不需要加尾部来定界。

  • 字符计数法

字符计数法是指在帧头部使用一个计数字段来标明帧内字符数(包括此计数字段)。目的结点数据链路层收到字节计数值时,就知道后面跟随的字节数,从而可以确定帧结束的位置。(计数字段提供的字节数包含自身所占用的一个字节)。

这种方法最大的问题在于如果计数字段出错,即失去了帧边界划分的依据,那么接收方就无法判断所传输帧的结束位和下一帧的开始位,收发双方将失去同步,从而造成灾难性后果。

字符计数法

  • 字符填充的首尾定界符法

字符填充法使用一些特定的字符来定界一帧的开始(DLE STX)与结束(DLE ETX)。为了使信息位中出现的特殊字符不被误判位帧的首尾定界符,可以在每个特殊字符前面填充一个转义字符(DLE)来加以区分,以实现数据的透明传输。接收方接收到转义字符后,就知道后面紧跟的是数据信息而不是控制信息。

字符填充法

  • 比特填充的首尾标志法

比特填充法运行数据帧包含任意个数的比特,也允许每个字符的编码包含任意个数的比特。它使用一个特定的比特模式,即01111110来标志一帧的开始和结束。为了不使信息位中出现的比特流01111110被误判位帧的首位标志,发送方的数据链路层在信息位中每遇到5个连续的"1"时,将自动在其后面插入一个“0”;而接收方做该过程的逆操作,即每收到五个连续的“1”时,自动删除后面紧跟的“0”,以恢复原信息。

比特填充法

比特填充法很容易由硬件来实现,性能优于字符填充法。

  • 违规编码法

在物理层进行比特编码时,通常采用违规编码法。例如,曼切斯特编码方法将数据比特“1”编码成“高-低”电平,将数据比特“0”编码成“低-高”电平,而“高-高”电平和“低-低”电平在数据比特中是违规的(即没有采用)。可以借用这些违规编码序列来定界帧的起始和终止。局域网IEEE802标准就采用了这种方法。

违规编码不需要采用任何填充技术,便能实现数据传输的透明性,但它只适用于采用冗余编码的特殊环境。

由于字节计数法中计数字段的脆弱性和字符填充法实现上的复杂性与不兼容性,目前较多的组帧方法是比特填充法和违规编码法。

3、差错控制

概括地说,传输中的差错都是由噪声引起的。噪声有两大类:一类是信道所固有的、持续存在的随机热噪声;另一类是由外界特定的短暂原因所造成的冲击噪声。前者可以通过提高信噪比来减少或避免干扰,而后者不可能靠提高信号幅度来避免干扰造成的差错,是产生差错的重要原因。

通常利用编码技术进行差错控制,主要由两类:自动重传请求(Automatic Retransmission reQuest,ARQ)和向前纠错(Forward Error Correction,FEC)。在ARQ方式中,接收端检测出差错时,就设法通知发送端重发,直到接收到正确的码字为止。在FEC方式中,接收端不但能发现差错,而且能确定二进制数码的错误位置,从而加以纠正。因此,差错控制又分为检错编码(Error-Detecting Code)和纠错编码(Error-Correcting Code)。

  • 检错编码
    • 奇偶校验码

      奇偶校验码是奇校验码和偶校验码的统称,是一种最基本的检错码。它由n-1位信息元和 1 位校验码组成,如果是奇校验码,那么在附加一个校验元后,码长为 n 的码字中“1”的个数为奇数;如果是偶校验码,那么在附加一个校验元后,码长为 n 的码字中“1”的个数为偶数。它又分为垂直奇偶校验、水平奇偶校验和水平垂直奇偶校验。

    • 循环冗余码

      给定一个m比特的帧或报文,发送器生成一个r比特的帧检验序列(FCS)。这样所形成的帧将由m+r比特组成。发送方和接收方事先商定一个多项式G(x)(这个多项式的最高位和最低位必须为1),使这个带检验码的帧刚好能被预先确定的多项式G(x)整除。接收方用G(x)去除收到的帧,如果无余数,那么认为无差错。

      假设一个帧有m位,其对应的多项式为M(x),则计算冗余码的步骤如下:
          1)加0。假设G(x)的阶为r,那就在帧的地位端加上r个0。
          2)模2除(求异或)。利用模2除法(求异或),用G(x)对应的数据串去除1)中计算出的数据串,得到的余数即为冗余码(共r位,前面的0不可省略)
      

例: 设G(x)=1101(即r=3),待传送的数据M=101001(即m=6)。

循环冗余码的计算

  • 纠错编码

    纠错编码使用海明码。海明码能发现双比特错误,纠正单比特错误。

海明码

4、流量控制与可靠传输机制

5、介质访问控制

6、局域网

7、广域网

8、数据链路层设备