gpt4 book ai didi

docker - Docker容器之间缺少UDP数据包

转载 作者:行者123 更新时间:2023-12-02 18:56:06 27 4
gpt4 key购买 nike

我正在开发一个项目,需要在同一主机上的2个Docker容器之间交换UDP数据包。该主机是一台运行ubuntu服务器14.04LTS(Dell PowerEdge R410、32 GB RAM,Intel Xeon CPU E5640 @ 2.67GHz)的新型专用服务器。

在开发项目时,我注意到我丢失了2个Docker容器之间的数据包,因此我开发了以下方案来演示我的问题:

我从在同一主机上运行的ubuntu:14.04创建了3个Docker容器,我们将其称为容器#1,容器#2和容器#3。 Docker版本为1.11.1(内部版本5604cbe)。

  • 容器#1正在运行iperf:iperf -c 225.2.2.2 -u -T 32 -t 60 -i 1 -b 700M(它会生成UDP数据包,并以700Mbit / sec的带宽将其组播60秒)。
  • 容器2正在运行iperf:iperf -s -u -B 225.2.2.2 -i 1(侦听相同的多播地址)。
  • 3号容器正在运行tcpdump:tcpdump -i eth0 port 5001(正在侦听1号容器将对数据包进行多播的端口)。

  • 60秒后,容器1报告发送了2786350个数据报。

    2号容器报告:
    Interval      Transfer      Bandwidth       Jitter   Lost/Total Datagrams
    0.0-60.0 sec 3.81 GBytes 546 Mbits/sec 0.001 ms 2250/2786349 (0.081%)

    3号容器报告:
    2770477 packets captured
    2786351 packets received by filter
    15874 packets dropped by kernel

    因此,有两个问题:
  • 为什么容器#2和#3没有报告相同数量的接收数据包(容器#2的数据报少了,容器#3的数据报少了吗?)?
  • 如果这是一个受控的虚拟网络,为什么丢失的数据包数量会大不相同?另外,这意味着“内核丢弃的数据包”是什么?
  • 为什么我首先丢失数据包?再一次,这是一个受控的虚拟环境,没有使用任何网络设备。

  • 提前致谢。

    最佳答案

    packets ``dropped by kernel'' (this is the number of packets that were dropped, due to a lack of buffer space, by the packet capture mechanism in the OS on which tcpdump is running, if the OS reports that information to applications; if not, it will be reported as 0).



    内核将捕获的数据写入特殊缓冲区,而tcpdump从该缓冲区读取数据。如果缓冲区已满,则丢弃数据包。

    网络通常比磁盘快,这意味着有时您不能只捕获所有数据包。但是,由于丢弃的打包数量很小,因此情况并非如此,您可以执行以下操作。
  • 增加tcpdump, -B --buffer-size 选项的缓冲区,以KB为单位。默认值为2048KB。
  • sudo nice -10 tcpdump -为tcpdump提供更高的优先级(甚至是-20)
  • (如果您在Linux上)sudo nice -10 ionice -c 1 tcpdump其他磁盘写入优先级
  • 关于docker - Docker容器之间缺少UDP数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37160424/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com