本规范分为七章:
·第6章-使用的WebSocket作为网络transport
本说明书中的关键词“必须”,“必须”,“不需要”,“应该”,“不应该”,“应该”,“不应该”,“推荐”,“可以”和“可选”是按照IETF RFC 2119 [RFC2119]中的描述进行解释。
网络连接:
由MQTT使用的底层传输协议提供的构造。
·它将客户端连接到服务器。
·它提供了在两个方向上发送有序,无损,字节流的方法。
有关示例,请参见第4.2节。
应用程序消息:
MQTT协议通过网络为应用程序承载的数据。当应用程序消息由MQTT传输时,它们具有相关的服务质量和主题名称。
客户:
使用MQTT的程序或设备。客户端始终建立与服务器的网络连接。它可以
·发布其他客户可能感兴趣的应用程序消息。
·订阅请求有兴趣接收的应用程序消息。
·取消订阅以删除对应用程序消息的请求。
·断开与服务器的连接。
服务器:
充当发布应用程序消息的客户端和已进行订阅的客户端之间的中介的程序或设备。一台服务器
·接受来自客户端的网络连接。
·接受客户发布的应用程序消息。
·处理订阅和取消订阅来自客户的请求。
·转发与客户订阅匹配的应用程序消息。
订阅:
订阅包括主题过滤器和最大QoS。订阅与单个会话相关联。会话可以包含多个订阅。会话中的每个订阅具有不同的主题过滤器。
主题名称:
附加到应用程序消息的标签,该标签与服务器已知的订阅进行匹配。服务器将应用程序消息的副本发送给具有匹配订阅的每个客户端。
主题过滤器:
订阅中包含的表达式,用于表示对一个或多个主题的兴趣。主题过滤器可以包含通配符。
会话:
客户端和服务器之间的有状态交互。某些会话仅与网络连接一样长,其他会话可以跨越客户端和服务器之间的多个连续网络连接。
MQTT控制数据包:
通过网络连接发送的信息包。MQTT规范定义了十四种不同类型的控制包,其中一种(PUBLISH包)用于传送应用程序消息。
Bradner,S。,“用于RFC指示需求水平的关键词”,BCP 14,RFC 2119,1997年3月 .http://www.ietf.org/rfc/rfc2119.txt
Yergeau,F。,“UTF-8,ISO 10646的转换格式”,STD 63,RFC 3629,2003年11月 http://www.ietf.org/rfc/rfc3629.txt
Dierks,T。和E. Rescorla,“传输层安全(TLS)协议版本1.2”,RFC 5246,2008年8月。
http://www.ietf.org/rfc/rfc5246.txt
Fette,I。和A. Melnikov,“WebSocket协议”,RFC 6455,2011年12月。
http://www.ietf.org/rfc/rfc6455.txt
[Unicode的]
Unicode联盟。Unicode标准。
http://www.unicode.org/versions/latest/
[RFC793]
Postel,J。传输控制协议。STD 7,IETF RFC 793,1981年9月。
http://www.ietf.org/rfc/rfc793.txt
高级加密标准(AES)(FIPS PUB 197)。
http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
[ DES ]
数据加密标准(DES)。
http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf
[ FIPS1402 ]
加密模块的安全要求(FIPS PUB 140-2)
http://csrc.nist.gov/publications/fips/fips140-2/fips1402.pdf
[ IEEE 802.1AR ]
IEEE本地和城域网标准 - 安全设备标识
http://standards.ieee.org/findstds/standard/802.1AR-2009.html
[ ISO29192 ]
ISO / IEC 29192-1:2012信息技术 - 安全技术 - 轻量级加密 - 第1部分:总则
http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=56425
[MQTT NIST]
MQTT补充出版物,MQTT和NIST框架,用于改进关键基础设施网络安全
http://docs.oasis-open.org/mqtt/mqtt-nist-cybersecurity/v1.0/mqtt-nist-cybersecurity-v1.0.html
[ MQTTV31 ]
MQTT V3.1协议规范。
http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html
[ NISTCSF ]
改进关键基础设施网络安全执行命令13636
http://www.nist.gov/itl/upload/preliminary-cybersecurity-framework.pdf
[ NIST7628 ]
NISTIR 7628智能电网网络安全指南
http://www.nist.gov/smartgrid/upload/nistir-7628_total.pdf
[ NSAB ]
NSA Suite B密码学
http://www.nsa.gov/ia/programs/suiteb_cryptography/
[ PCIDSS ]
PCI-DSS支付卡行业数据安全标准
https://www.pcisecuritystandards.org/security_standards/
[ RFC1928 ]
Leech,M.,Ganis,M.,Lee,Y.,Kuris,R.,Koblas,D.,and L.Jones,“SOCKS Protocol Version 5”,RFC 1928,March 1996。
http://www.ietf.org/rfc/rfc1928.txt
[ RFC4511 ]
Sermersheim,J.,Ed。,“轻量级目录访问协议(LDAP):协议”,RFC 4511,2006年6月。
http://www.ietf.org/rfc/rfc4511.txt
[ RFC5077 ]
Salowey,J.,Zhou,H.,Eronen,P。和H. Tschofenig,“没有服务器端状态的传输层安全性(TLS)会话恢复”,RFC 5077,2008年1月。
http://www.ietf.org/rfc/rfc5077.txt
[ RFC5280 ]
Cooper,D.,Santesson,S.,Farrell,S.,Boeyen,S.,Housley,R。和W. Polk,“Internet X.509公钥基础结构证书和证书撤销列表(CRL)配置文件”,RFC 5280,2008年5月。
http://www.ietf.org/rfc/rfc5280.txt
[ RFC6066 ]
Eastlake 3rd,D.,“Transport Layer Security(TLS)Extensions:Extension Definitions”,RFC 6066,2011年1月。
http://www.ietf.org/rfc/rfc6066.txt
[ RFC6749 ]
Hardt,D.,Ed。,“OAuth 2.0 Authorization Framework”,RFC 6749,2012年10月。
http://www.ietf.org/rfc/rfc6749.txt
[ RFC6960 ]
Santesson,S.,Myers,M.,Ankney,R.,Malpani,A.,Galperin,S。和C. Adams,“X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP”,RFC 6960,June 2013。
http://www.ietf.org/rfc/rfc6960.txt
[ SARBANES ]
2002年萨班斯 - 奥克斯利法案。
http://www.gpo.gov/fdsys/pkg/PLAW-107publ204/html/PLAW-107publ204.htm
[ USEUSAFEHARB ]
美国 - 欧盟安全港
http://export.gov/safeharbor/eu/eg_main_018365.asp
一个字节中的位标记为7到0.位号7是最高位,最低有效位分配位号0。
整数数据值以大端顺序为16位:高位字节位于低位字节之前。这意味着在网络上将16位字显示为最高有效字节(MSB),然后是最低有效字节(LSB)。
稍后描述的控制包中的文本字段被编码为UTF-8字符串。UTF-8 [ RFC3629 ] 是Unicode [ Unicode ] 字符的有效编码,可优化ASCII字符的编码以支持基于文本的通信。
这些字符串中的每一个都以一个两字节长度字段为前缀,该字段给出了UTF-8编码字符串本身的字节数,如图1.1所示的UTF-8编码字符串的结构。因此,可以在这些UTF-8编码的字符串组件之一中传递的字符串大小有限制; 您不能使用编码超过65535字节的字符串。
除非另有说明,否则所有UTF-8编码的字符串可以具有0到65535字节范围内的任何长度。
位 | 7 | 6 | 五 | 4 | 3 | 2 | 1 | 0 |
字节1 | 字符串长度MSB | |||||||
字节2 | 字符串长度LSB | |||||||
字节3 .... | UTF-8编码字符数据,如果长度> 0。 |
UTF-8编码字符串中的字符数据必须是由Unicode规范[ Unicode ] 定义的格式良好的UTF-8,并在RFC 3629 [ RFC3629 ]中重述。特别是该数据不得包括U + D800和U + DFFF之间的代码点编码。如果服务器或客户端收到包含 格式错误的UTF-8的控制数据包,则必须关闭网络连接[MQTT-1.5.3-1]。
UTF-8编码的字符串不得包含空字符U + 0000的编码。如果接收方(服务器或客户端)收到包含U + 0000的控制包,则必须关闭网络连接 [MQTT-1.5.3-2] 。
数据不应包括下面列出的Unicode [ Unicode ]代码点的编码。如果接收方(服务器或客户端)收到包含其中任何一个的控制数据包,它可以关闭网络连接:
U + 0001..U + 001F控制字符
U + 007F..U + 009F控制字符
Unicode规范中定义的代码点[ Unicode ] 为非字符(例如U + 0FFFF)
UTF-8编码序列0xEF 0xBB 0xBF总是被解释为U + FEFF(“ZERO WIDTH NO-BREAK SPACE”),无论它出现在字符串中并且不得被包接收器 [MQTT-1.5.3-3] 跳过或剥离。
例如,字符串A ? 是LATIN CAPITAL字母A,后跟代码点U + 2A6D4(代表CJK IDEOGRAPH EXTENSION B字符)编码如下:
位 | 7 | 6 | 五 | 4 | 3 | 2 | 1 | 0 |
字节1 | 字符串长度MSB(0x00) | |||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
字节2 | 字符串长度LSB(0x05) | |||||||
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
字节3 | 'A'(0x41) | |||||||
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 |
字节4 | (0XF0) | |||||||
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
字节5 | (和0xAA) | |||||||
| 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
字节6 | (0x9B) | |||||||
| 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 |
字节7 | (0x94之间) | |||||||
| 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
本规范中以黄色突出显示的文本标识了一致性声明。已为每个一致性语句分配了[MQTT-xxx-y]格式的引用。
本文是翻译的mqtt协议原文,为了以后自己阅读方便,也方便大家!