数据链路层The Data Link Layer

数据链路层是计算机网络中负责无差错传输帧的重要层次。它提供了向网络层的服务接口,包括无确认无连接、有确认无连接和有确认有连接服务。关键功能包括封装成帧、差错检测和纠正,如校验和、CRC和海明码。此外,还介绍了基本的数据链路层协议,如停-等协议和滑动窗口协议。

数据链路(data link)

数据链路层传输的数据单位是帧(frame)

向网络层提供良好的服务接口

  1. 无确认的无连接服务:不检测丢帧,适合错误率低或实时通信,如802.3
  2. 有确认的无连接服务: 每一帧单独确认,适用于不可靠通信,如802.11
  3. 有确认的有连接服务:建立逻辑连接, 长距离不可靠信道,如卫星。

封装成帧(framing)

  • 将物理层的比特流拆分成多个帧。
  • 发送方为每个帧计算校验和,并一起传输。
  • 接收方重新计算校验和,并进行比对
  1. 字节计数法 - 利用头部的一个字段来标识该帧中的字符数,出错后后续紊乱。
  2. 标识字节法 - 用帧开始符(SOH)、帧结束符(EOT)进行帧定界,出错后可重新找到同步。
    但:如果在数据中出现了EOT,可能会被接收端误认。后面数据会被丢弃 —— 可以为数据中的EOT或ESC前插入一个转义字符(ESC)
    则:
  3. 标识比特法 - 定义S/E由某特殊比特模式进行标记:01111110
    当发送的数据有连续5个1, 则在比特流中插入一个0;当接收方看到有5个连续1紧跟一个0是,就删除比特0.
    HDLC协议,USB采用
  4. 物理层编码违禁法:利用物理层中不被使用的信号来作为S/EOH。

差错检测和纠正

BER误码率(Bit Error Rate)= 传输错误的比特/所传输比特总数,与信噪有很大的关系。

  • 高可靠信道(如光纤),常用检错码 ; 低可靠信道(如无线),常用纠错码
  • 错误模型:单比特错误,突发错误(一连串错误)
  • 码字codeword,总长度n = m(数据位长度)+r(校验位长度)
  • 海明距离(Hamming distance,码距):为对比发送和接收的码字时间的差异,XOR两个码字,计算1的个数。
  • 编码的海明距离:完整的合法码字列表中两两码字具有的最小海明距离。

例如:只有以下4个有效码字的编码方案 000000、000111、111000、111111 , 则码距为3,可以检测2个错误(如000011),或纠正1个错误(000100)。

编码的检错和纠错特性与海明距离有关:

  • 为了检测d个错误,需要一个距离为d+1的编码方案
  • 为了纠正d个错误,需要一个距离为2d+1的编码方案

检错码 - 校验和

如,奇偶校验,将单个奇偶校验位附加到数据后,使得比特1的数量是偶数。将码距变成了2, 能检测出一位的错误。

例如原数据: 110010?+ 110000?
补齐校验位: 1100101 + 1100000
假设错传了: 1110101 + 1100011
则前一数据发现奇数个,认为错误, 后一数据是偶数个,认为正确.

缺点:突发错误检错率0.5;
交错校验:?
再比如: Internet 校验和(计算消息位总和,可以检测出两个0变1的错误)、 Fletcher 校验和

检错码 - 循环冗余检验CRC

在一组数据M(位数k)后面补上n位的冗余码,然后得到的k+n位的数,拿来除以(n+1)位的除数P,得出商Q,余R,R比P位数少。
P:生成多项式,最高位和最低位系数1

举例:
设 k=6, M = 101001 , n=3, P = 1101。
设被除数2n∗M2^n* M2nM = 101001000,模2运算(XOR除法算法)的结果:Q=110101, R = 001。
把R作为冗余码,添加在M的后面发送出去,即 2n∗M+R2^n* M + R2nM+R , 即 101001001。

