【计算机网络】——数据链路层(理论、功能)

二、组帧

数据链路层之所以要把比特组合成帧为单位传输,是为了出错的时候,只重发出错的帧,而不必重发全部数据,从而提高效率。

组帧主要解决帧定界、帧同步、透明传输等问题。

透明传输:不管所传输的数据是什么样的比特组合都能在链路上传送。(数据中出现与定界符相同的比特组合,不会被误认)

1、字符计数法

帧头部使用一个字符来表示帧的大小(包括第一个计数字符)

(此处一字符=一个字节)

2、字符填充收尾定界法

特定字符来定界帧的首和尾。若帧中数据段出现等同于特定字符的字符内容,前置一个转义字符。(类似于正则表达式)

3、零比特填充首位标志法

允许数据帧的帧包含任意个数的比特,也允许每个字符的编码包含任意比特。

以01111110标志一帧的开始和结束。

发送时,在数据段中每五个连续的1 就插入一个0进行分割。

接收时逆操作,自动删除被插入的 0

4、违规编码

在物理层进行编码时,进行违规编码

如曼切斯特编码:(以太网使用)

高-低:1

低-高:0

可以故意编出 “高-高、 底-底” 这样的违规编码,定界帧的起始和结尾

* 编码:

        数字数据 转换为数字信号的过程(基带信号,非归零、曼切斯特、差分曼切斯特)

        模拟数据 转换成数字信号(PCM脉码调制:采样、量化、编码)

* 调制:

        数字数据 转换成模拟信号的过程(调幅、调相、调频、调幅+调相)

        模拟数据 转换成模拟信号

较为常用的是 3和4

三、差错控制

主要讨论bit差错

差错:噪声引起(热噪声、冲击噪声)

ARQ:自动重传请求,遇到某一帧 比特错(位错),主动丢弃,并不去通知发送端,等待超时重传。

通过检错编码来确认错误,并丢弃。

FEC:前向纠错,发现错误位,并加以纠正。

这是纠错编码来实现。

差错控制(位错) 的两种编码:检错编码 、纠错编码。

1、检错编码

冗余编码:

对帧的数据段进行以下处理

发送前:   【有效数据位(信息位)+冗余位】    =》遵守一定的规则。

        不管数据位怎么变,冗余位随之变化,保证帧遵守此规则。

接收端:若收到的帧没用遵从此规则,则数据位发生位错。

1、奇偶校验

码长n = n-1位信息位 +1位 校验位

奇校验:信息位+校验位   比特 1的·个数要求是奇数个 

偶校验:信息位+校验位   比特 1的·个数要求是偶数个

缺点: 只能检测出奇数位的错。

换句话说,如果错了偶数位,就检测不出来错。

举例: 奇校验:100100 +1

如果错了两位 111100 +1 这种是检测不出来的

检错率 50%。

2、CRC循环冗余校验

二进制串,可以用一个k位多项式来表示

比如:1010,可以用4(设为k)次多项式表示:

1*X^3+ 0*X^2+ 1*X^1+ 0*X^0,这个多项式的阶数为 3(即阶数 = k-1)

多项式的系数,要么是1,要么是0,对应于二进制串的每位的值。

多项式的幂,对应二进制串的位数。

算法描述:

假设数据段为m位,发送器生成一个rbit的序列,称为帧检测序列(FCS)。

这样帧就是 m+r位bit构成。

发送方和接收方规定一个多项式G(x) (最高位最低位的系数必须为1)。这个带检验码的帧刚好可以被这个多项式整除,则表示帧是无差错的。

计算如下:

假设数据段为m位

(1)确定生成多项式G(x)的阶数为r   在数据段后面补r个0,

(2)模二运算,G(x)对应的数据串 与 (1)中计算出的串进行模二运算,余数则是冗余码

(3)m位数据低位补全冗余码 即可发送

举例:

要发送的数据是1101 0110 11,采用CRC,生成多项式为10011 【或者它给出 X^4+X+1】,则最终发出的数据是:

