我对链路层帧技术中使用的物理层编码违规方法感到困惑。据我所知,由于物理层将单个位映射到多个值而具有冗余,该方法利用了这一点,即在映射位时某些位序列是不可能的。因此,它使用它们来标记帧的结束和开始。
我的疑问来自课程讲师给出的示例,她告诉我们,我们可以将 0 映射到 01,将 1 映射到 10。因此,由于没有映射包含 00 或 11,因此它们不可能出现在数据位序列中。但如果我们将位序列设为“01”(仅举例来说,它的大小太小),则其映射将产生“0110”作为结果序列,其中包含 11。讲师没有提供任何明确的答案,我试图在互联网上找到答案,但无济于事。任何帮助都值得感激。
PS - 这是我第一次在 Stack Exchange 上发布问题,因此任何错误都是无意的,并且据我所知,上述问题是正确的
答案1
您的思路是正确的。如果您正确地锁定了正常位,您就会知道位中间总会发生变化,但两个位之间可能不会发生变化,因为这是正常的。如果您正确地锁定了位并知道它们的边界,但仍然在一个位内没有收到任何变化,那就是违规。一些协议可能会使用比一个位更长的序列来编码违规以使其更清晰,可能通过发送三或四位非法序列来锁定。
答案2
由于物理层将单个比特映射到多个值,因此存在冗余,该方法利用了这一点,即在映射比特时某些比特序列不可能存在。因此,它使用它们来标记帧的结束和开始。
是的,这是一种可能的方法。
但还有更多:根据细节,编码也可以通过选择彼此具有最小位距的“编码目标”来纠正位错误。这些目标通常还具有其他一些属性,例如固定数量的 1 和 0。
例如,考虑“5 之 2”代码:5 个位中恰好有 2 个是 1。有十种方法可以做到这一点:
A 11000
B 10100
C 10010
D 10001
E 01100
F 01010
G 01001
H 00110
I 00101
J 00011
所有这些都至少在两个位变化上有所不同。因此,您可以使用八个代码 AH 来编码000
为111
,然后使用 I 和 J 进行帧结构化。
这个想法有很多种变体。
如果问题是“如何找到代码的边界”:你可以有一个特殊的同步和训练阶段,它特别适用于更快的点对点连接。当你失去同步(出现太多错误)时,你可以重新训练。
您还可以利用代码的特殊属性来实现自同步。例如,100BASE-X 以太网使用4B5B代码具有以下属性
仅当以两个 0 位结尾的代码(2、E)后跟以 0 位开头的代码(1、4、5、6、7)时,三个连续的零位才会出现在正常数据中,因此它们将始终以 5 位编码符号长度的倍数分隔开(并且永远不会以单个符号分隔)。违反此属性的情况用于特殊同步代码。
起始序列为JK
或11000 10001
,其中将有两次连续的三个 0 位,但不是以 5 位符号长度的倍数分隔。因此,这种特殊序列不能出现在正常的数据流中。
再次,这个想法有很多变体。