gpt4 book ai didi

linux - 使用 UDP 传输使用 netcat 丢弃数据包?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:32 29 4
gpt4 key购买 nike

我正致力于通过 10 GB 以太网电缆和带有 UDP 传输的 netcat 在两台 Linux 计算机之间发送大型数据文件,但似乎遇到了问题。

运行几次测试后,我得出的结论是 netcat 是问题所在。我已经使用 [UDT][1]、[Tsunami-UDP] 2 测试了 UDP 传输,以及 Python UDT 传输,所有这些都没有任何丢包问题。

在服务器端,我们一直在做:

cat "bigfile.txt" | pv | nc -u IP PORT

然后在客户端,我们一直在做:

nc -u -l PORT > "outputFile.txt"

我们注意到的一些事情:

  1. 在其中一台计算机上,无论是客户端还是服务器,它都只是“挂起”。也就是说,即使传输完成,Linux 也不会终止进程并移至终端中的下一行。
  2. 如果我们也在接收端运行管道 View ,传入的数据速率将明显低于发送端认为正在发送的速率。
  3. 运行 Wireshark 没有显示任何数据包丢失。
  4. Linux 中运行系统性能监视器显示传入数据速率(对于接收方)与来自发送方的传出数据速率相同。这与管道 View 的想法相反(参见 #2)

我们不确定 netcat 的问题出在哪里,以及是否有解决方法。任何帮助/见解将不胜感激。

此外,就其值(value)而言,将 netcat 与 TCP 传输一起使用效果很好。而且,我知道 UDP 并不以可靠性着称,数据包丢失应该是预料之中的,但它是我们必须使用的协议(protocol)。

谢谢

最佳答案

很可能是发送实例发送数据的速度对于接收实例来说太快了。请注意,即使您在接收 NIC 上没有看到丢包(正如您所说的那样),也可能会发生这种情况,因为丢失可能发生在操作系统级别。您的操作系统可能会溢出其 UDP 缓冲区。运行此命令:

watch -d "cat /proc/net/snmp | grep -w Udp" 

查看您的 RcvbufErrors 字段是否非零和/或在您的文件传输过程中不断增长。

关于linux - 使用 UDP 传输使用 netcat 丢弃数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37728980/

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