1101 0110 11 【1110 】

2、纠错编码

海明码

码距:也称为海明距离,两个合法编码(码字)的对应比特取值不同的比特数称为这两个码字的码距

一个有效编码集中,任意两个合法编码的海明距离的最小值,称为该编码集的 海明距离(码距)

两两之间的码距:

000  与 001, 011 ,100 码距分别是 1,2,1。

简单来说,就是一上码字两两之间只有几个bit位不同,码距就是多少。

一个编码系统中的码距:

000 ,010,110,111,001  这组编码集中,最小码距是1 ,因此,这个编码集的码距就是 1

步骤:

(1)确定海明码的位数

海明不等式:若数据位有m位,冗余码有r位,校验码一共是 2^r种取值

2^r ≥ m+r+1

比如 要发送的数据: D= 1100

数据位是m=4,满足不等式的最小r =3,也就是D=1100的海明码应该有

4+3 =7位,其中原数据4位,校验码3位

(2)确定校验位的分布

校验码放在2^n 的位置上,数据按顺序填上

(3)求出校验码的值

统配值求校验码值

 将序号值转换成二进制,校验位序号二进制表示中含义如下:

4号校验 序号位高位为1的数据位:4、5、6、7

2号校验:序号位中间位为1的数据位  :2、3、6、7

1号校验:序号位低间位为1的数据位 :1、3、5、7

此处统一采用偶校验:

则推出,

4号位 0,

2号位 0

1号位 1

则完整码为:

(4)检错并纠错

若接收方收到的是 1 1 0 1   检错类似奇偶校验

4号校验 序号位高位为1的数据位:4、5、6、7   ==》0,1,1,1   (X)

 2号校验:序号位中间位为1的数据位  :2、3、6、7 ===》 0,0,1,1 (√)

1号校验:序号位低间位为1的数据位 :1、3、5、7  ===》 1,0,1,1(X)

纠错方法1:

找到不满足奇偶校验的分组取交集,再与符合校验的分组取差集。

 发现错误分组 第五位

纠错方法2:

通过满足规定的校验方式进行(本例为偶校验)异或操作:

x4  0,1,1,1    当x4 =1 满足偶校验

x2 ,0,0,1,1    x2=0 满足偶校验

x1   1,0,1,1  x1 =1 ,满足满足偶校验

x4x2x1 ===》101 转换为十进制  是5,表示第五位错了

四、流量控制和可靠传输机制

1、流量控制、可靠传输与滑动窗口机制

流量控制涉及对链路上的帧的发送速率的控制,以使接收方有足够的缓存空间来接收每个帧。

流量控制的基本方法是由 接收方 控制 发送方发送数据的速率,常见的方式有 停止-等待协议滑动窗口协议

1.1 停止-等待协议流量控制基本原理

发送方每发送一帧,都要等待接收方的应答信号,才能发送下一帧;

接收端每接收一帧,都要反馈一个应答信号,表示可以接收下一帧。如果接收方不反馈应答信号,那么发送方就一直等待。

每次只允许发送一帧,然后就陷入等待接收方确认信息的过程中。

效率十分低(有点串行的意思)。

1.2 滑动窗口流量控制基本原理

发送窗口:任何时刻,发送方都维持一组连续的允许发送的帧的序号

接收窗口:接收方维持一组连续的允许接收帧的序号

发送窗口用来对发送方进行流量控制,而发送窗口的大小Wt 代表还未收到对方确认信息的情况下发送方最多还可以发送多少数据帧。

在接收端设置接收窗口是为了控制可以接收哪些数据帧,和不接收哪些数据帧。

接收方只有收到数据帧的序号落入接收窗口内时,才允许将该数据帧收下。若收到的数据帧落在接收窗口之外,则一律丢弃。

发送窗口控制发送端速率:

a)允许发送0~4 号 5个帧

b) 0号帧已经发送,还可以发送1~4号帧

c) 0~4号帧都已经发送,等待接收方回应确认帧,发送方不允许再发送其他帧

