版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
概 術(shù) 標(biāo) CONNECT–連接服務(wù) 響 CONNACK–確認(rèn)連接請(qǐng) PUBLISH–發(fā)布消 響 動(dòng) PUBACK–發(fā)布確 動(dòng) PUBREC–發(fā)布收到(QoS2,第一步 動(dòng) PUBREL–發(fā)布釋放(QoS2,第二步 動(dòng) PUBCOMP–發(fā)布完成(QoS2,第三步 動(dòng) SUBSCRIBE-訂閱主 響 SUBACK–訂閱確 響 UNSUBACK–取消訂閱確 PINGREQ–心跳請(qǐng) 響 PINGRESP–心跳響 DISCONNECT–斷開(kāi)連 響 QoS0:最多分發(fā)一 QoS1:至少分發(fā)一 QoS2:僅分發(fā)一 安 概 使用WebSocket作為網(wǎng)絡(luò) MQTT–MQTT使用WebSocket作為網(wǎng)絡(luò)傳輸層必須MUST,不能MUSTNOT,要求REQUIRED,將會(huì)SHALL,不會(huì)SHALLNOT,SHOULD,SHOULDNOT,RECOMMENDED,可以MAY,可選IETFRFC2119[RFC2119]網(wǎng)絡(luò)連接(Network4.2節(jié)??蛻舳朔?wù)端訂閱主題名(Topic主題過(guò)濾器(Topic會(huì)話控制報(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(零寬度非換行空白字符),無(wú)論它出現(xiàn)在字符串的什么位置,報(bào)文接收者都不能跳過(guò)或者剝離它[MQTT-1.5.3-3]。A??AU+2A6D4(它表示一個(gè)中日韓統(tǒng)一表意文B中的字符),這個(gè)字符串編碼如下:圖例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)錯(cuò)誤處理的詳細(xì)信息見(jiàn)4.8[MQTT-表格2.2BitBitBitBitUsedinMQTT =控制報(bào)文的重復(fù)分發(fā)標(biāo)志 =PUBLISH報(bào)文的服務(wù)質(zhì)量等級(jí)RETAIN3=PUBLISH報(bào)文的保留標(biāo)志,剩余長(zhǎng)度(RemainingLength)表示當(dāng)前報(bào)文剩余部分的字節(jié)數(shù),包括可變報(bào)頭和負(fù)載的數(shù)據(jù)。剩余長(zhǎng)度1287128個(gè)數(shù)值和一個(gè)延續(xù)位(continuationbit)4個(gè)字節(jié)。64會(huì)被編碼為一個(gè)字節(jié),數(shù)值是64,十六進(jìn)制表示為0x40,。十進(jìn)制數(shù)字這允許應(yīng)用發(fā)送最大256MB(268,435,455大小的控制報(bào)文。這個(gè)數(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)文包含一個(gè)可變報(bào)頭部分。它在固定報(bào)頭和負(fù)載之間。可變報(bào)頭的內(nèi)容根據(jù)報(bào)文類型的不同而不同??勺儓?bào)頭的報(bào)文標(biāo)識(shí)符(PacketIdentifier)字段存在于在多個(gè)類型的報(bào)文里。圖例2.3bytebytePUBACK,PUBREC,PUBREL,PUBCOMP,SUBSCRIBE,SUBACK,UNSUBSCIBE,符(PacketIdentifier)[MQTT-2.3.1-1]??蛻舳嗣看伟l(fā)送一個(gè)新的這些類型的報(bào)文時(shí)都必須分配一個(gè)當(dāng)前[MQTT-2.3.1-2]。如果一個(gè)客戶端要重發(fā)這個(gè)特殊的控制報(bào)文,在隨后重發(fā)那個(gè)報(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有效載荷包含一個(gè)或多個(gè)編碼的字段。包括客戶端的唯一標(biāo)識(shí)符,Will主題,Will消息,用戶名和密碼。除3.1CONNECTbyteReservedbyteCONNECT報(bào)文的可變報(bào)頭按下列次序包含四個(gè)字段:協(xié)議名(ProtocolName),協(xié)議級(jí)別(ProtocolLevel),連接標(biāo)志(ConnectFlags)和保持連接(KeepAlive)。圖例3.2byteMSBbyteLSBbytebytebytebyteMQTTUTF-8編碼的字符串。MQTT規(guī)范的后續(xù)版本不會(huì)改變這個(gè)字符串的偏移和于后一種情況,按照本規(guī)范,服務(wù)端不能CONNECT[MQTT-3.1.2-1]。圖例3.3ProtocolLevelbytebyte83.1.14(0x04)。如果發(fā)CONNECT[MQTT-3.1.2-2]。UserNameWillWillWillbyte如果清理會(huì)話(nessin)標(biāo)志被設(shè)置為,服務(wù)端必須基于當(dāng)前會(huì)話(使用客戶端標(biāo)識(shí)符識(shí)別)的狀態(tài)恢復(fù)與客戶端的通信。如果沒(méi)有與這個(gè)客戶端標(biāo)識(shí)符關(guān)聯(lián)的會(huì)話,服務(wù)端必須創(chuàng)建一個(gè)新的會(huì)話。在連接斷開(kāi)之后,當(dāng)連接斷開(kāi)后,客戶端和服務(wù)端必須保存會(huì)話信息[MTT-2-。當(dāng)清理會(huì)話標(biāo)志為0的會(huì)話連接斷開(kāi)之后,服務(wù)端必須將之后的QoS1和QoS2級(jí)別的消息保存為會(huì)話狀態(tài)的一部分,如果這些消息匹配斷開(kāi)連接時(shí)客戶端的任何訂閱\hMQTT--]。服務(wù)端也可以保存滿足相同條件的QoS0級(jí)別的消息。如果清理會(huì)話(CleanSession)標(biāo)志被設(shè)置為1,客戶端和服務(wù)端必須丟棄之前的任何會(huì)話并開(kāi)始一個(gè)新QoS1QoS24.1節(jié)。1重復(fù)請(qǐng)求連接,直到連接成01,并且不交替使用兩種值。這個(gè)選擇取0的客戶端會(huì)收到所有在它連接斷開(kāi)期間發(fā)QoS1QoS2QoS1或QoS20。0MQTT會(huì)話狀態(tài)。如果打0最后再連接一次,然后斷開(kāi)連接。遺囑標(biāo)志(WillFlag)1,表示如果連接請(qǐng)求被接受了,遺囑(WillMessage)消息必須被存儲(chǔ)在DISCONNECT報(bào)文時(shí)刪除了這個(gè)遺囑消息[MQTT-3.1.2-8]。1,連接標(biāo)志中的WillQoSWillRetain字段會(huì)被服務(wù)端用到,同時(shí)有效載荷中必須包含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ā)布之間可能會(huì)有一個(gè)延遲。遺囑)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)是一個(gè)以秒為單位的時(shí)間間隔,表示為一個(gè)6位的字,它是指在客戶端傳輸完成一個(gè)控制報(bào)文的時(shí)刻到發(fā)送下一個(gè)報(bào)文的時(shí)刻,兩者之間允許空閑的最大時(shí)間間隔??蛻舳素?fù)責(zé)保證控制報(bào)文發(fā)送的時(shí)間間隔不超過(guò)保持連接的值。如果沒(méi)有任何其它的控制報(bào)文可以發(fā)送,客戶端必須發(fā)送一個(gè)INGRQ報(bào)文[MQTT-2-。PINGREQPINGRESP報(bào)文判斷網(wǎng)如果保持連接的值非零,并且服務(wù)端在一點(diǎn)五倍的保持連接時(shí)間內(nèi)沒(méi)有收到客戶端的控制報(bào)文,它必須斷開(kāi)客戶端的網(wǎng)絡(luò)連接,認(rèn)為網(wǎng)絡(luò)連接已斷開(kāi)[MQTT-31.-。PINGREQPINGRESP報(bào)文,它應(yīng)該關(guān)閉到服務(wù)保持連接的值為零表示關(guān)閉保持連接功能。這意味著,服務(wù)端不需要因?yàn)榭蛻舳瞬换钴S而斷開(kāi)連接。注意:不管保持連接的值是多少,任何時(shí)候,只要服務(wù)端認(rèn)為客戶端是不活躍或無(wú)響應(yīng)的,可以斷開(kāi)客戶端的連接。圖例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)包含一個(gè)或多個(gè)以長(zhǎng)度為前綴的字段,可變報(bào)頭中的標(biāo)志決定是否包含這些字段。如果包含的話,必須按這個(gè)順序出現(xiàn):客戶端標(biāo)識(shí)符,遺囑主題,遺囑消息,用戶名,密碼[MQTT-3-。服務(wù)端使用客戶端標(biāo)識(shí)符(ClientId)識(shí)別客戶端。連接服務(wù)端的每個(gè)客戶端都有唯一的客戶端標(biāo)識(shí)符(ClientId)ClientIdMQTT會(huì)話相關(guān)的狀態(tài)[MQTT-3.1.3-(ClientId必須存在而且必須CONNECT[MQTT-3.1.3-3]??蛻舳藰?biāo)識(shí)符必須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時(shí)應(yīng)該1,有效載荷的下一個(gè)字段是遺囑主題(WillTopic)。遺囑主題必須1.5.3節(jié)定UTF-8編碼字符串[MQTT-3.1.3-10]。1,有效載荷的下一個(gè)字段是遺囑消息。遺囑消息定義了將被發(fā)布到遺囑主題的應(yīng)編碼字符串圖例3.7bytebytebyte3MQTT3.1.1,那么它按照下面的方法驗(yàn)證連接請(qǐng)求。CONNACK[MQTT-3.1.4-1]3.2節(jié)的描述,它應(yīng)該發(fā)送一個(gè)適當(dāng)?shù)?、返回碼非零的CONNACK響應(yīng),并且必須關(guān)閉這個(gè)網(wǎng)絡(luò)連接。ClientId表明客戶端已經(jīng)連接到這個(gè)服務(wù)端,那么服務(wù)端必須斷開(kāi)原有的客戶端連接報(bào)文之后發(fā)送的任何數(shù)據(jù)CONNACK須CONNACK[MQTT-3.2.0-1]。byteReservedbyteReservedbyte剩余長(zhǎng)度ReservedbyteReservedbytebyte0(SP)(SessionPresent)標(biāo)志。對(duì)應(yīng)客戶端的會(huì)話狀態(tài)。如果服務(wù)端已經(jīng)保存了會(huì)話狀態(tài),它必須CONNACK報(bào)文中的當(dāng)前會(huì)話標(biāo)志設(shè)1[MQTT-3.2.2-2]。如果服務(wù)端沒(méi)有已保存的會(huì)話狀態(tài),它必須CONNACK報(bào)文中的當(dāng)前會(huì)話設(shè)置0CONNACK0[MQTT-3.2.2-3]。1,再次連接,然后再次CONNACK報(bào)文,它必須0[MQTT-3.1–連接返回碼的值中列出。如果服務(wù)端收到一個(gè)合CONNECT報(bào)文,但出于某些原因無(wú)法處理它,服務(wù)端應(yīng)該嘗試發(fā)送一個(gè)包含非零返回碼(表格中的某一個(gè))CONNACKCONNACK報(bào)文,那么它必須關(guān)閉網(wǎng)絡(luò)連接[MQTT-3.2.2-5].。表格3.1文[MQTT-3.2.2-6]。PUBLISHbytebytebyte1,表示這可能是一個(gè)早前報(bào)文請(qǐng)求的重發(fā)。PUBLISH報(bào)文時(shí),必須DUP1[MQTT-3.3.1.-1].QoS0的消息,DUP標(biāo)志必須0[MQTT-3.3.1-2]。PUBLISH報(bào)文給訂閱者時(shí),收到(入站)PUBLISHDUP標(biāo)志的值不會(huì)被傳播。發(fā)送(出站)PUBLISH報(bào)文與收到(入站)PUBLISHDUP標(biāo)志是獨(dú)立設(shè)置的,它的值必須單獨(dú)的根據(jù)發(fā)送(出站)PUBLISH報(bào)文是否是一個(gè)重發(fā)來(lái)確定[MQTT-3.3.1-3]。2.3.1節(jié)提供了有關(guān)報(bào)文標(biāo)識(shí)符的更多信息。-表格3.2QoSBitBit報(bào)文,它必須[MQTT-3.3.1-4]PUBLISH報(bào)文的保留(RETAIN)1,服務(wù)端必須存儲(chǔ)這個(gè)應(yīng)用消息和它的服務(wù)質(zhì)量等級(jí)(QoS),以便它可以被分發(fā)給未來(lái)的主題名匹配的訂閱者[MQTT-3.3.1-5]。一個(gè)新的訂閱建立時(shí),對(duì)每個(gè)匹配的主題名,如果存在最近保留的消息,它必須被發(fā)送給這個(gè)訂閱者[MQTT-3.3.1-6]。如果服務(wù)端收到一條保留(RETAIN)1QoS0消息,它必須丟棄之前為那個(gè)主題保留的任何消息。它應(yīng)該QoS0消息當(dāng)作那個(gè)主題的新保留消息,但是任何時(shí)候都可以—1[MQTT-3.3.1-8]PUBLISH報(bào)文發(fā)送給客戶端是因?yàn)槠ヅ湟粋€(gè)已建立的訂閱時(shí),服務(wù)端必須0,不管它收到的這個(gè)消息中保留標(biāo)志的值是多少[MQTT-3.3.1-9]。保留標(biāo)志為1且有效載荷為零字節(jié)的ULIH報(bào)文會(huì)被服務(wù)端當(dāng)作正常消息處理,它會(huì)被發(fā)送給訂閱主題匹配的客戶端。此外,同一個(gè)主題下任何現(xiàn)存的保留消息必須被移除,因此這個(gè)主題之后的任何訂閱者都不會(huì)收到一個(gè)保留消息[MQTT-1-10]。當(dāng)作正常意思是現(xiàn)存的客戶端收到的消息中保留標(biāo)志未被設(shè)置。服務(wù)端不能存儲(chǔ)零字節(jié)的保留消息[MQTT-1-。PUBLISH0,服務(wù)端不能存儲(chǔ)這個(gè)消息也不能移除或替換任何現(xiàn)存的保留消息[MQTT-3.3.1-12]。包含通配符QoS12時(shí),報(bào)文標(biāo)識(shí)符(PacketIdentifier)PUBLISH報(bào)文中。2.3.13.11PUBLISH報(bào)文可變報(bào)頭非規(guī)范示例3.3PUBLISH報(bào)文非規(guī)范示例中簡(jiǎn)要描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)用消息給每一個(gè)訂閱匹配的客戶端??蛻舳耸褂脦ㄅ浞闹黝}過(guò)濾器請(qǐng)求訂閱時(shí),客戶端的訂閱可能會(huì)重復(fù),因此發(fā)布的消息可能會(huì)匹配多個(gè)過(guò)濾器。對(duì)于這種情況,服務(wù)端必須將消息分發(fā)給所有訂閱匹配的QoS等級(jí)最高的客戶端[MTT-5-。服務(wù)端之后可以按照訂閱的QoS等級(jí),分發(fā)消息的副本給每一個(gè)匹配的訂閱者。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)建一個(gè)或多個(gè)訂閱。每個(gè)訂閱注冊(cè)客戶端關(guān)心的一個(gè)或多個(gè)報(bào)文也(為每個(gè)訂閱)QoS等級(jí),服務(wù)端根據(jù)這個(gè)發(fā)送應(yīng)用消息給客戶端。圖例3.20SUBSCRIBEbytebyte[MQTT-3.8.1-1]。圖例3.21報(bào)文標(biāo)識(shí)符等于10byteMSBbyteLSB報(bào)文有效載荷中的主題過(guò)濾器列表必須1.5.3UTF-8字符串[MQTT-3.8.3-1]。服務(wù)端應(yīng)該支持包含通配符(4.7.1節(jié)定義的)的主題過(guò)濾器。如果服務(wù)端選擇不支持包含通配符的主題過(guò)濾器,必須拒絕[MQTT-3.8.3-2]報(bào)文是違反協(xié)議的QoS等級(jí)組合是連續(xù)地打包。圖例3.22SUBSCRIBEbytebytebytes主題過(guò)濾器(Topicbyte當(dāng)前版本的協(xié)議沒(méi)有用到服務(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)識(shí)符[MQTT-3.8.4-2]。SUBSCRIBE報(bào)文,報(bào)文的主題過(guò)濾器與一個(gè)現(xiàn)存訂閱的主題過(guò)濾器相同,那么必須中斷\hSUBACKQoS等級(jí)都必須包含一個(gè)返回碼。這個(gè)返回\hQoSQoS必須是原始發(fā)布消息的QoSQoSQoS1QoS0,允許服\hQoS1,那么匹配這個(gè)過(guò)1再分發(fā)給客戶端,因此客戶端可能會(huì)收到重復(fù)的消息副本。QoS等級(jí)1的消息在傳輸給客戶端時(shí)可能會(huì)丟失或重復(fù)。QoS到更適合它的等級(jí)。SUBACK圖例3.24SUBACKbytebyteSUBSCRIBE報(bào)文的報(bào)文標(biāo)識(shí)符。3.25SUBACK報(bào)文可變報(bào)頭描述了可圖例3.25SUBACKbytebyte碼的順序必須SUBSCRIBE報(bào)文中主題過(guò)濾器的順序相同[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)文的有效載荷包含客戶端想要取消訂閱的主題過(guò)濾器列表。UNSUBSCRIBE報(bào)文中的主題過(guò)濾器必須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請(qǐng)求。UNSUBACK報(bào)文必須包含和UNSUBSCRIBE[MQTT-3.10.4-4]。即使沒(méi)有刪除任何主題訂閱,服務(wù)端也必須發(fā)SUBACK響應(yīng)[MQTT-3.10.4-5]。UNSUBSCRIBE報(bào)文,它必須如同收到了一系列的多個(gè)UNSUBSCRIBEUNSUBACK報(bào)文外。UNSUBACK圖例3.31UNSUBACKbytebytebytebytebytePINGREQ圖例3.33PINGREQbytebyte報(bào)文PINGRESP圖例3.34PINGRESPbytebyteDISCONNECT圖例3.35DISCONNECTbytebyte必須[MQTT-3.14.4-1]通過(guò)那個(gè)網(wǎng)絡(luò)連接再發(fā)送任何控制報(bào)文節(jié)[MQTT-4.1.0-1]。會(huì)話必須[MQTT-4.1.0-2]。)QoS等級(jí)可能是不同的。QoS0:報(bào)文PUBLISHQoS0,PUBLISHQoS0,QoS1:服務(wù)質(zhì)量確保消息至少送達(dá)一次。QoS1PUBLISH報(bào)文的可變報(bào)頭中包含一個(gè)報(bào)文標(biāo)識(shí)符,需要QoS1的分發(fā)協(xié)議,接收者DUP標(biāo)志的值。圖例4.2QoS1 QoS2:PUBREC報(bào)文后必須PUBREL報(bào)文。PUBRELPUBLISH報(bào)文對(duì)于QoS2的分發(fā)協(xié)議,接收者PUBLISH報(bào)文。在這種情況下,它不能重復(fù)分發(fā)消息給任何后續(xù)的接收者。圖例4.3QoS21。4.3QoS2協(xié)議流程圖,非規(guī)范示例QoS2等級(jí)消息的兩種處理方法。他們QoS流程的可靠性。PUBLISH報(bào)文(QoS>0)PUBREL[MQTT-4.4.0-1]。這是唯一要求客戶端或4.7節(jié)[MQTT-4.5.0-1]。正常情況下,客戶端收到發(fā)送給它的訂閱的消息??蛻舳艘部赡苁盏讲皇桥c它的訂閱精確匹配的消息。如果服務(wù)端自動(dòng)給客戶端分配了一個(gè)訂閱,可能發(fā)生這種情況。正在處理UUBCRIBE請(qǐng)求時(shí)也可能收到消息??蛻舳吮仨毎凑湛捎玫姆?wù)質(zhì)量(Qo)規(guī)則確認(rèn)它收到的任何ULIH報(bào)文,不管它選擇是否處理報(bào)文包含的應(yīng)用消息[MQTT-0-。題當(dāng)作是無(wú)序的[MQTT-4.6.0-5]。PUBLISH報(bào)文給消費(fèi)者(QoS)[MQTT-4.6.0-6]。QoS1發(fā)布和訂閱的消息流,訂閱者按照消息發(fā)布時(shí)的順序收到每條1,2,3,41,2,3,2,3,4。不發(fā)送后面的那條消息),QoS11,2,3,3,41,2,3,2,3,4(in-flightwindow)1QoS等級(jí)的消息,它們的順序也被保topiclevel。斜杠(U+2F)用于分割主題的每個(gè)層級(jí),為主題名提供一個(gè)分層結(jié)構(gòu)。當(dāng)客戶端訂閱指定的主題過(guò)濾器包含兩種通配符時(shí),主題層級(jí)分隔符就很有用了。主題層級(jí)分隔符可以出現(xiàn)在主題過(guò)濾器或主題名字的任何位置。相鄰的主題層次分隔符表示一個(gè)零長(zhǎng)度的主題層級(jí)。數(shù)字標(biāo)志(‘#’U+0023)是用于匹配主題中任意層級(jí)的通配符。多層通配符表示它的父級(jí)和任意數(shù)量的子過(guò)濾器的最后一個(gè)字符[MQTT-4.7.1-2]。#U+002B[MQTT-4.7.1-3]。可以在主題過(guò)濾器中的多個(gè)層級(jí)中使用它,也可以和多層通配符一起使用。“sport/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)該阻止$開(kāi)頭的主題名用作其他目的。/””/#”/”/+”“$SYS$開(kāi)頭主題的消息,它需要同時(shí)訂閱“#”和““$SYS/#”。“/”“/”)]Unicode字符?!薄薄癆ccountspayable”“/finance”“finance”[MQTT-4.8.0-1]??蛻舳嘶蚍?wù)端實(shí)現(xiàn)可能會(huì)遇到瞬時(shí)錯(cuò)誤(TransientError)(例如內(nèi)部緩沖區(qū)滿了的情況)導(dǎo)致無(wú)法成功MQTT報(bào)文。作為傳輸層協(xié)議,MQTTTLS[RFC5246]是[USEUSAFEHARB]),行業(yè)標(biāo)準(zhǔn)([PCIDSS]),監(jiān)管方面的考慮(例如薩班斯-[SARBANES])等問(wèn)題。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證書(shū)驗(yàn)證客戶端的身份。TLS[RFC5246]SSLIP多域名MQTTRFC6066[RFC6066]3TLSSNI擴(kuò)展。SNI允許客戶端TLS[RFC5246]TLSNULL,那么它TLS[RFC5246]TLS[RFC5246]SSL證TLS[RFC5246]的客戶端和服務(wù)端實(shí)現(xiàn),可以選擇提供檢查證書(shū)吊銷列表(CRLs[RFC5280]和在線證書(shū)狀態(tài)協(xié)議(OSCP)[RFC6960]的功能,拒絕使用被吊銷的證書(shū)。沒(méi)有在未授權(quán)的地區(qū)使用。IEEE[IEEE802.1AR]就是用于實(shí)現(xiàn)這個(gè)機(jī)制的一個(gè)標(biāo)準(zhǔn),它使IP地址或客戶端標(biāo)識(shí)符實(shí)現(xiàn)一個(gè)動(dòng)態(tài)黑名單列表。TLS[RFC5246]時(shí)應(yīng)該允許重新協(xié)商會(huì)話以確認(rèn)新的加密參數(shù)(替換會(huì)話密TLS[RFC5077]TLS[RFC5246]的成SOCKSSOCKSv5[RFC1928]MQTT實(shí)現(xiàn)可以利用安全隧道(SSH)SOCKSSOCKS時(shí),它們應(yīng)該同時(shí)支持匿SOCKSSOCKS可能使用明文認(rèn)證,MQTT服務(wù)器。使用安全傳輸配置時(shí),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]??蛻舳吮仨歮qtt包含在它提供的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)識(shí)符(PacketIdentifier。PUBACKPUBREC,PUBREL報(bào)文必須PUBLISH報(bào)文相同的]CONNECT報(bào)文當(dāng)作協(xié)議違規(guī)處理并斷開(kāi)客戶端的連接。CONNECT報(bào)文。對(duì)于后一種情況,按照本規(guī)范,服務(wù)端不能繼續(xù)處理CONNECT報(bào)文。議級(jí)別)CONNACKCONNECT報(bào)文,然后斷開(kāi)客戶端的連接。0必須斷開(kāi)客戶端連接。0的會(huì)話連接斷開(kāi)之后,服務(wù)端必須QoS1QoS2遺囑標(biāo)志(WillFlag)1,表示如果連接請(qǐng)求被接受了,遺囑(Will閉時(shí),服務(wù)端必須DISCONNECT報(bào)文時(shí)刪1,連接標(biāo)志中的WillQoSWillRetain字段會(huì)被服務(wù)端用到,同時(shí)有效載荷中必須包含WillTopic和WillMessage字段。0,連接標(biāo)志中的WillQoSWillReta
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院《試驗(yàn)設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中國(guó)民航大學(xué)《高等高分子化學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)學(xué)校網(wǎng)絡(luò)文明傳播志愿者考評(píng)細(xì)則及獎(jiǎng)懲制度
- 浙江財(cái)經(jīng)大學(xué)《電子科學(xué)與技術(shù)學(xué)科前沿與進(jìn)展》2023-2024學(xué)年第一學(xué)期期末試卷
- 張家口學(xué)院《新醫(yī)療技術(shù)與法》2023-2024學(xué)年第一學(xué)期期末試卷
- 缺陷分析與質(zhì)量改進(jìn)流程規(guī)范
- 五年級(jí)列方程應(yīng)用題100道(有答案)
- 雙11房產(chǎn)銷售策略模板
- 生物研究月報(bào)模板
- 新蘇教版一年級(jí)數(shù)學(xué)下冊(cè)第二單元《圖形的初步認(rèn)識(shí)(二)》全部教案(共3課時(shí))
- 廣東大灣區(qū)2024-2025學(xué)年度高一上學(xué)期期末統(tǒng)一測(cè)試英語(yǔ)試題(無(wú)答案)
- 《胃癌靶向治療》課件
- 2024-2025學(xué)年遼寧省沈陽(yáng)市高一上學(xué)期1月期末質(zhì)量監(jiān)測(cè)數(shù)學(xué)試題(含解析)
- 《少兒主持人》課件
- 北京市朝陽(yáng)區(qū)2024-2025學(xué)年高二上學(xué)期期末考試生物試卷(含答案)
- 2025年西藏拉薩市柳梧新區(qū)城市投資建設(shè)發(fā)展集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年部編版一年級(jí)語(yǔ)文上冊(cè)期末復(fù)習(xí)計(jì)劃
- 儲(chǔ)罐維護(hù)檢修施工方案
- 地理2024-2025學(xué)年人教版七年級(jí)上冊(cè)地理知識(shí)點(diǎn)
- 2024 消化內(nèi)科專業(yè) 藥物臨床試驗(yàn)GCP管理制度操作規(guī)程設(shè)計(jì)規(guī)范應(yīng)急預(yù)案
- 2024-2030年中國(guó)電子郵箱行業(yè)市場(chǎng)運(yùn)營(yíng)模式及投資前景預(yù)測(cè)報(bào)告
評(píng)論
0/150
提交評(píng)論