![为什么我只能通过 UDP 端口上的 netcat 发送 3 行?](https://linux22.com/image/706725/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E5%8F%AA%E8%83%BD%E9%80%9A%E8%BF%87%20UDP%20%E7%AB%AF%E5%8F%A3%E4%B8%8A%E7%9A%84%20netcat%20%E5%8F%91%E9%80%81%203%20%E8%A1%8C%EF%BC%9F.png)
我是这个命令的新手,我正在通过 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 字节。
我还没有nc
专门用于 UDP,所以我不确定它是否会对数据进行任何修改。您可以使用它tcpdump -xvv dst port 9514
来验证 UDP 数据报实际上是以什么形式发送的。通常,我只是直接通过管道传输到:tail -f -n0 /var/log/nodejs/log.log > /dev/udp/serverhostnamehere/9996