【问题标题】:How does PPP or Ethernet recover from errors?PPP 或以太网如何从错误中恢复?
【发布时间】:2010-11-02 16:52:59
【问题描述】:

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

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

更新:我通过查找“基于 GFP CRC 的框架”找到了我正在寻找的内容(严格来说,这不是我所询问的内容)。根据Communication networks

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

简而言之,每个数据包都以“length”和“CRC(length)”开头。无需对任何字符进行转义,并且提前知道数据包长度。

似乎有两种主要的数据包成帧方法:

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

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

【问题讨论】:

    标签: error-handling ethernet ppp


    【解决方案1】:

    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) 组在线路上表示为五个位组,并直接传输,无需曼彻斯特计划。扩展到五位允许选择使用的十六种必要模式来满足频繁电平转换的要求,再次帮助接收器保持同步。但是,仍然有选择一些额外符号的空间,它们可以传输但不对应数据值,实际上,将半字节集扩展到二十四个符号 - 半字节 0 到 F,以及称为 Q、I 的符号、J、K、T、R、S 和 H。以太网使用 JK 对标记帧开始,TR 标记帧结束。

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

    在这个基本的帧结构之上,还有一个固定的前导码,然后是一个帧分隔符,以及一些无意义的可变控制字段(你好,LLC/SNAP!)。这些字段的有效性可用于验证框架,但不能用于自行定义框架。

    【讨论】:

      【解决方案2】:

      您已经非常接近正确答案了。基本上,如果它以序言开头并以与校验和匹配的内容结尾,则它是一个帧并传递到更高层。

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

      对于包含 FLAG 的有效载荷,在 PPP 中使用附加字节对其进行转义以防止此类误解。

      【讨论】:

        【解决方案3】:

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

        由 Cisco 提供支持:http://www.cisco.com/en/US/docs/internetworking/technology/handbook/PPP.html

        【讨论】:

        • 它必须有一些的恢复方式。一些物理链接没有连接的概念,因此您无法在出错后使用链接。期望用户在每次遇到错误时关闭计算机电源是不合理的。
        • 没错。但这不是链路层的问题。链路层只处理错误检测。纠错和恢复留给更高层。
        【解决方案4】:

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

        此 Wikipedia 页面上的 RFC 1661 图表描述了网络协议阶段如何在出现错误时重新启动链路建立。


        另外,Suvesh 引用的 Cisco 页面中的注释。

        PPP 链路控制协议

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

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

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

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

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

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

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

        【讨论】:

        • ...但仍然没有在链路层进行纠错或恢复。
        • 无纠错。但是,我认为 LCP 可以从链接错误中恢复以重新同步连接。
        • 但是仍然只检测到错误的数据包并丢弃。链路层的纠错意味着纠正这个错误/重新传输原始数据包。链接层不会发生这种情况。
        • 同意。但是 LCP 确实允许重新建立通信。我已经在“无错误更正”这一点上加入了你。
        猜你喜欢
        • 2014-08-27
        • 2020-06-18
        • 2018-06-17
        • 1970-01-01
        • 2020-01-15
        • 2017-07-27
        • 2017-03-19
        • 2016-06-19
        • 2021-12-15
        相关资源
        最近更新 更多