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

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

更新:我通过查找“GFP CRC-based framing”找到了我正在寻找的内容(严格来说这并不是我所问的内容)。根据 通讯网络

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

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

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

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

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

有帮助吗?

解决方案

您已经非常接近正确答案了。基本上,如果它以前导码开始并以与校验和匹配的内容结束,那么它就是一个帧并传递到更高层。

PPP 和以太网都寻找下一帧开始信号。对于以太网,它是前导码,即 64 个交替位的序列。如果以太网解码器看到这一点,它只会假设接下来是一个帧。通过捕获位然后检查校验和是否匹配,它可以确定是否具有有效的帧。

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

其他提示

PPP 和以太网都有成帧机制,即将比特流分解为帧,这样,如果接收器失去了对内容的跟踪,它可以在下一帧开始时拾取。它们位于协议栈的底部;协议的所有其他细节都建立在帧的思想之上。特别是前导码、LCP、FCS级别较高, 不是 用于控制取景。

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

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

标准 (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!)。这些字段的有效性可用于验证框架,但它们不能用于自行定义框架。

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

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

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

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


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

PPP 链路控制协议

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

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

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top