网络中发送和接收比特流的电路

网络工程 以太网
2021-07-11 04:55:39

据我所知,我知道数字信号是通过连续 EM 信号传输的。在接收端,当幅度超过某个阈值时检测到位 1,当幅度低于某个信号时检测到位 0。

但在网络比特流中,数据包是通信发生的对象,数据包只是比特流。这个数据包包含与协议、源和目的地相关的各种信息。

在硬件层面,这个比特流是如何发送和接收的?

如果比特的检测是根据 EM 信号幅度进行的,那么比特的收集是否涉及在不同的时间间隔检查信号的幅度?

我看到我可以更具体和详细。所以让我更详细地解释一下我需要什么:

我们什么时候检测到位 1?当信号幅度超过某个阈值时,对吗?现在一个数据包将有一个像 1,0,1,0... 这样的位流,但是如何检测到这个位流。是否有一种电路可以检测起始位,然后在频繁的时间间隔内继续收集幅度直到结束位,从而构建位流?因此,硬件执行这种振幅收集过程是否有时间限制?

2个回答

有大量的线路编码方案可以处理不同的特殊情况。我只说最简单的。

根本上,不要像软件一样考虑它:“我们会不断检查它以查看它是否发生变化”。电子设备更像是一个弹簧,当发生事件(例如电压超过特定水平)时会脱钩。或者把东西从桌子上推下来:它不会“不断检查”它下面是否有东西:有一种力阻止它向下移动。当力被移除时,它会下降。

常用的最简单的线路编码是 NRZ(“不归零”,这个名称在您已经理解之前没有多大帮助。)它用于 RS-232 和许多其他东西。线路处于某个电压,例如 5V。当它低于 1V 时,我们启动一个计时器。假设这些位将是每秒一个:我们启动一个半秒的计时器——我们应该位于 here-comes-a-byte “起始位”的中间。半秒后,我们再等一秒:现在我们处于第一位:我们只是检查电压。再等一会儿,检查电压,我们有第二位。这样做八次,直到我们有一个字节。

您将看到该流程由三种机制构成:

  • 等待事件发生(电压低于某个值)
  • 等待固定的时间(一半或整个位时间)
  • 在给定时刻对线进行采样

该过程通常发生在硬件中,但有时发生在固件中。所有细节都不同:电压、速度、高电压是 1 还是 0、第一位是低值位还是高值位。有关更多信息,请参阅维基百科

确实,其中的第一个(等到信号变低)可以通过处理器高速采样来完成。但更常见的是由在事件发生后执行操作的电路来完成,可能是通过将信号馈送到锁存器中,该锁存器将某个定时器芯片保持在复位状态。

一旦我们有了字节,就会有一些获得成帧的方案,其中最简单的是 SLIP(串行线路协议),本质上,特定的字节值表示帧的开始。没有什么比阅读定义互联网的真正 RFC 更合适的了,而定义互联网的RFC1055尤其简单

还有很多其他的成帧方案,例如“长时间无信号”(用于 DMX)或“根本没有电压意味着不在框架内”(用于同轴以太网)。

以太网类似于所描述的机制,但要复杂得多。尤其是更快的种类,它们要复杂得多。目前使用最简单的是 10baseT,它使用“曼彻斯特编码”(以开发它的大学命名)。基本思想是一样的:等待特定类型的转换,然后等待一段时间,取样,重复。但每个细节都不一样。 维基百科有一篇很好的文章。

正如评论中所说,关于编码主题的整本书:整个博士。

高性能成帧和编码方案都是关于

  • 错误 ——当噪声或其他问题意味着接收到的信号与预期不符时会发生什么
  • 带宽——如何在信道中获得最多的比特
  • ——如何用最便宜的材料做到这一点
  • 可靠性——如何使用不会损坏的部件

说真的:如果您了解 RS-232、NRZ、SLIP,并且正确的联网要复杂得多,那么您对联网人员的了解就足够了。了解哪种网络具有链接检测功能比了解它们如何工作的细节重要得多。

如果您想了解有关电路如何工作的更多详细信息,electronics.stackexchange.com 可能比这里更好,但我们擅长处理帧和 CRC 错误等类似问题。

网络线路代码不是那么容易开始的。它们设计用于在(或多或少)简单布线上至少有几十米。这需要针对铜缆上的高比特率(以及甚至光纤上的非常高的波特率)制定精细的编码方案。一般组网链路不使用单独的时钟信号,因此线路码需要自计时和自同步。

网络中使用的最简单的代码是用于 10 Mbit/s 以太网的曼彻斯特代码:high-low = 1 和 low-high = 0。当然,这会浪费大量带宽,但您可以很容易地为此构建自定义硬件.

100 Mbit “快速”以太网使用 4b/5b 块代码。由于 125 Mbit/s 对于 5 类双绞线铜缆 (100BASE-TX) 来说太高了,还有另一个带有 MLT3 的子层编码(基本上是通过不同的电压电平而不是在两个电平之间跳跃)。定制硬件是可行的,但已经很难构建。

千兆以太网使用 8b/10b 分组码作为基本线路码,与 4b/5b 类似,但具有一些优点。双绞线的 1000BASE-T 将数据流分成四个通道,使用额外的 PAM5 编码和加扰来应对电缆限制。如果可能的话,定制硬件是极其难以构建的——一个数据位转换为 1 纳秒。

10G+以太网一般使用效率更高的64b/66b大块代码。双绞线需要非常复杂的多层编码方案,包括 Tomlinson-Harashima 预编码 (THP)、PAM16 和 DSQ128“棋盘”模式,以实现铜线传输。即使您能够为 1000BASE-T 定制硬件,10GBASE-T 在任何情况下都需要复杂的 ASIC - 我们每比特有 100 皮秒。

除了最新的速度,光纤通常只使用基本的线路代码,并且比铜线更容易编码和解码——但仍然如此。

所有这些都只涵盖了物理层。网络标准通常也涵盖数据链路层,因此您需要围绕实际数据(网络层有效负载)构建框架。然而,这可以在仅具有少量硬件支持的软件中完成。