网络适​​配器是否读取单个流中的传入位?

网络工程 以太网 第一层 联网
2021-07-15 19:40:39

当千兆网络适配器接收数据时,它是如何接收比特的?它是在 0 和 1 的一个流中看到所有的吗?或者是否有多个 0 和 1 的流同时进入?

例如...假设有两个发送设备和一个接收设备。

设备 1 和设备 2 同时开始向设备 3 发送网络数据。

我的假设是,从设备 3 的网络适配器的角度来看,所有 0 和 1 都出现在单个数据流中。它可以找出来自设备 1 或设备 2 的数据,但数据仍然只是数百万/数十亿比特的一个流。

我完全错了吗?:)

4个回答

那要看。

虽然许多以太网 PHY 以纯串行方式传输数据(例如 100BASE-TX、1000BASE-SX、10GBASE-SR),但有些将数据流分成多个并行传输的通道。

最常见的是,1000BASE-T - 常见的千兆铜缆变体 - 将编码数据流分成四个通道,并在 Cat-5 电缆中的四个双绞线之一上分别传输每个通道。从千兆位向上的所有双绞线变体都使用这四个通道。

一些高速 (10G+) 光纤 PHY 还使用多达 16 根光纤(多模光纤和短距离)或波长(单模光纤和长距离)的多通道。

此外,还有一些编码方法(如 PAM-4+)在一个步骤中传输不止一位,例如使用两个以上的信号电平(thx @PlasmaHH) - 也可以与多个通道结合使用。

但是,所有内容都在传输,每个都从单个源运行到单个目的地。帧通常是原子的,即。它们总是在一块传输。每个帧仅传输来自单个特定连接/应用程序的数据。它的报头包含源地址和目标地址,因此它可以在网络上找到自己的路。

当网络同时接收到来自同一目的端口的不同源的两个帧时,其中一个帧需要排队,直到朝向目的的交换机端口完成第一个帧的传输。

这假设源和目标以相同的速度运行,这不一定是正确的。您可以拥有一个通过 1 Gbit/s 链接连接的文件服务器和 10 个客户端,每个客户端都在其 100 Mbit/s 链接上全速发送,而没有(重要的)排队。这有点接近您的“多流”建议,只是这些流在帧级别而不是位级别交错。

网络端口上的速率在一秒钟内可以达到数千甚至数百万帧,因此从人类的角度来看,不可能区分多个流 - 所有这些似乎都是“同时”的。

让我们暂时先忽略千兆部分,而将注意力集中在“两台设备同时发送”部分。

共享媒体上,这实际上可能发生并且是一个问题。大多数无线传输是共享媒体,而以太网在过去曾经是:

  • 10base2(同轴电缆)或多或少使用了一根电缆,每根电缆都在上面。显然,两个(或更多)站能够同时传输;
  • 10baseT100baseT(基于双绞线),带有集线器(而不是交换机)也意味着两个(或更多)站可以同时传输,因为从任何连接的设备接收到的信号只是重复给所有其他设备。

现在,如果两个设备同时发送,可能会发生两件事:

  • 您使用某种形式的多路复用(时分、频分...),它允许单独的“频道”,以便一个人可以收听特定频道而不会被其他频道打扰。这经常用于无线传输,更不用说有线传输(光纤上的 WDM/DWDM 是一个例外)。

  • 或者如果两个或多个设备同时在同一个频道上发送,那么你会得到所谓的冲突:就像当两个人同时说话时,你无法理解其中任何一个所说的,接收设备不是能够解码任何设备发送的数据(或者更常见的是,它们可以解码它,但它没有意义,并且不会通过 CRC 检查)。

这就是CSMA-CD(载波侦听多路访问,碰撞检测)等方案的用武之地

  • 在尝试传输之前,设备会检查是否有其他人正在发送(载波侦听)
  • 如果信道空闲,则开始传输。
  • 但即便如此,两个设备可以完全同时启动,因此您仍然可能发生碰撞。
  • 为了避免在信道上浪费太多时间,设备将检测冲突(通过比较它们发送的内容和接收的内容:如果不匹配,则意味着其他人正在同时发送),中止传输,并在随机延迟后重试(以避免新的冲突)。

这很有趣,并且在轻负载的网络上运行得很好,但是一旦流量变得很大,您最终会发生大量冲突,这反过来会增加共享媒体的使用量,从而导致更多的冲突,所以它可能会变得很糟糕。

对此的答案是切换到全双工交换网络集线器只是不假思索地重复了信号。另一方面,交换机确实接收到一个帧,然后在目标链接上重新发送它(额外的好处:帧不会发送给每个人,在大多数情况下只是发送到目的地)。

如果两个设备发送到同一个目标设备,那么交换机会将其中一个帧排队,因此同时发送的两个帧实际上一个接一个地到达目的地。

除此之外,在物理层面上,数据很可能通过几对甚至几根电缆并行交换。这是在位级别完成还是在每对/电缆上发送整个帧取决于所使用的确切技术。但我认为这不是你真正的问题。

这个特殊的案例是一个复杂的案例。

关于 1000baseT。

第一:当我们通常说两个设备同时传输时,它们通常实际上不会在同一介质上同时发送比特。如果他们这样做,就会发生冲突,所有侦听设备都会解决这个问题(最终,通过各种冲突检测方案)。因此,两个传输设备将在稍微不同的时刻访问介质。但是在 1000baseT 中,一组给定的对上只有两个设备;通常一个设备是交换机,另一个是主机。

其次,1000baseT 一次传输两个数据位,以复杂的方式在五个电压电平上进行编码。所以它是线路上的一系列基数为 4 的数字,而不是一系列基数为 2 的数字。

第三,1000baseT 可以在同一对上同时在两个方向上传输。它可以通过一种称为混合电路的电路将传出信号与传入信号分开。

其他媒体上的千兆以太网表现不同。较慢的速度(例如 10baseT 和 100baseT)具有更简单的方案。集线器上的 10baseT 确实存在实际冲突;在交换机上,它通常由交换机组织,以便输出帧排队;如果是全双工,则根本没有冲突。

假设这里所有有线以太网链接。

当同一网段的两台设备同时发送时,无论发送给谁,都称为冲突发生碰撞时,两条消息都不会通过。幸运的是,发送方具有检测冲突的能力当它发生时,每个发件人都会选择一个随机的时间(几分之一秒)等待并重试,并重复该过程,直到最终只有一个发件人处于活动状态。

但这几乎再也不会发生了。

相反,今天大多数有线连接是通过交换网络进行的,其中每个设备(发送方和接收方)都连接到交换机上各自独立的端口。数据被分成数据包(实际上是:),并且交换机将确保每次在每个端口上只有一个数据包处于活动状态。如果链路繁忙,当链路再次可用时,交换机将存储并转发其他帧到接收器。

使用这种方案,发生冲突的唯一方法是当有多个设备连接到交换机或通过非交换集线器相互连接时(某些型号的家庭 wifi“路由器”上的端口仍未切换),或者当一个交换机和设备之间的链路以半双工模式运行

我们处理的是拥塞我们可能没有冲突,但是网络上的流行主机可能有设备想要发送比链接支持的更多的数据和数据包,这样缓冲区就会被填满。但这是另外一个问题。