场景说明

UDP 没有像 TCP 那样的握手过程,所以测试结果只能说明“数据能否发出去”和“对端端口是否有响应”,不能像 TCP 一样直接等同于连接建立成功。

安装依赖

Debian / Ubuntu:

1apt-get install -y netcat-openbsd

如果你的系统里已经有 nc,可以先直接用;不同发行版的参数略有差异。

接收端

先在目标机器上监听 UDP 端口。下面两种写法都常见,按你的 nc 版本选择其一:

1nc -u -l 端口号
1nc -u -l -p 端口号

例如监听 9999 端口:

1nc -u -l 9999

发送端

在另一台机器上向目标 IP 和端口发送测试数据:

1echo "test" | nc -u -v -w 1 服务器IP 端口号

例如:

1echo "test" | nc -u -v -w 1 192.168.1.10 9999

发送 hello 的示例:

1echo "hello" | nc -vuz -w 3 hk-bgp-b.zhuji.host 13520

-u 表示使用 UDP,-v 输出更详细信息,-w 1 表示等待 1 秒后退出,避免命令卡住。

判断结果

收到数据的一侧会直接显示发送内容,说明 UDP 包已经到达目标机器并且目标端口可接收数据。

如果发送端没有报错,但接收端没有任何输出,优先检查这些问题:

  1. 防火墙是否放行了 UDP 端口。
  2. 目标机器上的监听命令是否真正启动。
  3. 端口号是否写错。
  4. 云服务器安全组或 NAT 规则是否拦截了 UDP。

额外说明

如果需要更严格地确认网络层是否真的有包经过,可以配合 tcpdump 一起看:

1tcpdump -i any udp port 9999

这样可以同时确认发送和接收两端的实际流量情况。