0
点赞
收藏
分享

微信扫一扫

数据链路层提供的服务

芒果六斤半 2021-09-30 阅读 79

无确认无连接服务

可靠性差,由上层完成差错控制,适合于误码率低,实时性要求高的场合,如大部分有
线局域网
发送方给接收方发一个数据时不需要接收方对数据的接收做应答的,也就是说数据时否到达,是否正确到达接收方,发送方是不知道的。只要发送的数据的最后一位发送出去就人为这个过程已经结束

有确认无连接服务

进行简单的差错控制,适用于不可靠的信道(但可靠性比无确认无连接服务要好),如
无线网
接收方会对接收的数据给发送方一个应答。但是在发送方没有收到应答之前数据的发送过程无法结束。发送完还不算结束,需要得到接收方的应答这个过程才结束

面向连接确认服务

在发送前需要建立连接,保证了帧的正确按序传输,适用于可靠性要求较高的场合,如大多数广域网

应答方式

正向应答:只对正确的信息应答
负向应答:只对错误的信息应答
双向应答:既对正确的信息应答,也对错误的信息应答

❉数据链路层取的计时时间为最远的两个节点端对端的传输时延的两倍多一点

使用负向应答一个很典型的例子是邮件系统,当发邮件但是邮件服务器不能为你完成邮件的分发的时候(比如邮件地址写错了,对方的邮箱满了),它会非你发一封邮件,告诉你这封邮件它是没有办法递交的,这个邮件就是负向应答

在数据链路层最常用的应答方式是正向应答
• 为什么不能用负向应答?
发送方超时没有收到应答它认为数据是正确到达,但是实际情况不一定是这样的。如果数据丢失了,或者应答帧丢失了,都会导致发送方超时,都会导致发送方以为接收方已经正确收到数据。正确到达是一个主流,出错和丢失是一个小概率事件。如果使用负向应答的话,协议的效率会大大的降低
• 为什么不用双向应答?
需要在每一个帧的序号处标识出到底是正向应答还是负相应答,信道的利用率会受到影响。发送方和接收方的处理流程也会变复杂

↑图中(3)发生接收方应答丢失或出错的情况下,发送方计时器超时会再发一遍,这时接收方就会受到两个相同的帧,但是协议要求每一层在给上一层提供的数据要正确,不能重复,这时接收方都会记录着一个信息(所期望的序号)。比如0接收完下一个应该是1,但是很可能下一个到的是0(重复),或者是2(可能1的帧丢失,下一个帧即后续帧先到了),是2时如果有足够的缓存的话会把它缓存起来,期望的帧到了处理完之后再处理这个后续帧,这样避免后续帧的重复发送

这个序号应该怎样编?

协议控制信息越短越好,格式最好是固定的,这样能简化协议的设计,实现起来更容易
为了避免发送的帧过多,处理信息过大,一般会使用循环序号。在一个序号再一次被使用的时候要求原来相同序号的那个帧已经被处理完,不能让相同序号的两个帧同时存在。但是使用循环序号就不能以和自己的期望序号相比的大小来区分是重复帧还是后续帧了

如果只要是后续帧就存储起来容易产生死锁现象(共享资源竞争使用,如果分配不当就会死锁)。假如接收方只有4个缓冲区,发送方发送了序号为1的帧,但这个数据出错了,2,3,4,5,到达了,这时候不能把后续到达的这几个帧都存起来,2,3,4可以存,但是5也存的话必然造成死锁。因为数据必须按序给高层提交,1不到,2,3,4,5是不能提交的,不提交的话它们所占的缓冲区不可能释放,1到达的时候因为没有缓冲区,没有地方放1,就只能把1丢弃,就出现死锁了。要解决这个问题,请看【流量控制】篇

举报

相关推荐

0 条评论