• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于NS-3的MQTT協(xié)議仿真研究

    2021-12-12 02:51:02王如武
    關(guān)鍵詞:服務(wù)端吞吐量數(shù)據(jù)包

    趙 靖,王如武,周 皓

    大連理工大學(xué) 軟件學(xué)院,遼寧 大連 116024

    隨著“工業(yè)互聯(lián)網(wǎng)”“工業(yè)4.0““中國制造2025”等戰(zhàn)略的提出,制造業(yè)數(shù)字化轉(zhuǎn)型已成為共識。打破不同工業(yè)系統(tǒng)間的信息壁壘,改善傳統(tǒng)工業(yè)企業(yè)的“信息孤島”現(xiàn)象,整合海量數(shù)據(jù),挖掘更大的信息價(jià)值,優(yōu)化流程,提升效率,賦能工業(yè)生產(chǎn)、管理、運(yùn)營、銷售、售后等整條生態(tài)鏈,是數(shù)字化轉(zhuǎn)型的目標(biāo)和作用。工業(yè)制造往往涉及的產(chǎn)品類型眾多,工業(yè)系統(tǒng)之間千差萬別,而且工業(yè)現(xiàn)場環(huán)境復(fù)雜,網(wǎng)絡(luò)不穩(wěn)定。盡管在降低時(shí)延方面,可以采用目前比較流行的邊緣計(jì)算解決方案,在工廠內(nèi)部或附近放置大量邊緣云設(shè)備以減少延遲,但大量的專有傳感器及邊緣設(shè)備的信息交互也會增加通信成本,加大工業(yè)用電量,增加成本和運(yùn)營費(fèi)用。因此通訊協(xié)議的選取至關(guān)重要,而在物聯(lián)網(wǎng)領(lǐng)域廣泛流行的消息隊(duì)列遙測傳輸(Message Queuing Telemetry Transport,MQTT)[1]協(xié)議就因?yàn)槠湎Ⅲw積小,通訊成本低,能量消耗少,適合在結(jié)構(gòu)各異的系統(tǒng)間進(jìn)行消息傳遞而備受關(guān)注。其獨(dú)特的發(fā)布/訂閱體系結(jié)構(gòu),使不同客戶端之間的通信脫鉤,從而允許不同的供應(yīng)商在不同的系統(tǒng)中獨(dú)立實(shí)現(xiàn)MQTT,擺脫原始系統(tǒng)本身的專有協(xié)議進(jìn)行通信,從而在不同的專有系統(tǒng)中建立互操作性,非常適合作為工業(yè)生產(chǎn)中多種異構(gòu)系統(tǒng)與部件間消息傳遞的標(biāo)準(zhǔn),在智能制造中的應(yīng)用越來越受歡迎。國內(nèi)外的工業(yè)互聯(lián)網(wǎng)平臺,如華為FusionPlant平臺、西門子mindsphere平臺、海爾COSMOPlat平臺等的解決方案中都采用了MQTT作為通訊協(xié)議,因此在傳統(tǒng)工業(yè)企業(yè)中通過部署MQTT進(jìn)行大量設(shè)備間的消息傳遞已經(jīng)逐漸成為一種普遍的選擇。

    而在MQTT部署方案的制定中以及實(shí)際部署前,若先通過仿真模擬技術(shù)獲取關(guān)鍵數(shù)據(jù)以供參考,并且快速得到直觀的部署效果從而及時(shí)修正,則可以大大減小方案落地后的偏差,降低試錯(cuò)成本。這得益于仿真的簡便靈活,可以快速獲取所需數(shù)據(jù)(如網(wǎng)絡(luò)設(shè)備吞吐量、網(wǎng)絡(luò)帶寬、時(shí)延等),而且成本極低,這對于工業(yè)企業(yè)來說是至關(guān)重要的。如果初期就通過實(shí)際部署進(jìn)行評估測試會造成大量人力物力財(cái)力的浪費(fèi)。

    模擬部署MQTT是觀察及研究其性能和表現(xiàn)的重要手段。目前在該方面主要分為小規(guī)模本地部署和仿真軟件模擬兩種方式。文獻(xiàn)[3]中通過在兩臺機(jī)器上分別搭建單獨(dú)的MQTT客戶端和服務(wù)端進(jìn)行了小規(guī)模的模擬實(shí)驗(yàn),對比了MQTT和CoAP兩種協(xié)議的端到端時(shí)延和帶寬消耗情況,結(jié)果表明協(xié)議的性能取決于網(wǎng)絡(luò)條件,在較低丟包率時(shí)MQTT會具有更低的延遲,但是該實(shí)驗(yàn)只設(shè)置了一個(gè)客戶端,對于大量客戶端的情況無法進(jìn)行準(zhǔn)確評估。文獻(xiàn)[4]利用OPNET仿真器進(jìn)行無線樓宇網(wǎng)絡(luò)中MQTT的仿真以獲取最佳部署節(jié)點(diǎn)數(shù),然后在實(shí)際系統(tǒng)中部署進(jìn)行下一步測試。雖然其能夠較好地模擬MQTT,但是OPNET并不是免費(fèi)的軟件,主要面向商業(yè)用戶,價(jià)格昂貴。文獻(xiàn)[5]中使用OMNet++仿真器的INET框架評估了MQTT協(xié)議在工業(yè)環(huán)境下的性能,觀察了在不同傳感器數(shù)量下該協(xié)議的吞吐量和時(shí)延變化。但是文獻(xiàn)[6-7]中的對比結(jié)果都表明,相比于OMNet++等其他模擬器,NS-3模擬器都有著更好的整體性能,比如需要更少的計(jì)算時(shí)間及更低的內(nèi)存,同時(shí)NS-3是開源免費(fèi)的,它擁有更加活躍的社區(qū)對其進(jìn)行維護(hù),每三到四個(gè)月定期發(fā)布具有新功能的版本[8]。另外,利用文獻(xiàn)[9]提供的ns3-ai擴(kuò)展模塊還可以開展計(jì)算機(jī)網(wǎng)絡(luò)和人工智能算法相結(jié)合的交叉研究,這些優(yōu)勢都促使更多的人愿意使用NS-3,并積極地完善和擴(kuò)展它以便進(jìn)行更廣泛的研究。

    本文針對NS-3中無法對MQTT協(xié)議提供簡單易用的模塊和接口支持問題,提出并實(shí)現(xiàn)了一個(gè)名為ns3-mqtt的框架來對NS-3進(jìn)行擴(kuò)展,詳細(xì)描述了該框架的設(shè)計(jì)策略和實(shí)現(xiàn)細(xì)節(jié),包括它的三個(gè)擴(kuò)展組件(MQTT核心模塊、MQTT應(yīng)用程序、MQTT幫助程序),同時(shí)提供了一個(gè)工業(yè)場景仿真案例來說明集成后的NS-3如何模擬部署MQTT以獲取必要數(shù)據(jù),進(jìn)而為實(shí)際部署MQTT提供有力的幫助。另外,還對數(shù)據(jù)包大小和客戶端數(shù)量對MQTT協(xié)議性能的影響進(jìn)行了研究,觀察到了和OMNet++仿真器中相似的現(xiàn)象,證明了ns3-mqtt框架的可行性。

    1 相關(guān)概念

    1.1 NS-3網(wǎng)絡(luò)模擬器

    NS-3網(wǎng)絡(luò)模擬器是一個(gè)開源的離散事件驅(qū)動的網(wǎng)絡(luò)模擬器,主要用于研究和教育目的[10]。它可以在一臺計(jì)算機(jī)上用C++和Python編寫腳本來模擬現(xiàn)實(shí)世界的網(wǎng)絡(luò)[11]。在一個(gè)網(wǎng)絡(luò)系統(tǒng)的仿真中,每一個(gè)實(shí)體都會由一個(gè)稱為節(jié)點(diǎn)的容器表示。網(wǎng)絡(luò)設(shè)備、協(xié)議、應(yīng)用程序都會依次安裝到這個(gè)容器中。NS-3提供了多種網(wǎng)絡(luò)協(xié)議(802.11、TCP、UDP等)及通訊技術(shù)(WIFI、LTE、5G等),作為一個(gè)開源項(xiàng)目,它完全由C++語言編寫,主要運(yùn)行于linux平臺,任何組織和個(gè)人可對源碼進(jìn)行下載及修改,由NS-3社區(qū)維護(hù)。另外,它還可以與外部系統(tǒng)和實(shí)際應(yīng)用進(jìn)行交互,提供了與其他平臺進(jìn)行聯(lián)合仿真并獲取更真實(shí)數(shù)據(jù)的可能性。

    1.2 MQTT協(xié)議

    MQTT協(xié)議是一種使用發(fā)布/訂閱機(jī)制的消息傳遞協(xié)議,最初由Andy等設(shè)計(jì)[12],適用于資源受限設(shè)備以及低帶寬、高延遲或不可靠的網(wǎng)絡(luò)[13]。該協(xié)議位于OSI網(wǎng)絡(luò)模型中的應(yīng)用層,依賴于傳輸層的TCP協(xié)議以及網(wǎng)絡(luò)層的IP協(xié)議,支持TLS/SSL加密。它獨(dú)特的消息傳遞機(jī)制以及低帶寬占用、可靠的特性,使其非常適合工業(yè)領(lǐng)域云邊通信[14]的應(yīng)用場景,在有限帶寬的情況下也可為大量傳感器等設(shè)備的連接提供實(shí)時(shí)可靠的消息服務(wù)。該協(xié)議基于一個(gè)稱為broker的中心服務(wù)器來實(shí)現(xiàn)對所有消息的代理,形成發(fā)布訂閱模式,其客戶端只能夠和中心服務(wù)器直接交互,而且消息的傳遞是基于主題的,客戶端可向某一主題發(fā)布訂閱請求或發(fā)布請求,中心服務(wù)器一旦接收到消息請求,就會根據(jù)消息主題在該主題的訂閱列表下增加該客戶端以滿足訂閱請求,或者分發(fā)消息內(nèi)容給已訂閱該主題的其他客戶端以滿足發(fā)布請求,可實(shí)現(xiàn)訂閱方和發(fā)布方之間的解耦。

    1.2.1 MQTT協(xié)議的消息格式

    MQTT消息由2個(gè)字節(jié)的固定報(bào)頭,2個(gè)字節(jié)的可變報(bào)頭以及有效載荷三部分組成,固定報(bào)頭的格式規(guī)范如圖1所示。其中Retain字段用于設(shè)置該條消息是否需要服務(wù)端保留;Qos Level字段用于設(shè)置該條消息所需的服務(wù)等級;Dup Flag字段用于設(shè)置該條消息是否為重發(fā)消息;Message Type字段的值代表消息的類型(共有14種);Remaining Length字段的值則代表消息的可變報(bào)頭和有效載荷大小。

    圖1 MQTT固定報(bào)頭格式Fig.1 MQTT fixed header format

    可變報(bào)頭是否存在由消息類型(Message Type)決定,當(dāng)消息類型為PUBLISH(Qos>0)、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK類型時(shí)可變報(bào)頭存儲的是報(bào)文標(biāo)識(MessageID),長度為2個(gè)字節(jié),其他類型時(shí)可不添加可變報(bào)頭。而有效載荷則承載了MQTT消息攜帶的實(shí)際數(shù)據(jù),包括主題和內(nèi)容。

    1.2.2 MQTT協(xié)議的主題

    MQTT協(xié)議的主題Topic起到過濾消息的作用,同時(shí)也是消息的一種標(biāo)識,從而對消息進(jìn)行分組??蛻舳酥粫盏狡涓信d趣的分組的內(nèi)容。它是一個(gè)分層結(jié)構(gòu),在表示上類似restful風(fēng)格。一個(gè)主題名可以由多個(gè)主題層級組成,每一層通過“/”斜杠分隔開,例如:“/layer1/layer2/layer3“。如果客戶端對多個(gè)相似分組感興趣,則可以在主題的某個(gè)層級使用通配符,包括“+”和“#”兩種?!?”通配符屬于單層通配符,只匹配某一個(gè)層級的全部內(nèi)容,例如“/layer1/+”可匹配“/layer1/layer2a”和“/layer1/layer2b”。而“#”屬于多層通配符,可匹配包括當(dāng)前層級在內(nèi)的后面的全部層級的子主題。需要注意的是“#”通配符也可代表0個(gè)層次,比如“/layer1/#”也能匹配單一的“/layer1”,此時(shí)“#”就代表0個(gè)層級。同時(shí)它在一個(gè)主題只能出現(xiàn)一次,且需在主題層級的末尾處,不可以出現(xiàn)在主題的中間和首部,也不可以在多個(gè)層級中同時(shí)出現(xiàn)。

    1.2.3 MQTT協(xié)議的消息服務(wù)質(zhì)量

    MQTT協(xié)議通過控制Qos等級來決定服務(wù)質(zhì)量[15],其Qos等級共有三個(gè),分別是Qos0、Qos1、Qos2。不同的等級代表了不同的可靠性要求,具體描述如下。

    (1)消息服務(wù)等級為Qos0時(shí),代表著消息到達(dá)至多一次,由于消息發(fā)布是完全依賴于底層的TCP/IP協(xié)議的,因此會有消息丟失或重復(fù)的情況發(fā)生。這一等級的服務(wù)適用于偶爾丟失一次記錄無影響的場景下,比如監(jiān)測環(huán)境溫度信息,它會在不久以后繼續(xù)接收下一次消息。

    (2)消息服務(wù)等級為Qos1時(shí),代表著消息至少到達(dá)一次,但是可能會有消息重復(fù)現(xiàn)象發(fā)生。

    (3)消息服務(wù)等級為Qos2時(shí),代表著消息一定會到達(dá)且只到達(dá)一次。這一等級適用于對消息重復(fù)或者丟失比較敏感的場景。

    2 ns3-mqtt框架描述

    ns3-mqtt框架由MQTT核心模塊、MQTT應(yīng)用程序、MQTT幫助程序三個(gè)部分組成。MQTT核心模塊主要實(shí)現(xiàn)了協(xié)議頭、客戶端和代理服務(wù)端。代理服務(wù)端可對消息進(jìn)行存儲和轉(zhuǎn)發(fā)、客戶端可訂閱和發(fā)布消息,二者均支持Qos0、Qos1、Qos2三種服務(wù)等級??紤]到未來對保留消息功能的潛在需求,例如測試新訂閱客戶端獲取歷史消息的性能等,還實(shí)現(xiàn)了對Retain類型消息的支持。而MQTT應(yīng)用程序部分則是在MQTT核心模塊基礎(chǔ)上開發(fā),分為mqtt-client和mqtt-broker兩個(gè)應(yīng)用程序,能夠定時(shí)開啟和關(guān)閉客戶端以及服務(wù)端,并進(jìn)行端到端的數(shù)據(jù)統(tǒng)計(jì)。同時(shí)能夠通過設(shè)置客戶端發(fā)包大小、間隔、Qos等進(jìn)行流量生成。另外還編寫了ns3::mqttbroker-helper和ns3::mqtt-client-helper類作為幫助程序,該部分的目的是提供便捷的高度封裝的接口,并可以批量安裝MQTT應(yīng)用程序以及靈活設(shè)置流量生成參數(shù),為安裝和使用MQTT應(yīng)用程序提供方便。圖2展示了ns3-mqtt框架的結(jié)構(gòu)以及和NS-3自身模塊間的關(guān)系。

    圖2 ns3-mqtt框架結(jié)構(gòu)Fig.2 ns3-mqtt frame structure

    2.1 MQTT核心模塊

    該模塊參考MQTT-V3.1.1[1]協(xié)議規(guī)范對MQTT協(xié)議主要功能進(jìn)行了實(shí)現(xiàn)。模塊結(jié)構(gòu)遵循NS-3項(xiàng)目風(fēng)格。圖3顯示了模塊中所有類之間的關(guān)系。其中ns3::Mqtt-Header類是基于ns3::Header類的擴(kuò)展,ns3::util類則是用于對MQTT頭部數(shù)據(jù)的存取操作進(jìn)行簡化。同時(shí),服務(wù)端和客戶端由ns3::broker類和ns3::client類實(shí)現(xiàn),二者采用packet對象作為信息載體,利用TCP/IP協(xié)議提供的可編程接口socket[16]實(shí)現(xiàn)通訊,其中服務(wù)端類還要依賴ns3::mqtt_db類進(jìn)行數(shù)據(jù)管理。以下各節(jié)將對實(shí)現(xiàn)細(xì)節(jié)進(jìn)行詳細(xì)解釋。

    圖3 MQTT核心模塊類關(guān)系圖Fig.3 MQTT core module class diagram

    2.1.1 MQTT消息頭

    MQTT協(xié)議消息頭由名為MqttHeader的類表示。根據(jù)NS-3官方文檔所述,該類必須從ns3::Header類派生,并實(shí)現(xiàn)ns3::Header類的純虛方法。派生出的ns3::MqttHeader類需實(shí)現(xiàn)MQTT協(xié)議頭部的序列化和反序列化,而序列化或反序列化中每次操作的字節(jié)數(shù)則需根據(jù)協(xié)議本身進(jìn)行設(shè)置。為方便數(shù)據(jù)統(tǒng)計(jì)和重發(fā)數(shù)據(jù)包的辨別,將MQTT的可變頭部統(tǒng)一設(shè)置為2個(gè)字節(jié)。因此MQTT協(xié)議報(bào)文頭固定為4個(gè)字節(jié)。相對應(yīng)的ns3::MqttHeader類里序列化和反序列化函數(shù)中每次操作的大小也為4個(gè)字節(jié)。需要注意的是,序列化和反序列化過程會調(diào)用Buffer函數(shù)對緩沖區(qū)進(jìn)行寫入和讀出,二者的調(diào)用順序不能顛倒,否則會造成緩沖區(qū)數(shù)據(jù)異常。另外,在ns3::packet中添加MQTT消息頭需調(diào)用其中的AddHeader函數(shù)。由于ns3::MqttHeader中數(shù)值以二進(jìn)制形式存儲,因此需通過位運(yùn)算將協(xié)議頭部各字段值寫入。而接收方獲取數(shù)據(jù)包后則需利用ns3::packet中提供的PeekHeader函數(shù),將數(shù)據(jù)先取出到ns3::MqttHeader對象中,然后調(diào)用該對象中GetData函數(shù)才能獲取到數(shù)據(jù)。此數(shù)據(jù)為32位(4個(gè)字節(jié))的二進(jìn)制數(shù),最后還需通過特定的位運(yùn)算才能獲取協(xié)議報(bào)文各字段的值,比如Message Type,Qos等。表1列出了協(xié)議頭部二進(jìn)制數(shù)據(jù)的寫入和讀出涉及的位運(yùn)算公式。其中d表示當(dāng)前頭部的值。為了方便在程序中使用,已在輔助類中將其封裝成函數(shù),提供了對應(yīng)接口。

    表1 字段計(jì)算公式表Table 1 Field calculation formula table

    2.1.2 MQTT協(xié)議的客戶端

    MQTT協(xié)議客戶端由ns3::client類實(shí)現(xiàn),主要完成對消息的發(fā)送,三種Qos服務(wù)等級的交互響應(yīng)以及客戶端參數(shù)的設(shè)置。消息的發(fā)送采用socket實(shí)現(xiàn),Qos等級的交互響應(yīng)采用回調(diào)函數(shù)和仿真調(diào)度器實(shí)現(xiàn),具體的將在3.3.4小節(jié)進(jìn)行介紹。ns3::client類提供的可設(shè)置參數(shù)有訂閱的主題、發(fā)送消息的類型和內(nèi)容、Qos服務(wù)等級以及是否為保留消息,該類中默認(rèn)接收消息的監(jiān)聽端口號設(shè)置為1883。由于該類繼承自ns3::Application類,其可作為一種應(yīng)用程序在Node上運(yùn)行。但為了簡化仿真的復(fù)雜性,還提供了進(jìn)一步封裝的客戶端應(yīng)用程序mqtt-client,能夠較為簡便地對單一客戶端進(jìn)行參數(shù)設(shè)置,例如數(shù)據(jù)流量參數(shù)等。而mqtt-client-helper幫助程序則是提供對客戶端批量安裝以及參數(shù)批量設(shè)定的功能,以適應(yīng)更大規(guī)模的仿真,免去了仿真中需逐一安裝設(shè)定的麻煩。關(guān)于客戶端應(yīng)用程序和幫助程序會在3.2、3.3節(jié)進(jìn)行更詳細(xì)的介紹。

    2.1.3 MQTT協(xié)議的服務(wù)端

    MQTT服務(wù)端也稱為broker,它由ns3::mqtt_db,ns3::broker類實(shí)現(xiàn)。ns3::mqtt_db類負(fù)責(zé)存儲消息以及維護(hù)客戶端和消息之間的對應(yīng)關(guān)系,ns3::broker類則負(fù)責(zé)數(shù)據(jù)包的接收校驗(yàn)以及消息的轉(zhuǎn)發(fā)。并且ns3::mqtt_db和ns3::broker是一一對應(yīng)的,前者作為后者類中的一個(gè)私有成員變量。

    ns3::mqtt_db中存儲消息采用的數(shù)據(jù)結(jié)構(gòu)是訂閱樹,它類似于多叉樹。樹的節(jié)點(diǎn)由Subtree_node對象表示,該對象由兩個(gè)分別存儲子節(jié)點(diǎn)指針和客戶端指針的列表,以及代表該節(jié)點(diǎn)名稱的字符串組成。其中客戶端可存儲在一個(gè)或多個(gè)樹節(jié)點(diǎn)下,代表該客戶端訂閱了由根節(jié)點(diǎn)的兒子節(jié)點(diǎn)到該節(jié)點(diǎn)途徑所有節(jié)點(diǎn)的名稱構(gòu)成的主題,一個(gè)典型的訂閱樹如圖4所示,其中client2就訂閱了“/layer1/layer2a”和“/sys”兩個(gè)主題。ns3::mqtt_db在接收到經(jīng)過ns3::broker校驗(yàn)后的數(shù)據(jù)包時(shí),首先會調(diào)用getPacketHeadType函數(shù)得到數(shù)據(jù)包包頭中的Message Type的值判斷消息類型,若是PUBLISH型消息,則用字符分割函數(shù)將負(fù)載中主題和內(nèi)容分開,利用find_topic_exits函數(shù)對訂閱樹進(jìn)行深度優(yōu)先遍歷,判斷該主題在訂閱樹中是否存在,若存在,將會立即調(diào)用pub_add_sub_client函數(shù)以及push_msg_to_client函數(shù)將消息存儲在訂閱了該主題的客戶端中,這里的客戶端是一個(gè)臨時(shí)的Client對象,僅用作存儲消息內(nèi)容和維護(hù)實(shí)際客戶端待接收的消息隊(duì)列,此時(shí)消息還未開始向?qū)嶋H客戶端發(fā)送。若是SUBSCRIBE型消息,則先調(diào)用find_child函數(shù)在訂閱樹中查找匹配的節(jié)點(diǎn),此函數(shù)采用遞歸查找并返回可匹配到的最后一個(gè)節(jié)點(diǎn)。若能完全匹配則調(diào)用sub_add_sub_client函數(shù)將此訂閱客戶端存儲到完全匹配的最后一個(gè)節(jié)點(diǎn)的客戶端隊(duì)列中,準(zhǔn)備接收消息。否則會先調(diào)用add_subtree_topic函數(shù)在訂閱樹中增加相應(yīng)節(jié)點(diǎn)以達(dá)到完全匹配。

    圖4 訂閱樹示例Fig.4 Example of subscription tree

    ns3::broker類對接收到的數(shù)據(jù)包的包頭和負(fù)載進(jìn)行校驗(yàn)時(shí),先通過位運(yùn)算獲取其頭部各字段的值,若未出現(xiàn)非法值則校驗(yàn)后該消息交由mqtt_db處理,否則丟棄該數(shù)據(jù)包。當(dāng)消息經(jīng)mqtt_db處理后,ns3::broker會對mqtt_db中訂閱樹進(jìn)行搜索。若發(fā)現(xiàn)某個(gè)節(jié)點(diǎn)中Client的實(shí)際客戶端待接收消息隊(duì)列大小不為0,就根據(jù)Client的地址(和實(shí)際客戶端地址一一對應(yīng))取出消息隊(duì)列中的每一條消息。取出后隨即創(chuàng)建新的socket,根據(jù)Client的地址以及監(jiān)聽的端口號(1883)與對應(yīng)客戶端進(jìn)行連接并轉(zhuǎn)發(fā)對應(yīng)消息。該轉(zhuǎn)發(fā)功能同樣支持Qos的三個(gè)服務(wù)等級,但服務(wù)等級是由消息發(fā)布時(shí)的Qos等級和客戶端訂閱時(shí)的Qos等級共同確定,取二者的較小值。

    2.1.4 MQTT協(xié)議的服務(wù)等級

    MQTT協(xié)議的三種Qos服務(wù)等級功能的實(shí)現(xiàn)主要依靠回調(diào)函數(shù)和Simulator調(diào)度器,NS-3中的回調(diào)函數(shù)和C++中回調(diào)函數(shù)類似,都需要訂閱函數(shù)指針、賦值以及調(diào)用三個(gè)步驟。不過NS-3中對回調(diào)函數(shù)的步驟進(jìn)行了簡化,其使用步驟被封裝在了對應(yīng)的類和函數(shù)中。函數(shù)指針在Callback類模板中被定義,該模板可支持最多9個(gè)形參并可以定義函數(shù)簽名的返回值。而Callback對象的創(chuàng)建和賦值由函數(shù)MakeCallback完成。通過回調(diào)函數(shù)接收到消息時(shí)可以通過socket回復(fù)消息,但只能回復(fù)一次。接收者如果想要再次發(fā)送消息,只能構(gòu)造新的socket來發(fā)送,這種情況多出現(xiàn)在Qos2等級中,因?yàn)樾枰瓿蓛纱谓换?。Simulator調(diào)度器主要應(yīng)用在控制何時(shí)去發(fā)送回復(fù)消息,該調(diào)度器是NS-3離散事件仿真引擎的入口,控制著整個(gè)仿真事件的調(diào)度,保證仿真不混亂。

    在實(shí)際實(shí)現(xiàn)中只需設(shè)置MQTT數(shù)據(jù)包包頭的Qos Level字段即可將Qos值跟隨消息一起發(fā)送。其中Qos0等級由于只發(fā)送一次,故不存在交互行為。當(dāng)服務(wù)等級為Qos1時(shí),客戶端發(fā)送消息后會調(diào)用等待接收ack函數(shù)sendRecvAck來接收服務(wù)端發(fā)回的ack報(bào)文。同時(shí)此函數(shù)中設(shè)有等待時(shí)間,若在規(guī)定時(shí)間內(nèi)沒有收到ack則重傳消息。當(dāng)服務(wù)等級為Qos2時(shí),客戶端發(fā)送消息后會調(diào)用sendRecvREC函數(shù),等待接收PUBREC類型消息,若在規(guī)定時(shí)間無回應(yīng)則重發(fā)該消息。若接收到PUBREC類型消息則開始進(jìn)行第二次交互,也就是調(diào)用sendREL函數(shù)發(fā)送PUBREL消息,之后調(diào)用sendRecvCOMP函數(shù)等待服務(wù)端PUBCOMP類型的回應(yīng)消息,若一段時(shí)間內(nèi)收不到回應(yīng)同樣會重傳消息,若接收到則代表著兩次交互已完成。在交互的過程中服務(wù)端會一直啟用socket監(jiān)聽,收到消息后立即調(diào)用回調(diào)函數(shù)對消息進(jìn)行解析和邏輯處理,由此來完成和客戶端的交互。而對于服務(wù)端轉(zhuǎn)發(fā)消息給客戶端的情況,同樣涉及Qos服務(wù)等級。這里Qos等級的確定方法和客戶端發(fā)送消息給服務(wù)端時(shí)相同,并且交互過程也相同,只是此時(shí)客戶端和服務(wù)端角色互換了。

    2.1.5 MQTT協(xié)議的Retain功能

    MQTT協(xié)議的Retain功能旨在讓新訂閱者及時(shí)得到發(fā)布方最新的消息或狀態(tài)信息。只要客戶端一訂閱帶保留消息的主題,就會立即獲得該主題下最新的保留消息。如果訂閱的主題帶有通配符,那么就會收到相匹配的每個(gè)主題下的保留消息。具體的設(shè)計(jì)思路為,對于服務(wù)端來說每個(gè)主題僅會保留唯一一個(gè)Retain消息,存儲在該主題尾部對應(yīng)的訂閱樹節(jié)點(diǎn)的retainmsg成員變量中,新的Retain消息會不斷覆蓋之前的。如果想刪除某主題下的Retain消息,可以發(fā)布相同主題的,Retain字段為1并且內(nèi)容為“-”的消息來刪除。實(shí)際實(shí)現(xiàn)中,服務(wù)端收到消息后會先將其存儲在訂閱樹中匹配的節(jié)點(diǎn)里,在節(jié)點(diǎn)處理待發(fā)數(shù)據(jù)時(shí),遇到保留消息會存儲到retainmsg中。節(jié)點(diǎn)數(shù)據(jù)發(fā)送完畢就會清空待發(fā)數(shù)據(jù)隊(duì)列。待新的訂閱者到來時(shí),如果其訂閱的主題對應(yīng)的節(jié)點(diǎn)中retainmsg不為空,則將其中的保留消息發(fā)送給新的訂閱者(客戶端),使新訂閱者立即獲得該主題下最新的消息。

    2.2 MQTT應(yīng)用程序

    MQTT應(yīng)用程序主要包括客戶端應(yīng)用程序以及服務(wù)端應(yīng)用程序,分別由類ns3::MqttClient和類ns3::MqttBroker實(shí)現(xiàn)。客戶端應(yīng)用程序主要負(fù)責(zé)MQTT流量生成,可以設(shè)置的參數(shù)包括數(shù)據(jù)包大小、總數(shù)、發(fā)包間隔、發(fā)送速率、數(shù)據(jù)包中攜帶的主題和內(nèi)容、數(shù)據(jù)包中攜帶的消息是否為保留消息以及發(fā)送所需的服務(wù)質(zhì)量Qos(默認(rèn)為Qos0)。而服務(wù)端應(yīng)用程序可設(shè)置時(shí)間進(jìn)行定時(shí)打開和關(guān)閉,在關(guān)閉后將調(diào)用Count函數(shù)進(jìn)行數(shù)據(jù)統(tǒng)計(jì)并將結(jié)果輸出到控制臺或指定文件中。為方便進(jìn)行延遲等數(shù)據(jù)的統(tǒng)計(jì),在MQTT數(shù)據(jù)包中還添加了時(shí)間戳TimestampTag,但是NS-3中計(jì)算packet大小時(shí)會自動忽略TimestampTag對象的大小。表2、表3分別列出了服務(wù)端和客戶端應(yīng)用程序的主要函數(shù)及說明。

    表2 服務(wù)端應(yīng)用程序函數(shù)列表Table 2 Server application function list

    表3 客戶端應(yīng)用程序函數(shù)列表Table 3 Client application function list

    2.3 MQTT幫助程序

    MQTT幫助程序主要目的在于提供更加簡便的高級接口,表4列出了這些高級接口。它們?yōu)楣?jié)點(diǎn)批量安裝MQTT應(yīng)用程序和設(shè)置屬性提供方便。該部分包括MQTT客戶端以及服務(wù)端兩個(gè)幫助程序,分別由類ns3::MqttClientHelper和類ns3::MqttBrokerHelper實(shí)現(xiàn)。二者均提供了Install方法用于在節(jié)點(diǎn)中簡便地安裝應(yīng)用程序,同時(shí)提供兩種不同的安裝方式(由傳入的參數(shù)決定),分為單獨(dú)安裝和批量安裝。單獨(dú)安裝可對某一節(jié)點(diǎn)的應(yīng)用程序單獨(dú)進(jìn)行屬性設(shè)置,而批量安裝則會針對列表內(nèi)所有節(jié)點(diǎn)統(tǒng)一安裝屬性相同的應(yīng)用程序。

    表4 MQTT幫助程序接口列表Table 4 MQTT helper interface list

    3 使用說明及仿真測試

    3.1 集成方法

    本文選擇ns-3.30版本的NS-3為例說明擴(kuò)展的軟件包如何安裝到NS-3仿真平臺中。NS-3的安裝環(huán)境為ubuntu18.04 Linux操作系統(tǒng),內(nèi)核版本為5.4.0-73-generic。具體的集成方法如下。

    (1)下載ns-3.30版本的NS-3軟件。

    (2)參照NS-3官方文檔安裝成功后,切換到ns-allinone-3.30/ns-3.30/src目錄,在該目錄下打開終端,輸入sudo./create-module.py ns3-mqtt命令,利用create-module.py腳本創(chuàng)建一個(gè)新的ns3-mqtt模塊。

    (3)模塊創(chuàng)建完成后,進(jìn)入ns-allinone-3.30/ns-3.30/src/ns3-mqtt目錄,也就是新創(chuàng)建模塊的文件夾中,用所擴(kuò)展的ns3-mqtt軟件包里的文件替換這個(gè)文件夾下的所有文件。

    (4)然后返回至ns-allinone-3.30/ns-3.30目錄下執(zhí)行sudo./waf configure命令,對NS-3進(jìn)行重新配置,編譯系統(tǒng)會檢查NS-3依賴的軟件包是否已經(jīng)成功安裝。

    (5)最后在相同目錄下執(zhí)行sudo./waf命令進(jìn)行編譯,編譯無錯(cuò)誤則ns3-mqtt安裝成功。

    3.2 仿真示例

    3.2.1 仿真設(shè)置

    本文設(shè)計(jì)的仿真實(shí)驗(yàn)旨在給出一個(gè)示例作為參考,同時(shí)檢驗(yàn)框架實(shí)現(xiàn)的效果。為了和文獻(xiàn)[5]中使用OMNet++進(jìn)行的仿真實(shí)驗(yàn)結(jié)果進(jìn)行對比,本文中的仿真參數(shù)配置盡量與其接近。實(shí)驗(yàn)?zāi)M的是工業(yè)場景下空氣狀況的監(jiān)測,涉及溫濕度傳感器和紅外氣體傳感器,分別用于空氣溫濕度的監(jiān)測和空氣污染物的檢測??臻g設(shè)定在100 m×100 m的范圍內(nèi),節(jié)點(diǎn)的分布分為兩個(gè)區(qū)域,左側(cè)區(qū)域(60 m×100 m)代表了工業(yè)生產(chǎn)區(qū)域,右側(cè)區(qū)域(20 m×100 m)代表了工業(yè)數(shù)據(jù)監(jiān)測區(qū)域,MQTT服務(wù)端應(yīng)用程序安裝在坐標(biāo)為(50,50)的中心位置節(jié)點(diǎn)(位于工業(yè)生產(chǎn)區(qū)域內(nèi)),訂閱方MQTT客戶端應(yīng)用程序安裝在右側(cè)工業(yè)數(shù)據(jù)監(jiān)測區(qū)域的邊緣位置,用于收集傳感器發(fā)送的數(shù)據(jù)。其他發(fā)布方MQTT客戶端應(yīng)用程序都安裝在左側(cè)工業(yè)生產(chǎn)區(qū)域的節(jié)點(diǎn)中,工業(yè)生產(chǎn)區(qū)域的節(jié)點(diǎn)分布采用ns3::UniformDiscPositionAllocator模型以恒定的密度隨機(jī)均勻地分布在以(30,50)坐標(biāo)為圓心半徑30 m的圓型區(qū)域內(nèi),移動模型選擇的是隨機(jī)圓盤靜態(tài)分布模型,所有節(jié)點(diǎn)在圓盤范圍內(nèi)隨機(jī)靜態(tài)分布,通過使用NetAnim動畫工具展示了該布局,圖5給出了該布局的一個(gè)網(wǎng)絡(luò)拓?fù)涫纠A硗夥抡鎸?shí)驗(yàn)中發(fā)布方客戶端設(shè)置為每隔5 s發(fā)送固定大小數(shù)據(jù)包以生成流量,同時(shí)所有模擬運(yùn)行10次取平均值以增加可信度,每次模擬運(yùn)行120 s。仿真實(shí)驗(yàn)的節(jié)點(diǎn)數(shù)量選為{1,30,60,90,120,150,180,210,240,270,300,330,360,390,420},和文獻(xiàn)[5]中不同的原因在于為了觀察當(dāng)更大數(shù)量節(jié)點(diǎn)存在時(shí),吞吐量及延遲的表現(xiàn),這也是以前的研究所忽略的地方(注意這里的節(jié)點(diǎn)數(shù)量是指作為發(fā)布方的節(jié)點(diǎn)的數(shù)量)。同時(shí)考慮到仿真設(shè)定的空氣監(jiān)測場景不是延遲敏感型的,并且文獻(xiàn)[5]中的實(shí)驗(yàn)也采用了無線通信,因此通信模型選擇了wifi無線模型,Qos設(shè)置為默認(rèn)值0。仿真中的數(shù)據(jù)包大小設(shè)置為12字節(jié)以更好地符合傳感器等小型設(shè)備發(fā)包較小的特點(diǎn),同時(shí)也增設(shè)了大小為120字節(jié)的數(shù)據(jù)包用于觀察數(shù)據(jù)包大小對吞吐量和延遲的影響。

    圖5 網(wǎng)絡(luò)拓?fù)涫纠鼺ig.5 Example of network topology

    3.2.2 性能指標(biāo)

    MQTT的性能評估指標(biāo)采用的是平均時(shí)延和最大吞吐量。該性能指標(biāo)對于設(shè)備的采購和網(wǎng)絡(luò)部署具有關(guān)鍵的指導(dǎo)作用。性能指標(biāo)中沒有選擇平均吞吐量的原因在于平均吞吐量只能反映設(shè)備一般情況下的性能,而工業(yè)環(huán)境中有著更嚴(yán)格的要求,即使在流量最高峰時(shí)也需滿足服務(wù)需求,因此在工業(yè)環(huán)境下最大吞吐量更有意義,能更精確地指導(dǎo)服務(wù)器等設(shè)備的參數(shù)選擇。以下為兩個(gè)指標(biāo)的具體描述。

    (1)平均時(shí)延:所有分組(數(shù)據(jù)包)從源節(jié)點(diǎn)到達(dá)目標(biāo)節(jié)點(diǎn)所花費(fèi)的時(shí)間的平均值,單位為s。

    (2)最大吞吐量:單位時(shí)間內(nèi)節(jié)點(diǎn)接收的最大數(shù)據(jù)量(分組大小之和),單位為bit/s。

    3.2.3 仿真結(jié)果及分析

    仿真實(shí)驗(yàn)總共分為兩組。第一組仿真實(shí)驗(yàn),數(shù)據(jù)包大小設(shè)置為12 Byte。觀察了客戶端數(shù)量對吞吐量和端到端延遲的影響,以獲取該仿真環(huán)境中每個(gè)服務(wù)端應(yīng)服務(wù)的最佳客戶端數(shù)量。圖6顯示了隨著客戶端數(shù)量的變化吞吐量大小的改變。圖7則顯示了隨著客戶端數(shù)量的變化延遲的改變。仿真結(jié)果顯示吞吐量在客戶端數(shù)量增長的初期不斷大幅度上升,而到達(dá)一定數(shù)量后上升幅度驟降,甚至開始下降,這與文獻(xiàn)[5]中觀察到的現(xiàn)象極其相似。

    圖6 吞吐量峰值隨客戶端數(shù)量的變化Fig.6 Peak throughput variation with number of clients

    圖7 延遲隨客戶端數(shù)量的變化Fig.7 Latency variation with number of clients

    具體來看,客戶端數(shù)量是達(dá)到210后吞吐量的增幅開始驟降,甚至出現(xiàn)了負(fù)增長。這說明初期在一定范圍內(nèi)隨著節(jié)點(diǎn)數(shù)量的增多,數(shù)據(jù)流量增加,帶寬利用率提高,同時(shí)網(wǎng)絡(luò)中的沖突和丟包現(xiàn)象較少,導(dǎo)致吞吐量提高。但是隨著節(jié)點(diǎn)越來越多,網(wǎng)絡(luò)信道過度使用、數(shù)據(jù)包丟失、網(wǎng)絡(luò)沖突等現(xiàn)象就會發(fā)生。這在工業(yè)環(huán)境中往往是很不利的。為此在實(shí)際部署前應(yīng)充分考慮每個(gè)服務(wù)端能服務(wù)的客戶端數(shù)量,在保證通訊質(zhì)量和數(shù)據(jù)完整性前提下最大限度地提升其吞吐量,提高資源利用率,節(jié)約成本。同時(shí),實(shí)驗(yàn)表明延遲雖然整體會隨著節(jié)點(diǎn)數(shù)量的增加而不斷增加,但是在客戶端數(shù)量達(dá)到240后延遲的增幅會加大。這是由于網(wǎng)絡(luò)數(shù)據(jù)包逐漸增多,在一定范圍內(nèi)只是輕微擁堵造成延遲小幅度增加,但隨著客戶端的數(shù)量越來越多,數(shù)據(jù)包也會越來越多,而網(wǎng)絡(luò)信道的容量是有限的,會發(fā)生嚴(yán)重?fù)矶聸_突,并且接收方客戶端的接收數(shù)據(jù)的速率也是有上限的,會產(chǎn)生排隊(duì)時(shí)延等問題,因此在當(dāng)前仿真場景下,每個(gè)服務(wù)端服務(wù)的發(fā)布方客戶端的最佳數(shù)量應(yīng)為210左右。

    第二組仿真實(shí)驗(yàn),則是觀察了不同數(shù)據(jù)包大小對訂閱方客戶端吞吐量和延遲變化的影響,以獲取相關(guān)啟發(fā)。針對吞吐量,實(shí)驗(yàn)觀察的是其達(dá)到增量拐點(diǎn)時(shí)對應(yīng)的客戶端數(shù)量,增量拐點(diǎn)指在該點(diǎn)以后吞吐量增量驟降的點(diǎn)。實(shí)驗(yàn)設(shè)置兩種數(shù)據(jù)包大小,分別是12 Byte和120 Byte。增加的120 Byte數(shù)據(jù)包用作對比,除單次發(fā)包大小不同外,其他仿真參數(shù)均不變。為方便對比效果的展示,將120 Byte時(shí)的吞吐量增量數(shù)據(jù)除以10。這樣處理是考慮到數(shù)據(jù)包大小增加十倍后,吞吐量也增加十倍左右。圖8顯示了在不同數(shù)據(jù)包大小下吞吐量增量隨著客戶端數(shù)量增加的變化情況。

    從圖8中可以觀察到,數(shù)據(jù)包大小為12 Byte時(shí)到達(dá)增量拐點(diǎn)對應(yīng)的客戶端數(shù)量為210,而120 Byte時(shí)為150,隨著數(shù)據(jù)包的增大增量拐點(diǎn)提前了。這是因?yàn)閿?shù)據(jù)包的增大會更容易導(dǎo)致網(wǎng)絡(luò)擁塞。因此想要同時(shí)高質(zhì)量地服務(wù)更多的客戶端則需要更小的消息負(fù)載來降低數(shù)據(jù)包大小。

    圖8 吞吐量增量隨客戶端數(shù)量的變化對比Fig.8 Comparison of throughput increment with number of clients

    另外該組實(shí)驗(yàn)也觀察到了數(shù)據(jù)包增大對端到端的延遲的影響,圖9顯示了不同數(shù)據(jù)包大小下延遲隨客戶端數(shù)量增加的變化情況。

    圖9 延遲隨客戶端數(shù)量的變化對比Fig.9 Comparison of latency with number of clients

    觀察圖9可以發(fā)現(xiàn),在210個(gè)客戶端內(nèi),不同的負(fù)載下二者的延遲相差很少,但是隨著客戶端數(shù)量的繼續(xù)增加,更大的數(shù)據(jù)包就會導(dǎo)致更高的端到端的延遲。這是因?yàn)橥^大數(shù)據(jù)包被接收所需的時(shí)間更長,而在客戶端較少時(shí)由于接收方的收包能力是冗余的,單位時(shí)間內(nèi)接收的數(shù)據(jù)量一直未到達(dá)極限值,因此對延遲的影響極小。從以上吞吐量增量和延遲的對比來看,較小的數(shù)據(jù)包都會帶來更優(yōu)的性能。為此在實(shí)際部署MQTT時(shí)應(yīng)盡量降低單次發(fā)送數(shù)據(jù)包的大小以獲取更好的性能及更低的部署成本。

    4 結(jié)束語

    本文提出了ns3-mqtt擴(kuò)展框架,并以軟件包的形式集成到NS-3中,使得在NS-3中模擬部署MQTT成為可能,極大地方便了相關(guān)研究的展開。本文的框架設(shè)計(jì)思路以及協(xié)議的實(shí)現(xiàn)方法對NS-3中實(shí)現(xiàn)或改進(jìn)其他應(yīng)用層協(xié)議也具有借鑒意義,可供讀者參考。同時(shí),為驗(yàn)證框架實(shí)現(xiàn)的有效性,參照文獻(xiàn)[5]中使用OMNet++仿真器的仿真參數(shù),在集成后的NS-3中進(jìn)行了相似的仿真實(shí)驗(yàn)。仿真結(jié)果表明該框架能夠在NS-3中按照預(yù)期運(yùn)行,且觀察到了和文獻(xiàn)[5]中相似的實(shí)驗(yàn)現(xiàn)象。下一步的工作主要集中在開發(fā)安全模塊,繼續(xù)豐富和擴(kuò)展本文提出的框架,通過仿真分析一些新穎的MQTT安全增強(qiáng)方案,并探究進(jìn)一步改進(jìn)的方法。

    猜你喜歡
    服務(wù)端吞吐量數(shù)據(jù)包
    SmartSniff
    云存儲中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
    新時(shí)期《移動Web服務(wù)端開發(fā)》課程教學(xué)改革的研究
    在Windows Server 2008上創(chuàng)建應(yīng)用
    2016年10月長三角地區(qū)主要港口吞吐量
    集裝箱化(2016年11期)2017-03-29 16:15:48
    2016年11月長三角地區(qū)主要港口吞吐量
    集裝箱化(2016年12期)2017-03-20 08:32:27
    基于Libpcap的網(wǎng)絡(luò)數(shù)據(jù)包捕獲器的設(shè)計(jì)與實(shí)現(xiàn)
    2014年1月長三角地區(qū)主要港口吞吐量
    集裝箱化(2014年2期)2014-03-15 19:00:33
    視覺注意的數(shù)據(jù)包優(yōu)先級排序策略研究
    上海港11月集裝箱吞吐量同比增長4.25%
    廣東造船(2013年6期)2013-04-29 16:34:55
    禁无遮挡网站| 成年av动漫网址| 久久久a久久爽久久v久久| 久久亚洲国产成人精品v| 国产视频一区二区在线看| www日本黄色视频网| 国产精品日韩av在线免费观看| 一本久久中文字幕| 蜜桃久久精品国产亚洲av| 精品国内亚洲2022精品成人| 日本黄色视频三级网站网址| 菩萨蛮人人尽说江南好唐韦庄 | 搞女人的毛片| 国产 一区精品| 十八禁网站免费在线| 夜夜爽天天搞| 高清毛片免费看| 国产精品乱码一区二三区的特点| 欧美最新免费一区二区三区| 无遮挡黄片免费观看| 国产高清激情床上av| 国产成人福利小说| 国产麻豆成人av免费视频| 淫妇啪啪啪对白视频| 国产老妇女一区| 成人永久免费在线观看视频| 亚洲欧美日韩无卡精品| а√天堂www在线а√下载| 麻豆精品久久久久久蜜桃| 美女被艹到高潮喷水动态| 永久网站在线| 亚洲精品色激情综合| 亚洲高清免费不卡视频| 十八禁国产超污无遮挡网站| 国产免费一级a男人的天堂| 99热只有精品国产| 97热精品久久久久久| 欧美另类亚洲清纯唯美| .国产精品久久| 久久这里只有精品中国| 欧美xxxx黑人xx丫x性爽| 亚洲人成网站在线播| 久久久久国产精品人妻aⅴ院| 美女大奶头视频| 少妇裸体淫交视频免费看高清| 久久久久性生活片| 久久精品国产亚洲av涩爱 | 床上黄色一级片| 麻豆国产av国片精品| 国产成人a区在线观看| av.在线天堂| 亚洲一级一片aⅴ在线观看| 欧美xxxx黑人xx丫x性爽| 99热这里只有精品一区| 久久鲁丝午夜福利片| 国产真实伦视频高清在线观看| 99九九线精品视频在线观看视频| 97超级碰碰碰精品色视频在线观看| 免费av观看视频| 又粗又爽又猛毛片免费看| 国产一区二区激情短视频| 国产片特级美女逼逼视频| 丝袜喷水一区| 久久鲁丝午夜福利片| 免费人成在线观看视频色| 一区二区三区免费毛片| 男人的好看免费观看在线视频| 简卡轻食公司| 成年女人毛片免费观看观看9| 久久精品国产鲁丝片午夜精品| 欧美最黄视频在线播放免费| 国产成人freesex在线 | or卡值多少钱| 国产成人a∨麻豆精品| 成人性生交大片免费视频hd| 如何舔出高潮| 国产在线精品亚洲第一网站| 成人高潮视频无遮挡免费网站| 黄色一级大片看看| 女同久久另类99精品国产91| 成人三级黄色视频| 18禁在线播放成人免费| 日本三级黄在线观看| 欧美最新免费一区二区三区| 少妇的逼好多水| 国产精品美女特级片免费视频播放器| 欧美高清成人免费视频www| 日产精品乱码卡一卡2卡三| av在线天堂中文字幕| 干丝袜人妻中文字幕| 亚洲欧美日韩东京热| 国产不卡一卡二| 嫩草影院入口| 可以在线观看毛片的网站| 嫩草影视91久久| 色综合站精品国产| 老司机福利观看| 国产精品一区二区三区四区免费观看 | www.色视频.com| 99久久精品国产国产毛片| 人妻丰满熟妇av一区二区三区| 12—13女人毛片做爰片一| 97在线视频观看| 免费在线观看成人毛片| 色综合色国产| 国产一区亚洲一区在线观看| 国产人妻一区二区三区在| 中文字幕久久专区| 三级经典国产精品| 日韩人妻高清精品专区| 免费电影在线观看免费观看| 国产麻豆成人av免费视频| 色5月婷婷丁香| 美女免费视频网站| 97热精品久久久久久| 黄色欧美视频在线观看| 日韩人妻高清精品专区| 超碰av人人做人人爽久久| 亚洲av不卡在线观看| 精品福利观看| 麻豆国产97在线/欧美| 久久人人爽人人片av| 国产免费男女视频| 91麻豆精品激情在线观看国产| 毛片女人毛片| 日日摸夜夜添夜夜添av毛片| 久久亚洲精品不卡| 成人性生交大片免费视频hd| 黄色一级大片看看| 天堂动漫精品| 麻豆精品久久久久久蜜桃| 久久鲁丝午夜福利片| 国产精品久久久久久精品电影| 在现免费观看毛片| 内射极品少妇av片p| 热99在线观看视频| 最近2019中文字幕mv第一页| 少妇高潮的动态图| 亚洲内射少妇av| 最新在线观看一区二区三区| 久久精品国产亚洲av涩爱 | 在线观看午夜福利视频| 波多野结衣巨乳人妻| 亚洲自拍偷在线| 国产精品久久久久久av不卡| 成人欧美大片| 成人国产麻豆网| 久久九九热精品免费| 成人欧美大片| 九九久久精品国产亚洲av麻豆| 毛片女人毛片| 少妇熟女aⅴ在线视频| 精品一区二区免费观看| 在线免费观看不下载黄p国产| 日日摸夜夜添夜夜添av毛片| 国产视频一区二区在线看| 国产私拍福利视频在线观看| 在线看三级毛片| 成人永久免费在线观看视频| 免费高清视频大片| 老司机福利观看| 国产极品精品免费视频能看的| 中文字幕熟女人妻在线| 色尼玛亚洲综合影院| 身体一侧抽搐| 99国产精品一区二区蜜桃av| 国产av麻豆久久久久久久| 国产 一区精品| 俺也久久电影网| 中文字幕av在线有码专区| 亚洲成人中文字幕在线播放| 麻豆国产av国片精品| 欧美+日韩+精品| 久久精品国产清高在天天线| 久久99热6这里只有精品| 少妇高潮的动态图| 狂野欧美激情性xxxx在线观看| 一卡2卡三卡四卡精品乱码亚洲| 高清午夜精品一区二区三区 | 少妇熟女欧美另类| 亚洲电影在线观看av| 91久久精品国产一区二区三区| 如何舔出高潮| 又粗又爽又猛毛片免费看| 亚洲国产精品成人综合色| 99热这里只有是精品50| 搡老岳熟女国产| 99久久精品国产国产毛片| 日韩成人伦理影院| 国产精品人妻久久久影院| 成人鲁丝片一二三区免费| 在线天堂最新版资源| 淫秽高清视频在线观看| 男女那种视频在线观看| 3wmmmm亚洲av在线观看| 狂野欧美白嫩少妇大欣赏| 成年版毛片免费区| 免费大片18禁| 成人欧美大片| 美女免费视频网站| 欧美zozozo另类| 国产单亲对白刺激| 免费av观看视频| 久久久午夜欧美精品| 日本a在线网址| 精品久久久久久久久久免费视频| 在线观看一区二区三区| 日韩 亚洲 欧美在线| 日韩国内少妇激情av| 日本精品一区二区三区蜜桃| 女人被狂操c到高潮| av.在线天堂| 综合色丁香网| 免费一级毛片在线播放高清视频| av免费在线看不卡| 桃色一区二区三区在线观看| 国内少妇人妻偷人精品xxx网站| 91在线精品国自产拍蜜月| 久久久精品大字幕| 男人舔奶头视频| 国产精品免费一区二区三区在线| 无遮挡黄片免费观看| 变态另类丝袜制服| 国产亚洲av嫩草精品影院| 国产在视频线在精品| 在线a可以看的网站| 精华霜和精华液先用哪个| a级毛片a级免费在线| aaaaa片日本免费| 久久久久免费精品人妻一区二区| 最新中文字幕久久久久| 97热精品久久久久久| 国产av一区在线观看免费| 亚洲av五月六月丁香网| 久久精品久久久久久噜噜老黄 | 网址你懂的国产日韩在线| 热99在线观看视频| 国模一区二区三区四区视频| 国产 一区 欧美 日韩| 国产熟女欧美一区二区| 国产一区亚洲一区在线观看| 成人av在线播放网站| 成人精品一区二区免费| 日日啪夜夜撸| 亚洲性夜色夜夜综合| 日本黄色片子视频| 老熟妇乱子伦视频在线观看| 男女下面进入的视频免费午夜| 性插视频无遮挡在线免费观看| 国产探花在线观看一区二区| 在线免费观看的www视频| 久久精品国产99精品国产亚洲性色| 国产午夜福利久久久久久| 天美传媒精品一区二区| 人人妻人人看人人澡| 日韩欧美三级三区| 国产在视频线在精品| 精品人妻视频免费看| 好男人在线观看高清免费视频| 国产精品国产高清国产av| 成年女人永久免费观看视频| 99久久成人亚洲精品观看| 亚洲乱码一区二区免费版| 99在线视频只有这里精品首页| h日本视频在线播放| 国产精品精品国产色婷婷| 久久久精品大字幕| 九九久久精品国产亚洲av麻豆| 最新在线观看一区二区三区| 欧美又色又爽又黄视频| 亚洲人与动物交配视频| 1000部很黄的大片| 美女cb高潮喷水在线观看| 日韩,欧美,国产一区二区三区 | 久久精品国产清高在天天线| 别揉我奶头 嗯啊视频| av中文乱码字幕在线| 男人和女人高潮做爰伦理| 又黄又爽又免费观看的视频| 一级毛片久久久久久久久女| 中国美白少妇内射xxxbb| 少妇的逼好多水| 乱码一卡2卡4卡精品| 亚洲精品日韩av片在线观看| 日韩 亚洲 欧美在线| 成年女人看的毛片在线观看| 国模一区二区三区四区视频| 波野结衣二区三区在线| 99久久无色码亚洲精品果冻| 看免费成人av毛片| av在线播放精品| 97超碰精品成人国产| 日本精品一区二区三区蜜桃| 观看免费一级毛片| av免费在线看不卡| 特大巨黑吊av在线直播| 国产午夜精品久久久久久一区二区三区 | 国产精品永久免费网站| 午夜a级毛片| 久久久国产成人精品二区| 日韩人妻高清精品专区| 日韩 亚洲 欧美在线| 日本黄大片高清| 亚洲婷婷狠狠爱综合网| 国语自产精品视频在线第100页| 免费看美女性在线毛片视频| 91狼人影院| 亚洲精品色激情综合| 美女高潮的动态| 亚洲精品亚洲一区二区| 欧美xxxx性猛交bbbb| 国产精品一区二区性色av| 插阴视频在线观看视频| 国产老妇女一区| 夜夜爽天天搞| .国产精品久久| 欧美激情在线99| 久久久久久久久久成人| 在线观看美女被高潮喷水网站| 小蜜桃在线观看免费完整版高清| 精品久久国产蜜桃| 看片在线看免费视频| 亚州av有码| 精品人妻一区二区三区麻豆 | 成人性生交大片免费视频hd| 一进一出抽搐gif免费好疼| 欧美成人一区二区免费高清观看| 日本成人三级电影网站| 一区二区三区免费毛片| 女同久久另类99精品国产91| 一本久久中文字幕| 精品一区二区三区视频在线观看免费| 亚洲四区av| 99视频精品全部免费 在线| 精品免费久久久久久久清纯| 久久久久久久久中文| 国产不卡一卡二| 精品一区二区三区视频在线| 国产 一区 欧美 日韩| 国产精品美女特级片免费视频播放器| 亚洲精品一卡2卡三卡4卡5卡| 国产精品一及| 男女之事视频高清在线观看| av黄色大香蕉| 中文字幕av成人在线电影| 免费看美女性在线毛片视频| 日韩大尺度精品在线看网址| 久久精品国产自在天天线| 亚洲欧美清纯卡通| 欧美绝顶高潮抽搐喷水| 亚洲熟妇中文字幕五十中出| 国产黄色视频一区二区在线观看 | 国产黄a三级三级三级人| 性欧美人与动物交配| 国产精品久久久久久久电影| 一级毛片电影观看 | 国产成人福利小说| 亚洲av中文字字幕乱码综合| 嫩草影院精品99| 亚洲成av人片在线播放无| 国产一区二区三区在线臀色熟女| 久久久久久久久中文| 成人特级av手机在线观看| 天堂网av新在线| 十八禁网站免费在线| 中文字幕久久专区| 精品午夜福利在线看| 欧美中文日本在线观看视频| 久久欧美精品欧美久久欧美| 欧美色欧美亚洲另类二区| 在线观看免费视频日本深夜| 最近中文字幕高清免费大全6| 久久久久久久久久成人| 亚洲aⅴ乱码一区二区在线播放| 国产精品99久久久久久久久| 日日干狠狠操夜夜爽| 不卡视频在线观看欧美| 卡戴珊不雅视频在线播放| 又黄又爽又免费观看的视频| 一区二区三区免费毛片| 午夜福利在线观看免费完整高清在 | 成人性生交大片免费视频hd| 亚洲精品日韩在线中文字幕 | 久久亚洲国产成人精品v| 乱人视频在线观看| 欧美人与善性xxx| 欧美日韩乱码在线| 亚洲色图av天堂| 中国美女看黄片| 成人亚洲欧美一区二区av| 亚洲va在线va天堂va国产| 国产精品久久久久久久电影| 别揉我奶头~嗯~啊~动态视频| 亚洲成人久久性| 国产麻豆成人av免费视频| 亚洲精品在线观看二区| 亚洲精品456在线播放app| 18禁黄网站禁片免费观看直播| 午夜福利成人在线免费观看| 国产成人91sexporn| 乱码一卡2卡4卡精品| 国产精品人妻久久久影院| 联通29元200g的流量卡| or卡值多少钱| 人妻制服诱惑在线中文字幕| 久久天躁狠狠躁夜夜2o2o| 熟女电影av网| 乱系列少妇在线播放| 久久欧美精品欧美久久欧美| 国产精品久久久久久久久免| 亚洲美女视频黄频| 又黄又爽又刺激的免费视频.| 亚洲精品色激情综合| 免费人成在线观看视频色| 91久久精品国产一区二区三区| 国产亚洲精品av在线| 一夜夜www| 三级经典国产精品| 国内精品宾馆在线| 日韩av不卡免费在线播放| 麻豆精品久久久久久蜜桃| 日本色播在线视频| 99久久成人亚洲精品观看| 亚洲av美国av| 在线国产一区二区在线| 日本爱情动作片www.在线观看 | 午夜爱爱视频在线播放| 久久人人精品亚洲av| 老司机午夜福利在线观看视频| 久久亚洲精品不卡| 亚洲在线观看片| 一级毛片电影观看 | 成熟少妇高潮喷水视频| 一进一出好大好爽视频| 成人一区二区视频在线观看| 俄罗斯特黄特色一大片| 99久久九九国产精品国产免费| 亚洲精品影视一区二区三区av| 熟女电影av网| 欧美xxxx性猛交bbbb| 无遮挡黄片免费观看| 蜜桃久久精品国产亚洲av| 亚洲一级一片aⅴ在线观看| 成人欧美大片| 搡老妇女老女人老熟妇| 插逼视频在线观看| 最近的中文字幕免费完整| 日韩欧美精品v在线| 蜜桃亚洲精品一区二区三区| 最新中文字幕久久久久| 一进一出抽搐gif免费好疼| 综合色av麻豆| 欧美最黄视频在线播放免费| 日韩欧美 国产精品| 天天躁日日操中文字幕| 久久久久国产网址| av在线播放精品| 国产伦精品一区二区三区四那| 最新中文字幕久久久久| 日本黄色片子视频| 久久久午夜欧美精品| 老司机午夜福利在线观看视频| 少妇丰满av| 最近最新中文字幕大全电影3| 91麻豆精品激情在线观看国产| 亚洲人成网站在线播| 亚洲成人中文字幕在线播放| 亚洲中文日韩欧美视频| 国产男人的电影天堂91| 青春草视频在线免费观看| 国产欧美日韩精品亚洲av| 精品一区二区三区av网在线观看| 亚洲av免费在线观看| 淫妇啪啪啪对白视频| 精品午夜福利在线看| 天堂影院成人在线观看| 国产成人91sexporn| 国产 一区 欧美 日韩| 天堂动漫精品| 精品久久久久久久久久免费视频| 国产成人91sexporn| 久久久a久久爽久久v久久| 亚洲自偷自拍三级| 免费观看精品视频网站| 97超视频在线观看视频| av黄色大香蕉| 久久久久久久久久黄片| 亚洲av成人精品一区久久| 日本精品一区二区三区蜜桃| 亚洲天堂国产精品一区在线| 免费av毛片视频| 欧美成人精品欧美一级黄| 搡老岳熟女国产| 老师上课跳d突然被开到最大视频| 麻豆国产97在线/欧美| 日韩国内少妇激情av| 美女cb高潮喷水在线观看| 99国产极品粉嫩在线观看| 亚洲久久久久久中文字幕| 亚洲av成人av| 日韩,欧美,国产一区二区三区 | 国产成年人精品一区二区| 欧美高清成人免费视频www| 一个人观看的视频www高清免费观看| 国内精品美女久久久久久| 欧美丝袜亚洲另类| 一a级毛片在线观看| 精品久久久噜噜| 欧美性猛交╳xxx乱大交人| 国产精品1区2区在线观看.| 国产精品一区www在线观看| 欧美日韩精品成人综合77777| 99热这里只有是精品50| 综合色丁香网| 国产午夜福利久久久久久| 夜夜夜夜夜久久久久| 日日撸夜夜添| 搡老熟女国产l中国老女人| 一级毛片我不卡| 婷婷精品国产亚洲av在线| 久久久久久久久久久丰满| 亚洲熟妇熟女久久| 色综合色国产| 简卡轻食公司| 国产高清激情床上av| 看片在线看免费视频| 99久久无色码亚洲精品果冻| 中文字幕av成人在线电影| 免费黄网站久久成人精品| 成人国产麻豆网| 中文字幕人妻熟人妻熟丝袜美| 精品久久久噜噜| 婷婷精品国产亚洲av在线| 最近的中文字幕免费完整| 精品一区二区三区人妻视频| 成人无遮挡网站| 亚洲精品一卡2卡三卡4卡5卡| 欧美成人a在线观看| 免费av观看视频| 国产毛片a区久久久久| 成年女人永久免费观看视频| 国产色婷婷99| 国产一区二区激情短视频| 波多野结衣巨乳人妻| 乱人视频在线观看| 99久久九九国产精品国产免费| 性色avwww在线观看| 特级一级黄色大片| 亚洲国产精品成人综合色| 精品福利观看| 亚洲va在线va天堂va国产| 永久网站在线| 麻豆乱淫一区二区| 人人妻,人人澡人人爽秒播| 国产v大片淫在线免费观看| 精品一区二区免费观看| 在线播放国产精品三级| 国产午夜精品久久久久久一区二区三区 | 亚洲国产精品sss在线观看| 蜜桃亚洲精品一区二区三区| 3wmmmm亚洲av在线观看| 99久国产av精品| eeuss影院久久| 高清毛片免费看| 亚洲av.av天堂| 亚洲国产精品久久男人天堂| 一进一出好大好爽视频| 十八禁国产超污无遮挡网站| 亚州av有码| 美女被艹到高潮喷水动态| 中文字幕熟女人妻在线| 中国美白少妇内射xxxbb| 午夜亚洲福利在线播放| 久久亚洲国产成人精品v| а√天堂www在线а√下载| 色综合色国产| 亚洲高清免费不卡视频| 免费观看在线日韩| av女优亚洲男人天堂| 一区二区三区高清视频在线| 精品无人区乱码1区二区| 国产不卡一卡二| 在线国产一区二区在线| 99久久精品国产国产毛片| 国产一区二区在线观看日韩| 少妇的逼水好多| 男插女下体视频免费在线播放| 亚洲精品成人久久久久久| av专区在线播放| 日韩欧美精品免费久久| 亚洲国产精品sss在线观看| 日日摸夜夜添夜夜添小说| 久久久久国内视频| av中文乱码字幕在线| 国内精品久久久久精免费| 欧美成人a在线观看| av在线蜜桃| 国产亚洲欧美98| 久久这里只有精品中国| 亚洲国产精品久久男人天堂| 日韩欧美三级三区| 日韩一区二区视频免费看| 国产国拍精品亚洲av在线观看| 国产在线男女| 色播亚洲综合网| 精品熟女少妇av免费看| 干丝袜人妻中文字幕| 99久久精品热视频| 亚洲三级黄色毛片| 久久久精品欧美日韩精品| 色5月婷婷丁香| av在线播放精品| 亚洲第一区二区三区不卡| 中文字幕精品亚洲无线码一区| 日韩欧美精品v在线|