数据链路控制

数据链路控制
1、成帧
面向字符协议
重要的是转义符(esc)的应用

当数据链路只交换文本时,标记可以选择文本中不使用的字符来作为标记符,但是现在我们传输图片,视频。标记就可能是传输数据的一部分,这是转义字符出现了,数据段被填入一个额外的字节,即转义字符,当接收方收到转义字符时并仍将下义字符当作数据来处理。

面向位的协议
帧的数据段是一个位的序列。除了头部我们仍需要一个标记来区分帧与帧。多数协议讲这个标记定为01111110,但是同样会产生问题在数据段有标记出现的时候,那么解决策略就是位填充。在数据段遇到011111 时下一个位不管是什么都改为0,这就保证了标记不会出现在帧中。接收方在接收时会去掉这个位。从而保证正确。

2、流量控制 和差错控制
在数据链路层差错控制通常指差错检测和重传的方法。差错控制-自动重传请求。
3、协议
停止等待自动重复请求
它是在自动重复请求中增加了差错控制机理。
此协议中差错被检测到的话,会被无声丢弃,这是对损坏帧的处理,但是如果一个帧丢失了呢?编号,比如接收方0帧发送但是接收方未收到,或者收到了却ACK1帧丢失,怎么才能使得发送方重发呢?这时同样也应该对ACK帧编号,同时启动定时器,比如发送方在未收到ACK1的时候,定时器到时,则重发0帧,(发送方保存了发送帧的副本)其实在一个停滞等待arq中,对链路的利用率是极其低下的。这就导致另一种协议go-back-N ARQ;

回退N帧自动重发请求
在发送方等待确认时,我们需要让多个帧处理来时通道忙碌。
这里我们不得不说一个抽象的概念
滑窗:用来定义发送方和接收方所关心的序列号的范围。
此时序列号显然不是模2而是2的m次方。
滑窗通过Sf、Sn、Ssize三个变量来界定大小和位置。
假设m=2;Sf 代表已发送但是未确认,Sn代表下一个要发送的帧。
Ssize = 4-1=3
这里写图片描述

Sf之前是已经确认的帧,Ssize之后的暂时不能发送的帧。
接收窗口的大小为1,窗口左边是已经接受的帧并确认的帧,右边显示了那些不能被接受的帧,任何已知序号属于这俩部分这都要被丢弃。
虽然每一个发送的帧都有一个定时器,但是我们只用一个,因为第一个帧的定时器总是先到,当收到这个定时器到时时,就重发所有帧。
比如 发送方已经发送了帧2但是帧0定时器到了,那么发送方就要重发012帧。
这个协议有累计确认的作用,比如你发送帧0,接收方接收帧0但是接收方在发送ack1的时候,丢失ack1,那么此时发送方仍然会发送帧1由于接收方窗口期望接收Rn=帧1,所以接收帧1,发送ack2,这时ack2起到了ack1 ack2 的作用。
这是你可能会疑惑为什么发送方窗口为2的m次方减去1,其实自己写一个2的m次方的大小发送图就可以知道当你发送的帧确认帧丢失时,期待接收的Rn与超时重传的帧的序列号一样,导致错误数据接收。

选择性重复ARQ
其实这个协议在噪声链路中是十分低效的,在噪声链路中一个帧被损坏的可能性很大,那么意味着要重发多个帧,占用带宽减慢传输速度。
而选择性重复ARQ 出现就解决掉了这个问题。但是接收方的程序也就跟复杂。其发送方和接收方窗口大小为2(m-1)次方。每发一个帧都会有计时器计时,Ack同样具有累计确认的作用,最重要的是能够选择性重传。比如你发送方帧0丢了,发送帧1,此时接收方会发送nak0,当发送方重发帧0且接收方收到后,才会向网络层交付。注意:每一个窗口位置只发送一个nak,我们这里m=2无法举例,当m=3s时,当帧0丢失,帧1到达时接收方发送nak0,当帧2到达时若此时仍然未接收到帧0,发送方不可能在发送nak0,避免不必要的nak帧,和不必要的重发帧而使得网络拥塞。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值