【问题标题】:What happens when ethernet reception buffer is full当以太网接收缓冲区已满时会发生什么
【发布时间】:2018-01-17 09:08:46
【问题描述】:

我有一个相当新手的问题:假设我有两个设备通过以太网 (TCP/IP) 以 100Mbps 的速度进行通信。一方面,我将为设备提供要传输的数据。另一方面,我将使用接收到的数据。我有能力为两个设备选择足够的缓冲区大小。

现在我的问题是:如果第二个设备的数据消耗率比第一个设备的数据传输率慢,那会发生什么?

我找到了一些,谈论溢出计数器。

以太网通信中是否有任何内容表明设备正忙并且无法接收新数据包?所以我可以暂停接收设备的传输。

谁能给我一份或多份详细解释这个问题的文件,因为我没有找到。

提前谢谢你

【问题讨论】:

  • TCP 的flow control 会处理这个问题。物理层不关心,它最多会使用 CRC 来检查帧内的错误和其他与帧相关的检查,与传输速率无关。
  • 感谢您的有用评论,此链接 brianstorti.com/tcp-flow-control 也详细解释了我正在寻找的内容。关键工作是 TCP 的流量控制
  • TCP/IP 和以太网是两个不同的堆栈,请在下面找到我的答案。
  • 您想根据接口查找带内和带外的流量控制,理想情况下,您希望流量控制告诉发件人在您已满时暂时停止向您发送内容。如果您不这样做,则根据设计,您将以某种形式溢出,理想情况下,某些缓冲区开始丢弃数据包。有时您可以在该缓冲区中设置高水位线,以确定它开始执行此操作的级别。
  • 那么一旦数据包丢失,只要您不通过填充缓冲区和背压来挂断发送方或接收方,TCP/IP 等协议就不会关心数据包丢失,它们会重试。有些协议不会重试...

标签: tcp embedded ethernet


【解决方案1】:

以太网协议运行在 MAC 控制器芯片上。 MAC 有两个独立的 RX-ring(用于入口数据包)和 TX-ring(用于出口数据包),这意味着它本质上是全双工的。 RX/TX 环也具有片上 FIFO,但环将 PDU 保存在主机内存缓冲区中。我在其中一个相关的post 中介绍了一些功能

现在,可能会发生拥塞,但 RX 和 TX 又是两条不同的路径,这将是由于以下情况

  1. rx-buffers/tx-buffers 的队列/de-queue 与线路速率相比并不快。当 CPU 很忙并且没有足够快地处理中断时,就会发生这种情况。
  2. 主机内存较慢(例如:DRAM 而不是 SRAM),或内存不足(由于内存泄漏)
  3. 缓冲区的中间处理耗时过长。

现在,关于对等设备:可以在独立系统中处理背压,当这种情况发生时,我们通常会丢弃数据包。这对于对等设备来说是不可知的,如果对等设备速度较慢,则说明该设备的问题。

overrun的定义是:由于输入速率超过了接收器处理数据的能力,接收器硬件无法将接收到的数据处理到硬件缓冲区的次数。

我建议您选择任何 MAC 控制器的数据表(例如:Intel's ethernet Controller),您的所有问题都会得到解答。或者,如果您看到任何 MAC 控制器的设备驱动程序。

TCP/IP 是位于内核内部的上层堆栈(也可以在用户平面中),而 ARPA 协议(以太网)位于 MAC 控制器硬件内部。如果您了解这一点,您将了解路由器和交换机之间的区别(没有 TCP/IP 堆栈)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-19
    • 2011-12-22
    • 2015-07-04
    • 2014-12-23
    • 2015-09-14
    • 2018-07-13
    • 2018-06-27
    • 1970-01-01
    相关资源
    最近更新 更多