物联网中的很多设备都是资源受限型的,即只有少量的内存空间和有限的计算能力,所以传统的HTTP协议应用在物联网上就显得过于庞大而不适用。
受限应用层协议CoAP:CoAP由CoRE工作制订,是6LowPAN协议栈中的应用层协议
CoAP使用的是面向数据包的传输层协议,如用户数据包协议(User Datagram Protocol,UDP),因此可以支持多播
CoAP主要有以下特点:
●满足资源受限的网络需求。
●无状态HTTP映射,可以通过HTTP代理实现访问CoAP资源,或者在CoAP之上构建HTTP接口。
●使用UDP实现可靠单播和最大努力多播。
●异步消息交换。
●很小的消息头载荷及解析复杂度。
●支持URI和内容类型(Content-type)。
●支持代理和缓存。
●内建资源发现。
●支持订阅机制。
CoAP分为两层:通过这种双层结构,CoAP能够在UDP上实现可靠传输机制。进行可靠传输时,使用CON消息,如果在规定时间内未收到ACK消息,则重新传输该消息(超时重传),直到收到ACK/RST消息或者超过最大重试次数。接收方收到CON消息时,返回ACK消息,如果接收方不能处理该消息,则返回RST消息。此外,CoAP还支持异步通信。当CoAP服务端收到不能立即处理的请求时,首先返回ACK消息,处理请求之后再发送返回消息。
消息层(Message)负责使用UDP进行异步交互
CoAP消息有4种类型,分别是:
●Confirmable(CON):需要收到确认的消息。
●Non-confirmable(NON):不需要收到确认。
●Acknowledgment(ACK):表示确认一个Confirmable类型的消息已收到。
●Reset(RST):表示一个Confirmable类型的消息已收到,但是不能处理。
请求/回复层(Request/Response)负责传输资源操作请求和回复数据。
CoAP消息结构
一个CoAP消息最小为4个字节,以下是CoAP协议不同部分的描述。
【版本Version】:类似于IPv6和IPv6,仅仅是一个版本号。
【消息类型Message Type】:CON,NON,ACK,RST。这些消息类型相当于HTTP协议的PUTGET等
【消息ID Message ID】:每个CoAP消息都有一个ID,在一次会话中ID总是保持不变。但是在这个会话之后该ID会被回收利用。
【标记 Token】:标记是ID的另一种表现、
【选项 Options】:CoAP选项类似于HTTP请求头,它包括CoAP消息本身,例如CoAP端口号,CoAP主机和CoAP查询字符串等。
【负载Payload】:真正有用的被交互的数据。
1、 server结构
* +--------------------------------------- Server
* | +-----------------------+
* | | MessageDeliverer +--> (Resource Tree)
* | +---------A-A-A---------+
* | | | |
* | | ||
* | .-------->>>-----------' | '--------<<<------------.
* | / | \
* | | | |
* | * A *A *A
* | | Endpoint | | Endpoint | | Endpoint
* | +---------------------+ +-------------------- + +---------- +
*|+-----------v-A-----------------------v-A--------------------------v-A-
* v A vA v A
* v A v A v A
* (Network) (Network) (Network)
NetworkConfig类
getStandard 获得该类的实例
调用NetworkConfigDefaults类的setDefaults设置默认配置参数;如果配置文件Californium.properties存在用该文件设置默认配置参数,如果不存在保存NetworkConfigDefaults类中的配置参数到Californium.properties文件中。返回NetworkConfig类实例
server类
NetworkConfig ,
executor ,
MessageDeliverer(包含rootResource),
root Resource (包含.well-know Resource,多个resource),
Endpoint list ( endpoint, executor, MessageDeliverer(rootResource))
a)初始化设置config配置参数,初始化线程池executor,构建root Resource,构建MessageDeliverer,为endpoint绑定executor和MessageDeliverer
b)开始server,如果Endpoint list为空采用默认配置参数启动一个Endpoint并添加的Endpoint list ,否则循环启动Endpoint list中的Endpoint
c)停止server,循环停止Endpoint list中的Endpoint
d)销毁server,循环销毁Endpoint list中的Endpoint,关闭executor
e) setExecutor,为每个Endpoint设置executor
f) setMessageDeliverer,为每个Endpoint设置MessageDeliverer
g)addEndpoint, 为每个Endpoint设置executor和MessageDeliverer, 并添加的Endpoint list
h) add,remove将资源增加到rootResource或者从root Resource删除