<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    聶永的博客

    記錄工作/學(xué)習(xí)的點(diǎn)點(diǎn)滴滴。

    MQTT-SN協(xié)議亂翻之消息格式

    前言

    緊接著上篇初步介紹,本文為第二篇,主要梳理MQTT-SN 1.2協(xié)議中定義的消息格式。

    通用消息格式

    消息頭 其它可變部分
    2/4字節(jié)表示 N字節(jié)組成

    消息頭部

    長度 消息類型
    1或3個(gè)字節(jié) 1個(gè)字節(jié)
    • 長度要么是1個(gè)字節(jié),要么3個(gè)字節(jié)表示,并且自身也會(huì)包含在其內(nèi)。一個(gè)字節(jié)可表示256長度,一般情況下,完全夠用了。
    • 只需要判斷第一個(gè)字節(jié)是否為 0x01,若是那么長度為3個(gè)字節(jié)表示,剩下的兩個(gè)字節(jié)會(huì)表示真正的消息長度,最大長度為65535
    • 否則長度就是一個(gè)字節(jié)表示,256個(gè)長度,大部分消息長度都是一個(gè)字節(jié),除非特別提醒

    備注:

     MQTT-SN不支持消息的分片和重組。底層網(wǎng)絡(luò)所定義數(shù)據(jù)包長度若小于MQTT-SN消息的最大長度,自身進(jìn)行的分片和重組,對MQTT-SN協(xié)議本身不受影響。
    

    MQTT-SN消息類型

    MQTT-SN定義的消息類型數(shù)量眾多,超過25個(gè),感覺有些頭大。

    消息類型值 消息類型名稱 說明
    0x00 ADVERTISE 廣播消息
    0x01 SEARCHGW 尋找網(wǎng)關(guān)
    0x02 GWINFO 網(wǎng)關(guān)信息
    0x03 reserved 沒有使用到
    0x04 CONNECT 發(fā)起連接
    0x05 CONNACK 連接確認(rèn)
    0x06 WILLTOPICREQ 遺囑主題請求
    0x07 WILLTOPIC 遺囑主題確認(rèn)
    0x08 WILLMSGREQ 遺囑消息請求
    0x09 WILLMSG 遺囑消息確認(rèn)
    0x0A REGISTER 注冊主題
    0x0B REGACK 注冊確認(rèn)
    0x0C PUBLISH 發(fā)布消息
    0x0D PUBACK 發(fā)布確認(rèn)
    0x0E PUBCOMP 發(fā)布環(huán)節(jié)消息
    0x0F PUBREC 發(fā)布環(huán)節(jié)消息
    0x10 PUBREL 發(fā)布環(huán)節(jié)消息
    0x11 reserved 保留字段
    0x12 SUBSCRIBE 訂閱主題
    0x13 SUBACK 訂閱確認(rèn)
    0x14 UNSUBSCRIBE 退訂
    0x15 UNSUBACK 退訂確認(rèn)
    0x16 PINGREQ Ping請求
    0x17 PINGRESP Ping響應(yīng)
    0x18 DISCONNECT 斷開
    0x19 reserved 保留字段
    0x1A WILLTOPICUPD 遺囑主題更新
    0x1B WILLTOPICRESP 遺囑主題更新確認(rèn)
    0x1C WILLMSGUPD 遺囑消息更新
    0x1D WILLMSGRESP 遺囑消息更新確認(rèn)
    0x1E-0xFD reserved 保留字段
    0xFE 轉(zhuǎn)發(fā)封裝標(biāo)志 用于轉(zhuǎn)發(fā)

    消息可變部分

    可變字段很多,與MQTT相比,多了:

    1. 持續(xù)時(shí)長字段(Duration)
    2. 標(biāo)識(shí)符Flags有所不同,下面表格進(jìn)行說明
    3. 網(wǎng)關(guān)地址(GwAdd),可變長度,但依賴于底層網(wǎng)絡(luò),在ZigBee網(wǎng)絡(luò)中2個(gè)字節(jié)長度
    4. 一個(gè)字節(jié)網(wǎng)關(guān)Id(GwId)
    5. 協(xié)議Id(ProtocolId),一個(gè)字節(jié),唯一值 0x01,統(tǒng)一表示協(xié)議名稱和協(xié)議名稱
    6. 廣播路徑跳數(shù)(廣播路徑深度/廣播輻射范圍),Radius,一個(gè)字節(jié)表示,0x00表示廣播給當(dāng)前網(wǎng)絡(luò)中所有節(jié)點(diǎn)
    7. CONNECT/REGISTER/SUBSCRIBE/PUBLISH等消息對應(yīng)回執(zhí)中都會(huì)包含返回碼Recode Code,見下表格
    返回值 返回值含義
    0x00 接受請求(Accepted)
    0x01 因擁塞拒絕(Rejected: congestion),一般需要接收方等待T_WAIT時(shí)間長
    0x02 因非法主題標(biāo)識(shí)符拒絕(Rejected: invalid topic ID)
    0x03 因不支持拒絕(Rejected: not supported)
    0x04 - 0xFF 保留,沒有使用到

    具體消息格式說明

    網(wǎng)關(guān)周期性會(huì)對當(dāng)前網(wǎng)絡(luò)下所有客戶端、節(jié)點(diǎn)進(jìn)行廣播,用于客戶端發(fā)現(xiàn)可用網(wǎng)關(guān)。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x05
    1 MsgType 0x00
    2 GwId 網(wǎng)關(guān)需要吧自身標(biāo)識(shí)符包含其中
    3-4 Duration 網(wǎng)關(guān)的下次廣播間隔時(shí)長,單位秒

    SEARCHGW

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x03
    1 MsgType 0x01
    2 Radius 廣播半徑深度,同時(shí)也是只是給當(dāng)前網(wǎng)絡(luò)傳輸層

    客戶端主動(dòng)尋找網(wǎng)關(guān)進(jìn)行廣播的消息,廣播路徑范圍受限于當(dāng)前網(wǎng)絡(luò)環(huán)境下的客戶端部署密度,比如只有1跳廣播在非常密集的網(wǎng)絡(luò)環(huán)境下客戶端都可以彼此互相訪問。

    GWINFO

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)確定
    1 MsgType 0x02
    2 GwId 網(wǎng)關(guān)Id
    3-n GwAdd* 一個(gè)網(wǎng)關(guān)地址,僅僅由客戶端發(fā)出消息時(shí),此字段才存在

    GWINFO作為對SEARCHGW消息的響應(yīng):

    • 若由網(wǎng)關(guān)發(fā)出,則無GwAdd字段
    • 若來自于客戶端,需要包含網(wǎng)關(guān)地址

    CONNECT

    客戶端向網(wǎng)關(guān)發(fā)出建立連接的消息。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)計(jì)算
    1 MsgType 0x04
    2 Flags 標(biāo)志位
    3 ProtocolId 0x01,表示協(xié)議版本和協(xié)議名稱
    4-5 Duration 存活持續(xù)時(shí)長
    6-n ClientId 客戶端標(biāo)識(shí)符,1-23個(gè)字節(jié)表示的字符串

    在CONNECT消息標(biāo)志位具體表示如下:

    DUP QoS Retain Will CleanSession TopicIdType
    bit 7 6,5 4 3 2 1,0
    X X X 0/1 0/1 X
    • 0/1 表示具體值待定
    • X 表示沒有使用到

    在Flags中使用到的標(biāo)志位:

    1. Will:若為1,客戶端會(huì)在稍后請求遺囑主題和遺囑消息
    2. CleanSession:不但表示訂閱持久化,同時(shí)也被可擴(kuò)展到遺囑主題和遺囑消息中

    CONNACK

    網(wǎng)關(guān)對客戶端發(fā)出CONNECT消息的響應(yīng)。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x03
    1 MsgType 0x05
    2 ReturnCode 接受值0x00,拒絕為0x01-0x03,具體見上文RecodeCode定義

    WILLTOPICREQ

    根據(jù)客戶端CONNECT標(biāo)志位中WILL字段為true情況下,網(wǎng)關(guān)向客戶端發(fā)出遺囑主題請求,格式如下:

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x02
    1 MsgType 0x06

    只有頭部部分,很簡單。

    WILLTOPIC

    客戶端作為網(wǎng)關(guān)WILLTOPICREQ請求響應(yīng)消息。下面是一個(gè)正常版本的WILLTOPIC消息:

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)計(jì)算
    1 MsgType 0x07
    2 Flags 標(biāo)志位
    3-n WillTopic 遺囑主題

    此時(shí)的標(biāo)志位如下

    DUP QoS Retain Will CleanSession TopicIdType
    bit 7 6,5 4 3 2 1,0
    X 0x00-0x02 0/1 X X X

    而空的WILLTOPIC也是允許存在的,就兩個(gè)字節(jié)表示,用于客戶端請求刪除已存在于服務(wù)器端的對應(yīng)遺囑主題和消息。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x02
    1 MsgType 0x07

    WILLMSGREQ

    根據(jù)客戶端CONNECT標(biāo)志位中WILL字段為真情況下,網(wǎng)關(guān)向客戶端發(fā)出遺囑消息請求,格式如下:

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x02
    1 MsgType 0x08

    只有頭部部分,沒有別的。

    WILLMSG

    客戶端對網(wǎng)關(guān)WILLMSGREQ請求的響應(yīng),從而把遺囑消息傳遞給網(wǎng)關(guān)進(jìn)行保存。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)計(jì)算
    1 MsgType 0x09
    2-n WillMsg 客戶端遺囑

    REGISTER

    • 客戶端-->網(wǎng)關(guān),請求主題(topic name)對應(yīng)的主題標(biāo)識(shí)符(topic id)
    • 網(wǎng)關(guān)-->客戶端,通知主題(topic name)已經(jīng)被指派到某個(gè)主題標(biāo)識(shí)符(topic id)
    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)計(jì)算
    1 MsgType 0x0A
    2-3 TopicId 客戶端發(fā)出,此值為0x0000;服務(wù)器發(fā)出,需要包含對應(yīng)于Topic Name的主題標(biāo)識(shí)符
    4-5 MsgId 自然數(shù),用以標(biāo)識(shí)對應(yīng)的REGACK確認(rèn)
    6-n TopicName 主題名稱,不能太長,盡量不要使用通配符

    REGACK

    客戶端或網(wǎng)關(guān)針對REGISTER消息的響應(yīng)。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x07
    1 MsgType 0x0B
    2-3 TopicId 對應(yīng)于Topic Name的主題標(biāo)識(shí)符,被用于PUBLISH消息發(fā)布
    4-5 MsgId 自然數(shù),用以標(biāo)識(shí)對應(yīng)的REGISTER消息
    6 ReturnCode 0x00被接受,其它值被拒絕

    PUBLISH

    PUBLISH消息用于客戶端或網(wǎng)關(guān)發(fā)布消息用:

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)計(jì)算
    1 MsgType 0x0C
    2 Flags 標(biāo)志位
    3-4 TopicId 主題標(biāo)識(shí)符
    5-6 MsgId QoS 1-2時(shí)需要填充自然值;QoS 0時(shí),值為0x0000
    7-n Data 用于發(fā)布的具體消息內(nèi)容

    標(biāo)識(shí)位具體如下:

    DUP QoS Retain Will CleanSession TopicIdType
    bit 7 6,5 4 3 2 1,0
    0/1 0x00-0x02 0/1 X X 0b00/0b01/0b10

    標(biāo)識(shí)位里面各個(gè)字段和MQTT協(xié)議一致,無須多解釋。

    PUBACK

    客戶端/網(wǎng)關(guān)僅僅對QoS 1/2的PUBLISH消息做出響應(yīng)。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x07
    1 MsgType 0x0D
    2-3 TopicId 對應(yīng)PUBLISH消息中TopicId
    4-5 MsgId 自然數(shù),用以標(biāo)識(shí)對應(yīng)的REGISTER消息
    6 ReturnCode 0x00被接受,其它值被拒絕,不同值表示不同拒絕理由

    處理PUBLISH消息異常?在PUBACK消息中的ReturnCode字段中以相應(yīng)值體現(xiàn)出來,這就要求接收者處理拒絕理由。

    PUBREC, PUBREL, PUBCOMP

    只有在PUBLISH消息中QoS 2時(shí),PUBREC, PUBREL, PUBCOMP才會(huì)一起登場,否則是沒有出場機(jī)會(huì)的。消息格式嘛,都很統(tǒng)一:

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x04
    1 MsgType 0x0F/0x10/0x0E
    2-3 MsgId 對應(yīng)PUBLISH消息中的MsgId

    SUBSCRIBE

    SUBSCRIBE用于客戶端訂閱某個(gè)主題的消息。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)計(jì)算
    1 MsgType 0x12
    2 Flags 標(biāo)志位
    3-4 MsgId 用于確定對應(yīng)的訂閱確認(rèn)SUBACK消息
    5-N TopicId/TopicName 具體需要根據(jù)Flags標(biāo)志位中TopicIdType進(jìn)行填充

    標(biāo)識(shí)位具體如下:

    DUP QoS Retain Will CleanSession TopicIdType
    bit 7 6,5 4 3 2 1,0
    0/1 0x00-0x02 X X X 0b00/0b01/0b10

    此處,標(biāo)志位中TopicIdType決定了SUBSCRIBE消息中TopicId/TopicName字段具體填充值:預(yù)定義topic id,或短小兩個(gè)字符表示主題(topic name),或直接填寫主題。

    SUBACK

    網(wǎng)關(guān)->客戶端,訂閱處理情況的確認(rèn)回執(zhí),接受訂閱或出于其它原因拒絕之。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x08
    1 MsgType 0x13
    2 Flags 標(biāo)志位
    3-4 TopicId 網(wǎng)關(guān)接受其注冊,此處對應(yīng)具體指派的TopicId
    5-6 MsgId SUBSCRIBE消息中對應(yīng)MsgId值
    7 ReturnCode 0x00被接受,其它值被拒絕

    標(biāo)識(shí)位具體如下:

    DUP QoS Retain Will CleanSession TopicIdType
    bit 7 6,5 4 3 2 1,0
    X 0x00-0x02 X X X X

    SUBACK消息標(biāo)志位中QoS為網(wǎng)關(guān)根據(jù)實(shí)際情況授權(quán)后的QoS具體值,這也應(yīng)該是客戶端需要知道并處理的。

    UNSUBSCRIBE

    UNSUBSCRIBE用于客戶端取消訂閱某個(gè)主題的消息。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)計(jì)算
    1 MsgType 0x14
    2 Flags 標(biāo)志位
    3-4 MsgId 用于確定對應(yīng)的退訂確認(rèn)UNSUBACK消息
    5-N TopicId/TopicName 具體需要根據(jù)Flags標(biāo)志位中TopicIdType進(jìn)行填充

    標(biāo)識(shí)位具體如下:

    DUP QoS Retain Will CleanSession TopicIdType
    bit 7 6,5 4 3 2 1,0
    X X X X X 0b00/0b01/0b10

    UNSUBSCRIBE消息標(biāo)志位中唯一可用屬性TopicIdType決定了UNSUBSCRIBE消息中TopicId/TopicName字段具體填充值。

    UNSUBACK

    網(wǎng)關(guān)->客戶端,取消訂閱處理情況的確認(rèn)回執(zhí),很簡單,4個(gè)字節(jié)表示。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x04
    1 MsgType 0x15
    2-3 MsgId UNSUBSCRIBE消息中對應(yīng)MsgId值

    PINGREQ

    和MQTT協(xié)議中的PINGREQ一致,存活檢測。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)計(jì)算
    1 MsgType 0x16
    2-N ClientId 可選項(xiàng),表示客戶端休眠狀態(tài)轉(zhuǎn)換為喚醒狀態(tài)用于檢查網(wǎng)關(guān)是否為其緩存消息

    PINGRESP

    接受PINGREQ消息的一方,如網(wǎng)關(guān)響應(yīng)PINGRESP消息表示自己現(xiàn)在運(yùn)行OK。

    另外一個(gè)意圖,若喚醒狀態(tài)客戶端發(fā)送PINGREQ消息之后,直接收到PINGRESP消息,表示網(wǎng)關(guān)當(dāng)前暫時(shí)沒有為其緩存的消息可供發(fā)送。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x02
    1 MsgType 0x17

    很簡單,兩個(gè)字節(jié)表示足矣。

    DISCONNECT

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)計(jì)算
    1 MsgType 0x18
    2-3 Duration 可選項(xiàng),表示客戶端即將進(jìn)入睡眠狀態(tài)的持續(xù)時(shí)間值
    • 客戶端->網(wǎng)關(guān),客戶端主動(dòng)關(guān)閉當(dāng)前連接,網(wǎng)關(guān)響應(yīng)確認(rèn)消息。只有表示自己進(jìn)入睡眠狀態(tài)的客戶端,才會(huì)在DISCONNECT消息中附加Duration持續(xù)字段。
    • 網(wǎng)關(guān)->客戶端,網(wǎng)關(guān)由于異常主動(dòng)通知客戶端關(guān)閉兩者之間連接,客戶端接收到DISCONNECT時(shí)需要發(fā)送CONNECT消息到網(wǎng)關(guān),重試重新建立連接。沒有Duration字段填充。

    網(wǎng)關(guān)接收到要進(jìn)入休眠狀態(tài)的客戶端發(fā)送的包含有Duration字段DISCONNECT消息時(shí),可以直接返回2個(gè)字節(jié)的(不能包含有Duration字段)DISCONNECT消息以示確認(rèn)。

    WILLTOPICUPD

    客戶端發(fā)送請求網(wǎng)關(guān)更新其遺囑主題。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)計(jì)算
    1 MsgType 0x1A
    2 Flags 標(biāo)志位
    3-N WillTopic 用于更新的遺囑主題

    標(biāo)識(shí)位具體如下:

    DUP QoS Retain Will CleanSession TopicIdType
    bit 7 6,5 4 3 2 1,0
    X 0x00-0x02 0/1 X X X

    協(xié)議規(guī)定只有兩個(gè)字節(jié)空WILLTOPICUPD也是允許存在的,存在意義用于客戶端請求網(wǎng)關(guān)刪除已保存的遺囑主題和遺囑消息等。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x02
    1 MsgType 0x1A

    WILLTOPICRESP

    WILLTOPICRESP為網(wǎng)關(guān)收到WILLTOPICUPD后作出的應(yīng)答消息。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x03
    1 MsgType 0x1B
    2 ReturnCode 0x00被接受,其它值被拒絕

    WILLMSGUPD

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 動(dòng)態(tài)計(jì)算
    1 MsgType 0x1C
    2-N WillMsg 用于更新的遺囑消息

    客戶端->網(wǎng)關(guān),確認(rèn)更新的遺囑消息。

    WILLMSGRESP

    WILLMSGRESP為網(wǎng)關(guān)收到WILLMSGUPD后作出的應(yīng)答消息。

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 0x03
    1 MsgType 0x1D
    2 ReturnCode 0x00被接受,其它值被拒絕

    轉(zhuǎn)發(fā)封裝

    在MQTT-SN架構(gòu)圖中,MQTT-SN Forwarder轉(zhuǎn)發(fā)器適用于客戶端無法直接訪問網(wǎng)關(guān)或當(dāng)前傳感器網(wǎng)絡(luò)區(qū)域中不存在網(wǎng)關(guān)時(shí),轉(zhuǎn)發(fā)器作用就體現(xiàn)出來了:

    1. 接收MQTT-SN客戶端消息封裝后轉(zhuǎn)發(fā)給上游網(wǎng)關(guān)
    2. 解封上游網(wǎng)關(guān)所發(fā)送消息,直接發(fā)送給對應(yīng)客戶端

    轉(zhuǎn)發(fā)器作用于消息的封裝轉(zhuǎn)發(fā),解封發(fā)送,針對消息不做修改。

    轉(zhuǎn)發(fā)器對MQTT-SN消息封裝格式:

    字節(jié)索引 表示內(nèi)容 說明
    0 Length 十進(jìn)制表示長度就是N
    1 MsgType 0xFE
    2 Ctrl 包含網(wǎng)關(guān)和轉(zhuǎn)發(fā)器之間的控制交換信息,主要是前兩位包含了半徑范圍
    3-N Wireless Node Id 標(biāo)識(shí)所發(fā)目的或需要接收封裝消息的無線節(jié)點(diǎn)
    N+1-M MQTT-SN message 一個(gè)MQTT-SN消息消息

    無線節(jié)點(diǎn)Id(Wireless Node Id):

    • 轉(zhuǎn)發(fā)器->網(wǎng)關(guān),無線節(jié)點(diǎn)Id為轉(zhuǎn)發(fā)器所在的無線節(jié)點(diǎn)Id,便于告知網(wǎng)關(guān)轉(zhuǎn)發(fā)器位置
    • 網(wǎng)關(guān)->轉(zhuǎn)發(fā)器,無線節(jié)點(diǎn)Id為網(wǎng)關(guān)的無線節(jié)點(diǎn)Id

    控制交換字段Ctrl,單個(gè)字節(jié),位表示含義:

    bit 7,2 1,0
    X 0x00-0x03

    小結(jié)

    MQTT-SN 1.2規(guī)范中所定義消息格式介紹完畢,下一篇將對MQTT-SN主要流程功、能進(jìn)行闡述。

    posted on 2015-01-08 21:52 nieyong 閱讀(6754) 評論(1)  編輯  收藏 所屬分類: MQTT

    評論

    # re: MQTT-SN協(xié)議亂翻之消息格式[未登錄] 2016-05-16 21:14 Echo

    大俠,關(guān)于MQTT-SN的網(wǎng)關(guān)發(fā)現(xiàn)有一處地方不大明白,還請指點(diǎn)。 ADVERTISE這個(gè)消息只發(fā)送的是GW的ID, client收到該消息之后,怎么知道GW的地址呢(比如GW的IP+Port)。 另外GWINFO這個(gè)消息里面,只有當(dāng)client發(fā)出時(shí),才包含地址,GW發(fā)出時(shí)不包含地址。 這樣豈不是client都沒辦法知道GW的地址啊? 謝謝  回復(fù)  更多評論   

    公告

    所有文章皆為原創(chuàng),若轉(zhuǎn)載請標(biāo)明出處,謝謝~

    新浪微博,歡迎關(guān)注:

    導(dǎo)航

    <2016年5月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    統(tǒng)計(jì)

    常用鏈接

    留言簿(58)

    隨筆分類(130)

    隨筆檔案(151)

    個(gè)人收藏

    最新隨筆

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲xxxx视频| 性色av免费观看| 免费国产a理论片| 午夜精品射精入后重之免费观看 | 亚洲精品欧美综合四区| 亚洲av中文无码乱人伦在线咪咕| 在线免费观看国产视频| A在线观看免费网站大全| 久久国产精品成人片免费| 久久WWW免费人成—看片| 午夜亚洲国产理论片二级港台二级 | 亚洲AV综合色一区二区三区| 亚洲精品色婷婷在线影院| 色www永久免费视频| 好男人视频社区精品免费| 日本免费网站视频www区| 99国产精品免费观看视频| 在线看片免费人成视频久网下载 | 国产成人免费ā片在线观看| 一二三四影视在线看片免费| 91九色视频无限观看免费| 少妇人妻偷人精品免费视频| 视频免费在线观看| 日韩精品无码免费专区网站| 亚洲香蕉久久一区二区| 久久久亚洲欧洲日产国码是AV | 久久成人a毛片免费观看网站| jyzzjyzz国产免费观看| 免费国产高清毛不卡片基地| 在线观看亚洲精品专区| 精品亚洲成a人在线观看| 久久亚洲精品高潮综合色a片| 亚洲JLZZJLZZ少妇| 国产成人不卡亚洲精品91| 精品久久久久久亚洲中文字幕 | 日韩一区二区在线免费观看| 午夜精品在线免费观看| 国产网站免费观看| 全亚洲最新黄色特级网站| 亚洲一级毛片免费看| 91免费在线播放|