6

查看数据链路级标准,例如 PPP通用帧格式以太网,不清楚如果校验和无效会发生什么。协议如何知道下一帧从哪里开始?

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

更新:通过查找“基于 GFP CRC 的框架”,我找到了我正在寻找的东西(严格来说,这不是我所问的)。根据通信网络

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

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

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

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

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

4

4 回答 4

9

PPP 和以太网都有成帧机制——也就是说,将比特流分解成帧,这样,如果接收器忘记了是什么,它可以在下一帧的开始处接收。它们位于协议栈的底部;该协议的所有其他细节都建立在帧的概念之上。尤其是preamble、LCP、FCS是更高层次的,用于控制成帧。

PPP,通过像拨号这样的串行链路,使用类似 HDLC 的成帧来成帧. 字节值 0x7e,称为标志序列,表示帧的开始。帧一直持续到下一个标志字节。帧内容中出现的任何标志字节都会被转义。转义是通过写入 0x7d 来完成的,称为控制转义字节,然后是要转义的字节与 0x20 异或。标志序列转义为 0x5e;控制转义本身也必须转义到 0x5d。如果它们的存在会扰乱调制解调器,也可以转义其他值。结果,如果接收器失去同步,它只能读取并丢弃字节,直到它看到 0x7e,此时它知道它再次处于帧的开头。然后将帧的内容结构化,包含一些奇怪的小字段,这些字段并不重要,但从早期的 IBM 协议中保留,

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

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

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

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

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

于 2009-06-13T16:53:26.420 回答
5

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

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

至于包含 FLAG 的有效载荷,在 PPP 中,它使用额外的字节进行转义,以防止这种误解。

于 2009-06-13T14:18:33.563 回答
1

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

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


此外,Suvesh 引用的 Cisco 页面上的注释。

PPP 链路控制协议

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

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

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

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

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

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

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

于 2009-06-13T13:30:18.967 回答
1

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

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

于 2009-06-13T13:35:47.393 回答