第三章:数据链路层

Download Report

Transcript 第三章:数据链路层

Chapter 3
The Data Link Layer
内容
a)
b)
c)
d)
e)
f)
数据链路层设计要点
错误检测和纠正
基本数据链路协议
滑动窗口协议
协议验证
数据链路层协议示例
数据链路层设计要点
•
•
•
•
为网络层提供的服务
分帧
错误控制
流控
数据链路层功能
•
•
•
向网络层提供一个定义良好的接口
处理传输错误
调节数据流
•
确保慢速的接收方不会被快速的发送方淹没
分组和帧之间的关系.
为网络层提供的服务
1. 无确认的无连接
服务
2. 有确认的无连接
服务
3. 有确认的面向连
接服务
P156
(a) 虚拟通信过程.
(b) 实际通信过程.
示例:为网络层提供的服务
数据链路层协议的位置
3层看来,2层提供了某种连接服务
成帧
a)
目标:把位流分解到离散的帧中
•
•
•
•
字符计数法
含字节填充的分界符法
含位填充的分界符法
物理层编码违例法
字符计数法成帧
字符流. (a) 无错. (b) 一位差错.
101111,计数值被破坏
含字节填充的分界符法成帧
(a) 使用标志字节作为帧的开始和结束
(b) 字节填充前后的4个字节序列例子
缺点是依赖于
8位字符模式
含位填充的分界符法分帧
位填充 标志位模式为01111110,每5个1填充1个0
(a) 原始数据.
(b) 线路上的数据.
(c) 删除填充之后存储在接收方存储器中的数据.
物理层编码违例法成帧
•
•
如果物理介质上的编码方法中包含冗余信息,可以使用
例:
•
•
+1表示高电平、-1表示低电平
+1-1表示比特“1”;-1+1表示比特“0”,而+1+1和-1-1不表
示数据,有可能用于帧分界
注:多种方法的联合使用可能会提高帧边界检测的速度
内容
a)
b)
c)
d)
e)
f)
数据链路层设计要点
错误检测和纠正
基本数据链路协议
滑动窗口协议
协议验证
数据链路层协议示例
错误检测和纠正
• 纠错码
• 检测码
突发错误:集中在某些比特位产生错误。
例如 1000×100位数据块,每一位错误概率
0.001;
如果错误是孤立的,那么每个1000位数据块
都可能有某1位发生错误;
如果错误每次发生都是连续的100位,那么
这些错误可能只发生在1-2块数据块中,大
部分数据块没有错误。
编码基础知识
•
汉明距离:两个码字中不相同的位的格式,设码字x,y,其
汉明距离为w(xy),其中w(z)表示z比特串中1的个数
若x和y的汉明距离为d,则x至少需要d个错误位才会变成y。
所有可用码字之间最小的汉明距离称为最小汉明距离
一些结论:
•
•
•
•
•
为了检测d位错误,需要d+1的最小汉明距离
为了纠正d位错误,需要2d+1的最小汉明距离
编码基础知识
•
奇偶校验码:
•
•
•
•
数据后面增加1位奇偶位,奇偶位的取值保证码字中1的数目是偶数
(偶校验)或者奇数(奇校验)
例如1011010,偶校验时发送10110100,奇校验时发送10110101
奇偶校验编码方法汉明距离为2?可以检测单个错误
一种距离为5的编码方案
•
•
A=0000000000 B=0000011111 C=1111100000 D=1111111111
可以纠正2个错误,例如0000000111会被纠正为B码字
纠错码之汉明码
考虑n位码字n=m+r
其中m位为报文,r
位为校验位。
r下界:m+r+12r
当m=7时,8  2r-r
可以计算r最小值4
汉明码手工计算
汉明码也能够纠正突发错
误,只需要把传输的码字
按照矩阵排列即可。
(1)
偶校验
(2) 3 (4) 5 6 7 (8) 9 10 11
H:
1
0 0 1
0
0
0
3=1+2; 5=1+4; 6=2+4; 7=1+2+4; 9=1+8; 10=2+8; 11=1+2+8;
3|5|7|9|11
0
3|6|7|10|11
0
m:
1
1
1
1
5|6|7
0
1 0 1
0
9|10|11
1
0
1
0
通常用于出错概率比较高的链路
检错码
•(7,4)汉明码可以纠正单
个错误,可以检测2位错误
(最小汉明距离为3)
•奇偶校验编码方法汉明距离
为2,可以检测单个错误
•为了增加突发性错误的检测
概率,可以使用分组的奇偶校
验码
•
•
•
•
可以纠正单个错误
是否能检测3位错误呢?
码流A B…M-1 M
坏块被接受每一列都有
正确的奇偶位2-n
a1
a2
…
an-1
an
H1
b1
b2
…
bn-1
bn
H2
…
…
…
…
…
…
m-11 m-12 …
m-1n m-1n Hn-1
m1
m2
…
mn-1
V1
V2
…
Vm-1 Vm
mn
Hn
Hn+1
检错码
•
循环冗余校验码
•
•
•
•
•
一帧有m位,对应M(x)
发送方和接收方有共同的生成多项式G(x),阶为r
发送方M(x)×xr ÷G(x) = S(x) + R(x),发送方发送
T(x)=M(x)×xr -R(x)
接收方计算T(x)/ G(x) ,如果整除则认为没有错误;如果不整除,
则认为发生了错误,错误可以用E(x)表示
• 所有长度小于等于r位的错误,可以检测(G(x)为r+1位)
• 当G(x)含有x+1因子时,可以检测只影响奇数个位的突发错误
• 当长度大于r时,如果所有位模式等概,则错判概率约为(1/2)r
标准化的G(x)多项式
•
P167
检测码
多项式编码校验和的计算过程.
基本数据链路层协议
•
•
•
无限制的单工协议
单工的停-等协议
有噪声信道的单工协议
通用头文件-1
5种数据类型:
帧类型可以是数据、ACK帧、NAK帧
帧的序列号用于接收方检测重复的帧
ACK序列号指出了接收方刚接收到的帧的序列号
分组信息在数据帧时有效,包含网络层分组
通用头
文件-2
•接口函数
•初始状态
•wait_for_event
•层间接口
•from/to_network_layer
•from/to_physical_layer
•定时器
•发送方数据定时器
•start/stop_timer
•接收方ACK定时器
•start/stop_ack_timer
•层交互
•enable/disable_n.._l..
•内联宏
•inc
无限制的单工协议
•
•
•
•
•
信道单向
信道不会损坏或者丢失帧
网络层始终就绪
接收方缓存空间无限
处理时间可以忽略
无限制的
单工协议
发送数据
高层->低层
单向
接收数据
低层->高层
单工的停-等协议
•
•
•
信道半双工
信道不会损坏或者丢失帧
网络层始终就绪
•
接收方只能处理一帧,没有缓存和排队机制
•
处理时间不可忽略,发送方需要考虑接收方的处理时间
单工的
停-等
协议
需要等待
接收方响应
给发送方
响应
有噪声信道的单工协议
•
•
信道半双工
网络层始终就绪
•
•
信道会损坏和丢失帧
接收方只能处理一帧,没有缓存和排队机制
•
•
损坏和丢失帧:定时器
避免冗余:序列号
•
序列号的位数?
•
接收方只需要判断一帧是新帧还是已经接收的帧
有重传的ACK协议-发送方
发送方
发送0帧
s.info=buffer; s.seq=n;
to_phical_layer(&s)
start_timer
Wait
for
ACK0
n=0
正确接收了一帧
正确接收了一帧
&& 该帧是ACK0
&& 该帧是ACK1
stop_timer
Inc(n)
stop_timer
Inc(n)
Wait
for
ACK1
n=1
发送1帧
s.info=buffer; s.seq=n;
to_phical_layer(&s)
start_timer
有重传的ACK协议-接收方
接收方
接收到一帧&&
帧序号为0
to_network_layer;
Inc(n); 发送ACK0
接收到一帧&&
不是帧1
接收到一帧&&
不是帧0
等待
帧n=0
等待
帧n=1
发送ACK1
接收到一帧&&
帧序号为1
to_network_layer;
Inc(n); 发送ACK1
发送ACK0
滑动窗口协议
• 1位滑窗协议
• Go Back N
• 选择重传
滑窗协议概述
•
全双工数据传输
•
•
•
•
•
两条数据单工信道
一条信道,数据帧和ACK帧混合,用帧头部信息区分不同帧
捎带确认:确认信息附在往外发送的数据帧上
• 需要增加定时器来决定是否使用捎带确认
滑动窗口协议
发送窗口
•
•
发送方已经发送但没有确认的帧,和允许发送的帧。窗口大小
可能动态变化
接收窗口
•
接收方可以接受的帧
示例:窗口大小为1
序列号为3比特长.
(a) 初始时.
(b) 第一帧发送以后
(c) 第一帧接收以后
(d) 第一个确认帧收到以后.
1位滑窗协议-1
通常只有某一个数
据链路层程序需要
首先发送一帧,然
后才进入循环
Continued 
1位滑窗协议-2
两个if条
件,4种
程序流程
更新buffer内
容,不执行时
buffer依旧是
刚发送的帧
1位滑窗协议-3
(a) 通常的情形.
(b) 双方并发地发送初始分组(进入循环之前,都发送了一帧)
向量含义是(seq, ack, 分组号);星号表示网络层接受了一个分组
停等协议的性能
•
•
•
考虑传播延迟,即考虑分组在路上的时间
使用停-等协议(窗口大小为1)
例: 1 Gbps链路, 15 ms 端到端传播延迟, 1KB 分组:
T
transmit
–
=
10/pkt
L (packet length in bits)
8×2
=
R (transmission rate, bps)
10^9 b/sec
 8 us
