第6章 数据链路层
HDLC帧格式
在帧的首部和尾部都有标志字段,标志 字段为8个比特,值固定为01111110, 用来表示帧的开始和结束。 HDLC采用了零比特填充法,保证接收方 所收到帧的数据部分不会出现01111110 这样的比特组合。
HDLC帧格式
在非平衡方式下,如果主站发出一个帧, 地址字段为从站的地址;如果从站发出 一个帧,地址字段为从站的地址。在平 衡方式下,地址字段总是存放接收方的 地址。
BSC的透明传输
在传输报文时,所有的控制字符前面都要添加转义字 符DLE(SYN除外),如果在数据中出现了DLE,那 么就用DLE DLE来表示。 在接收方如果发现单个的DLE字符,则可知其后为传 输控制字符;若发现连续两个DLE字符,则知道传输 的是单个的数据字符DLE,删除一个DLE即可。
HDLC协议
发送窗口的大小
如果帧以模n进行编号,那么发送窗口 WT最大为n-1。即n等于8时,WT的最大 值为7。当WT的值大于7时,就可能会产 生错误。
确认帧
当收到正确的帧后,要给对方发送确认。 确认帧用ACK表示,如果收到了0号帧,那么 确认是ACK 1,这里确认表达的是一种期望, 期望收到的下一帧编号为1,隐含的意思是0号 帧已经收到了。 依次类推,当数据帧以模8编号时,对1号帧的 确认为ACK 2,2号帧的确认为ACK 3,7号帧的 确认为ACK 0。
数据链路管理 成帧 流量控制 差错控制
成帧
收到网络层的数据后,数据链路层要数据前面 填加一个首部,通常还会在数据后面填加一个 尾部,将数据封装起来,形成帧。 帧是数据链路层的传输单位。
帧同步
接收方的数据链路层要能从收到的一长串0、1 比特中要能识别帧的开始和结束,区分出一个 一个的帧,这称为帧同步。 帧同步的方法
HDLC中的基本概念
链路结构
平衡型
HDLC中的基本概念
链路结构
非平衡型
HDLC中的基本概念
通信模式
正常响应模式(Normal Response Mode, NRM) 异步响应模式(Asynchronous Response Mode,ARM) 异步平衡方式(Asynchronous Balanced Mode,ABM)
HDLC帧格式
控制字段占8个比特,不同类型的帧(信 息帧、监督帧和无编号帧)控制字段的 内容也不同。
信息帧
在信息帧的控制字段中,第一个比特固 定是0,N(S)字段占3比特,表示要发送 的这一帧的编号。N(R)字段也占3比特, 表示期望收到的对方的下一个帧的编号。
字节计数法 使用字符填充的首尾标记法 使用比特填充的首尾标记法 物理层编码违例法
目前普遍使用的是:使用比特填充的首尾标记 法和物理层编码违例法。
流量控制
为了避免发生接收方缓存溢出,要控制 发送方的发送速度,避免其发送速度过 快,造成接收方来不及处理而丢失数据 的情况发生,这就是流量控制。 流量控制的两种基本方法:停止等待和 滑动窗口 。
CRC校验
使用位数足够的P,能够使检测不到的差错的 概率非常小。目前CRC校验中常用的生成多项 式有CRC-16,CRC-CCITT和CRC-32 。 CRC校验值通常作为帧的尾部添加在数据后面, 在数据后面添加上的冗余码称为帧检验序列 (Frame Check Sequence,FCS)。CRC校验 值是最常用的FCS。
差错控制
差错控制包括两个方面,一是要检测差 错,二是要采取措施补救错误。 在数据帧的传输过程中,可能会出现两类 错误:一是帧损坏,二是帧丢失 。 : ,
帧损坏
数据帧通过通信链路到达接收方的过程 中,可能会受到干扰,造成接收到数据 帧同发送时的数据帧不一样,这种情况 称为帧损坏。 数据链路层广泛地采用了CRC冗余校验 技术,当CRC检测出错时,就认为该帧 已损坏。 CRC检测通常用硬件实现。
停止等待
发送方每发完一帧后要等待接收方的确认,收 到确认后才能发下一帧,如果没有收到确认, 发送方必须一直等待。
停止等待
停止等待的方法很简单,但是效率低 。 在任何一个时刻,线路上只有一个帧, 线路利用率不高,通信链路越长,等待 的时间就会越长 。
滑动窗口
在滑动窗口方法中,发送方发送一帧后, 可以不必等待接收方确认而继续发送后 面的帧,从而提高了链路的利用率。 在滑动窗口机制中,需要对帧以模n的方 n 式进行编号,如n=8,则帧的编号为: 0,1,2,3,4,5,6,7,0,1,2,3……..。
BSC的帧格式
S Y N
S Y N
ACK0
S Y N
S Y N
NAK
S Y N
S Y N
EOT
(a)选择或查询的肯定应答
(b)选择或查询的否定应答
(c)轮询的否定应答
数据帧
带有首部的数据帧
BSC的帧格式
多数据帧传输
多块组成的数据帧
BSC的帧格式
肯定确认和否定确认帧
BSC的透明传输
BSC协议最初是用来传输普通的文本数据,数 据都是由字母表中的字符组成,不会出现控制 字符。 当使用BSC协议来传递程序或图形等非文本的 二进制数据时,在数据中就有可能出现控制字 符,例如当数据中间出现二进制串03H时,接 收方就会认为是控制字符ETX,误认为数据结 束了,从而造成错误。
滑动窗口
发送方和接收方都要创建一定的缓存区, 用来存放数据帧,称为窗口。 发送方的窗口称为发送窗口,存放要发送 的数据帧 ,用来对发送端进行流量控制。 发送数据前,发送方要选定发送窗口的大 小 WT,落在发送窗口内的帧才能发送。
发送窗口
落在发送窗口内的帧都可以直接发送而不必等 待确认。 当发送窗口内的帧都发送完毕后,如果确认还 没有到,此时发送方必须等待。 当收到确认时,发送窗口整体向右移,将原先 窗口右侧的帧纳入窗口中,从而可以将这些帧 再发送出去。 当确认不断到来,发送窗口就不断地向右移动, 将新的帧不断地发送出去,实现了流水式的发 送。
接收窗口
接收窗口中是接收方当前期望接收到的帧。如果收到 帧的编号落入接收窗口内,就接收这个帧,并发送确 认,否则将其丢弃。
接收窗口
只有在接收窗口向前滑动时(与此同时 也发送了确认),发送窗口才有可能向 前滑动,发送后面的数据帧。 发送方是受接收方控制的。收发两端的 窗口按照以上规律不断地向前滑动,实 现了数据的流水发送。
面向比特的协议
面向比特的协议是以比特单位的,不依赖特定 的字符集,每一帧是由若干个比特组成。一个 帧分为若干个字段,每个字段在帧中都有固定 的位置,都有特定的功能和含义,同时使用一 些特殊的比特组合来代表特殊的含义(如帧的 开始和结束)。 目前的数据链路层协议主要是面向比特的协议 代表协议是高级数据链路控制协议(HDLC) 和点对点协议(PPP)。
帧丢失
在传输中一个帧被噪声破坏,造成接收 方不将其视为一个帧,就发生了帧丢失。 丢失的有可能是数据帧,也有可能是确 认帧。
检测帧丢失
首先在发送方要对帧进行编号,在接收 方每收到一个帧,就向发送方发送一个 确认帧。 发送方每发送一个帧,就为该帧启动一 个定时器。如果定时器时间到了,但确 认帧仍未收到,就认为该帧丢失了。
差错处理
当检测到错误,不论是帧损坏或帧丢失,数据 链路层通常不去修正错误,而是简单地重新传 输对应的帧,这个过程称为自动重复请求。 (Automatic Repeat reQuest,ARQ) 差错控制和流量控制是结合在一起的。因此停 止等待常以停等ARQ来实现,而滑动窗口常以 连续ARQ和选择重传AR64年开发的 面向字符的数据链路层协议,可以在点 到点或点到多点的链路上使用,采用停 等ARQ协议作为流量控制,因此只支持 半双工通信。
BSC协议的控制字符
BSC协议定义了一些特殊的字符来表示 特殊的含义,如帧的开始、帧的结束、 数据的开始,数据的结束等。 如SOH(01H)表示报文开始,ETX SOH 01H ETX (03H)表示正文结束。
HDLC(High-level Data Link Control) 协议是面向比特协议中代表性的一个协 议。
HDLC中的基本概念
站点类型 :
主站:发送命令帧(也可以包括数据信息),接收 从站的响应帧,并对整个链路进行控制。 从站:在主站的控制之下运行,收到主站的命令帧 后,从站要回应响应帧,并且要配合主站参与差错 恢复等链路控制。 复合站:进行通信的两个站都具有主站和从站双方 的功能。复合站之间完全对等地进行通信,它既能 发送命令帧,又能接收响帧,并负责整个链路控制。
概述
链路和数据链路
链路指的是一条无源的点对点的物理路线,中 间没有任何结点,链路也称数据电路、物理链 路。物理链路是数据传递的物理基础,数据要 转换成电磁信号在链路上传递 。 物理链路和它上面运行的链路层协议一起组成 了数据链路。 链路可以分为两大类:点对点链路和共享链路。
数据链路层的主要功能
CRC校验举例
通信前双方要首先商定一个二进制串P,例如 11101。 设要发送的信息M=110 将M左移4位(比P的位数少1),得到 1100000,然后用P去模2除1100000,得到余 数R=1001
CRC校验举例
发送方要将R添加到M后面发送过去,即 发送的实际数据为1101001 。 如果发送过程中没有错误,接收方用P对 收到的1101001进行模2除,结果应该是 1101001 2 0。 如果得到的结果不是0,就表明数据传输 错误。
控制字符 SOH(Start of Head) STX(Start of Text) ETX(End of Text) ETB(End of Transmission Block) SYN(Synchronous Idle) EOT(End of Transmission) ENQ(Enquiry) ACK(Acknowledge) NAK(Negative Acknowledge) ITB(Intermediate Transmisstion Block) DLE(Data Link Escape) ACK 0 ACK 1