📅  最后修改于: 2021-01-12 02:45:59             🧑  作者: Mango
有许多原因,例如噪声,串扰等,可能会帮助数据在传输过程中被破坏。上层工作在一些通用的网络体系结构视图上,并且不了解实际的硬件数据处理。因此,上层期望系统之间的无错误传输。如果大多数应用程序接收到错误的数据,它们将无法函数运行。诸如语音和视频之类的应用程序可能不会受到影响,并且有些错误仍然函数正常运行。
数据链路层使用某种错误控制机制来确保帧(数据位流)以一定的准确性传输。但是,要了解如何控制错误,必须知道可能发生什么类型的错误。
可能存在三种错误:
一位错误
在一个帧中,尽管有任何地方只有一位损坏。
多位错误
接收到的帧中有多个位处于损坏状态。
突发错误
帧包含多于1个连续位。
错误控制机制可能涉及两种可能的方式:
错误检测
纠错
通过奇偶校验和循环冗余校验(CRC)检测接收到的帧中的错误。在这两种情况下,几乎没有额外的比特与实际数据一起发送,以确认另一端接收到的比特与发送的比特相同。如果接收方的反检查失败,则认为这些位已损坏。
甚至在偶数奇偶校验的情况下,还是在奇数奇偶校验的情况下为奇数,都将一个额外的位与原始位一起发送以使数为1。
发送方在创建帧时会计算其中的1数。例如,如果使用偶校验,并且1的数量为偶,那么将添加值为0的一位。这种方式将1的个数保持为偶数。如果1的个数为奇数,则将其添加为偶数的值1。
接收器仅计算一帧中的1的数量。如果1的计数是偶数,并且使用了偶数奇偶校验,则认为该帧未损坏,并且被接受。如果1的计数是奇数且使用奇偶校验,则该帧仍不会损坏。
如果单个位在传输过程中发生翻转,则接收器可以通过计数1s的数量来检测到它。但是,当错误的比特超过一个时,接收器就很难检测到错误。
CRC是检测接收到的帧是否包含有效数据的另一种方法。该技术涉及对发送的数据位进行二进制划分。除数是使用多项式生成的。发送方对要发送的位执行除法运算并计算余数。在发送实际位之前,发送方将余数添加到实际位的末尾。实际数据位加上其余部分称为代码字。发送方将数据位作为代码字发送。
在另一端,接收器使用相同的CRC除数对码字执行除法运算。如果其余部分全为零,则接受数据位,否则认为在传输过程中发生了一些数据损坏。
在数字世界中,可以通过两种方式进行纠错:
向后纠错当接收方在接收到的数据中检测到错误时,它将请求发送方重新发送数据单元。
前向纠错当接收器在接收到的数据中检测到某些错误时,它将执行纠错代码,这有助于其自动恢复并纠正某些类型的错误。
第一个是后向纠错,很简单,只有在重传成本不高的情况下才能有效使用。例如,光纤。但是在无线传输的情况下,重传可能会花费太多。在后一种情况下,使用前向纠错。
要更正数据帧中的错误,接收器必须确切知道帧中的哪一位已损坏。为了定位错误的位,将冗余位用作奇偶校验位以进行错误检测,例如,我们使用ASCII字(7位数据),则可能需要8种信息:前七个位告诉我们哪个位是错误,还有一点告诉您没有错误。
对于m个数据位,使用r个冗余位。 r位可以提供2r个信息组合。在m + r位代码字中,r位本身可能会损坏。因此,所使用的r位的数量必须告知m + r位的位置以及无错误信息,即m + r + 1。