PPP或以太网如何从错误中恢复?

时间:2009-06-13 13:25:06

标签: error-handling ethernet ppp

查看数据链路级别标准,例如PPP general frame formatEthernet,如果校验和无效,则不清楚会发生什么。 协议如何知道下一帧的开始位置?

它是否仅扫描下一次出现的“旗帜”(在PPP的情况下)?如果是这样,如果数据包有效负载恰好包含“标志”本身会发生什么?我的观点是,无论是使用数据包成帧还是使用“长度”字段,都不清楚如何从无效数据包中恢复,其中“长度”字段可能已损坏,或者“成帧”字节恰好可能是其中的一部分。数据包有效载荷。

更新:通过查找“基于GFP CRC的框架”,我找到了我要查找的内容(这不是我要求的严格意义上的内容)。根据{{​​3}}

  

GFP接收器通过三态过程同步到GFP帧边界。接收器最初处于 hunt状态,它一次检查四个字节,以查看在前两个字节上计算的CRC是否等于接下来两个字节的内容。如果没有找到匹配,则GFP向前移动一个字节,因为GFP假定物理层给出八位位组同步传输。当接收器找到匹配时,它将移至预同步状态。当处于该中间状态时,接收器使用临时PLI(有效载荷长度指示符)字段来确定下一帧边界的位置。如果已经实现了成功帧检测的目标数 N ,则接收器进入同步状态。同步状态是接收器检查每个PLI的正常状态,使用cHEC(核心报头错误检查)对其进行验证,提取有效负载,然后进入下一帧。

简而言之,每个数据包都以“length”和“CRC(length)”开头。没有必要转义任何字符,并且数据包长度是提前知道的。

分组框架似乎有两种主要方法:

  • 编码方案(位/字节填充,曼彻斯特编码,4b5b,8b10b等)
  • 未修改的数据+校验和(GFP)

前者更安全,后者更有效率。如果有效载荷恰好包含有效数据包并且线路损坏导致前进字节包含“帧起始”字节序列但听起来非常不可能,则两者都容易出错。很难找到GFP稳健性的硬数字,但很多现代协议似乎都在使用它,所以可以假设他们知道他们正在做什么。

4 个答案:

答案 0 :(得分:9)

PPP和以太网都具有成帧机制 - 即,用于将比特流分解为帧的方式,使得如果接收器失去对什么的跟踪,它可以在下一帧的开始处拾取。它们位于协议栈的底部;协议的所有其他细节都建立在框架的基础上。特别是,前导码,LCP和FCS处于更高级别,并且用于控制成帧。

通过串行链接(如拨号)的PPP使用HDLC-like framing加框。字节值0x7e称为标志序列,表示帧的开始。帧继续,直到下一个标志字节。帧的内容中出现的任何标志字节都被转义。转义是通过写入0x7d(称为控制转义字节),然后是要转义为0x20的字节来完成的。标志序列被转义为0x5e;控制转义本身也必须转义为0x5d。如果其他值存在会扰乱调制解调器,也可以转义其他值。结果,如果接收器失去同步,它只能读取并丢弃字节,直到它看到0x7e,此时它再次知道它在帧的开始处。然后构造帧的内容,包含一些非常重要的奇数小字段,但是从早期的IBM协议中保留,以及PPP数据包(称为协议数据单元,PDU),以及帧检查序列(FCS)。

以太网使用逻辑上类似的方法,具有可被识别为帧起始和结束标记而不是数据的符号,但是它使用能够表达特殊控制符号的编码方案,而不是具有保留字节和转义机制。与数据字节不同 - 有点像使用标点符号来分解字母序列。所用系统的细节因速度而异。

标准(10 Mb / s)以太网使用称为Manchester encoding的东西进行编码,其中每个要传输的位在线路上表示为两个连续的级别,这样总会有一个过渡在每个位的级别之间,这有助于接收器保持同步。通过违反编码规则来指示帧边界,导致有一点没有转换(我在几年前读过这本书,但在网上找不到引文 - 我可能错了)。实际上,该系统将二进制代码扩展为三个符号 - 0,1和违规。

快速(100 Mb / s)以太网使用不同的编码方案,基于5b/4b code,其中四个数据位(nybbles)的组在线上表示为五位的组,并直接传输,没有曼彻斯特计划。扩展到5位允许选择使用的16种必要模式以满足频繁电平转换的要求,再次帮助接收器保持同步。然而,仍然有空间选择一些额外的符号,这些符号可以传输但不对应于数据值,实际上,将nybbles的集合扩展到24个符号 - nybbles 0到F,以及称为Q的符号,I ,J,K,T,R,S和H.以太网使用JK对标记帧开始,TR使用TR标记帧结束。

千兆以太网类似于快速以太网,但使用不同的编码方案 - 光纤版本使用8b/10b code而不是5b / 4b代码,双绞线版本使用一些非常复杂的编码方式我真的不明白。两种方法都产生相同的结果,即传输数据字节或一小组附加特殊符号之一的能力,这些特殊符号用于成帧。

除了这个基本的框架结构之外,还有一个固定的前导码,后面是一个帧定界符,以及一些不同的无意义控制字段(hello,LLC / SNAP!)。这些字段的有效性可用于验证帧,但它们不能用于自己定义帧。

答案 1 :(得分:5)

你已经非常接近正确答案了。基本上,如果它以一个前导码开头并以匹配为校验和的内容结束,则它是一个帧并传递给更高层。

PPP和以太网都寻找下一帧起始信号。在以太网的情况下,它是前导码,64个交替位的序列。如果以太网解码器看到它,它只是假设后面是一帧。通过捕获这些位然后检查校验和是否匹配,它决定它是否有一个有效的帧。

对于包含FLAG的有效负载,在PPP中,它会以额外的字节进行转义,以防止出现这种误解。

答案 2 :(得分:1)

Wikipedia PPP line activation部分介绍了RFC 1661的基础知识。 帧校验序列用于检测帧中的传输错误(在前面的封装部分中描述)。

此维基百科页面上的RFC 1661图表描述了网络协议阶段如何通过链接建立重新启动错误。


此外,来自Suvesh推荐的思科页面的说明。

  

PPP链路控制协议

     

PPP LCP提供了一种建立,配置,维护和终止点对点连接的方法。 LCP经历了四个不同的阶段。

     

首先,进行链路建立和配置协商。在可以交换任何网络层数据报(例如,IP)之前,LCP首先必须打开连接并协商配置参数。当发送和接收配置确认帧时,此阶段完成。

     

然后是链接质量确定。 LCP允许在链路建立和配置协商阶段之后的可选链路质量确定阶段。在此阶段,测试链路以确定链路质量是否足以启动网络层协议。这个阶段是可选的。 LCP可以延迟网络层协议信息的传输,直到此阶段完成。

     

此时,发生网络层协议配置协商。在LCP完成链路质量确定阶段之后,网络层协议可以由适当的NCP单独配置,并且可以随时启动和关闭。如果LCP关闭链接,它会通知网络层协议,以便他们采取适当的措施。

     

最后,发生链接终止。 LCP可以随时终止链接。这通常是在用户请求下完成的,但可能由于物理事件而发生,例如运营商丢失或空闲时段计时器到期。

     

存在三类LCP帧。链路建立帧用于建立和配置链路。链路终止帧用于终止链路,链路维护帧用于管理和调试链路。

     

这些框架用于完成每个LCP阶段的工作。

答案 3 :(得分:1)

据我所知,PPP仅支持错误检测,不支持任何形式的纠错或恢复。

思科在这里提供支持:http://www.cisco.com/en/US/docs/internetworking/technology/handbook/PPP.html