0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

COAP协议的双层模型及其传输特性

jf_uPRfTJDa 来源:移动Labs 2023-11-20 10:19 次阅读

Labs 导读

作为物联网世界的主流协议之一,CoAP协议为低功耗受限设备的数据交互和网络接入提供了可能,IETF在RFC7252中对其进行了详细的定义,本文结合CoAP协议在和家亲中的应用场景对其双层模型及输特性进行介绍。

作者:毛小俊

单位:中国移动智慧家庭运营中心

和家亲是中国移动面向智慧家庭用户推出的智能连接类App,是物联网在家庭应用场景中的落地实践。物联网强调的是物与物之间的连接通信,在和家亲中实现这种物物连接的就是Andlink协议,它是对多种主流物联网协议的综合运用,其中包含CoAP、MQTT、LwM2M、HTTP等协议,他们的简单对比如下表所示。由于多个协议都涉及到CoAP,因此本文重点介绍CoAP协议双层模型及其传输特性。

badfcf44-8743-11ee-939d-92fbcf53809c.png

Part 01和家亲哪些场景用到了CoAP?

在和家亲中,CoAP主要应用在下述2个场景中:

LPWAN网络(包括NB-IoTLoRaSigFox等)下,智能设备与家开平台通过LwM2M协议进行交互,LwM2M协议的底层便是基于UDP/UDP+DTLS传输层协议之上的CoAP协议。

Wi-Fi网络下,配网是实现智能设备后续注册、上线、管控的前提条件,配网过程中涉及到智能组网终端查找、发送入网请求、通知设备入网信息、设备入网成功广播、智能组网终端密码变更同步等步骤,这些步骤的交互即是通过CoAP协议完成。

bb05cfb4-8743-11ee-939d-92fbcf53809c.png

Part 02什么是CoAP协议?

CoAP协议(Constrained Application Protocol,标准文档RFC7252),属于应用层协议,在M2M通信中的作用和互联网中的HTTP类似,但在定义上只是实现了REST的一个子集,更重要区别是HTTP运行于TCP之上,而CoAP运行于UDP协议之上,由于UDP建立的是非可靠连接,在网络数据传输过程中,无论是请求还是响应,均存在丢包的风险。那CoAP协议的传输如何保障可靠性呢?这就涉及到CoAP协议的双层模型:

bb10e62e-8743-11ee-939d-92fbcf53809c.png

CoAP协议逻辑上分为Messaging Model和Request/Response Model,其中:

Messaging Model:处理端到端之间的数据交换,并为各报文类型提供重传机制,来弥补传输过程中的不可靠性。通过CoAP消息头部的Message ID建立请求与应答消息之间的关联,实现可靠传输。

Request/Response Model:定义了Client侧通过URI向服务端的资源发出操作请求和服务端响应的规则。通过CoAP消息头部的Token建立Request和Response关联,实现可靠响应。

注意区分Request/Response Model中的Token和Messaging Model中的Message ID是两个不同字段,如下图[1]所示:

bb252bac-8743-11ee-939d-92fbcf53809c.png

下面分别从Request/Response Model和Messaging Model分析CoAP协议的传输特性。

Part 03Messaging Model的可靠消息传输

上述介绍的中间CoAP定义了四种不同类型的报文:CON、NON、ACK、RST。其中CON报文需要接收方确认,即每一个CON报文都对应一个头部带有相同Message ID的ACK报文或RST报文,如果在规定的时间内请求方未收到ACK报文或RST报文,那么客户端将启动 “重传机制”。发送方未收到ACK/RST报文可能有两种原因:

CoAP请求丢失:CoAP请求已经发出,但未到达服务端

CoAP响应丢失:服务器已收到请求并返回响应信息,但响应未正确到达客户端

与重传机制相关的参数包括:ACK_TIMEOUT、ACK_RANDOM_FACTOR、MAX_RETRANSMIT、MAX_TRANSMIT_SPAN、MAX_TRANSMIT_WAIT

ACK_TIMEOUT:超时响应等待时间,默认2s。一个CON报文的初始等待时间为一个随机数,取值范围是ACK_TIMEOUT到ACK_TIMEOUT*ACK_RANDOM_FACTOR之间。随着重传次数增加,每一次的等待时间均为前一次的2倍。

