场景说明
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 包已经到达目标机器并且目标端口可接收数据。
如果发送端没有报错,但接收端没有任何输出,优先检查这些问题:
- 防火墙是否放行了 UDP 端口。
- 目标机器上的监听命令是否真正启动。
- 端口号是否写错。
- 云服务器安全组或 NAT 规则是否拦截了 UDP。
额外说明
如果需要更严格地确认网络层是否真的有包经过,可以配合 tcpdump 一起看:
1tcpdump -i any udp port 9999
这样可以同时确认发送和接收两端的实际流量情况。