跳到主要内容

7. 发现

7.1. 服务发现​

作为发现 CoAP 服务器所提供服务的一部分, 客户端必须获知服务器使用的端点.

客户端通过知道或获知一个 URI 来发现服务器, 该 URI 引用服务器命名空间中的某个资源. 或者, 客户端可以使用 multicast CoAP (见 Section 8) 和 "All CoAP Nodes" 组播地址来查找 CoAP 服务器.

除非 "coap" 或 "coaps" URI 中的 port 子组件指示 CoAP 服务器所在的 UDP 端口, 否则假定服务器可在默认端口访问.

提供 resource discovery (见下面的 Section 7.2) 资源的服务器 MUST 支持 CoAP 默认端口号 5683, 并且在提供对其他资源的访问时 SHOULD 支持该端口. 对于由 DTLS 保护的 CoAP, 默认端口号 5684 MAY 由服务器用于 resource discovery 以及提供对其他资源的访问. 此外, 其他端点可以托管在其他端口上, 例如动态端口空间中.

实现说明: 当 CoAP 服务器托管在 6LoWPAN 节点上时, 如果它还支持 [RFC4944] 和 [RFC6282] 中定义的 61616-61631 压缩 UDP 端口空间内的端口号, 则可以提高头部压缩效率. (注意, 由于其 UDP 端口不同于默认端口, 因此它是一个不同于默认端口服务器的端点.)

7.2. 资源发现​

在机器到机器应用中, 没有人参与交互, 而静态接口会导致脆弱性, 因此发现 CoAP 端点提供的资源极其重要. 为了最大化 CoRE 环境中的互操作性, 除非需要完全手工配置, CoAP 端点 SHOULD 支持 [RFC6690] 中描述的可发现资源的 CoRE Link Format. 哪些资源被设为可发现 (如果有) 由服务器决定.

7.2.1. 'ct' 属性​

本节定义了一个新的 Web Linking [RFC5988] 属性, 用于 [RFC6690]. Content-Format code "ct" 属性提供关于该资源会返回哪些 Content-Format 的提示. 注意, 这只是提示, 不会覆盖通过实际请求该资源表示而获得的 CoAP 响应中的 Content-Format Option.

其值采用 CoAP 标识符代码格式, 即十进制 ASCII 整数, 并且 MUST 位于 0-65535 (16-bit unsigned integer) 范围内. 例如, "application/xml" 会表示为 "ct=41". 如果不存在 Content-Format code 属性, 则不能对类型作任何假定. Content-Format code 属性 MAY 包含由空格分隔的 Content-Format code 序列, 表示有多种 content-format 可用. 属性值的语法在 Figure 12 的产生式 "ct-value" 中概述, 其中 "cardinal", "SP" 和 "DQUOTE" 按 [RFC6690] 中的定义.

  ct-value =  cardinal
/ DQUOTE cardinal *( 1*SP cardinal ) DQUOTE

Figure 12