数据链路层使用物理层提供的服务在通信信道上发送和接收比特。
功能包括:
(1) 向网络层提供一个定义良好的接口
(2) 处理传输错误
(3) 调节数据流,确保慢速的接收方不会被快速的发送方淹没
提供的服务:
(1) 无确认的无连接服务 (局域网)
(2) 有确认的无连接服务 (无线通信)
(3) 有确认的有连接服务 (电话)
说明:
无线通信,信道使用率很低但数据传输的误码率相对较高,确认是必要的
将原始的位流分散到离散的帧中,叫成帧。
成帧的方法有:
(1)字符计数法
(2)带字节/字符填充的标志字节法
(3)比特填充的比特标志法
(4)物理层编码违例法
字节计数法:利用帧头部的一个字段来标识该帧中的字符数
简单,无法恢复,已经很少使用
用一些特殊字节(FLAG)作为帧开始和结束标志,用转义字符(ESC)来区分二进制数据中存在的特殊字节。
缺点:
解决帧界混淆的方法
1. 以特殊的位模式01111110作为帧标志,即一个帧的开始(同时标志前一个帧的结束)
2. 当帧内容中出现一个与帧标志相同的位串01111110,则在5个1后插入一个0,即变成01111101,接收方将自动删除第5 个1后的0。这称为位填充法,也称为透明传输。
采用冗余编码技术,如曼切斯特编码,即两个脉冲宽来表示一个二进制位
数据0:低-高电平对
数据1:高-低电平对
高-高电平对和低-低电平对没有使用,可用作帧边界
差错的种类:
1. 单个错误,错误分散在各块中
2. 突发错误,错误集中在某块中
差错的处理:
1. 纠错码(需要太多的冗余位,纠错开销太大,主要用于无线网络)
2. 检错码 (不能恢复,可重传)
2.计算机网络中主要采用循环冗余码(CRC)。
纠错码:海明码
海明距离的意义:如果海明距离为d,则一个码字需要发生d个1位错误才能变成另外一个码字
海明距离与检错和纠错的关系:
1. 海明距离为d+1的编码能检测出d位差错。
1.因为在距离为d+1的检验码中,只改变d位的值,不可能产生另一个合法码。如奇偶校验码,海明距离为2,能查出单个错。
2. 海明距离为2d+1的编码,能纠正d位差错。
2.因为此时,如果一个码字有d位发生差错,它仍然距离原来的码字距离最近,可以直接恢复为该码。
(奇偶校验码,海明距离为2,可以检出单个错)
纠正单比特错的冗余位下界,m为数据位数,r为校验位数
(m+r+1)≤2^r
1. 每一个码字从左到右编号,最左边为第1位
2. 校验位和数据位
3. 每一个校验位设置根据:包括自己在内的一些位的集合的奇偶值(奇数或偶数)。
如何决定每个数据位的校验码?
将某一位数据位的编号展开成2的乘幂的和,那末每一项所对应的位即为该数据位的校验位(收方使用)。
如: 11 = 1 + 2 + 8
29 = 1 + 4 + 8 + 16
校验位1的检验集合为所有奇数位。
校验位2的检验集合:2、3、6、7、10、11、…
校验位4的检验集合:4、5、6、7、……
校验位8的检验集合:8、9、10、11、……
海明码纠错过程(只纠错1位)
例子:
计算"1001000"的偶校验时的海明码字?
经计算需要的检验字个数的最小值 r应满足 ( 所以r最小值为4,再根据校验位的对应规则可得下表:
|
B1 |
B2 |
B3 |
B4 |
B5 |
B6 |
B7 |
B8 |
B9 |
B10 |
B11 |
信息位 |
- |
- |
1 |
- |
0 |
0 |
1 |
- |
0 |
0 |
0 |
校验位 |
0 |
0 |
- |
1 |
- |
- |
- |
0 |
- |
- |
- |
海明码 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
检错码:奇偶、校验和、循环冗余校验
奇偶检验码:一个校验位追加到数据的最后。
检验位的取值(0或1)取决于整个码字总的"1"的个数。
奇校验:添加的校验位使得整个码字"1"的个数为奇数
偶校验:添加的校验位是的整个码字"1"的个数为偶数
Data: 1011010
Even: 1011010 0 (偶校验)
Odd: 1011010 1 (奇校验)
循环冗余检错码CRC
可以检测到所有长度小于等于r的突发错误
广泛用于各种网络,几乎所有的局域网
使用CRC编码时发送方和接收方必须预先商定一个生成多项式G(x),假设有一个m为的帧M(x),使用G(x)生成的帧的步骤如下:
小结:
Sender
Receiver
认为所有的过程是理想化的,不实用
确认帧
只在接收无差错时才发确认帧,出错时不发确认帧。
重发
网络中采用检错码,无法纠正错误,由重发原来帧的方式来恢复正确的帧。
计时器
控制何时重发,防止无限期等待(死锁)。
帧序号
防止重发时接收端收到重复的帧,序号还用于接收时排序。
保证送给网络层的都是按序无重复的分组
帧格式:
捎带确认( piggyBacking P176)
滑动窗口协议
如果发送端可以连续发送一批数据帧,必须考虑接收端是否来得及接纳与处理这么多的帧,这里就提出了网络流量控制问题
N回退协议和选择重传协议:
由于传输过程中存在延迟,即数据在传播过程中需要时间,那么如果使用上面所提及的协议,传输过程中有大量的时间存在阻塞状态,所以为了充分利用带宽,我们让发送方一次发送w个帧。所以就存在如何处理在传输过程中出现的帧错误的问题
协议四的基本工作原理:
窗口设置
窗口滑动机制
特点
出错情况
连续发送W个数据帧,其中有一帧出错,但其后续帧被成功发送
接收方的接收策略选择
对应的发送方的重传策略选择
接收方的接收策略选择:
丢弃错帧,其后续帧因不是期望接收帧也被丢弃(接收窗口为1)。
发送方的重传策略选择:
缓存在发送窗口中的出错帧以及其后续帧全部重发
基本概念:
回退N协议:
该图的发送方和接收方的窗口大小都是7,那么也就是说发送方一次最多只能发送7个帧,刚开始发送方只能发送序号为0~6的数据帧,图中发送方收到序列号为第0和第1号帧的确认帧,那么整个窗口向前滑动,发送方可以发送序列号为7和8 的数据帧,但是不幸的是2号数据帧并没有收到确认帧,所以整个窗口并不会向前滑动,此时只能等待2号数据帧的计时器超时,那么超时后发送方将会从2号数据帧开始发送,重复这个过程。
接收方的接收策略选择:
丢弃错帧,缓存后续正确接收帧;
发送方的重传策略选择:
只重发出错帧。
基本概念:
选择重传协议:
选择重传策略常与否定重传策略一起使用
否定确认策略NAK的作用
差错控制策略比较
回退n帧
滑动窗口长度w的选择
n 协议5(回退n帧)
W = MAX_SEQ
n 协议6(选择重传)
W= (MAX_SEQ + 1) / 2
发送方和接收方的窗口大小 W=((MAX_SEQ+1))/2,原因是防止窗口重叠,在确认帧丢失的情况下而导致的数据错误
接收方在某个帧出错后继续接受和缓存后续发送的数据包,直到整个窗口的填满后,把帧进行排序后才传递给网络层。
ARQ自动重复请求/PAR带有重传的肯定确认
接收方无误,发送确认帧
面向位的数据链路协议
特性:
工作原理:数据帧的可靠传输
面向字符的数据链路协议
PPP 是一种在链路上传输分组的常用方法
3个主要特性:
PPP两种认证协议: PAP and CHAP
PAP是一种简单的明文验证方式
CHAP是一种加密的验证方式,能够避免建立连接时传送用户的真实密码
PPP的帧格式
PPP成帧是面向字节填充的:
具体细节可以参考上面的字节填充法, 因为PPP重用了HDLC的技术,所以PPP使用标志字(0x7E 01111110)来标记帧的起始,使用0x7D来作为转义字符,具体操作如下:
1. 使用0x7E来标记帧的开始
2. 如果在Payload中存在0x7E则在该字节前,填充 0x7D,吧 0x7E 和 0x20 进行异或运算,对出现的0x7D 同样处理 0x7E --> 0x7D 0x5E 0x7D --> 0x7D 0x5D
3. 若信息字段中出现ASCII码的控制字符(即数值小于0x20的字符),则在该字符前面要加入一个0x7D字节,同时将该字符的编码和0x20进行异或处理
接收方接收到帧后进行下面处理:
在帧中遇到0x7D 就把0x7D删除,在把紧跟在0x7D 后的字节和0x20进行异或运算,就得到对应的数据
LCP ( Link Control Protocol)提供了建立、配置、维护和终止点对点链接的方法
PPP的工作过程