先说明一下我的情况:
我目前正在尝试构建一个解决方案来管理网络上的多个物联网设备。应该可以自动使客户端连接到托管 MQTT-Broker 的中央服务器。
在 IPv4 网络中,我会简单地从客户端发送一个广播数据包,服务器将使用包含其自己的 IP 地址的数据包对其进行响应。既然客户端知道了服务器的 IP 地址,它就可以在此之后连接到它。
但是,IPv6 的情况有所不同,因为不再有广播。如何在不硬编码多播地址的情况下让我的客户端自动找到服务器?
先说明一下我的情况:
我目前正在尝试构建一个解决方案来管理网络上的多个物联网设备。应该可以自动使客户端连接到托管 MQTT-Broker 的中央服务器。
在 IPv4 网络中,我会简单地从客户端发送一个广播数据包,服务器将使用包含其自己的 IP 地址的数据包对其进行响应。既然客户端知道了服务器的 IP 地址,它就可以在此之后连接到它。
但是,IPv6 的情况有所不同,因为不再有广播。如何在不硬编码多播地址的情况下让我的客户端自动找到服务器?
在 IPv6 中,不再有任何广播——将一个数据包发送到大量未指定的主机。只有多播、单播和任播。在 IPv6 中,所有节点都必须支持多播。如果没有多播,您需要的许多服务将根本无法工作。
对 IPv4 和 IPv6 执行此操作的正式/正确方法是使用“服务发现”。苹果的“Bonjour”系统就是一个例子。
我可以想到自动服务发现的两种正确方法:
向 IANA 注册 IPv6 多播地址并让您的软件监听该地址。
让您的服务(或运行该服务的主机)发送多播 DNS 数据包以使网络知道自己。
两者都应该适用于 IPv4 和 IPv6。