发送端在收到接收端的确认(ACK)之后,发送窗口向后移动。(移动到被确认的帧的下一个)

d) 还允许发送5、6、7三个帧

接收窗口控制接收速率  Wr=1  接收窗口大小为1 

PS:修正,准备接收1号帧

【规则】

发送端每收到一个确认帧,发送窗口就向前滑动一个帧的位置,当发送窗口内没有可以发送的帧(即窗口内的帧全部要是已发送,但是未收到确认帧),发送方就会停止发送,直到收到接收方的确认帧(ACK) 才开始移动窗口,窗口内有可发送的帧时,才继续发送。

接收端收到数据帧后,将窗口向前移动一个位置,并发回确认帧,若收到的数据帧落在接收窗口之外,一律丢弃。

【滑动窗口具有以下特性】:

1)只有接收窗口向前滑动(同时接收方发送了确认帧)时,发送窗口才会向前滑动。

2)

停止-等待协议:发送窗口大小 =1,接收窗口大小 =1.

后退N帧: Wt >1,  Wr=1

选择重传协议:Wt >1,WR>1

3)接收窗口大小为1时,可以保证帧的有序传输

4)数据链路层的滑动窗口协议中,窗口的大小在传输过程中是固定的。(注意和传输层滑动窗口协议的区别)

【补充一句】

OSI模型中,数据链路层也保证了流量控制机制,通过滑动窗口协议实现。

在TCP模型中,流量控制是在传输层实现的

1.3、可靠传输机制

可靠传输其实是依靠 确认机制超时重传两种机制来保障的。

确认是一种无数据的控制帧,这种控制帧使得接收方可以让发送方知道哪些内容被正确接收。

有些时候,为了提高传输效率,将确认帧捎带在一个回复帧中,称为 捎带确认。

超时重传:发送方发送某一数据帧后启动一个计时器,若计时器结束没有收到接受方的确认帧,就会重发一该数据帧,直到发送成功。

ARQ:自动重传请求。注意这个是接收方 请求 发送方重传出错帧。

传统的自动重传请求有三种:

停止等待ARQ,后退N帧(GBN)ARQ,和选择重传(SR)ARQ。

后两种是滑动窗口技术与请求重发技术的结合,由于窗口尺寸开到足够大时,帧在线路上可以连续流动,又称为连续ARQ协议

注意:数据链路层的 流量控制机制 和可靠传输机制是交织在一起的,如上面所说,滑动窗口+确认+超时重传/ARQ等综合的结果。

2、单帧滑动窗口与停止等待协议

停止-等待协议相当于发送窗口和接收窗口的大小均为1的滑动窗口协议。

在停等协议中,若连续出现相同发送序号的数据帧,表明发送端进行了超时重传,连续出现相同序号的确认帧,表明接收端收到了重复帧。

在停止-等待协议中,除数据帧丢失外,还可能出现以下两种差错。

1、到达目的站的帧可能被破坏,检测到错误后,简单的将该帧丢弃,在发送端设置一个计时器,在发生一个帧后,启动一个计时器,等待接收端返回确认信息,如果在计时器结束时,仍然没收到确认,就再次发送相同帧。如此重复,直到该数据帧无误的到达目的地址。

2、另一种情况是数据帧正确,但是确认帧错误,接收方此时已经收到了正确的数据帧,但发送方接收不到确认帧,因此发送方会重传已经被接收的数据帧,接收方接收到同样数据帧会丢弃,并重传一个对该帧的确认。

由于窗口的大小是1,用1bit就可以记录要发送的帧编号,发送的帧交替的用1和0进行编号,确认帧分别用ACK0和ACK1来表示。

图片来自王道

图片来自王道

注意:为了实现超时重传和判定重复帧,接收端和发送端需要设置帧缓冲区。

当发送端在发送完数据帧时,必须在发送缓存中保存此数据的副本,这样才能出错时进行重传。当收到接收端发来的ACK确认帧时,方可清除此副本。

3、多帧滑动窗口与后退N帧协议(GBN)

