Networking 使用coap的远程资源发现

Networking 使用coap的远程资源发现,networking,cloud,iot,home-automation,coap,Networking,Cloud,Iot,Home Automation,Coap,我正在尝试创建一个家庭自动化领域的小型学术项目。我研究了物联网领域中的各种协议和标准,发现COAP与我的要求非常接近 目的很简单:在家里有一个外设(如灯泡、温度传感器等),充当COAP服务器,并公开某些资源和服务。由于COAP使用类似于web的寻址方案,因此拥有该服务器地址的任何客户端都应能够与该COAP服务器(即外围设备)通信并控制其属性 我对与服务器不在同一局域网中的客户机如何发现该服务器及其公开的资源有一定的怀疑。我知道COAP使用核心链路格式促进了资源发现,但它似乎主要使用只能在局域网内

我正在尝试创建一个家庭自动化领域的小型学术项目。我研究了物联网领域中的各种协议和标准,发现COAP与我的要求非常接近

目的很简单:在家里有一个外设(如灯泡、温度传感器等),充当COAP服务器,并公开某些资源和服务。由于COAP使用类似于web的寻址方案,因此拥有该服务器地址的任何客户端都应能够与该COAP服务器(即外围设备)通信并控制其属性

我对与服务器不在同一局域网中的客户机如何发现该服务器及其公开的资源有一定的怀疑。我知道COAP使用核心链路格式促进了资源发现,但它似乎主要使用只能在局域网内工作的多播。我不想把一个资源目录服务器放在家里,各种COAP服务器向它注册,然后这个目录服务器与云中的服务器对话。我希望能够在家里安装一个外设,它可以使用wifi家庭网络与远程客户端(如铜缆)通信。但是,考虑到COAP服务器将位于专用IP地址上,如何从远程位置发现位于家中的COAP服务器,然后与之通信。
仅使用COAP真的有可能吗?

让您的路由器接受HTTP请求,并在您的系统中运行HTTP-to-COAP代理,通过IP-HTTP-COAP代理访问您的COAP设备。

当您坐在NAT后面时,既不允许直接发现也不允许连接;CoAP不会试图神奇地刺穿它

流行的解决办法是:

  • 使用IPv6(避免使用NAT)和(至少有选择地)禁用防火墙。您仍然只能在本地进行发现,但一旦发现,您就可以从任何地方连接到设备
  • 使用VPN使移动设备如同在NAT中一样工作
  • 在路由器上运行一个CoAP代理,端口对外开放,并告诉您的移动设备通过该代理进行连接。这也不会给您带来本地发现

对于代理和IPv6情况,您仍然可以在本地网络中运行资源目录。这不需要连接到任何云服务,也不需要接受来自任何云服务的注册,但它可以帮助您完成您希望通过多播完成但无法完成的发现,因为您的移动设备太远了。资源目录和代理都应配置为不与本地网络以外的设备通信,除非它们经过身份验证。

我不确定问题是什么,您是否希望扫描多个家庭并查找传感器,因此您不知道谁有传感器,谁没有传感器,或者你的客户预先知道服务器的位置(公共IP),我不想扫描多个家庭。我想自动化一个单一的家庭和设备必须可以远程访问。我想使用COAP连接设备和云服务器。COAP似乎主要用于通过LAN而不是WAN进行访问。这是否正确?否,CoAP是和应用层协议,位于UDP/DTLS、TCP/TLS之上。所以wan不应该成为问题,它遵循REST范式,使用URI定义资源,并且是完全双向的。同样重要的是要知道,在coap术语中,设备可以同时是“客户机和服务器”。因此,设备可以首先联系外部主机。如果这是你要问的,我可以在回答中重复一遍。@simon:你是说先从设备打开到服务器的连接,以便在NAT服务器中创建映射吗?但是,如果设备不使用该通道,该映射会持续多长时间?是的,这就是我的意思,对于映射生命周期而言,这将取决于您的中间盒配置。问题是如何发现COAP服务器,而不是如何使用HTTP与之通信。您尝试完成的是完全可行的,只需添加两个代理:[专用N/w]:[公共网络]CoAP服务器->(代理)CoAP到HTTP->:->(代理)HTTP到CoAP->RD-通过公共网络中的资源目录(通过HTTP CoAP代理)发现CoAP服务器-在本地网络中添加http-coap代理并访问coap服务器。谢谢chrysn!我很久以前就停止了这个项目的工作,但是你的建议非常有意义。