计算机网络 数据链路控制
数据链路控制是数据链路层提供的服务,用于在物理介质上提供可靠的数据传输。例如,在半双工传输模式下,一台设备一次只能传输数据。如果链接末端的两个设备同时传输数据,它们会发生碰撞,导致信息丢失。数据链路层提供设备间的协调,以确保不发生碰撞。
数据链路层提供三个功能:
- 线路规范
- 流量控制
- 错误控制
线路纪律
- 线路纪律是数据链路层的一种功能,提供了链路系统之间的协调。它确定哪个设备可以发送数据,以及何时可以发送。
有两种方式可以实现线路纪律:
-
ENQ/ACK
-
Poll/select
ENQ/ACK
ENQ/ACK代表查询/确认,用于在链路上没有错误接收器可用并且两个设备之间有专用路径的情况下,确保接收传输的设备是预期的设备。
ENQ/ACK协调哪个设备将开始传输以及接收方是否准备好。
ENQ/ACK的工作原理
发送器发送一帧称为查询(ENQ),询问接收器是否可用以接收数据。
接收器以肯定确认(ACK)或否定确认(NACK)方式回应,其中肯定确认表示接收器准备接收传输,否定确认表示接收器无法接受传输。
以下是接收器的回应:
- 如果对ENQ的回应是肯定的,发送者将传输其数据,一旦所有数据都被传输,设备将以EOT(传输结束)帧结束传输。
- 如果对ENQ的回应是否定的,则发送者会断开连接,并在其他时间重新启动传输。
- 如果回应既不是否定也不肯定,发送者将假设ENQ帧在传输过程中丢失,并在放弃之前尝试三次建立连接。
投票/选择
line discipline的投票/选择方法适用于那些将一个设备指定为主站,其他设备则为从站的拓扑结构。
投票/选择的工作原理
- 在这种方法中,主设备和多个从设备组成一条传输线,即使目的地是从设备,所有的通信都是通过主设备进行的。
- 主设备控制通信链路,从设备遵循主设备的指令。
- 主设备决定哪个设备可以使用通信通道。因此,可以说它是会话的启动者。
- 如果主设备想要从从设备接收数据,它会询问从设备是否有数据要发送,这个过程称为轮询。
- 如果主设备想要向从设备发送数据,它会告诉目标从设备准备好接收数据,这个过程称为选择。
选择
- 选择模式用于主设备有数据要发送的情况。
- 当主设备想要发送数据时,它通过发送选择(SEL)帧向从设备传输,帧的一个字段包含了目标从设备的地址。
- 当从设备接收到选择帧时,它发送一份表示从设备准备好状态的确认。
- 如果从设备准备接收数据,主设备会向目标从设备发送两个或更多数据帧。一旦数据传输完成,从设备会发送一份表示数据已被接收的确认。
投票
- 当主设备想要接收从设备发送的某些数据时,会使用投票模式。
- 当主设备想要接收数据时,它会询问每个设备是否有要发送的内容。
- 首先,主设备询问(投票)第一个从设备,如果它回复NACK(否定应答),意味着它没有要发送的内容。现在,它接近第二个从设备,它回复ACK(肯定应答),表示它有要发送的数据。从设备可以连续发送多个帧,有时可能需要在发送每个帧之前发送ACK,这取决于所使用的协议类型。
流量控制
- 这是一组程序,告诉发送方在数据超出接收方的限制之前可以传输多少数据。
- 接收设备的速度和存储数据的内存是有限的。因此,在达到限制之前,接收设备必须能够通知发送设备暂时停止传输。
- 这需要一个缓冲区,即存储信息的内存块,直到它们被处理。
已经开发了两种控制数据流的方法:
- 停等
- 滑动窗口
停等
- 在停等方法中,发送方在发送每个帧之后等待确认。
- 只有在接收到确认后,才会发送下一个帧。交替发送和等待帧的过程会一直持续,直到发送方发送了EOT(传输结束)帧。
停等的优点
停等方法简单,因为在发送下一个帧之前,每个帧都会被检查并确认。
停等的缺点
停等技术使用效率低下,因为每个帧必须一直传输到接收方,并且在发送下一个帧之前必须传输一个确认。每个发送和接收的帧都使用了整个传输链路所需的时间。
滑动窗口
- 滑动窗口是一种流量控制的方法,发送方可以在获得确认之前传输多个帧。
- 在滑动窗口控制中,多个帧可以连续发送,从而有效利用通信通道的容量。
- 一个ACK确认多个帧。
- 滑动窗口指的是发送方和接收方两端的虚拟框。
- 窗口可以在任一端保存帧,并提供在确认之前可以传输的帧的上限。
- 即使窗口没有完全填满,仍然可以确认帧。
- 窗口的大小是特定的,它们以模n的形式进行编号,意味着它们从0到n-1编号。例如,如果n = 8,则帧的编号为0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1……
- 窗口的大小表示为n-1。因此,在确认之前可以发送最多n-1帧。
- 当接收方发送ACK时,它包含它想要接收的下一个帧的编号。例如,要确认以帧号4结尾的一组帧,接收方将发送包含数字5的ACK。当发送方看到带有数字5的ACK时,它就知道帧0到4已经接收到。
发送方窗口
- 在传输开始时,发送方窗口包含n-1帧,当它们发送出去时,左边界向内移动,缩小窗口的大小。例如,如果窗口的大小是w,如果发送了三帧,则发送方窗口中剩下的帧数是w-3。
- 一旦ACK到达,发送方窗口就会扩展到与ACK确认的帧数相等的数目。
- 例如,窗口的大小是7,如果帧0到4已经发送出去并且没有收到确认,那么发送方窗口只包含两帧,即5和6。现在,如果ACK到达并带有数字4,这意味着0到3的帧已经完好到达,发送方窗口会扩展以包括接下来的四帧。因此,发送方窗口包含六帧(5,6,7,0,1,2)。
接收窗口
- 在传输开始时,接收窗口不包含n个帧,而是包含n-1个帧的空间。
- 当新的帧到达时,窗口的大小会减小。
- 接收窗口不代表接收到的帧的数量,而代表在发送ACK之前可以接收的帧的数量。例如,窗口的大小为w,如果接收了三个帧,则窗口中可用的空间数为(w-3)。
- 一旦发送了确认消息,接收窗口会扩展,数量等于已确认的帧数。
- 假设窗口的大小为7,意味着接收窗口包含七个帧的空间。如果接收到一个帧,则接收窗口会收缩,并将边界从0移动到1。这样,窗口逐渐收缩,现在窗口包含六个空间。如果从0到4的帧已发送,则在发送确认消息之前,窗口包含两个空间。
错误控制
错误控制是一种错误检测和重传的技术。
错误控制的分类:
停等ARQ
在数据错误或丢失的情况下,停等ARQ是一种用于重传数据的技术。
该技术的原理是,发送方在收到上一个已发送帧的确认之前不会发送下一个帧。
重传需要四个特点:
- 发送设备保留已发送帧的副本,直到收到确认。保留副本允许发送方在帧未被正确接收时重传数据。
- 数据帧和确认帧交替编号为0和1,以便能够单独识别它们。例如,如果数据1帧确认数据0帧到达正确,并等待接收数据1帧。
- 如果上一个已发送帧发生错误,则接收方发送未编号的NAK帧。接收到NAK帧后,发送方重新传输数据。
- 此技术配合定时器使用。如果在规定的时间内未收到确认,则发送方假定帧在传输过程中丢失,因此将重新传输该帧。
重传的两种可能性:
-
损坏的帧: 当接收方接收到一个损坏的帧时,即帧包含错误时,它会返回NAK帧。例如,发送数据0帧,接收方发送ACK 1帧表示数据0已正确到达,并发送数据1帧。发送方发送下一个帧:数据1。它到达时没有损坏,接收方返回ACK 0。发送方发送下一个帧:数据0。接收方报告错误并返回NAK帧。发送方重新传输数据0帧。
-
丢失帧: 发送方配备了定时器,当帧被发送时启动。有时帧在接收端尚未到达,因此无法确认其接收情况。发送方等待确认直到定时器超时。如果定时器超时,发送方将重新传输上一个已发送的帧。
滑动窗口ARQ
滑动窗口ARQ是一种用于连续传输错误控制的技术。
用于重传的三个特点:
- 在这种情况下,发送方保留所有已发送帧的副本,直到它们被确认。例如,已经发送了从0到4的帧,最后一个确认是帧2,发送方必须保留帧3和帧4的副本,直到它们正确接收。
- 接收方可以根据条件发送NAK或ACK。NAK帧告诉发送方接收到的数据已损坏。由于滑动窗口是一种连续的传输机制,ACK和NAK都必须进行编号以识别帧。ACK帧包含一个数字,表示接收方期望接收的下一个帧。NAK帧包含一个数字,表示损坏的帧。
- 滑动窗口ARQ配备了定时器来处理丢失的确认。例如,在接收到任何确认之前已发送了n-1帧。发送方等待确认,因此启动定时器并等待发送更多帧之前。如果定时器超时,发送方将根据所使用的协议重传一个或所有帧。
滑动窗口ARQ使用的两种协议:
-
回退n ARQ: 在回退n ARQ协议中,如果有一个帧丢失或损坏,则重新传输所有未收到正面确认的帧。
重传可能会出现以下三种情况:
- 损坏的帧: 当帧损坏时,接收方发送NAK帧。
在上图中,发现第三帧存在错误之前已经传输了三个帧。在这种情况下,ACK 2已返回,告知帧0、1已成功接收且没有任何错误。接收器在数据2帧中发现错误,因此返回NAK 2帧。帧3也被丢弃,因为它在受损帧之后进行传输。因此,发送器重新传输帧2、3。
- 丢失的数据帧: 在滑动窗口协议中,数据帧按顺序发送。如果任何帧丢失,则接收器收到的下一帧将是无序的。接收器检查每个帧的序列号,发现被跳过的帧,并为丢失的帧返回NAK。发送设备重新传输NAK指示的帧以及丢失帧之后传输的帧。
- 丢失的确认: 发送器在等待任何确认之前可以发送窗口允许的任意数量的帧。一旦窗口的限制达到,发送器就没有更多的帧可以发送;它必须等待确认。如果确认丢失,则发送器可能永远等待下去。为了避免这种情况,发送器具有定时器,当窗口容量达到时开始计时。如果在规定的时间内未收到确认,则发送器重新传输最后一个ACK之后的帧。
选择性拒绝自动重传请求(Selective-Reject ARQ)
- 选择性拒绝自动重传请求技术比回退N ARQ更高效。
- 在这种技术中,只有接收到否定确认(NAK)的帧才会被重新传输。
- 接收器存储缓冲区将所有损坏的帧保持搁置,直到错误帧被正确接收。
- 接收器必须具有适当的逻辑来以正确的顺序重新插入帧。
- 发送器必须具有搜索机制,只选择请求的帧进行重新传输。