数据链路层要完成许多特定的功能。这些功能包括为网络层提供设计良好的服务接口,处理帧同步,处理传输差错,调整帧的流速,不至于使慢速接收方被快速发送方淹没。
数据链路层的功能是为网络层提供服务。其基本服务是将源机器中来自网络层的数据传输给目的机器的网络层。
数据链路层一般都提供3种基本服务,即无确认的无连接服务、有确认的无连接服务、有确认 的面向连接的服务。(1)无确认的无连接服务
无确认的无连接服务是源机器向目的机器发送独立的帧,而目的机器对收到的帧不作确认。如果由于线路上的噪声而造成帧丢失,数据链路层不作努力去恢复它,恢复工作留给上层去完成。这类服务适用于误码率很低的情况,也适用于像语音之类的实时传输,实时传输情况下有时数据延误比数据损坏影响更严重。大多数局域网在数据链路层都使用无确认的无连接服务。
(2)有确认的无连接服务
这种服务仍然不建立连接,但是所发送的每一帧都进行单独确认。以这种方式,发送方就会知道帧是否正确地到达。如果在某个确定的时间间隔内,帧没有到达,就必须重新发此帧。
(3)有确认的面向连接的服务
采用这种服务,源机器和目的机器在传递任何数据之前,先建立一条连接。在这条连接上所发送的每一帧都被编上号,数据链路层保证所发送的每一帧都确实已收到。而且,它保证每帧只收到一次,所有的帧都是按正确顺序收到的。面向连接的服务为网络进程间提供了可靠地传送比特流的服务。
2.帧同步
在数据链路层,数据的传送单位是帧。所谓帧,是指从物理层送来的比特流信息按照一定的格式进行分割后形成的若干个信息块。数据一帧一帧地传送,就可以在出现差错时,将有差错的帧再重传一次,从而避免了将全部数据都重传。
帧同步是指接收方应当能从收到的比特流中准确地区分出一帧的开始和结束在什么地方。
3.差错控制
传送帧时可能出现的差错有:位出错,帧丢失,帧重复,帧顺序错。
位出错的分布规律及出错位的数量很难限制在预定的简单模式中,一般采用漏检率及其微小的CRC检错码再加上反馈重传的方法来解决。为了保证可靠传送,常采用的方法是向数据发送方提供有关接收方接收情况的反馈信息。一个否定性确认意味着发生了某种差错,相应的帧必须被重传。这种做法即是反馈重传。
更复杂的情况是,一个帧可能完全丢失(比如,消失在突发性噪声中)。在这种情况下,发送方将会永远等下去。
这个问题可以通过在数据链路层中引入计时器来解决,当发送方发出一帧时,通常也启动计时器。该计时器计到设置值的时间时清为零。 如果所传出的帧或者确认信息被丢失了,则计时器会发出超时信号,提醒发送方可能出现了问题,最明显的解决方法是重传此帧。
但是多次传送同一帧的危险是接收方可能两次甚至多次收到同一帧,为了防止这种情况发生,通常有必要对发出的各帧编号,这样接收方就能辨别出是重复帧还是新帧,还能分辨出帧顺序错。
采用定时器和编号的主要目的是保证每帧都能最终正确地传给目的地—网络层。
差错出现的特点:随机,连续突发(burst)
处理差错的两种基本策略
使用纠错码:发送方在每个数据块中加入足够的冗余信息,使得接收方能够判断接收到的数据是否有错,并能纠正错误。
使用检错码:发送方在每个数据块中加入足够的冗余信息,使得接收方能够判断接收到的数据是否有错,但不能判断哪里有错。
4.流量控制
在数据链路层及较高层中另一个重要的设计问题是:如何处理发送方的传送能力比接收方接收能力大的问题?
通常的解决办法是引入流量控制来限制发送方所发出的数据流量,使其发送速率不要超过接收方能处理的速率。
流量控制方法有发送等待方法、预约缓冲区法、滑动窗口控制方法、许可证法和限制管道容量方法等。
下面简要介绍一下滑动窗口控制方法。
在所有的滑动窗口协议中,每一个要发出的帧都包含一个序列号,范围是0到某个最大值。
具有最简单流量控制的数据链路层协议 为了使收方的接收缓冲区在任何情况下都不会溢出,最简单的方法是发方从主机每取一个数据块,就将其送到数据链路层的发送缓冲区中发送出去,然后等待;收方收到数据帧后,将其放入数据链路层的接收缓冲区并交付给主机,同时回应一信息给发送节点表示数据帧已经上交给主机,接收任务已经完成;发方收到由接收站点发过来的双方事先商定好的信息,则从主机取下一个新的数据帧再发送。在这种情况下,收方的接收缓冲区的大小只要能够装得下一个数据帧即可,这就是最简单最基本的停止-等待(Stop-and-Wait)协议。