U sender: 利用率 – 发送方忙于发送数据的时间与发送时间之比
U
sender
=
L/R
RTT + L / R
=
.008
30.008
= 0.00027
–
microsec
onds
约每30ms可以发送1KB 分组 -> 每秒约33kB、即约0.26Mbps,而链路带
–
宽是 1 Gbps
后果:网络协议限制了物理资源的使用!
管道化
•
•
•
•
•
基本思想是允许发送方在阻塞(wait_for_event)之前发送w帧,
w>1
w的取值与带宽时延积有关。带宽R为Xbps,时延为Ys,
那么带宽时延积为XYb,即时延期间发送方可以发送的数
据量,或者发送方填满链路所需要的数据量
把链路看作管道,则带宽时延积说明了管道的容量
管道化:在链路上发送多帧,使得链路上的数据量逼近管
道容量
管道化问题:在一个很长的帧流中,某一帧被损坏或者丢
失,接收方该如何损坏帧之后到达的正确帧呢?
Go Back N && 选择重传
回退n帧
接收方丢弃错误帧之后的所有
帧
发送方在没有被确认的帧超时
后,退回该帧,重新发送
选择重传
接收方缓存错误帧之后的正
确帧;发送方在没有被确认
的帧超时后重新发送该帧
使用NAK提高性能
检测到错误时,接收方主动
向发送方发送NAK,激发重
传操作
管道化与错误回复
(a) 接收窗口大小为1.
(b) 接收窗口尺寸较大.
使用 Go Back N的滑窗协议
•
•
•
双向数据流
信道会损坏帧,丢失帧
网络层希望发送分组时,需要引发network_layer_ready事件;
链路层使用enable_network_layer和disable_network_layer来
阻止链路层引发ready事件
使用 Go
Back N的
滑窗协议
用于检查b是否在
窗口 [a,c)内部
捎带确认发送数据
作为GBN接收方,
当期望接收的帧是
frame_expected时,
意味着刚接收到
frame_expected-1
这一帧
没有接收到任何帧时,
使用MAX_SEQ
Continued 
Sliding Window Protocol Using Go Back N
ack_expected指向发送方发送出去但没有被确
认的第一个帧
next_frame_to_send指向发送方发送下一帧
时使用的帧号
所以[ack_expected, next_frame_to_send)
表示发送方的发送窗口
nbuffered在发送一帧以后增加1,在正确接收
到一帧的ack后减少1,所以指明了已经发送但
是没有被确认的帧的数量,说明了窗口大小
frame_expected接收方期望接收的帧,在
GBN中,接收方按序接收,所以
frame_expected帧左侧的帧恰好是接收到需
要ACK的帧
Continued 
Sliding Window Protocol Using Go Back N
发
送
接
收
Continued 
Sliding Window Protocol Using Go Back N
发送方接收到
ack,滚动窗口
超
时
发
送
关于nbuffered大小
Assume MAX_SEQ=7
•
nbuffered=8
•
•
•
•
•
0…7
0…7
0…7
…
0…7
Assume MAX_SEQ=7
•
nbuffered=7
Ack0
Ack0
Ack1
…
…
ACK5
ACK7
ACK7
•
•
•
•
•
0…6
7…5
6…4
…
x…y
ACK6
ACK6
关于定时器
用软件来模拟多个定时器
三个超时事件分别在
10:00:00.5
10:00:00.5+00:00:00.8
10:00:00.5+00:00:00.8+00:00:00.6
缓存接收到的失序帧
•
线路质量比较差,就不应该把正确的帧抛弃,而应该利用
起来
选择重传:
序列号与窗口大小
a)例:
b)序列号: 0, 1, 2, 3
c)窗口大小=3
d)接收方区分不了到底是窗
口大小只有3个还是序列号
小于等于3!
e)接收方会不正确的把冗余
数据作为新的数据发送给上
层
f)Q: 序列号大小与窗口大小
的关系是什么?
(MAX_SEQ+1)/2
选择重传带来的。。。
•
•
接收方缓存区大小:显然应该与窗口大小一致
定时器
•
•
•
•
数量:发送方缓存区的数量
间隔:紧一点,发送方较快超时
帧号:确定帧号较复杂,协议中假设为oldest_frame
辅助定时器
•
•
•
•
接收方没有即时的反向流量时,辅助定时器超时激发ACK
发送方数据重传之前,接收方应该优先超时,然后主动发送ACK
帧
接收方在接收正确到达的帧时,启动辅助定时器
否定确认
•
•
接收方接收到受损帧
接收方接收到的帧不是期望的帧,并且该期望的帧的NAK没有发
送过
A Sliding Window Protocol Using Selective Repeat
与协议5
含义相同
可以发送
数据帧和
nak帧
Continued 
A Sliding Window Protocol Using Selective Repeat (2)
三个缓存对应输
入输出窗口和到
每个缓存是否有
数据的指示
窗口上限
Continued 
A Sliding Window Protocol Using Selective Repeat (3)
指示将要发送的帧的序列号
发送方
怀疑有错,发送nak,不然准备
接收下来,先启动辅助定时器
接收方
当期望的帧到了
以后,期望目标
转移,需要重设
no_nak等与期望
帧相关的变量
是否在接收窗
口内?是则缓
存下来,并尝
试递交网络层
Continued 
A Sliding Window Protocol Using Selective Repeat (4)
发送方
滚动窗口
注意到发送方发送时ack是
frame_expected-1,此时
还原为frame_expected
协议验证
• 有限状态机模型
• Petri 网模型
有限状态机
•
•
•
•
•
•
•
发送方或者接收方在任意时刻总是处于某种状态
有限状态机是协议分析所常用的工具
描述等待方协议时,其主要状态为等待0或者1帧
描述整个发送方、接收方、信道所构成的系统的协议时,
系统的主要状态为各个组成部分主要状态的合理组合
状态转换指从一种状态到达另外一种状态,通常时事件触
发
初始状态即系统开始运行时,或者某个起始时刻系统所具
有的状态
从初始状态开始,经过状态转换,分析所有可能达到的状
态和不可能达到的状态称为可达性分析。可达性分析是分
析协议正确性的基本技术
Finite State Machined Models
•
•
(a) 协议3的状态图. (b) 转换(变迁、跃迁).
SRC: Source Receive Channel
Petri 网
•
Petri网具有四个基本元素:
•
•
•
•
•
库所Place、变迁transition、弧arc、标记token
所有可能的状态由Place表示,在图中用圆圈表示
系统当前所处的状态由token表示,图中为粗黑点
转换用水平或者垂直的线表示,基本上可以理解为瞬时态
arc是从库所到转换的输入弧,或者转换到库所的输出弧
下图为典型的包含两个库所和两个转换的Petri网.
Petri Net Models (2)
初始态:
S等待ACK0,0帧在C
上,R等待接收0
可能激活的转换:2,5,
10
Case1:超时则2激活,
发送方重发0帧,依旧
在等待ACK0状态,信
道接收到0帧,依旧在0
帧在C上的状态
Case2:接收方顺利接
收0帧则10激活,接收
方发送ACK,进入等待
1帧状态,信道进入
ACK在C状态,发送方
状态不变,但此时1可
能激活
协议3的Petri网描述
SRC的状态分别描述
Example Data Link Protocols
• HDLC – High-Level Data Link Control
• The Data Link Layer in the Internet
High-Level Data Link Control
Frame format for bit-oriented protocols.
序列号、确认等
成帧
检错、纠错
成帧
High-Level Data Link Control (2)
不同类型帧的控制域
(a) 信息帧(数据帧).
(b) 管理帧:确认帧、NAK帧(GBN)、选择重
传.等
(c) 控制或者提供不可靠连接.
The Data Link Layer in the Internet
通过调制解调器拨号上网的点到点链路.
PPP – Point to Point Protocol
The PPP full frame format for unnumbered mode operation.
•成帧 Flag(面向字符)
•错误检测(校验和域)
•序列号、确认(控制域,默认不提供可靠传输)
•额外的:
•NCP:可以协商承载的协议(IP,IPX等网络层协议或者其它协议)
•LCP:用于启动线路、测试线路,协商参数、关闭连接
PPP – LCP
链路启动到关闭的简化状态图P203
PPP – Point to Point Protocol (3)
不同类型的LCP帧用于PPP所设计的目标,例如协商、测试、
管理连接等。其中协商机制是PPP的特色之一
思考
a)
b)
c)
链路层如何成帧
CRC校验如何工作
可靠数据传输都需要在终端设置哪些变量,各有什么作用?