3

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

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

这与我之前的问题有关在 Linux 下,recv 能否在 UDP 上返回 0?

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

4

3 回答 3

12

任何事物!UDP 数据包不是空的——它带有发送者的身份。因此,这样的数据包可以用作原始类型的信号:可能是你好、再见或保持活动状态。

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

编辑:另一种用途:NAT 遍历算法,例如STUN或 UDP 打孔。

于 2012-09-20T04:56:24.070 回答
0

要回答“为什么协议会这样做”的问题:旧的 Daytime 协议只是使用 UDP 数据包的到达来发回回复数据包。同样,只要 TCP 连接发生,它就会回复时间值,而不管 TCP 连接包含的任何实际数据。

于 2019-12-03T19:14:35.377 回答
0

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

于 2020-07-10T13:29:05.067 回答