ACK_RANDOM_FACTOR:随机系数,默认1.5。

MAX_RETRANSMIT:最大重传次数,固定值4次。

MAX_TRANSMIT_SPAN:第一次发出CON报文到最后一次重新发送的最长时间间隔。

MAX_TRANSMIT_WAIT:第一次发出CON报文到发送方放弃接收ACK或RST报文的最长时间间隔。

为进一步说明Messaging Model重传机制,以和家亲中设备端向智能组网终端发送入网CON请求为例,假如在本次CON报文发送中

ACK_TIMEOUT=2s

ACK_RANDOM_FACTOR=1.5

首次超时响应等待时间取t1=2.5s (2s<=t1<=2*1.5s)

由于网络较差尝试了4次重新发送都未收到ACK或RST响应报文,可以得到如下图所示的交互结果:

bb50d8ba-8743-11ee-939d-92fbcf53809c.png

需要注意的是上图只是为了说明重传机制的完整流程,只要CON消息发送后任意时刻,设备端收到来自服务端的ACK/RST消息,本次消息传送便会终止。通过这种重传机制,CoAP协议保证了端到端消息传输的可靠性。

Part 04Request/Response Model的消息传输

Request/Response模型的交互方式类似于HTTP协议中的客户端和服务端交互的C/S模型。

Request关注的是根据URI向服务端的资源发出操作请求,请求类型包括GET、POST、PUT 和 DELETE,但和HTTP不同的是不会先建立连接,而是通过CoAP消息进行异步交互,Request和Response之间通过CoAP消息头部的Token字段进行匹配。

Response则根据Request类型和服务端当前状态的差异,分为Piggybacked Response、Separate Response、Non-confirmable Response3种不同类型:

➤ Piggybacked Response(附带响应)

下图[1]中展示了对于两个GET请求,服务端返回附带响应的例子,一个成功,一个导致了4.04(资源未找到)。通过ACK报文回应CON报文,是最通用的类型,属于可靠响应模式。

bb60fd26-8743-11ee-939d-92fbcf53809c.png

➤ Separate Response(独立响应)

假如Server由于系统繁忙等原因无法直接给出数据响应,那么它就会立即发回一个空的ACK消息,服务端在数据准备好后服务器端就会把它组装成一个新的CON类型消息(这需要客户端的ACK),进行异步响应。独立响应也属于可靠响应模式。下图[1]中可以看到两次交互中使用的Token一致,都是0x73;但是Message ID已经变掉了,从0x7a10变成了0x23bb。

bb6c4be0-8743-11ee-939d-92fbcf53809c.png

➤ Non-confirmable Response(无需响应)

Client的请求如果是NON类型,Server一般也回NON类型消息,但服务器也有可能发送一个CON类型的消息作为响应。适用于对响应可靠性要求不高的场景。例如对温度传感器数据的重复读取,并不需要每一次都成功。图中[1]request和response使用了相同的Token:0x74。

bb76c1b0-8743-11ee-939d-92fbcf53809c.png

Part 05总结

CoAP协议目前在和家亲的智能设备大网和局域网连接、管控中都起到了重要的连接作用。作为物联网的主流协议之一,CoAP协议除了本身单独使用之外,还是LwM2M协议的底层消息传递协议,和MQTT相比,CoAP更加轻量、开销更低,在诸如和家亲设备配网等场景中更加合适。在使用CoAP时结合场景选择合适的Message和Request/Response模型对保障传输可靠性,提高客户端和服务端的交互效率十分重要。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2870

    文章

    41639

    浏览量

    358399
  • ACK
    ACK
    +关注

    关注

    0

    文章

    27

    浏览量

    11078
  • RST
    RST
    +关注

    关注

    0

    文章

    30

    浏览量

    7323
  • CoAP
    +关注

    关注

    0

    文章

    9

    浏览量

    10531
  • TCP通信
    +关注

    关注

    0

    文章

    145

    浏览量

    4138

原文标题:技术 | COAP协议的双层模型及其传输特性

