【问题标题】:How long does a UDP packet keeps floating and where?UDP数据包保持浮动多长时间以及在哪里?
【发布时间】:2015-11-15 03:45:01
【问题描述】:

我们不断听到关于 udp 的不可靠性,它可能到达或未到达或只是无序到达(表示延迟)。

在交付之前存放在哪里?

既然它的连接变少了,如果你在没有网络连接的情况下继续发送数据包,它会去哪里?驱动缓冲区?

类似地,当接收器无法访问时,数据包是否会立即丢失,或者它是否会漂浮在某个位置,期望主机很快可用?如果是,那么在哪里?

【问题讨论】:

标签: sockets routing udp


【解决方案1】:

在从一台设备直接连接到另一台设备时,没有中间设备,应该没有问题。您可能会遇到问题的地方是您通过一堆交换机和路由器(如互联网)。

几个原因:

  • 如果交换机丢弃帧,则没有机制可以重新发送该帧。
  • 当数据包拥塞时,路由器会缓冲数据包,数据包可以 如果缓冲区已满,则将其丢弃,或者可能会故意丢弃它们以防止拥塞。
  • 负载平衡会导致数据包无序传送。

您无法控制网络之外的任何内容。

【讨论】:

    【解决方案2】:

    在交付之前存放在哪里?

    如果数据包到达的速度快于设备可以读取的速度,则可能会发生数据包缓冲。缓冲可以在设备的 NIC 或设备驱动程序的软件队列中,也可以在驱动程序和堆栈之间的软件队列中。但是,如果到达率 高得多,以至于这些缓冲机制无法处理它,然后它将被丢弃在那些适当的层/位置(基于设计)。

    如果你继续发送没有 网络连接会去哪里?驱动缓冲区?

    如果没有网络,则可能没有其他中间网络设备,因此不会出现重大问题。但是,这也取决于您的架构/设计/配置。如果内部 OS 接收缓冲区限制/套接字缓冲区大小(SO_RCVBUF、rmem_max、rmem_default)的配置值超出,则可以在此处丢弃。并且,如果各个设备驱动程序中的软件队列溢出或设备驱动程序和设备堆栈之间的软件队列溢出,则此处可能会出现丢包。此外,如果 CPU 正忙于处理另一个优先任务而暂停接收,则此处可能会出现丢包。

    同样,当接收方不可达时,数据包立即 丢失或它是否浮动有点期待主机可用 很快?如果是,那么在哪里?

    如果没有可达的目的地,它应该被路由器丢弃。 另外,请注意,如果 TTL/hoplimit 计数(在 IP 中)在数据包到达此路由器时为零,则特定路由器也应丢弃数据包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 2014-05-17
      相关资源
      最近更新 更多