MQTT 協(xié)議 3.1.1 中文完整版_第1頁
MQTT 協(xié)議 3.1.1 中文完整版_第2頁
MQTT 協(xié)議 3.1.1 中文完整版_第3頁
MQTT 協(xié)議 3.1.1 中文完整版_第4頁
MQTT 協(xié)議 3.1.1 中文完整版_第5頁
已閱讀5頁,還剩62頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

概 術(shù) 標(biāo) CONNECT–連接服務(wù) 響 CONNACK–確認(rèn)連接請 PUBLISH–發(fā)布消 響 動 PUBACK–發(fā)布確 動 PUBREC–發(fā)布收到(QoS2,第一步 動 PUBREL–發(fā)布釋放(QoS2,第二步 動 PUBCOMP–發(fā)布完成(QoS2,第三步 動 SUBSCRIBE-訂閱主 響 SUBACK–訂閱確 響 UNSUBACK–取消訂閱確 PINGREQ–心跳請 響 PINGRESP–心跳響 DISCONNECT–斷開連 響 QoS0:最多分發(fā)一 QoS1:至少分發(fā)一 QoS2:僅分發(fā)一 安 概 使用WebSocket作為網(wǎng)絡(luò) MQTT–MQTT使用WebSocket作為網(wǎng)絡(luò)傳輸層必須MUST,不能MUSTNOT,要求REQUIRED,將會SHALL,不會SHALLNOT,SHOULD,SHOULDNOT,RECOMMENDED,可以MAY,可選IETFRFC2119[RFC2119]網(wǎng)絡(luò)連接(Network4.2節(jié)。客戶端服務(wù)端訂閱主題名(Topic主題過濾器(Topic會話控制報(bào)文(MQTTControlBradner,S.,"KeywordsforuseinRFCstoIndicateRequirementLevels",BCP14,RFC2119,March\hYergeau,F.,"UTF-8,atransformationformatofISO10646",STD63,RFC3629,November\hDierks,T.andE.Rescorla,"TheTransportLayerSecurity(TLS)ProtocolVersion1.2",RFC5246,August\hFette,I.andA.Melnikov,"TheWebSocketProtocol",RFC6455,December\hTheUnicodeConsortium.TheUnicode\hPostel,J.TransmissionControlProtocol.STD7,IETFRFC793,September\hAdvancedEncryptionStandard(AES)(FIPSPUB\hDataEncryptionStandard\hSecurityRequirementsforCryptographicModules(FIPSPUB140-\h[IEEEIEEEStandardforLocalandmetropolitanareanetworks-SecureDevice\hISO/IEC29192-1:2012Informationtechnology--Securitytechniques--Lightweightcryptography--Part1:General\h[MQTTMQTTsupplementalpublication,MQTTandtheNISTFrameworkforImprovingCriticalInfrastructure\hMQTTV3.1Protocol\hImprovingCriticalInfrastructureCybersecurityExecutiveOrder\hNISTIR7628GuidelinesforSmartGridCyber\hNSASuiteB\hPCI-DSSPaymentCardIndustryDataSecurity\hLeech,M.,Ganis,M.,Lee,Y.,Kuris,R.,Koblas,D.,andL.Jones,"SOCKSProtocolVersion5",RFC1928,March1996.\hSermersheim,J.,Ed.,"LightweightDirectoryAccessProtocol(LDAP):TheProtocol",RFC4511,June\hSalowey,J.,Zhou,H.,Eronen,P.,andH.Tschofenig,"TransportLayerSecurity(TLS)SessionResumptionwithoutServer-SideState",RFC5077,January2008.\hCooper,D.,Santesson,S.,Farrell,S.,Boeyen,S.,Housley,R.,andW.Polk,"InternetX.509PublicKeyInfrastructureCertificateandCertificateRevocationList(CRL)Profile",RFC5280,May2008.\hEastlake3rd,D.,"TransportLayerSecurity(TLS)Extensions:ExtensionDefinitions",RFC6066,January\hHardt,D.,Ed.,"TheOAuth2.0AuthorizationFramework",RFC6749,October\hSantesson,S.,Myers,M.,Ankney,R.,Malpani,A.,Galperin,S.,andC.Adams,"X.509InternetPublicKeyInfrastructureOnlineCertificateStatusProtocol-OCSP",RFC6960,June2013.\hSarbanes-OxleyActof\hU.S.-EUSafe\hbytebytebytebytebyte3UTF-8編碼字符串中的字符數(shù)據(jù)必須Unicode[UnicodeRFC3629[RFC3629]中UTF-8格式。特別需要指出的是,這些數(shù)據(jù)不能U+D800U+DFFF之間的UTF-8字符的控制報(bào)文,它必須關(guān)閉網(wǎng)絡(luò)連接[MQTT-文,它必須[MQTT-1.5.3-2]。Unicode規(guī)范定義的保留字符(U+0FFFF)UTF-80XEF0xBB0xBFU+FEFF(零寬度非換行空白字符),無論它出現(xiàn)在字符串的什么位置,報(bào)文接收者都不能跳過或者剝離它[MQTT-1.5.3-3]。A??AU+2A6D4(它表示一個中日韓統(tǒng)一表意文B中的字符),這個字符串編碼如下:圖例1.2UTF-8byteMSBbyteLSBbyte‘A’bytebytebytebyteMQTTMQTT–圖例2.1MQTT-圖例2.2bytebyte-表格2.1QoS114[3-0]MQTT2.2標(biāo)志位。2.2中任何標(biāo)記為“保留”的標(biāo)志位,都是保留給以后使用的,必須設(shè)置為表格中列出的值[MQTT-2.2.2-1]。如果收到非法的標(biāo)志,接收者必須關(guān)閉網(wǎng)絡(luò)連接。有關(guān)錯誤處理的詳細(xì)信息見4.8[MQTT-表格2.2BitBitBitBitUsedinMQTT =控制報(bào)文的重復(fù)分發(fā)標(biāo)志 =PUBLISH報(bào)文的服務(wù)質(zhì)量等級RETAIN3=PUBLISH報(bào)文的保留標(biāo)志,剩余長度(RemainingLength)表示當(dāng)前報(bào)文剩余部分的字節(jié)數(shù),包括可變報(bào)頭和負(fù)載的數(shù)據(jù)。剩余長度1287128個數(shù)值和一個延續(xù)位(continuationbit)4個字節(jié)。64會被編碼為一個字節(jié),數(shù)值是64,十六進(jìn)制表示為0x40,。十進(jìn)制數(shù)字這允許應(yīng)用發(fā)送最大256MB(268,435,455大小的控制報(bào)文。這個數(shù)值在報(bào)文中的表示是:表格2.40127128(0x80,16383(0xFF,16384(0x80,0x80,2097151(0xFF,0xFF,2097152(0x80,0x80,0x80,268435455(0xFF,0xFF,0xFF,encodedByte=XMOD128X=XDIV128//iftherearemoredatatoencode,setthetopbitofthisbyteif(X>0)encodedByte=encodedByteOR128'output'encodedBytewhile(X>0)multiplier=value=0encodedByte='nextbytefromvalue+=(encodedByteAND127)*multipliermultiplier*=128if(multiplier>throwError(MalformedRemainingLength)while((encodedByteAND128)!=0)MQTT控制報(bào)文包含一個可變報(bào)頭部分。它在固定報(bào)頭和負(fù)載之間。可變報(bào)頭的內(nèi)容根據(jù)報(bào)文類型的不同而不同??勺儓?bào)頭的報(bào)文標(biāo)識符(PacketIdentifier)字段存在于在多個類型的報(bào)文里。圖例2.3bytebytePUBACK,PUBREC,PUBREL,PUBCOMP,SUBSCRIBE,SUBACK,UNSUBSCIBE,符(PacketIdentifier)[MQTT-2.3.1-1]??蛻舳嗣看伟l(fā)送一個新的這些類型的報(bào)文時都必須分配一個當(dāng)前[MQTT-2.3.1-2]。如果一個客戶端要重發(fā)這個特殊的控制報(bào)文,在隨后重發(fā)那個報(bào)文QoS1PUBLISHPUBACK,QoS2PUBLISHPUBCOMPSUBSCRIBE或PUBACKPUBREC,PUBREL報(bào)文必須PUBLISH[MQTT-2.3.1-6]。類似地,SUBACKUNSUBACK必須SUBSCRIBEUNSUBSCRIBE報(bào)文中使用的[MQTT-2.3.1-7]。需要(QoS需要(QoS0x1234PUBLISH報(bào)文。--PUBLISHPacketIdentifier=0x1234--PUBACKPacket載荷就是應(yīng)用消息。2.6–包含有效載荷的控制報(bào)文列出了需要有效載荷的控制報(bào)文。表格2.6MQTTCONNECT有效載荷包含一個或多個編碼的字段。包括客戶端的唯一標(biāo)識符,Will主題,Will消息,用戶名和密碼。除3.1CONNECTbyteReservedbyteCONNECT報(bào)文的可變報(bào)頭按下列次序包含四個字段:協(xié)議名(ProtocolName),協(xié)議級別(ProtocolLevel),連接標(biāo)志(ConnectFlags)和保持連接(KeepAlive)。圖例3.2byteMSBbyteLSBbytebytebytebyteMQTTUTF-8編碼的字符串。MQTT規(guī)范的后續(xù)版本不會改變這個字符串的偏移和于后一種情況,按照本規(guī)范,服務(wù)端不能CONNECT[MQTT-3.1.2-1]。圖例3.3ProtocolLevelbytebyte83.1.14(0x04)。如果發(fā)CONNECT[MQTT-3.1.2-2]。UserNameWillWillWillbyte如果清理會話(nessin)標(biāo)志被設(shè)置為,服務(wù)端必須基于當(dāng)前會話(使用客戶端標(biāo)識符識別)的狀態(tài)恢復(fù)與客戶端的通信。如果沒有與這個客戶端標(biāo)識符關(guān)聯(lián)的會話,服務(wù)端必須創(chuàng)建一個新的會話。在連接斷開之后,當(dāng)連接斷開后,客戶端和服務(wù)端必須保存會話信息[MTT-2-。當(dāng)清理會話標(biāo)志為0的會話連接斷開之后,服務(wù)端必須將之后的QoS1和QoS2級別的消息保存為會話狀態(tài)的一部分,如果這些消息匹配斷開連接時客戶端的任何訂閱\hMQTT--]。服務(wù)端也可以保存滿足相同條件的QoS0級別的消息。如果清理會話(CleanSession)標(biāo)志被設(shè)置為1,客戶端和服務(wù)端必須丟棄之前的任何會話并開始一個新QoS1QoS24.1節(jié)。1重復(fù)請求連接,直到連接成01,并且不交替使用兩種值。這個選擇取0的客戶端會收到所有在它連接斷開期間發(fā)QoS1QoS2QoS1或QoS20。0MQTT會話狀態(tài)。如果打0最后再連接一次,然后斷開連接。遺囑標(biāo)志(WillFlag)1,表示如果連接請求被接受了,遺囑(WillMessage)消息必須被存儲在DISCONNECT報(bào)文時刪除了這個遺囑消息[MQTT-3.1.2-8]。1,連接標(biāo)志中的WillQoSWillRetain字段會被服務(wù)端用到,同時有效載荷中必須包含WillTopic和WillMessage[MQTT-3.1.2-9]。[MQTT-3.1.2-10]。0,連接標(biāo)志中的WillQoSWillRetain字段必須0,并且有效載荷中不能包含WillTopic和WillMessage[MQTT-3.1.2-11]。服務(wù)端應(yīng)該迅速發(fā)布遺囑消息。在關(guān)機(jī)或故障的情況下,服務(wù)端可以推遲遺囑消息的發(fā)布直到之后的重啟。如果發(fā)生了這種情況,在服務(wù)器故障和遺囑消息被發(fā)布之間可能會有一個延遲。遺囑)0,遺囑保留(WillRetain)標(biāo)志也必須0[MQTT-3.1.2-15]。1:如果用戶名(UserName)0,有效載荷中不能[MQTT-3.1.2-18]。0,密碼標(biāo)志也必須0[MQTT-3.1.2-22]。圖例3.5byteKeepAlivebyteKeepAlive保持連接(plve)是一個以秒為單位的時間間隔,表示為一個6位的字,它是指在客戶端傳輸完成一個控制報(bào)文的時刻到發(fā)送下一個報(bào)文的時刻,兩者之間允許空閑的最大時間間隔??蛻舳素?fù)責(zé)保證控制報(bào)文發(fā)送的時間間隔不超過保持連接的值。如果沒有任何其它的控制報(bào)文可以發(fā)送,客戶端必須發(fā)送一個INGRQ報(bào)文[MQTT-2-。PINGREQPINGRESP報(bào)文判斷網(wǎng)如果保持連接的值非零,并且服務(wù)端在一點(diǎn)五倍的保持連接時間內(nèi)沒有收到客戶端的控制報(bào)文,它必須斷開客戶端的網(wǎng)絡(luò)連接,認(rèn)為網(wǎng)絡(luò)連接已斷開[MQTT-31.-。PINGREQPINGRESP報(bào)文,它應(yīng)該關(guān)閉到服務(wù)保持連接的值為零表示關(guān)閉保持連接功能。這意味著,服務(wù)端不需要因?yàn)榭蛻舳瞬换钴S而斷開連接。注意:不管保持連接的值是多少,任何時候,只要服務(wù)端認(rèn)為客戶端是不活躍或無響應(yīng)的,可以斷開客戶端的連接。圖例3.6byteLengthMSBbyteLengthLSBbytebytebytebytebyteLevel4)byteUserNameFlag1)用戶名標(biāo)志PasswordFlag(1)密碼標(biāo)志W(wǎng)illRetain(0)Will保留標(biāo)志W(wǎng)illQoS(01)Will服務(wù)質(zhì)量WillFlag(1)Will標(biāo)志CleanSession1)Reserved(0)byteMSBbyteLSBCONNECT報(bào)文的有效載荷(ald)包含一個或多個以長度為前綴的字段,可變報(bào)頭中的標(biāo)志決定是否包含這些字段。如果包含的話,必須按這個順序出現(xiàn):客戶端標(biāo)識符,遺囑主題,遺囑消息,用戶名,密碼[MQTT-3-。服務(wù)端使用客戶端標(biāo)識符(ClientId)識別客戶端。連接服務(wù)端的每個客戶端都有唯一的客戶端標(biāo)識符(ClientId)ClientIdMQTT會話相關(guān)的狀態(tài)[MQTT-3.1.3-(ClientId必須存在而且必須CONNECT[MQTT-3.1.3-3]??蛻舳藰?biāo)識符必須1.5.3UTF-8編碼字符串[MQTT-3.1.3-4]。(ClientId)。服務(wù)端可以(ClientId,如果這樣做了,服務(wù)端必須將這看作特CONNECT[MQTT-3.1.3-6]合格)CONNACKCONNECT報(bào)文,然后關(guān)閉網(wǎng)絡(luò)連接[MQTT-3.1.3-8]。CONNECT報(bào)文,然后關(guān)閉網(wǎng)絡(luò)連接[MQTT-3.1.3-9]。ClientId0時應(yīng)該1,有效載荷的下一個字段是遺囑主題(WillTopic)。遺囑主題必須1.5.3節(jié)定UTF-8編碼字符串[MQTT-3.1.3-10]。1,有效載荷的下一個字段是遺囑消息。遺囑消息定義了將被發(fā)布到遺囑主題的應(yīng)編碼字符串圖例3.7bytebytebyte3MQTT3.1.1,那么它按照下面的方法驗(yàn)證連接請求。CONNACK[MQTT-3.1.4-1]3.2節(jié)的描述,它應(yīng)該發(fā)送一個適當(dāng)?shù)?、返回碼非零的CONNACK響應(yīng),并且必須關(guān)閉這個網(wǎng)絡(luò)連接。ClientId表明客戶端已經(jīng)連接到這個服務(wù)端,那么服務(wù)端必須斷開原有的客戶端連接報(bào)文之后發(fā)送的任何數(shù)據(jù)CONNACK須CONNACK[MQTT-3.2.0-1]。byteReservedbyteReservedbyte剩余長度ReservedbyteReservedbytebyte0(SP)(SessionPresent)標(biāo)志。對應(yīng)客戶端的會話狀態(tài)。如果服務(wù)端已經(jīng)保存了會話狀態(tài),它必須CONNACK報(bào)文中的當(dāng)前會話標(biāo)志設(shè)1[MQTT-3.2.2-2]。如果服務(wù)端沒有已保存的會話狀態(tài),它必須CONNACK報(bào)文中的當(dāng)前會話設(shè)置0CONNACK0[MQTT-3.2.2-3]。1,再次連接,然后再次CONNACK報(bào)文,它必須0[MQTT-3.1–連接返回碼的值中列出。如果服務(wù)端收到一個合CONNECT報(bào)文,但出于某些原因無法處理它,服務(wù)端應(yīng)該嘗試發(fā)送一個包含非零返回碼(表格中的某一個)CONNACKCONNACK報(bào)文,那么它必須關(guān)閉網(wǎng)絡(luò)連接[MQTT-3.2.2-5].。表格3.1文[MQTT-3.2.2-6]。PUBLISHbytebytebyte1,表示這可能是一個早前報(bào)文請求的重發(fā)。PUBLISH報(bào)文時,必須DUP1[MQTT-3.3.1.-1].QoS0的消息,DUP標(biāo)志必須0[MQTT-3.3.1-2]。PUBLISH報(bào)文給訂閱者時,收到(入站)PUBLISHDUP標(biāo)志的值不會被傳播。發(fā)送(出站)PUBLISH報(bào)文與收到(入站)PUBLISHDUP標(biāo)志是獨(dú)立設(shè)置的,它的值必須單獨(dú)的根據(jù)發(fā)送(出站)PUBLISH報(bào)文是否是一個重發(fā)來確定[MQTT-3.3.1-3]。2.3.1節(jié)提供了有關(guān)報(bào)文標(biāo)識符的更多信息。-表格3.2QoSBitBit報(bào)文,它必須[MQTT-3.3.1-4]PUBLISH報(bào)文的保留(RETAIN)1,服務(wù)端必須存儲這個應(yīng)用消息和它的服務(wù)質(zhì)量等級(QoS),以便它可以被分發(fā)給未來的主題名匹配的訂閱者[MQTT-3.3.1-5]。一個新的訂閱建立時,對每個匹配的主題名,如果存在最近保留的消息,它必須被發(fā)送給這個訂閱者[MQTT-3.3.1-6]。如果服務(wù)端收到一條保留(RETAIN)1QoS0消息,它必須丟棄之前為那個主題保留的任何消息。它應(yīng)該QoS0消息當(dāng)作那個主題的新保留消息,但是任何時候都可以—1[MQTT-3.3.1-8]PUBLISH報(bào)文發(fā)送給客戶端是因?yàn)槠ヅ湟粋€已建立的訂閱時,服務(wù)端必須0,不管它收到的這個消息中保留標(biāo)志的值是多少[MQTT-3.3.1-9]。保留標(biāo)志為1且有效載荷為零字節(jié)的ULIH報(bào)文會被服務(wù)端當(dāng)作正常消息處理,它會被發(fā)送給訂閱主題匹配的客戶端。此外,同一個主題下任何現(xiàn)存的保留消息必須被移除,因此這個主題之后的任何訂閱者都不會收到一個保留消息[MQTT-1-10]。當(dāng)作正常意思是現(xiàn)存的客戶端收到的消息中保留標(biāo)志未被設(shè)置。服務(wù)端不能存儲零字節(jié)的保留消息[MQTT-1-。PUBLISH0,服務(wù)端不能存儲這個消息也不能移除或替換任何現(xiàn)存的保留消息[MQTT-3.3.1-12]。包含通配符QoS12時,報(bào)文標(biāo)識符(PacketIdentifier)PUBLISH報(bào)文中。2.3.13.11PUBLISH報(bào)文可變報(bào)頭非規(guī)范示例3.3PUBLISH報(bào)文非規(guī)范示例中簡要描PUBLISH報(bào)文的可變報(bào)頭。表格3.3PUBLISH圖例3.11PUBLISHTopicNamebyteLengthMSBbyteLengthLSBbyte‘a(chǎn)’byte‘/’byte‘b’byteMSBbyteLSBPUBLISH報(bào)文是合法的。PUBLISH報(bào)文的接收者必須PUBLISHQoS[MQTT-表格3.4PUBLISHQoSQoSQoSPUBLISH報(bào)文發(fā)送應(yīng)用消息給每一個訂閱匹配的客戶端??蛻舳耸褂脦ㄅ浞闹黝}過濾器請求訂閱時,客戶端的訂閱可能會重復(fù),因此發(fā)布的消息可能會匹配多個過濾器。對于這種情況,服務(wù)端必須將消息分發(fā)給所有訂閱匹配的QoS等級最高的客戶端[MTT-5-。服務(wù)端之后可以按照訂閱的QoS等級,分發(fā)消息的副本給每一個匹配的訂閱者。PUBACK圖例3.12PUBACKbytebytebytebytebytePUBREC發(fā)布收到(QoS2,第一步圖例3.14PUBRECbyteMQTTebyte圖例3.15PUBRECbytebytePUBREL發(fā)布釋放(QoS2,第二步圖例3.16PUBRELbytebyte都當(dāng)做是不合法的并關(guān)閉網(wǎng)絡(luò)連接[MQTT-3.6.1-1]。bytebytebytePUBCOMP發(fā)布完成(QoS2,第三步圖例3.18PUBCOMPbytebytebytebytebyteSUBSCRIBESUBSCRIBE報(bào)文用于創(chuàng)建一個或多個訂閱。每個訂閱注冊客戶端關(guān)心的一個或多個報(bào)文也(為每個訂閱)QoS等級,服務(wù)端根據(jù)這個發(fā)送應(yīng)用消息給客戶端。圖例3.20SUBSCRIBEbytebyte[MQTT-3.8.1-1]。圖例3.21報(bào)文標(biāo)識符等于10byteMSBbyteLSB報(bào)文有效載荷中的主題過濾器列表必須1.5.3UTF-8字符串[MQTT-3.8.3-1]。服務(wù)端應(yīng)該支持包含通配符(4.7.1節(jié)定義的)的主題過濾器。如果服務(wù)端選擇不支持包含通配符的主題過濾器,必須拒絕[MQTT-3.8.3-2]報(bào)文是違反協(xié)議的QoS等級組合是連續(xù)地打包。圖例3.22SUBSCRIBEbytebytebytes主題過濾器(Topicbyte當(dāng)前版本的協(xié)議沒有用到服務(wù)質(zhì)量要求(RequestedQoS)字節(jié)的高六位。如果有效載荷中的任何位是非––圖例3.23byteLengthMSBbyteLengthLSBbyte‘a(chǎn)’byte‘/’byte‘b’bytebyteLengthMSBbyteLengthLSBbyte‘c’byte‘/’byte‘d’byte報(bào)文響應(yīng)SUBACK報(bào)文必須SUBSCRIBE報(bào)文有相同的報(bào)文標(biāo)識符[MQTT-3.8.4-2]。SUBSCRIBE報(bào)文,報(bào)文的主題過濾器與一個現(xiàn)存訂閱的主題過濾器相同,那么必須中斷\hSUBACKQoS等級都必須包含一個返回碼。這個返回\hQoSQoS必須是原始發(fā)布消息的QoSQoSQoS1QoS0,允許服\hQoS1,那么匹配這個過1再分發(fā)給客戶端,因此客戶端可能會收到重復(fù)的消息副本。QoS等級1的消息在傳輸給客戶端時可能會丟失或重復(fù)。QoS到更適合它的等級。SUBACK圖例3.24SUBACKbytebyteSUBSCRIBE報(bào)文的報(bào)文標(biāo)識符。3.25SUBACK報(bào)文可變報(bào)頭描述了可圖例3.25SUBACKbytebyte碼的順序必須SUBSCRIBE報(bào)文中主題過濾器的順序相同[MQTT-3.9.3-1]。bytebyte0x00QoS0x01QoS0x02QoS20x80-Failure失敗0x000x01,0x02,0x80SUBACK返回碼是保留的,不能[MQTT-3.9.3-2]--Success-MaximumQoSSuccessSuccess-MaximumQoSSuccess-MaximumQoS3.27byteSuccess-MaximumQoSbyteSuccess-MaximumQoSbyteUNSUBSCRIBE圖例3.28UNSUBSCRIBEbytebyte它的值都是不合法的并關(guān)閉網(wǎng)絡(luò)連接[MQTT-3.10.1-1]。bytebytebyteUNSUBSCRIBE報(bào)文的有效載荷包含客戶端想要取消訂閱的主題過濾器列表。UNSUBSCRIBE報(bào)文中的主題過濾器必須1.5.3UTF-8編碼字符串[MQTT-3.10.3-1]。UNSUBSCRIBE報(bào)文的有效載荷必須UNSUBSCRIBE報(bào)文是違反協(xié)議的[MQTT-3.10.3-2]4.8節(jié)。--表格3.7-有效載荷非規(guī)范示例3.30byteLengthMSBbyteLengthLSBbyte‘a(chǎn)’byte‘/’byte‘b’byteLengthMSBbyteLengthLSBbyte‘c’byte‘/’byte‘d’[MQTT-3.10.4-1]。它必須QoS1QoS2[MQTT-3.10.4-3]服務(wù)端必須UNSUBACKUNSUBSCRIBE請求。UNSUBACK報(bào)文必須包含和UNSUBSCRIBE[MQTT-3.10.4-4]。即使沒有刪除任何主題訂閱,服務(wù)端也必須發(fā)SUBACK響應(yīng)[MQTT-3.10.4-5]。UNSUBSCRIBE報(bào)文,它必須如同收到了一系列的多個UNSUBSCRIBEUNSUBACK報(bào)文外。UNSUBACK圖例3.31UNSUBACKbytebytebytebytebytePINGREQ圖例3.33PINGREQbytebyte報(bào)文PINGRESP圖例3.34PINGRESPbytebyteDISCONNECT圖例3.35DISCONNECTbytebyte必須[MQTT-3.14.4-1]通過那個網(wǎng)絡(luò)連接再發(fā)送任何控制報(bào)文節(jié)[MQTT-4.1.0-1]。會話必須[MQTT-4.1.0-2]。)QoS等級可能是不同的。QoS0:報(bào)文PUBLISHQoS0,PUBLISHQoS0,QoS1:服務(wù)質(zhì)量確保消息至少送達(dá)一次。QoS1PUBLISH報(bào)文的可變報(bào)頭中包含一個報(bào)文標(biāo)識符,需要QoS1的分發(fā)協(xié)議,接收者DUP標(biāo)志的值。圖例4.2QoS1 QoS2:PUBREC報(bào)文后必須PUBREL報(bào)文。PUBRELPUBLISH報(bào)文對于QoS2的分發(fā)協(xié)議,接收者PUBLISH報(bào)文。在這種情況下,它不能重復(fù)分發(fā)消息給任何后續(xù)的接收者。圖例4.3QoS21。4.3QoS2協(xié)議流程圖,非規(guī)范示例QoS2等級消息的兩種處理方法。他們QoS流程的可靠性。PUBLISH報(bào)文(QoS>0)PUBREL[MQTT-4.4.0-1]。這是唯一要求客戶端或4.7節(jié)[MQTT-4.5.0-1]。正常情況下,客戶端收到發(fā)送給它的訂閱的消息??蛻舳艘部赡苁盏讲皇桥c它的訂閱精確匹配的消息。如果服務(wù)端自動給客戶端分配了一個訂閱,可能發(fā)生這種情況。正在處理UUBCRIBE請求時也可能收到消息??蛻舳吮仨毎凑湛捎玫姆?wù)質(zhì)量(Qo)規(guī)則確認(rèn)它收到的任何ULIH報(bào)文,不管它選擇是否處理報(bào)文包含的應(yīng)用消息[MQTT-0-。題當(dāng)作是無序的[MQTT-4.6.0-5]。PUBLISH報(bào)文給消費(fèi)者(QoS)[MQTT-4.6.0-6]。QoS1發(fā)布和訂閱的消息流,訂閱者按照消息發(fā)布時的順序收到每條1,2,3,41,2,3,2,3,4。不發(fā)送后面的那條消息),QoS11,2,3,3,41,2,3,2,3,4(in-flightwindow)1QoS等級的消息,它們的順序也被保topiclevel。斜杠(U+2F)用于分割主題的每個層級,為主題名提供一個分層結(jié)構(gòu)。當(dāng)客戶端訂閱指定的主題過濾器包含兩種通配符時,主題層級分隔符就很有用了。主題層級分隔符可以出現(xiàn)在主題過濾器或主題名字的任何位置。相鄰的主題層次分隔符表示一個零長度的主題層級。數(shù)字標(biāo)志(‘#’U+0023)是用于匹配主題中任意層級的通配符。多層通配符表示它的父級和任意數(shù)量的子過濾器的最后一個字符[MQTT-4.7.1-2]。#U+002B[MQTT-4.7.1-3]??梢栽谥黝}過濾器中的多個層級中使用它,也可以和多層通配符一起使用?!皊port/tennis/+”“sport/tennis/player1”“sport/tennis/player2”,但是不匹配“sport/tennis/player1/ranking“sport不匹配“sport”“sport/”。/#”“sport“/finance”“+”服務(wù)端不能$(#或[MQTT-4.7.2-1]。服務(wù)端應(yīng)該阻止$開頭的主題名用作其他目的。/””/#”/”/+”“$SYS$開頭主題的消息,它需要同時訂閱“#”和““$SYS/#”。“/”“/”)]Unicode字符。””“Accountspayable”“/finance”“finance”[MQTT-4.8.0-1]??蛻舳嘶蚍?wù)端實(shí)現(xiàn)可能會遇到瞬時錯誤(TransientError)(例如內(nèi)部緩沖區(qū)滿了的情況)導(dǎo)致無法成功MQTT報(bào)文。作為傳輸層協(xié)議,MQTTTLS[RFC5246]是[USEUSAFEHARB]),行業(yè)標(biāo)準(zhǔn)([PCIDSS]),監(jiān)管方面的考慮(例如薩班斯-[SARBANES])等問題。MQTTNIST[NISTCSF],第三方支付行業(yè)數(shù)據(jù)安[PCIDSS][FIPS1402]NSAB[NSAB]。MQTT(MQTTandtheNISTFrameworkforImprovingCriticalInfrastructureCybersecurity[MQTTNIST])NIST[NISTCSF]MQTT的指導(dǎo)。使用[AES]數(shù)據(jù)加密標(biāo)準(zhǔn)[DES]CONNECT報(bào)文包含用戶名和密碼字段。實(shí)現(xiàn)可以決定如何使用這些字段的內(nèi)容。實(shí)現(xiàn)者可以提供自己的LDAP[RFC4511]OAuth[RFC6749],還可以利用操作系統(tǒng)擊和重放攻擊的風(fēng)險(xiǎn)。5.4.5節(jié)介紹了確保數(shù)據(jù)私密的方法。TLS[RFC5246]SSL證書驗(yàn)證客戶端的身份。TLS[RFC5246]SSLIP多域名MQTTRFC6066[RFC6066]3TLSSNI擴(kuò)展。SNI允許客戶端TLS[RFC5246]TLSNULL,那么它TLS[RFC5246]TLS[RFC5246]SSL證TLS[RFC5246]的客戶端和服務(wù)端實(shí)現(xiàn),可以選擇提供檢查證書吊銷列表(CRLs[RFC5280]和在線證書狀態(tài)協(xié)議(OSCP)[RFC6960]的功能,拒絕使用被吊銷的證書。沒有在未授權(quán)的地區(qū)使用。IEEE[IEEE802.1AR]就是用于實(shí)現(xiàn)這個機(jī)制的一個標(biāo)準(zhǔn),它使IP地址或客戶端標(biāo)識符實(shí)現(xiàn)一個動態(tài)黑名單列表。TLS[RFC5246]時應(yīng)該允許重新協(xié)商會話以確認(rèn)新的加密參數(shù)(替換會話密TLS[RFC5077]TLS[RFC5246]的成SOCKSSOCKSv5[RFC1928]MQTT實(shí)現(xiàn)可以利用安全隧道(SSH)SOCKSSOCKS時,它們應(yīng)該同時支持匿SOCKSSOCKS可能使用明文認(rèn)證,MQTT服務(wù)器。使用安全傳輸配置時,MQTTTLS[RFC5246]的物理或虛擬網(wǎng)絡(luò)上,它提供了身份認(rèn)證,使用內(nèi)置的用戶名和密碼字段,TLS[RFC5246]客戶端身份認(rèn)證可被用于(或者代替)MQTT客戶端認(rèn)[NIST7628]NISTIR7628[FIPS1402](FIPSPUB140-2[NSAB]NSAWebSocketMQTT在WebSocket[RFC6455]連接上傳輸,必須MQTT控制報(bào)文必須使用WebSocket二進(jìn)制數(shù)據(jù)幀發(fā)送。如果收到任何其它類型的數(shù)據(jù)幀,接收者必須關(guān)閉網(wǎng)絡(luò)連接[MQTT-6.0.0-1]。客戶端必須mqtt包含在它提供的WebSocket[MQTT-6.0.0-3]服務(wù)端選擇和返回的WebSocket子協(xié)議名必須mqtt[MQTT-6.0.0-4IANAIANA在WebSocketWebSocketMQTT圖例6.1IANAWebSocket\hMQTTMQTT服務(wù)端的要求[MQTT-7.0.0-1]。[MQTT-MQTT–MQTT–(MQTT的網(wǎng)絡(luò)層是]MQTT–MQTT(MQTT的網(wǎng)絡(luò)層是傳輸協(xié)議??蛻舳丝梢?.2[MQTT-7.1.2-1要求的傳輸附錄B強(qiáng)制性規(guī)范聲明(非規(guī)范UTF-8編碼字符串中的字符數(shù)據(jù)必須Unicode[Unicode]定義的和在RFC3629[RFC3629]UTF-8格式。特別需要指出的是,這些數(shù)UTF-8字符的控制報(bào)文,它必須關(guān)閉網(wǎng)絡(luò)連接。U+0000的控制報(bào)文,它必須關(guān)閉網(wǎng)絡(luò)連接。UTF-80XEF0xBB0xBFU+FEFF(零寬度非換行空白字16位報(bào)文標(biāo)識符(PacketIdentifier。PUBACKPUBREC,PUBREL報(bào)文必須PUBLISH報(bào)文相同的]CONNECT報(bào)文當(dāng)作協(xié)議違規(guī)處理并斷開客戶端的連接。CONNECT報(bào)文。對于后一種情況,按照本規(guī)范,服務(wù)端不能繼續(xù)處理CONNECT報(bào)文。議級別)CONNACKCONNECT報(bào)文,然后斷開客戶端的連接。0必須斷開客戶端連接。0的會話連接斷開之后,服務(wù)端必須QoS1QoS2遺囑標(biāo)志(WillFlag)1,表示如果連接請求被接受了,遺囑(Will閉時,服務(wù)端必須DISCONNECT報(bào)文時刪1,連接標(biāo)志中的WillQoSWillRetain字段會被服務(wù)端用到,同時有效載荷中必須包含WillTopic和WillMessage字段。0,連接標(biāo)志中的WillQoSWillReta

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論