文章出处:【微信号:5G通信,微信公众号:5G通信】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    网络传输协议有几种?

    网络传输协议是一种规定计算机在网络中进行通信的规则或标准。常见的网络传输协议有以下几种: 1. TCP/IP协议:TCP/IP(
    的头像 发表于 04-02 16:04 276次阅读

    osi七层模型各层功能及协议 osi七层模型有哪些

    中的功能和任务。该模型由七层组成,每一层都有各自的功能和协议,可以实现不同层之间的通信和数据传输。下面将详细介绍每一层的功能和常用的协议。 第一层:物理层(Physical Layer
    的头像 发表于 01-25 11:03 5743次阅读

    osi七层模型各层功能及协议

    OSI七层模型是一种将计算机网络协议按照不同功能划分为不同层级的标准模型。每一层都负责处理特定的网络功能,并与上下相邻的层进行通信。下面是对每一层功能及常见协议的详细说明。 物理层负责
    的头像 发表于 01-15 10:29 449次阅读

    osi七层模型各层功能及协议

    OSI(Open Systems Interconnection)七层模型是一种将计算机网络通信协议划分为七个不同层次的模型,每层都有其特定的功能和协议。下面将详细介绍每个层次的功能及
    的头像 发表于 01-10 18:06 900次阅读

    蓝牙协议版本解析:不同类型的蓝牙协议及其作用

    到2.1:经典蓝牙协议 蓝牙1.0: 首次引入蓝牙技术,支持数据传输速率为1 Mbps,主要应用在耳机和手机等简单设备的连接。 蓝牙2.0: 引入了增强数据传输速率(3 Mbps)和快速连接建立的
    的头像 发表于 12-28 11:17 828次阅读

    串口传输协议

    通信传输协议
    油泼辣子
    发布于 :2023年11月16日 17:18:55

    “不会过时”的协议CoAP与其他协议相比有何不同?

    什么是CoAP协议CoAP(ConstrainedApplicationProtocol,受限应用协议)是一种专为物联网(IoT)设备和资源受限网络设计的应用层
    的头像 发表于 10-20 08:21 470次阅读
    “不会过时”的<b class='flag-5'>协议</b>?<b class='flag-5'>CoAP</b>与其他<b class='flag-5'>协议</b>相比有何不同?

    静电放电ESD三种模型及其防护设计

    点击关注,电磁兼容不迷路。静电放电ESD三种模型及其防护设计ESD:ElectrostaticDischarge,即是静电放电,每个从事硬件设计和生产的工程师都必须掌握ESD的相关知识。为了定量
    的头像 发表于 09-15 08:02 1414次阅读
    静电放电ESD三种<b class='flag-5'>模型</b><b class='flag-5'>及其</b>防护设计

    SCTP流控制传输协议简析

    SCTP(Stream Control Transmission Protocol,流控制传输协议,RFC 2960、RFC 3286、RFC 3309)是一个 IP 协议之上的、可靠的、面向控制信令的、
    的头像 发表于 07-25 10:02 1121次阅读
    SCTP流控制<b class='flag-5'>传输</b><b class='flag-5'>协议</b>简析

    传统TCP设计的可靠传输协议详解

    传统TCP设计的可靠传输协议是一种基于TCP协议实现的可靠传输方法。下面是传统TCP设计的可靠传输协议
    的头像 发表于 07-21 16:51 438次阅读

    coap总是从任何地方接收数据包,为什么会这样?

    我实现了一个 coap 服务器: 代码:全选#include coapServer coap; void getListOfWiFi(coapPacket *packet, IPAddress
    发表于 05-30 06:53

    无法通过COAP POST发送数据怎么解决?

    我正在使用 2 个 ESP8266 板来测试 COAP 协议。 一个是 COAP 服务器,另一个是客户端。 我使用了 ESP8266-FreeRTOS-SDK 的 CoAP 示例,但是
    发表于 05-15 06:23

    nodemcu esp-12e用作coap客户端不断异常的原因?

    我是 arduino ide 和这些代码的新手,试图将我的 nodemcu esp-12e 用作 coap 客户端,但我不断收到异常 28 错误,我不知道是什么原因造成的,这是一个学校项目,我似乎
    发表于 05-12 08:56

    AXI协议的几个关键特性

    AXI 协议有几个关键特性,旨在改善数据传输和事务的带宽和延迟
    的头像 发表于 05-06 09:49 767次阅读

    网络传输协议有几种

    TCP/IP协议:是一组用于互联网通信的协议,常常被称为TCP/IP协议族。TCP/IP协议分为两个协议层,即
    发表于 05-05 15:03 2891次阅读