2012-09-20 27 views
2

似乎可以在没有有效载荷的情况下发送UDP数据包。你为什么要发送一个没有负载的UDP数据包?

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

这涉及到我刚才的问题Under Linux, can recv ever return 0 on UDP?

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

+2

不知道这是一个真正的问题 - 也许你应该问问包的发件人:-) –

+0

这是一个真正的问题,涉及到我以前的问题。这是允许的,为什么你会这样做? http://stackoverflow.com/questions/12505892/under-linux-can-recv-ever-return-0-on-udp – Matt

+0

和阅读这个问题的人不知道你以前的问题 - 所以这本身并没有帮助 - 嘿,也许我只是觉得发送一个空的UDP消息,因为我没有别的事要做 - 我的意见的重点是,这将如何帮助一个人在6个月的时间 –

回答

8

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

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

编辑:多一个使用:NAT穿越算法,如STUN或UDP穿孔。

+0

如何添加心跳,路由测试以及那个可怕的协议试着解决你是否已经NAT了 –

+0

UDP hole punching?是的,就像我说过的,大量的应用程序。 – nneonneo

+0

我的PS3所做的一些事情 - 协议有一个名字 - 不记得叫做什么 –