为什么要发送没有负载的UDP数据包?

时间:2012-09-20 04:51:24

标签: udp

似乎可以在没有有效载荷的情况下发送UDP数据包。

我唯一能想到的不需要有效载荷就是用于NAT打孔。 还有什么可以用于它?

这与我先前的问题Under Linux, can recv ever return 0 on UDP?

有关

我想更多的是,如果它被指定为某个标准的一部分,那么它被认为在某个地方有用吗?

3 个答案:

答案 0 :(得分:8)

任何! UDP数据包不是空的 - 它带有发送者的身份。因此,这样的数据包可以用作原始信号:可能是你好,再见,还是保持活着。

使用sendmsg之类的接口,可能会使用空数据包来发送辅助数据,例如cmsg结构(可用于在Linux上的两个进程之间传输文件描述符之类的内容)

编辑:还有一个用途:NAT遍历算法,如STUN或UDP打孔。

答案 1 :(得分:0)

要回答“协议为什么要这样做”的问题:旧的Daytime协议仅使用UDP数据包的到达来发回答复数据包。同样,无论TCP连接包含任何实际数据,它都会在TCP连接发生时立即用时间值进行回复。

答案 2 :(得分:0)

可以发送没有有效载荷的UDP数据包来检测UDP端口是否关闭。如果关闭,则会回复ICMP-unreach。