使用 coap 进行远程资源发现
Remote resource discovery using coap
我正在尝试创建一个家庭自动化领域的小型学术项目。我探索了 IOT 领域的各种协议和标准,发现 COAP 接近我的要求。
目的很简单:在家里安装一个外围设备(如灯泡、温度传感器等)作为 COAP 服务器并公开某些资源和服务。由于 COAP 使用类似于 web 的寻址方案,任何拥有该服务器地址的客户端都应该能够与该 COAP 服务器(即外围设备)对话并控制其属性。
我对与服务器不在同一个 LAN 中的客户端如何发现该服务器及其公开的资源有一定的疑问。我知道 COAP 使用 CoRE link 格式促进资源发现,但它似乎主要使用只能在 LAN 内工作的多播。我不想在家里放一个资源目录服务器,各种 COAP 服务器在上面注册,然后这个目录服务器与位于云中的服务器通信。我希望能够在家里安装一个外围设备,它可以使用 wifi 家庭网络与远程客户端(如 COPPER)通信。但是如何从远程位置发现位于家中的 COAP 服务器,然后考虑到 COAP 服务器将位于私有 IP 地址上,然后与其对话。
这真的可以仅使用 COAP 吗?
让你的路由器接受 HTTP 请求,运行 一个 HTTP 到你系统中的 CoAP 代理,通过你的 IP 思想 HTTP-CoAP 代理访问你的 CoAP 设备。
由于您位于 NAT 后面,因此既不允许直接发现也不允许连接; CoAP 不会尝试神奇地刺穿它。
流行的出路是:
- 使用 IPv6(避免使用 NAT)并(至少有选择地)禁用防火墙。您仍然只能在本地进行发现,但一旦发现,您就可以从任何地方连接到您的设备。
- 使用 VPN 让您的移动设备就像在 NAT 中一样。
- 运行 路由器上的 CoAP 代理,端口对外开放,并告诉您的移动设备通过该代理连接。这也不会给你本地发现。
对于代理和 IPv6 情况,您仍然可以 运行 本地网络中的资源目录。它既不需要连接到任何云服务,也不需要接受来自任何云服务的注册,但它可以帮助您完成您想要使用多播但由于您的移动设备距离太远而无法完成的发现。资源目录和代理都应该是可配置的,除非经过身份验证,否则不会与本地网络外的设备通信。
我正在尝试创建一个家庭自动化领域的小型学术项目。我探索了 IOT 领域的各种协议和标准,发现 COAP 接近我的要求。
目的很简单:在家里安装一个外围设备(如灯泡、温度传感器等)作为 COAP 服务器并公开某些资源和服务。由于 COAP 使用类似于 web 的寻址方案,任何拥有该服务器地址的客户端都应该能够与该 COAP 服务器(即外围设备)对话并控制其属性。
我对与服务器不在同一个 LAN 中的客户端如何发现该服务器及其公开的资源有一定的疑问。我知道 COAP 使用 CoRE link 格式促进资源发现,但它似乎主要使用只能在 LAN 内工作的多播。我不想在家里放一个资源目录服务器,各种 COAP 服务器在上面注册,然后这个目录服务器与位于云中的服务器通信。我希望能够在家里安装一个外围设备,它可以使用 wifi 家庭网络与远程客户端(如 COPPER)通信。但是如何从远程位置发现位于家中的 COAP 服务器,然后考虑到 COAP 服务器将位于私有 IP 地址上,然后与其对话。 这真的可以仅使用 COAP 吗?
让你的路由器接受 HTTP 请求,运行 一个 HTTP 到你系统中的 CoAP 代理,通过你的 IP 思想 HTTP-CoAP 代理访问你的 CoAP 设备。
由于您位于 NAT 后面,因此既不允许直接发现也不允许连接; CoAP 不会尝试神奇地刺穿它。
流行的出路是:
- 使用 IPv6(避免使用 NAT)并(至少有选择地)禁用防火墙。您仍然只能在本地进行发现,但一旦发现,您就可以从任何地方连接到您的设备。
- 使用 VPN 让您的移动设备就像在 NAT 中一样。
- 运行 路由器上的 CoAP 代理,端口对外开放,并告诉您的移动设备通过该代理连接。这也不会给你本地发现。
对于代理和 IPv6 情况,您仍然可以 运行 本地网络中的资源目录。它既不需要连接到任何云服务,也不需要接受来自任何云服务的注册,但它可以帮助您完成您想要使用多播但由于您的移动设备距离太远而无法完成的发现。资源目录和代理都应该是可配置的,除非经过身份验证,否则不会与本地网络外的设备通信。