为什么我只能通过 UDP 端口上的 netcat 发送 3 行?

为什么我只能通过 UDP 端口上的 netcat 发送 3 行?

我是这个命令的新手,我正在通过 UDP 9415 端口发送文件数据。-->我有一个包含 1000 行的文件 -->我在这里发送的 IP 是我的目标 IP

cat test1 | netcat -u 172.x.x.x 9514

--> 现在在目的地我有 syslog-ng,它接收数据并将其存储在一个文件夹中,并且在步骤 2 之后我只获得了文件的前 3 条记录。

这是否意味着 UDP 有一些限制。因此,我在第二步中终止了该命令,然后重新运行该命令,然后我再次收到 3 条记录,依此类推。

有人能指出可能是什么问题吗?

问候 VG

答案1

尽管评论中有人反对,但 UDP 在某些方面还是很出色的 - 例如高性能日志记录。

我会查看接收缓冲区的大小 - 如果您发送的数据报大于缓冲区,它将截断数据报。

使用 UDP 协议接收消息时,请增加接收方主机(即接收消息的 syslog-ng OSE 服务器或中继)上的 UDP 接收缓冲区的大小。请注意,在某些平台上,例如在 Red Hat Enterprise Linux 5 上,即使消息负载较低(每秒约 200 条消息),也会导致消息丢失,除非增加源的 so_rcvbuf() 选项。在这种情况下,您需要增加主机的 net.core.rmem_max 参数(例如,增加到 1024000),但不要修改 net.core.rmem_default 参数。

一般而言,应增加 so_rcvbuf(),以使缓冲区大小(以千字节为单位)高于每秒传入消息的速率。例如,要每秒接收 2000 条消息,请至少将 so_rcvbuf() 设置为 2 097 152 字节。

(来源:https://www.balabit.com/sites/default/files/documents/syslog-ng-ose-3.3-guides/en/syslog-ng-ose-v3.3-guide-admin-en/html/reference_source_tcpudp.html

我还没有nc专门用于 UDP,所以我不确定它是否会对数据进行任何修改。您可以使用它tcpdump -xvv dst port 9514来验证 UDP 数据报实际上是以什么形式发送的。通常,我只是直接通过管道传输到:tail -f -n0 /var/log/nodejs/log.log > /dev/udp/serverhostnamehere/9996

相关内容