数据链路层定义和功能
为什么设计数据链路层
原始的物理层传输线路上传输数据信号是有差错的,存在一定的误码率。数据链路层就是在有差错的线路上,进行无差错传输。提供满质量要求的点到点的数据传输。
基本功能
- 链路管理:数据在数据链路上的正常传输(建立、维护、释放)
- 帧定界(帧同步)
- 差错控制
- 流量控制
- 寻址
1,5不同数据链路层实现差异比较大;2,3,4通用
物理层和数据链路层是绑定在一起的,如网卡结合实现两层的功能。
提供给网络层的3中服务:
无确认无连接服务:由上层完成差错控制,适合误码率低(大部分有线局域网)
有确认无连接服务:(无线网)
面向连接的确认服务:(广域网)
应答方式
- 正向应答
- 负向应答
- 双向应答
为什么选正向,为什么不选负向?
编号:循环序号(不能存在相同序号的帧,重发帧和后续帧问题,哪些需要缓存,哪些不需要缓存;大于期望序号的帧有可能占用完缓冲区,造成期望帧不能刷新到缓冲区造成死锁。)
若选择负向应答,则只有出错才会应答,发送方超时,认为数据正确到达时错误的;若数据丢失或应答丢失,都会使得发送发计时器超时,而发送发错误得认为接收方收到了数据。
双向应答也不可取,应为需要增加一位标识是正向还是负向应答(信道利用率下降),超时机制不能省略。
4.2成帧
将比特流分成离散的帧,并计算每个帧的校验和。
成帧方法
- 字符计数法
在帧头中用一个域来表示整个帧的字符个数
缺点:若计数出错,对本帧和后面的帧有影响,但是不能保证帧是连续发送的,不知道什么时候发送下一个帧。因此很少采用,一般不单独使用,但是在高层,如IP层协议个长度字段单独使用,因为定界基础不同。 - 带字符填充的首位字符定界法
用DLE STX标示帧开始
用DLE ETX标示帧结束
用DLE DLE标示传送数据信息中的DLE
优缺点:每个帧单独定界,互不影响,但是增加额外信息,信道利用率下降,不能用简单计数器判断帧结束为止,需要监视位串组合(扫描整个串有DLE需要增加一个DLE),处理机制复杂了,效率低
局限于8位字符和ASCII字符传送(有局限性),也不被普遍使用 - 带位填充的首位标记定界法
帧的起始和结束都用一个特殊的位串“01111110”,称为标记(flag)
“0”比特插入删除技术,在传送的数据信息中每遇到5个连续的1在其后加0 - 物理层编码违例法
只适用于物理层编码有冗余的网络,如曼彻斯特编码。
4.3差错控制
差错出现特点:突发,连续
产生原因:
- 信道的电气特性引起信号幅度、频率、相位的畸变
- 信号发射
- 串扰
- 闪电、大功率电机的启停等
出错情况:
- 帧出错
- 帧丢失
差错控制的目的:
保证帧正确,按序提交上层。在接收方能判断接收的数据是否正确,若错误还可能要恢复错误。
差错控制的方法:
- 自动纠错机制(接收方检错,纠错;丢失不能纠错,只能重发)
- 检错反馈重发机制(接受方检错,反馈给发送方后重发)
检错,纠错都需要冗余信息;纠错比检错代价更大。
纠错码和检错码
码字codeword:一个帧包括m个数据位,r个校验位,称为n位码字(n=m+r)
纠错码error-correcting code:加入了足够多的冗余位,使接收方不仅知道有差错发生,并知道哪些位发生差错。
检错码error-detecting code:加入冗余位,使接收方知道有差错发生,但不知道什么差错,然后请求重发
奇偶校验发,检测一位差错加一位冗余位
海明码纠错7位中的1位差错需要加4位
海明距离
两个编码的海明距离:两个编码不相同位的个数
编码方案的海明距离:编码方案中任两个编码海明距离的最小值
海明定理
为检测d位错,编码方案的海明距离应至少为d+1
当发生d位错时,不会由一种合法编码变为另一种合法编码。
为纠正d位错,编码方案的海明距离应至少为2d+1
当发生d位错时,出错编码仍然最近与原始的正确编码
奇偶校验码
在数据后填加一个奇偶位(parity bit) 例如:使用偶校验(“1”的个数为偶数)1011 0101 ==》1011 0101 1,1011 0001 ==》 1011 0001 0
若接收方收到的字节奇偶结果不正确,就可以知道传输中发生了错误。
增加奇偶校验位后海明距离由1变为2,因此可以检查一位二进制位的差错
循环冗余校验
循环冗余码(CRC码,多项式码)
110001 : x5+ x4 +1
生成多项式G(x)
- 发送发和接收方事前约定
- 生成多项式的高位和低位必须为1
- 生成多项式必须比传输信息对应的多项式短
CRC校验基本思想
CRC码(即校验和)加载帧尾,使带CRC码的帧的多项式能被G(x)除尽;接收方接收时,用G(x)去除它,若有余数,则传输出错。
加在尾部发送方边发送边计算,验证时,接收方不需要修改直接检测(因为他在尾部)
循环冗余检验可能检测不出来,出错后也正好能整除。
校验和方法算法
- 检验字段初值置0
- 数据拆分成与检验字段等长的分片,不足部分补0
- 将所有分片逐位取反,并连续累加,丢弃最高位进位
- 计算结果置入检验字段
- 接受段执行相同的过程,并将计算结果和传输过来的校验和进行比较以决定数据是否出现差错
适用于高层协议,如IP,TCP,UDP等
为什么数据链路层用CRC,而高层使用校验和呢?
循环冗余校验的检错率更高(可以用硬件去计算,弥补代价高的问题,而高层使用软件实现),而校验和运算加代价小,效率更高;
4.4流量控制
让发送按照接收方的处理能力去发送数据
二义性
- 广义:还包括拥塞控制
- 狭义
单工停等协议
- 理想情况
单工传输
发送方无休止工作(发送数据无限多)
接收方无休止工作(缓冲区无限大)
发送数据的速率低于接收数据的速率
通信线路(信道)不损坏或丢失信息帧(无错) - 无错情况
增加约束条件:接收方不能无休止接收(如:缓冲区数量有限,接收速率比发送速率低等)
解决方法:接收方每收到一个帧,给发送方回送应答。发送方收到应答前不发送后续帧。 - 有错情况
增加约束条件:信道有错,信息帧可能损坏或丢失
解决方法:
常使用正向应答+重发机制来解决差错控制
数据序号采用循环序号机制
应答帧的两种方式:
单帧应答:应答序号为某一个正确帧的序号
成批应答:应答序号为下一个期望接收的序号
通产采用负载应答方式:将数据帧携带应答信息的通信方式称为附载应答。可以把应答帧的序号加载信息帧中一并发送,以提高效率。
(应答帧单独发送,浪费信道带宽;但是可能有接收方没有数据发送,为了避免发送方计时器超时,也会单独发送给接收方;在等待接收方数据的时候也可能接收到多个数据需要应答,此时成批应答更加合理高效)
应为效率低所以一般不用
连续ARQ协议
全部重发(不必要的重发)
选择重发(缓冲区数量足够多)(动态分配缓冲区资源)
滑动窗口协议
滑动窗口协议是对连续停止等待协议的改进,它能够控制已发送但未确认的数据帧的个数(滑动窗口的大小)
发送窗口:
窗口尺寸:允许连续发送未应答帧的个数(若窗口位4,却发送了5个0,1,2,3,4,5;1到5都缓存在窗口,则1永远不能确认,造成死锁)
数据允许发送条件:上界 - 下界 < 窗口尺寸
上界(前沿):下一个发送序号
下界(后沿):下一个应答序号
窗口滑动的条件
- 窗口上界移动:发送数据帧
- 窗口下界移动:收到应答帧
接收窗口
窗口尺寸:允许接收未被处理的帧个数
窗口大小和序号的关系
- 出错全部重传
Wt>Wr ,Wr = 1
Wt ≤ 2n-1 (三位序号 尺寸最大为7;8会有错误。A发送的0到7B都接收到了,但是应答丢失。此时B下一个期望为0,A会超时重传,那么A重传的数据到达B,而B认为是新数据而接收)
- 选择重传
Wt ≤ Wr(理想时相等的)
Wr ≤ 2n-1 (没有收到应答,接收方也会滑动窗口?(一直重发没有确认数据?),新数据会落在新窗口)
应答时机
- 接收到就应答
- 检查无措后发送应答
- 发送给上层,腾空缓冲区时发送应答(对于分段数据需要合并为原始的服务数据单元SDU才能交给上层,将多个缓冲区清空) √
(出现重复帧时,需要发送应答。不应答的话发送方会超时,继续重发。)
数据链路层解决两个节点间一个链路的问题(每一跳)
网络层解决源节点到目的节点(跨多个节点)
传输层解决源主机到目的主机的问题?(进程间问题吧)
如何研究一个协议
- 协议概貌(解决设么问题,解决问题基本思路,特征是什么)
- (协议数据单元)帧格式分析具体实现
- 网络中遇到的实际问题怎么解决的
具体协议
面向比特:HDLC
面向字符
单处理机为中心的多终端连接系统
HDLC
帧格式:
地址:8位单地址:只有一个地址,当时设计针对非平衡系统,没必要给出主站地址(只有一个确定的主站),8位地址最多有256个地址可用。
校验序列FCS:循环冗余校验
控制字段:
N(S)数据序号;N(R)应答序号;
HDLC帧的类型(通过控制字段前两位确定帧类型)
- 信息帧(Information)信息传送:1位为0。234位为存放发送帧序号,5位为轮询位,当为1时,要求被轮询的从站给出响应,678位为下个预期要接收的帧的序号。
- 监控帧(Superisory)差错控制和流量控制:1,2位为1,0。34位为S帧类型编码。第5位为轮询/终止位,当为1时,表示接收方确认结束
- 无序号帧(Unnumbered)提供对链路的建立、拆除以及多种控制功能。1,2位为1,1。34678这五个M位来定义,可以定义32种附加的命令或应答功能。
信息帧
- 序号(Seq):滑动窗口技术,3位序号,发送窗口大小固定为7(固定窗口简单,接收方能力变化问题需要解决)
- 捎带确认(Next):下一个希望接收到的帧
- 探询/结束 P/F位 (Poll/Final):非平衡系统(主站控制次站)主站发送轮训帧,次站有数据发送则获得使用权发送信息。要发送3个帧,前两个F=0,第三个F=1,主站收到F=1的信息时,知道它发送完毕,继续轮训次站。在平衡系统中P/F位用来表示立即处理,提交,不能等待。
监控帧 S字段
类型0:确认帧:N(R)前的帧都已经收到,下一个期望接受N(R);接收方准备好了,可以发送后续数据。
类型1:否定确认帧:N(R)前的都收到了,重发N(R)及之后所有帧
类型2:接收未准备好:没有准备好,发送方暂停发送
类型3:选择拒绝:收到N(R)为错误帧,产生应答,要求只重发N(R)帧
差错控制
检查:校验码
纠错:类型0,1,3
1,3不会同时存在,在协议指定前确认选择重发还是全部重发。协议选择全部重发则会出收到错误帧返回应答1,而选择部分重发则会返回应答3选择重发。
流量控制
类型0,2
HDLC协议使用固定窗口尺寸,接收方没有能力接收,则接收方返回类型2的帧。当收到类型0的帧才能再次发送
Internet中的数据链路层
TCP/IP协议集没有制定具体的链路层和物理层协议,而是直接使用其他网络的实现。
工作场合
点到点通信的两种主要情形
- 路由器到路由器
- 通过modem拨号上网,连到路由器或接入服务器
接入Internet两种方式
- 拨号接入:拨号申请链路(家用的ADSL路由器拨号上网,通过用户名密码申请我们自己的主机到接入Internet主机的链路)
- 专线接入:不需要申请物理链路一直存在的
SLIP
只是简单得加入起始和结束标志。
PPP
提供差错校验、支持多种协议、允许动态分配IP地址、支持认证等。
以帧为发送单位,而不是原始IP包
包括两部分:
- LCP(Link Control Protocol链路控制协议)和物理层相关
- NCP(Network Control Protocol网络控制协议)和网络层相关
PPPoE 建立在以太网上的PPP协议。
帧格式:(简化HDLC)
标记域:0111 1110,字符填充(面向字符,要求通信双方支持ASCII字符集)
地址域:固定位1111 1111;不需要地址字段,因为有确定原地址和目的地址(ISP)
控制域:缺省值(固定)为0000 0011 ,表示无序号帧,缺省情况下,PPP不提供使用序号和确认的可靠传输;但是在不可靠线路上,也可使用有序号的可靠传输(因为是固定值所以不遵循HDLC里的控制字段机制)
协议字段:(新增加的字段)上层服务的类型,处理完后交给上层哪个应用程序去处理(如IP进程、IPX进程、其他网络层进程)
净负荷区:缺省位1500字节
校验和域:循环冗余校验 2或4字节(16或32位)
工作过程:如下
初始静止
用户拨号,检测到载波
LCP协商通信选项(不可靠通信环境,需要确认机制等),建立物理连接
鉴别(身份认证,用户名、口令)
认证成功,NCP协议根据不同的网络层协议进行配置
可以传输数据了,传输完毕停止。