特征:

  • 所有的一位错误都将被检测到
  • 所有的双位错误都能检测出的充要条件是: 任何小于等于最大帧长的k值,生成多项式G(x)都不能整除xkx^kxk +1
    G(x)=xa+xb=xb∗(xa−b+1) G(x)= x^a + x^b = x^b * ( x^{a-b} + 1) G(x)=xa+xb=xb(xab+1)
  • 若x+1作为多项式G(x)的一个因子,能够检测到所有包含奇数个错误的长度。

纠错码

假设每个码字有m个消息位和r个检测位,为了能够纠正所有的单个错误,必须有:
(n+1)2m<=2n (n+1)2^m<= 2^n (n+1)2m<=2n

(m+r+1)<=2r (m+r+1) <= 2^r m+r+1)<=2r

海明码的编码步骤:

  1. 计算校验位数
    如10011101的8位信息码,至少需要几位校验码?
    8+r+1<=2r8+r+1 <= 2^r8+r+1<=2r , r = 4

  2. 确定校验码位置
    校验码 必须 推荐 是2n2^n2n位置的,举例如:10011101,必须是 1 0 0 1 1 1 0 1,即第1、2、4、8、16…位置

  3. 计算校验位
    计算校验位
    如10011101,编码后为:1 1 1 0 0 0 1 1 1 1 0 1,计算方法 :

  • p1 = b1⊕b2⊕b4⊕b5⊕b7⊕b9⊕b11⊕b12… = (异或10110)= 1
  • p2 = b1⊕b3⊕b4⊕b6⊕b7⊕b10⊕b11⊕13… =(异或 10110) = 1
  • p4 = b2⊕b3⊕b4⊕b8⊕b9⊕b10⊕b11… = (异或0011) = 0
  • p8 = b5⊕b6⊕b7⊕b8⊕b9⊕b10⊕b11… = (异或1101) = 1
  1. 海明码纠错
    举例10011101,传输过程发生第d3位错误,111000111101 -> 111001111101,计算如下:
  • p1 ⊕ b1⊕b2⊕b4⊕b5⊕b7 = (异或 1 10110) =0
  • p2 ⊕ b1⊕b3⊕b4⊕b6⊕b7 = (异或 1 11110) = 1
  • p4 ⊕ b2⊕b3⊕b4⊕b8 = (异或 0 0111) = 1
  • p8 ⊕ b5⊕b6⊕b7⊕b8 = (异或 1 1101 )= 0

所以,检错结果是第0110位,即传输中第6位,即原始数据d3位。

  1. 利用海明码对连续多位差错进行纠错
    传递和缓存:block n2n^2n2的数据,可以检测突发性连续的不超过k(消息位长度)的连续性错误。

基本的数据链路层协议

  • Unrestricted Simplex Protocal 无约束单工协议(乌托邦协议)
    • 无错信道的单工协议
    • 无流量控制,无休止地发送-接受
  • Simplex Stop-and-Wait Protocal 单工停-等协议
    • 无错信道上的单工停-等协议
    • 帧数据要等待对方确认到达后才能继续发送
  • A Simplex Protocal for a Noisy Channel
    • 有错信道上的单工停-等协议
    • 增加一个计时器
    • 超时则重发该帧
    • 为避免重复帧,需要添加序号。

滑动窗口协议 Sliding window protocal

在一条链路上,传递两个方向上的数据。
要等到接收到接收方的确认消息后再发出下一帧。

发送窗口内的序号(一组序号,比如窗口大学1,3bit的序列号,8位帧);
缓冲区大小 = 最大窗口尺寸。
接受窗口内的序号 ( 可以接受的帧)

  1. A One Bit Sliding window protocal
    一帧一帧的传递,链路利用率超低。而且如果两边同时开始传递,一半的时间将被浪费。由此提出了PipeLining,带宽使用效率和数据链路层缓存之间的权衡:
    管道化传输:连续发送多帧后再等待确认,即保持多个帧同时在传输过程中。
  2. A protocal Using Go Back n 退后n帧协议
    接收窗口为1,则接收方从出错帧起丢弃所有后继帧。
  3. A protocal Using Selective repeat 选择重回协议
    接收窗口大于1,选择错误的重传即可。
    从出错帧其丢弃所有后继帧。

——END——

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值