##数据链路协议
链路层
什么叫物理链路
链路就是一条无源的从点到点的物理线路段,中间没有任何其他的交换节点。在进行通信时,两台计算机的通信通路是由多条链路串接而成的。
什么是数据链路
当需要在一条链路上通信时,除了需要物理链路,还需要一些规程来控制这些数据的传输,把实现这些规程的硬件和软件加到链路上,就构成了数据链路
- 目的:通过一些数据链路规程,在不太可靠的物理链路传输上实现可靠的数据传输
- 实现方法:流量控制,差错控制
- 作用:改善数据传输质量,向网络层提供高质量的服务
如何实现可靠传输
差错控制
- 差错产生的原因:数据在信道传输的过程中,通道有一定的噪声存在,接收方接受到的信号是信号与噪声的叠加,当接收方通过取样判断信号电平时出现错误时,就会引起通信数据的差错
- 差错控制方法:前向纠错和自动请求重发
- 前向纠错:接收方不但能发现错误,还能根据纠错码自动纠正传输差错
- 自动请求重发:接收方校验检错码,发现错误后,要求发送方重新发送数据包
自动请求重发
自动请求重发又可以称为后向纠错,包括停止等待ARQ协议和连续连续ARQ协议
停止等待ARQ协议
原理如下,发送方A向接收方B发送数据帧0,并设置超时定时器T0,开始等待,接收方收到数据帧0后,开始校验,如果正确发送ACK给A,A收到ACK,取消定时器T0,开始发送数据帧1,并设置超时定时器T1,如下图
如果接收方B校验发现错误,则发送NAK给A,请求重传,A收到NAK后,重新发送数据帧0,设置超时定时器T0,开始等待,如下图
上面都是没有考虑丢包的情况,那如果数据丢失了会怎样呢?
- T0在传输的过程直接丢掉了,接收方没有收到T0,所以不会有ACK和NAK传输回去,所以只能等到时间T0到了,A重新发送数据帧
- ACK丢了,ACK丢了,A收不到接收方的反馈,在时间T0到了之后,认为这个数据库丢失了,开始重新发送数据帧T0,这时B已经收到了T0,当再次收到T0的时候,将后收到的T0数据帧丢掉,并继续发送ACK。
- NAK丢了,NAK丢了,A收不到接收方的反馈,在时间T0到了之后,开始重新发送数据帧T0,当B接收到,并校验正确后,收下数据帧并发送ACK给A。
那么这样的协议有什么问题呢?
- 通信通道的利用率不高,每次只传输一个数据帧,要保证这一个数据帧传输到了,接收双方确认过了才开始传输下一个数据帧,有较长的等待时间
- 为了克服这一缺点,有了连续ARQ协议
连续ARQ协议
发送方在发送完一个数据帧后,不是停留下来等待确认,而是可以连续发送若干个数据帧,由于减少了等待时间,提高了吞吐率
每个数据帧都需要进行编号并关联一个定时器,当接收到ACK(n)时取消定时器Tn-1 发送方A不断发送数据帧data0,data1,datan,并设置相应的定时器T0,T1,TN
这时候接收方B做什么呢,和停止等待ARQ协议一样,一个一个接收数据帧,校验正确发送ACK(n),错误发送ACK(n-1),这时候为什么不是发送NAK了呢,这边的ACK(N),代表n-1个数据帧已经接收到了,现在需要发送方发送N个数据帧,当有问题或者没有收到时,就需要发送ACK(n-1)让发送方重发n-1个数据帧。这是发送方收到ACK后直接发送数据帧么,不是,因为发送方是连续发送的,所以所需的数据帧很可能已经在路上了,这是需要把N-1的定时器取消。
那如果数据丢失了会怎样呢?
- DATA(N)数据帧丢失:第n帧数据丢失,接收方收不到DATA(N),后续收到的数据帧都要丢弃,并且发送ACK(N)给发送方,要求重发数据帧DATA(N),这时发送方需要从DATA(N)开始重发数据帧,并设置定时器
- ACK(n):ACK(N)丢失对于连续ARQ来说问题不大,ACK(N)丢失了,接下来ACK(N+1)发送出去,接收方收到了也会取消之前的定时器,只要有一个ACK发送到就行
那么发送方能无限制的发送数据么,无限的发送会出现什么问题呢
- 发送方在收到确认前发送的数据帧越多,重发的数据帧就越多,造成浪费
- 数据帧编号是有限的,因此编码是有重复的,在没有收到确认前不能发送重复编号的帧,不然会造成混乱
所以比必须对发出去的,但是没有收到确认的帧数做出限制。
本文地址:https://blog.csdn.net/m0_46173483/article/details/107340502
上一篇: 树莓派1:嵌入式开发概述
下一篇: pre在html和css中的实现