我一直在尝试理解 UDP 打孔背后的基本思想,但我无法理解以下两个套接字绑定之间的区别:
sock = UDPSocket.new
sock.bind('', port )
和
sock = UDPSocket.new
sock.bind('0.0.0.0', port)
以前我曾认为使用 '' 或 '0.0.0.0' 会做同样的事情——允许套接字在任何网络接口上监听——但由于代码不能与它们互换,所以我一定遗漏了一些东西。
对于初始“punch”,数据报从绑定到“”的套接字发送,然后关闭该套接字,与远程主机的实际通信通过绑定到 0.0.0.0 的套接字完成。我知道 0.0.0.0 通常是指默认路由,但在这种情况下我无法弄清楚它的意义。将套接字绑定到 0.0.0.0 是否意味着您正在为其分配默认网关的地址?