CoAP是一种应用层协议,运行于UDP协议之上,非常小巧,最小的数据包仅4字节。
CoAP协议定义
CoAP协议的交互模型与HTTP的客户端/服务端模型类似。然而,在M2M的交互场景中,CoAP的目标是设计一个通用的网络协议,满足受限环境的特殊需求,特别考虑了能源、楼宇自动化和其他M2M应用。
需要注意的是CoAP并不能代替HTTP协议,但是对于那些小设备(例如CPU为8bit的单片机,内存32Kb,Flash 256Kb)而言CoAP的确是一个更好的解决方案。
CoAP协议特点
满足受限环境下M2M的需求的协议
CoAP协议基于UDP
异步消息交换
轻量级的头部,且解析复杂度低。
支持URI和Content-Type
能实现简单的缓存和数据代理
无状态的HTTP映射,可以构建代理服务器,使CoAP资源可以用HTTP协议访问,也可以使HTTP接口实现于CoAP协议之上
支持DTLS
协议模型
逻辑上分为Messages和Requset/Respones两层,R/R通过Messages承载,从封包上不体现这种层次结构
DTLS可选,由于基于UDP,支持组播。
特征
基于UDP的类似HTTP的Client/Server交互模型
Client发送Request(携带不同method)请求对资源(通过URI表示)的操作,Server返回Response(携带资源的representation)和状态码
在M2M应用场景,Endpoint实际同时是Server和Client
协议定义了以下几个角色:
Endpoint:CoAP协议的参与方
Sender(发送方):发出Messages的Endpoint
Recipient(接收方):相当于接收Message的Endpoint
Client(客户端):发出Request的Endpoint,Response的destination Endpoint
Server(服务端):Request的destination,Response的source Endpoint
Origin Server(源服务端):resource所在的ServerElective(存储或者创建一个给定资源的服务端)
Intermediary(媒介):既作为Server又作为Origin Server的Client的Endpoint。可以理解为Proxy的统称
Proxy:一种Intermediary,完成Request前转,Respone中继,执行缓存,namespace转换,协议转换等功能的Endpoint,基于前转请求架构中的位置,协议定义了forward-proxy和reverse-proxy两种代理
Forward-Proxy(正向代理):被Client用于代表Client执行Request,并完成任何必要的转换。
Reverse-Proxy(反向代理):代表一个或多个其他服务器并代表它们满足请求,执行任何必要的翻译的端点。 与转发代理不同,客户端可能不知道它正在与反向代理通信; 反向代理接收请求,就像它是目标资源的源服务器一样。
CoAP-to-CoAP Proxy:映射CoAP request到CoAP request
Cross-Proxy:跨协议代理,