在后退N帧ARQ中,发送方无需在收到上一个帧的ACK后才能开始发送下一个帧,而是可以连续发送帧

GBN发送方必须响应三件事:

1、上层调用

上层要发送数据时,发送方先检查发送窗口是否已满,如果未满,则产生一个帧发送;

如果窗口已满,发送方只需要将数据返回个上层,暗示上层窗口已满,上层等会再发送。(实际实现中,发送方可以缓存数据)

2、收到一个ACK

GBN协议中,对n号帧的确认采用累计确认,表明接收方已经收到n号帧和它之前的全部数据。

3、超时事件

协议的名字是后退N帧,源于出现丢失和超时发送方的行为,如果出现超时,发送方要重传所有已发送,但是未确认的数据。

GBN接收方要做的事:

如果正确接收到n号帧,并且按序,那么接收端为n帧发送一个ACK,并将该帧中的数据部分交付给上层。

其余情况丢弃帧,并为最近按序接收的帧重新发ACK,接收方无需缓存任何失序帧,只需要维护一个信息:expectedSeqNum:(下一个按序接收的帧序号)

【案例】

例子:用0~8 对帧进行编号,若,0,1 两个帧正确收到并确认,2号帧出现错误,后续6个帧就算接收端收到了,也得丢弃。

接收端会重复发送最后一个确认帧Ack1(防止已发送的Ack1丢失)

 

图片来自王道,侵删

滑动窗口长度:

若采用n bit对帧编号,发送窗口Wt的尺寸满足 1<Wt<(2^n)-1,因为发送窗口尺寸过大,就无法使得接收方区别新旧帧

**比如 4bit 一共8个编号  0~7,如果一次发送8号帧 给接收方,若这8个帧都丢失了,此时计时器重传这8个旧帧,由于新帧也是从0~7 循环编号,接收端就无法判断这次发的是新帧还是旧帧。

如果是 编号为0~6,那么新帧一定是从7开始的,重复的旧帧一定从0开始,接收端就可以辨认了。

【特点】:

1、累计确认(偶尔捎带确认)

2、接收方值按顺序接收帧,不按序的丢弃(不按序,说明发送方某些数据帧出错或确认没收到又重发了)

3、确认序列号最大、按序到达的帧

4、发送窗口最大为2^n -1接收窗口大小为1

4、多帧滑动窗口与选择重传(SR)

后退N帧,重传了出错及出错以后的所有帧,为了提高信道利用率,SR协议可以实现只重传出错的帧。

SR协议解决思路:设置单个确认,同时加大接收窗口,设置接收缓存,缓存乱序到达的帧。

SR发送方必须响应的三件事

1、上层调用

从上层收到数据后,SR发送方检查下一个用于该帧的序号,如果序号位于发送窗口,则发送数据帧,否则就像GBN一样,要么缓存数据,要么回退给上层。

2、收到一个ACK

如果收到ACK,假如该帧序号在窗口内,则SR发送方将那个被确认的帧标记为已接受,如果该帧序号是窗口下界,则窗口向前移动到最小号的未确认帧处,如果窗口移动了,并且有序号在窗口内的未发送帧,则发送这些帧。

3、每个帧都有自己的定时器,一个超时时间发生后,只重传一个帧。(这点区别与GBN)

SR接收方要做的事:

SR接收方将确认一个正确接收的帧,而不需要管它是否按序。失序的帧将要被缓存,并且返回给发送方一个该帧的确认帧【谁收确认谁】,直到所有帧(序号更小的帧)都被接收到为止,这时才可以将一批帧交付给上层,然后向前滑动窗口

如果收到了窗口序号之外(小于窗口下界)的帧,就返回一个ACK,其他情况忽略该帧。

窗口大小限制

发送窗口最好等于接收窗口

WtMax =WrMax =2^(n-1)

总结:

1、对数据帧注意确认,收一个确认一个

2、只重传出错帧

3、接收方有缓存

4、WtMax =WrMax =2^(n-1)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值