[TOC]
数据链路层
- 在OSI模型中,数据链路层是倒数第二层。
- 连接相邻节点的通信信道称为链路,为了将数据报从源移动到目的地,必须在单个链路上移动数据报。
- 数据链路层的主要职责是通过单个链路传输数据报。
- 数据链路层协议定义了跨节点交换的数据包的格式以及错误检测,重传,流控制和随机访问等操作。
- 数据链路层协议是以太网,令牌环,FDDI和PPP。
- 数据链路层的一个重要特征是数据报可以由路径中不同链路上的不同链路层协议处理。例如,数据报由第一链路上的以太网处理,第二链路上的PPP处理。
以下服务由数据链路层提供
- 成帧和链路访问:数据链路层协议在链路层传输之前将每个网络帧封装在链路层帧内。帧由包含网络层数据报的数据字段和多个数据字段组成。它规定了帧的结构以及通过链路传输帧的信道访问协议。
- 可靠的交付:数据链路层提供可靠的交付服务,即无错误地传输网络层数据报。通过传输和确认完成可靠的传送服务。数据链路层主要通过链路提供可靠的传送服务,因为它们具有较高的错误率并且可以在本地校正,发生错误的链路而不是强制重新传输数据。
- 流控制:接收节点可以以比处理帧更快的速率接收帧。如果没有流量控制,接收器的缓冲区可能会溢出,帧可能会丢失。为了克服这个问题,数据链路层使用流控制来防止链路一侧的发送节点压倒链路另一侧的接收节点。
- 错误检测:可以通过信号衰减和噪声引入错误。数据链路层协议提供了一种检测一个或多个错误的机制。这是通过在帧中添加错误检测位来实现的,然后接收节点可以执行错误检查。
- 纠错:纠错与错误检测类似,不同之处在于接收节点不仅检测错误,还确定错误发生在帧中的位置。
- 半双工和全双工:在全双工模式下,两个节点都可以同时传输数据。在半双工模式下,只有一个节点可以同时传输数据。
错误检测
当数据从一个设备传输到另一个设备时,系统不保证设备接收的数据是否与另一个设备传输的数据相同。错误是指在接收方端收到的消息与发送的消息不同的情况。
错误的类型
错误可分为两类:
- 单比特错误
- 突发错误
单比特错误
给定数据单元的唯一一位从1变为0或从0变为1。
单串错误在串行数据传输中不太可能出现。例如,Sender以10 Mbps的速率发送数据,这意味着该位仅持续1?s,并且出现单位错误,噪声必须大于1?s。
单比特错误主要发生在并行数据传输中。例如,如果使用8条线来发送一个字节的8位,如果其中一条线路有噪声,则每个字节会损坏单个位。
突发错误
两个或多个位从0更改为1或从1更改为0称为突发错误。
从第一个损坏位到最后一个损坏位确定突发错误。
突发错误最有可能发生在串行数据传输中。
受影响的位数取决于噪声和数据速率的持续时间。
错误检测技术
最流行的错误检测技术是:
- 单一奇偶校验
- 二维奇偶校验
- 校验
- 循环冗余校验
单一奇偶校验
- 单奇偶校验是一种简单的机制,检测错误的成本低廉。
- 在该技术中,冗余比特也称为奇偶校验比特,其附加在数据单元的末端,使得1的数量变为偶数。因此,传输比特的总数将是9比特。
- 如果1位的数量是奇数,则附加奇偶校验位1,如果1位的数量是偶数,则在数据单元的末尾附加奇偶校验位0。
- 在接收端,根据接收的数据位计算奇偶校验位,并与接收的奇偶校验位进行比较。
- 此技术生成偶数的总数为1,因此称为偶数奇偶校验。
- 它只能检测非常罕见的单比特错误。
- 如果两个位互换,则无法检测到错误。
- 通过使用以表格形式组织数据的二维奇偶校验,可以提高性能。
- 为每行计算奇偶校验位,这相当于单奇偶校验。
- 在二维奇偶校验中,比特块被分成行,并且冗余的比特行被添加到整个块。
- 在接收端,将奇偶校验位与从接收数据计算的奇偶校验位进行比较。
- 如果一个数据单元中的两个位被破坏并且另一个数据单元中的两个位完全相同的位置也被破坏,则2D奇偶校验检查器将无法检测到该错误。
- 在某些情况下,此技术不能用于检测4位错误或更多错误。
校验
校验和是基于冗余概念的错误检测技术。
它分为两部分:
校验和生成器
校验和在发送方生成。校验和生成器将数据细分为每个n位的相等段,并且所有这些段通过使用一个补码算法加在一起。该和被补充并附加到原始数据,称为校验和字段。扩展数据通过网络传输。
校验和检查
校验和在接收方验证。接收器将输入数据细分为每个n比特的相等段,并且将所有这些段加在一起,然后补充该总和。如果和的补码为零,则接受数据,否则拒绝数据。
- 接收方遵循以下步骤:
- 块单元被分成k个部分和n个比特中的每一个。
- 通过使用一个补码算法将所有k个部分加在一起得到总和。
- 总和是补充。
- 如果和的结果为零,则接受数据,否则丢弃数据。
循环冗余校验(CRC)
CRC是用于确定错误的冗余错误技术。
以下是CRC中用于错误检测的步骤:
- 在CRC技术中,一串n 0被附加到数据单元,并且该n数小于预定数量的比特数,称为n + 1比特的除法。
- 其次,使用一个过程将新扩展的数据除以除数称为二进制除法。从该除法产生的余数称为CRC余数。
- 第三,CRC余数替换原始数据末尾的附加0。这个新生成的单元被发送到接收器。
- 接收器接收数据,然后接收CRC余数。接收器将整个单元视为一个单元,并将其除以用于查找CRC余数的相同除数。
如果该除法的结果为零,这意味着它没有错误,并且数据被接受。
如果该除法的结果不为零,则意味着数据由错误组成。因此,数据被丢弃。
假设原始数据是11100,除数是1001。
CRC生成器
- CRC生成器使用模2分区。首先,在除数的长度为4时,在数据的末尾附加三个零,并且我们知道要追加的字符串0的长度总是比除数的长度小1。
- 现在,字符串变为11100000,并且结果字符串被除数1001除。
- 从二进制除法生成的余数称为CRC余数。生成的CRC余数值为111。
- CRC余数替换数据单元末尾的附加字符串0,最终字符串为11100111,通过网络发送。
- CRC校验器的功能类似于CRC生成器。
- 当在接收端接收到字符串11100111时,CRC校验器执行模2分割。
- 字符串除以相同的除数,即1001。
- 在这种情况下,CRC校验器生成零余数。因此,数据被接受。
数据链路控制
数据链路控制是数据链路层提供的服务,可通过物理介质提供可靠的数据传输。例如,在半双工传输模式中,一个设备一次只能传输数据。如果链路末端的两个设备同时传输数据,它们将发生冲突并导致信息丢失。数据链路层提供设备之间的协调,以便不发生冲突。
数据链路层提供三个功能:
- 线路纪律
- 流量控制
- 错误控制
行纪律
- Line Discipline是数据链路层的一项功能,它提供链路系统之间的协调。它确定哪个设备可以发送,以及何时可以发送数据。
Line Discipline可以通过两种方式实现:
- ENQ / ACK
- 投票/选择
END / ACK
END / ACK代表查询/确认当链路上没有错误的接收器并且在两个设备之间具有专用路径以使得能够接收传输的设备是预期的设备时使用。
END / ACK协调哪个设备将开始传输以及接收者是否准备好。
END / ACK的工作
发送器发送称为查询(ENQ)的帧,询问接收器是否可用于接收数据。
接收器响应肯定确认(ACK)或否定确认(NACK),其中肯定确认意味着接收器准备接收传输,否定确认意味着接收器不能接受传输。
以下是接收者的回复:
- 如果对ENQ的响应是肯定的,则发送方将发送其数据,并且一旦其所有数据都已被发送,则设备利用EOT(发送结束)帧完成其发送。
- 如果对ENQ的响应是否定的,则发送方断开连接并在另一时间重新开始传输。
- 如果响应既不是负面也不是正面,则发送方假定ENQ帧在传输过程中丢失,并且在放弃之前尝试三次建立链接。
Pool/Select
线路规则的轮询/选择方法适用于将一个设备指定为主站,而其他设备为二级站的拓扑。
Poll / Select的工作
- 在此,主设备和多个辅助设备由单个传输线组成,并且即使目的地是辅助设备,也通过主设备进行所有交换。
- 主设备控制通信链路,辅助设备遵循主设备的指令。
- 主设备确定允许哪个设备使用通信信道。因此,我们可以说它是会话的发起者。
- 如果主设备想要从辅助设备接收数据,则它要求辅助设备发送任何内容,此过程称为轮询。
- 如果主设备想要将某些数据发送到辅助设备,则它会告知目标辅助设备准备接收数据,此过程称为选择。
选择
- 当主设备有要发送的内容时使用选择模式。
- 当主设备想要发送一些数据时,它通过发送选择(SEL)帧向辅助设备警告即将到来的传输,帧的一个字段包括预期的辅助设备的地址。
- 当辅助设备接收SEL帧时,它发送指示辅助就绪状态的确认。
- 如果辅助设备准备好接受数据,则主设备将两个或更多个数据帧发送到预期的辅助设备。数据传输完成后,辅助设备会发送一个确认,指出已收到数据。
轮询
- 当主设备想要从辅助设备接收一些数据时,使用轮询模式。
- 当主设备想要接收数据时,它会询问每个设备是否有任何要发送的内容。
- 首先,主要询问(轮询)第一个辅助设备,如果它以NACK(否定确认)响应则表示它没有任何要发送的内容。现在,它接近第二个辅助设备,它用ACK响应意味着它有要发送的数据。辅助设备可以一个接一个地发送一个以上的帧,或者有时可能需要在发送每个帧之前发送ACK,这取决于所使用的协议的类型。
流量控制
- 它是一组程序,告诉发送方在数据压倒接收方之前它可以传输多少数据。
- 接收设备具有有限的速度和有限的存储器来存储数据。因此,接收设备必须能够在达到限制之前通知发送设备暂时停止发送。
- 它需要一个缓冲区,一块内存,用于存储信息,直到它们被处理完毕。
已经开发了两种方法来控制数据流:
- 停止与等待
- 滑动窗口
停止与等待
- 在Stop-and-wait方法中,发送方在它发送的每个帧之后等待确认。
- 收到确认后,只发送下一帧。交替发送和等待帧的过程继续,直到发送者发送EOT(发送结束)帧。
停止等待的好处
Stop-and-wait方法很简单,因为在发送下一帧之前检查并确认每个帧。
停止等待的缺点
停止等待技术使用效率低,因为每个帧必须一直传输到接收器,并且确认在下一帧发送之前一直传播。发送和接收的每个帧使用遍历链路所需的整个时间。
滑动窗口
- 滑动窗口是一种流控制方法,其中发送方可以在获得确认之前发送若干帧。
- 在滑动窗口控制中,可以一个接一个地发送多个帧,由于可以有效地利用通信信道的容量。
- 单个ACK确认多个帧。
- 滑动窗口是指发送方和接收方端的虚拟框。
- 窗口可以在任一端保持帧,并且它提供在确认之前可以传输的帧数的上限。
- 即使窗口没有完全填满,也可以确认框架。
- 该窗口具有特定的大小,在该大小中,它们被编号为modulo-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是一种用于在帧损坏或丢失的情况下重新传输数据的技术。
该技术的工作原理是发送方在收到最后发送帧的确认之前不发送下一帧。
重传需要四个功能:
- 发送设备保留最后发送帧的副本,直到收到确认。如果未正确接收帧,则保留副本允许发送方重新传输数据。
- 数据帧和ACK帧都交替编号为0和1,以便可以单独识别它们。假设数据1帧确认数据0帧意味着数据0帧已正确到达并期望接收数据1帧。
- 如果在最后发送的帧中发生错误,则接收器发送未编号的NAK帧。收到NAK帧后,发送方重新发送数据。
- 它适用于计时器。如果在规定的时间内没有收到确认,则发送方认为帧在传输过程中丢失,因此它将重新发送帧。
重传的两种可能性:
- 损坏的帧:当接收器接收到损坏的帧时,即帧包含错误,然后它返回NAK帧。例如,当发送数据0帧,然后接收器发送ACK 1帧意味着数据0已正确到达,并发送数据1帧。发送方发送下一帧:数据1.它达到未损坏,接收方返回ACK 0.发送方发送下一帧:数据0.接收方报告错误并返回NAK帧。发送方重新传输数据0帧。
- 丢失帧:发送者配备定时器,并在帧发送时启动。有时框架没有到达接收端,因此无论是正面还是负面都不能确认。发送器等待确认,直到定时器熄灭。如果定时器熄灭,它将重新发送最后一个发送的帧。
滑动窗ARQ
SlidingWindow ARQ是一种用于连续传输错误控制的技术。
用于重传的三个功能:
- 在这种情况下,发送方保留所有发送帧的副本,直到它们被确认为止。假设已经发送了从0到4的帧,并且最后一次确认是针对第2帧,发送方必须保留第3帧和第4帧的副本,直到它们正确接收为止。
- 接收器可以根据条件发送NAK或ACK。NAK帧告诉发件人数据已被收到损坏。由于滑动窗口是连续传输机制,因此必须对ACK和NAK进行编号以识别帧。ACK帧由一个数字组成,表示接收方希望接收的下一帧。NAK帧由表示损坏帧的数字组成。
- 滑动窗口ARQ配备有计时器以处理丢失的确认。假设在收到任何确认之前已经发送了n-1帧。发送方等待确认,因此它启动计时器并等待再发送之前。如果分配的时间用完,则发送方根据使用的协议重新发送一个或所有帧。
滑动窗口ARQ中使用的两个协议:
- Go-Back-n ARQ:在Go-Back-N ARQ协议中,如果一帧丢失或损坏,则它重新发送所有帧,之后它不接收肯定ACK。
重传可能有三种可能性:
- 损坏帧:当帧损坏时,接收器发送NAK帧。
- 丢失数据帧:在滑动窗口协议中,数据帧按顺序发送。如果任何帧丢失,则到达接收器的下一帧不按顺序。接收器检查每个帧的序列号,发现已跳过的帧,并返回丢失帧的NAK。发送设备重新发送由NAK指示的帧以及在丢失帧之后发送的帧。
- 丢失确认:发送方可以在等待任何确认之前发送窗口允许的帧数。达到窗口限制后,发件人不再需要发送帧; 它必须等待确认。如果确认丢失,则发件人可以永远等待。为了避免这种情况,发送器配备了计时器,只要达到窗口容量就会开始计时。如果在时限内没有收到确认,则发送方重新发送自上一次ACK以来的帧。
选择性拒绝ARQ
- 选择性拒绝ARQ技术比Go-Back-n ARQ更有效。
- 在该技术中,仅重传那些已经接收到否定确认(NAK)的帧。
- 接收器存储缓冲区保持所有损坏的帧保持不变,直到正确接收到错误帧。
- 接收器必须具有适当的逻辑,以便以正确的顺序重新插入帧。
- 发送方必须包含一个搜索机制,该机制仅选择所请求的重传帧。