查看数据链路级标准,例如 PPP通用帧格式或以太网,不清楚如果校验和无效会发生什么。协议如何知道下一帧从哪里开始?
它是否只扫描下一次出现的“标志”(在 PPP 的情况下)?如果是这样,如果数据包有效负载恰好包含“标志”本身会发生什么?我的观点是,无论是使用数据包帧还是“长度”字段,都不清楚如何从“长度”字段可能已损坏或“帧”字节可能恰好是其中的一部分的无效数据包中恢复。数据包有效载荷。
更新:通过查找“基于 GFP CRC 的框架”,我找到了我正在寻找的东西(严格来说,这不是我所问的)。根据通信网络
GFP 接收器通过三态过程与 GFP 帧边界同步。接收器最初处于搜寻状态,它一次检查四个字节,以查看在前两个字节上计算的 CRC 是否等于接下来两个字节的内容。如果未找到匹配项,则 GFP 将向前移动一个字节,因为 GFP 假定物理层给出的八位字节同步传输。当接收器找到匹配时,它会进入同步前状态。在此中间状态下,接收器使用暂定 PLI(有效载荷长度指示符)字段来确定下一帧边界的位置。如果已经实现了成功帧检测的目标数量N ,则接收器进入同步状态. 同步状态是接收器检查每个 PLI、使用 cHEC(核心标头错误检查)对其进行验证、提取有效负载并进入下一帧的正常状态。
简而言之,每个数据包都以“length”和“CRC(length)”开头。无需转义任何字符,并且提前知道数据包长度。
数据包成帧似乎有两种主要方法:
- 编码方案(位/字节填充、曼彻斯特编码、4b5b、8b10b 等)
- 未修改数据 + 校验和 (GFP)
前者更安全,后者更高效。如果有效载荷恰好包含有效数据包并且线路损坏导致后续字节包含“帧开始”字节序列,则两者都容易出错,但这听起来非常不可能。很难找到 GFP 稳健性的确切数字,但许多现代协议似乎都在使用它,因此人们可以假设他们知道自己在做什么。