欧美videos另类精品-欧美videos另类极品-欧美vide-欧美va在线视频-欧美va在线观看-欧美va在线播放免费观看

你不知道的 WebSocket

2020-7-26    seo達(dá)人

在最后的 阿寶哥有話說 環(huán)節(jié),阿寶哥將介紹 WebSocket 與 HTTP 之間的關(guān)系、WebSocket 與長輪詢有什么區(qū)別、什么是 WebSocket 心跳及 Socket 是什么等內(nèi)容。


下面我們進(jìn)入正題,為了讓大家能夠更好地理解和掌握 WebSocket 技術(shù),我們先來介紹一下什么是 WebSocket。


一、什么是 WebSocket

1.1 WebSocket 誕生背景

早期,很多網(wǎng)站為了實(shí)現(xiàn)推送技術(shù),所用的技術(shù)都是輪詢。輪詢是指由瀏覽器每隔一段時(shí)間向服務(wù)器發(fā)出 HTTP 請(qǐng)求,然后服務(wù)器返回的數(shù)據(jù)給客戶端。常見的輪詢方式分為輪詢與長輪詢,它們的區(qū)別如下圖所示:




為了更加直觀感受輪詢與長輪詢之間的區(qū)別,我們來看一下具體的代碼:




這種傳統(tǒng)的模式帶來很明顯的缺點(diǎn),即瀏覽器需要不斷的向服務(wù)器發(fā)出請(qǐng)求,然而 HTTP 請(qǐng)求與響應(yīng)可能會(huì)包含較長的頭部,其中真正有效的數(shù)據(jù)可能只是很小的一部分,所以這樣會(huì)消耗很多帶寬資源。


比較新的輪詢技術(shù)是 Comet)。這種技術(shù)雖然可以實(shí)現(xiàn)雙向通信,但仍然需要反復(fù)發(fā)出請(qǐng)求。而且在 Comet 中普遍采用的 HTTP 長連接也會(huì)消耗服務(wù)器資源。


在這種情況下,HTML5 定義了 WebSocket 協(xié)議,能更好的節(jié)省服務(wù)器資源和帶寬,并且能夠更實(shí)時(shí)地進(jìn)行通訊。Websocket 使用 ws 或 wss 的統(tǒng)一資源標(biāo)志符(URI),其中 wss 表示使用了 TLS 的 Websocket。如:


ws://echo.websocket.org

wss://echo.websocket.org

WebSocket 與 HTTP 和 HTTPS 使用相同的 TCP 端口,可以繞過大多數(shù)防火墻的限制。默認(rèn)情況下,WebSocket 協(xié)議使用 80 端口;若運(yùn)行在 TLS 之上時(shí),默認(rèn)使用 443 端口。


1.2 WebSocket 簡介

WebSocket 是一種網(wǎng)絡(luò)傳輸協(xié)議,可在單個(gè) TCP 連接上進(jìn)行全雙工通信,位于 OSI 模型的應(yīng)用層。WebSocket 協(xié)議在 2011 年由 IETF 標(biāo)準(zhǔn)化為 RFC 6455,后由 RFC 7936 補(bǔ)充規(guī)范。


WebSocket 使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù)。在 WebSocket API 中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸。


介紹完輪詢和 WebSocket 的相關(guān)內(nèi)容之后,接下來我們來看一下 XHR Polling 與 WebSocket 之間的區(qū)別:




1.3 WebSocket 優(yōu)點(diǎn)

較少的控制開銷。在連接創(chuàng)建后,服務(wù)器和客戶端之間交換數(shù)據(jù)時(shí),用于協(xié)議控制的數(shù)據(jù)包頭部相對(duì)較小。

更強(qiáng)的實(shí)時(shí)性。由于協(xié)議是全雙工的,所以服務(wù)器可以隨時(shí)主動(dòng)給客戶端下發(fā)數(shù)據(jù)。相對(duì)于 HTTP 請(qǐng)求需要等待客戶端發(fā)起請(qǐng)求服務(wù)端才能響應(yīng),延遲明顯更少。

保持連接狀態(tài)。與 HTTP 不同的是,WebSocket 需要先創(chuàng)建連接,這就使得其成為一種有狀態(tài)的協(xié)議,之后通信時(shí)可以省略部分狀態(tài)信息。

更好的二進(jìn)制支持。WebSocket 定義了二進(jìn)制幀,相對(duì) HTTP,可以更輕松地處理二進(jìn)制內(nèi)容。

可以支持?jǐn)U展。WebSocket 定義了擴(kuò)展,用戶可以擴(kuò)展協(xié)議、實(shí)現(xiàn)部分自定義的子協(xié)議。

由于 WebSocket 擁有上述的優(yōu)點(diǎn),所以它被廣泛地應(yīng)用在即時(shí)通信、實(shí)時(shí)音視頻、在線教育和游戲等領(lǐng)域。對(duì)于前端開發(fā)者來說,要想使用 WebSocket 提供的強(qiáng)大能力,就必須先掌握 WebSocket API,下面阿寶哥帶大家一起來認(rèn)識(shí)一下 WebSocket API。


二、WebSocket API

在介紹 WebSocket API 之前,我們先來了解一下它的兼容性:




(圖片來源:https://caniuse.com/#search=W...)


從上圖可知,目前主流的 Web 瀏覽器都支持 WebSocket,所以我們可以在大多數(shù)項(xiàng)目中放心地使用它。


在瀏覽器中要使用 WebSocket 提供的能力,我們就必須先創(chuàng)建 WebSocket 對(duì)象,該對(duì)象提供了用于創(chuàng)建和管理 WebSocket 連接,以及可以通過該連接發(fā)送和接收數(shù)據(jù)的 API。


使用 WebSocket 構(gòu)造函數(shù),我們就能輕易地構(gòu)造一個(gè) WebSocket 對(duì)象。接下來我們將從 WebSocket 構(gòu)造函數(shù)、WebSocket 對(duì)象的屬性、方法及 WebSocket 相關(guān)的事件四個(gè)方面來介紹 WebSocket API,首先我們從 WebSocket 的構(gòu)造函數(shù)入手:


2.1 構(gòu)造函數(shù)

WebSocket 構(gòu)造函數(shù)的語法為:


const myWebSocket = new WebSocket(url [, protocols]);

相關(guān)參數(shù)說明如下:


url:表示連接的 URL,這是 WebSocket 服務(wù)器將響應(yīng)的 URL。

protocols(可選):一個(gè)協(xié)議字符串或者一個(gè)包含協(xié)議字符串的數(shù)組。這些字符串用于指定子協(xié)議,這樣單個(gè)服務(wù)器可以實(shí)現(xiàn)多個(gè) WebSocket 子協(xié)議。比如,你可能希望一臺(tái)服務(wù)器能夠根據(jù)指定的協(xié)議(protocol)處理不同類型的交互。如果不指定協(xié)議字符串,則假定為空字符串。

當(dāng)嘗試連接的端口被阻止時(shí),會(huì)拋出 SECURITY_ERR 異常。


2.2 屬性

WebSocket 對(duì)象包含以下屬性:




每個(gè)屬性的具體含義如下:


binaryType:使用二進(jìn)制的數(shù)據(jù)類型連接。

bufferedAmount(只讀):未發(fā)送至服務(wù)器的字節(jié)數(shù)。

extensions(只讀):服務(wù)器選擇的擴(kuò)展。

onclose:用于指定連接關(guān)閉后的回調(diào)函數(shù)。

onerror:用于指定連接失敗后的回調(diào)函數(shù)。

onmessage:用于指定當(dāng)從服務(wù)器接受到信息時(shí)的回調(diào)函數(shù)。

onopen:用于指定連接成功后的回調(diào)函數(shù)。

protocol(只讀):用于返回服務(wù)器端選中的子協(xié)議的名字。

readyState(只讀):返回當(dāng)前 WebSocket 的連接狀態(tài),共有 4 種狀態(tài):


CONNECTING — 正在連接中,對(duì)應(yīng)的值為 0;

OPEN — 已經(jīng)連接并且可以通訊,對(duì)應(yīng)的值為 1;

CLOSING — 連接正在關(guān)閉,對(duì)應(yīng)的值為 2;

CLOSED — 連接已關(guān)閉或者沒有連接成功,對(duì)應(yīng)的值為 3。

url(只讀):返回值為當(dāng)構(gòu)造函數(shù)創(chuàng)建 WebSocket 實(shí)例對(duì)象時(shí) URL 的絕對(duì)路徑。

2.3 方法

close([code[, reason]]):該方法用于關(guān)閉 WebSocket 連接,如果連接已經(jīng)關(guān)閉,則此方法不執(zhí)行任何操作。

send(data):該方法將需要通過 WebSocket 鏈接傳輸至服務(wù)器的數(shù)據(jù)排入隊(duì)列,并根據(jù)所需要傳輸?shù)臄?shù)據(jù)的大小來增加 bufferedAmount 的值 。若數(shù)據(jù)無法傳輸(比如數(shù)據(jù)需要緩存而緩沖區(qū)已滿)時(shí),套接字會(huì)自行關(guān)閉。

2.4 事件

使用 addEventListener() 或?qū)⒁粋€(gè)事件監(jiān)聽器賦值給 WebSocket 對(duì)象的 oneventname 屬性,來監(jiān)聽下面的事件。


close:當(dāng)一個(gè) WebSocket 連接被關(guān)閉時(shí)觸發(fā),也可以通過 onclose 屬性來設(shè)置。

error:當(dāng)一個(gè) WebSocket 連接因錯(cuò)誤而關(guān)閉時(shí)觸發(fā),也可以通過 onerror 屬性來設(shè)置。

message:當(dāng)通過 WebSocket 收到數(shù)據(jù)時(shí)觸發(fā),也可以通過 onmessage 屬性來設(shè)置。

open:當(dāng)一個(gè) WebSocket 連接成功時(shí)觸發(fā),也可以通過 onopen 屬性來設(shè)置。

介紹完 WebSocket API,我們來舉一個(gè)使用 WebSocket 發(fā)送普通文本的示例。


2.5 發(fā)送普通文本



在以上示例中,我們在頁面上創(chuàng)建了兩個(gè) textarea,分別用于存放 待發(fā)送的數(shù)據(jù) 和 服務(wù)器返回的數(shù)據(jù)。當(dāng)用戶輸入完待發(fā)送的文本之后,點(diǎn)擊 發(fā)送 按鈕時(shí)會(huì)把輸入的文本發(fā)送到服務(wù)端,而服務(wù)端成功接收到消息之后,會(huì)把收到的消息原封不動(dòng)地回傳到客戶端。


// const socket = new WebSocket("ws://echo.websocket.org");

// const sendMsgContainer = document.querySelector("#sendMessage");

function send() {

 const message = sendMsgContainer.value;

 if (socket.readyState !== WebSocket.OPEN) {

   console.log("連接未建立,還不能發(fā)送消息");

   return;

 }

 if (message) socket.send(message);

}

當(dāng)然客戶端接收到服務(wù)端返回的消息之后,會(huì)把對(duì)應(yīng)的文本內(nèi)容保存到 接收的數(shù)據(jù) 對(duì)應(yīng)的 textarea 文本框中。


// const socket = new WebSocket("ws://echo.websocket.org");

// const receivedMsgContainer = document.querySelector("#receivedMessage");    

socket.addEventListener("message", function (event) {

 console.log("Message from server ", event.data);

 receivedMsgContainer.value = event.data;

});

為了更加直觀地理解上述的數(shù)據(jù)交互過程,我們使用 Chrome 瀏覽器的開發(fā)者工具來看一下相應(yīng)的過程:




以上示例對(duì)應(yīng)的完整代碼如下所示:


<!DOCTYPE html>

<html>

 <head>

   <meta charset="UTF-8" />

   <meta name="viewport" content="width=device-width, initial-scale=1.0" />

   <title>WebSocket 發(fā)送普通文本示例</title>

   <style>

     .block {

       flex: 1;

     }

   </style>

 </head>

 <body>

   <h3>阿寶哥:WebSocket 發(fā)送普通文本示例</h3>

   <div style="display: flex;">

     <div class="block">

       <p>即將發(fā)送的數(shù)據(jù):<button onclick="send()">發(fā)送</button></p>

       <textarea id="sendMessage" rows="5" cols="15"></textarea>

     </div>

     <div class="block">

       <p>接收的數(shù)據(jù):</p>

       <textarea id="receivedMessage" rows="5" cols="15"></textarea>

     </div>

   </div>


   <script>

     const sendMsgContainer = document.querySelector("#sendMessage");

     const receivedMsgContainer = document.querySelector("#receivedMessage");

     const socket = new WebSocket("ws://echo.websocket.org");


     // 監(jiān)聽連接成功事件

     socket.addEventListener("open", function (event) {

       console.log("連接成功,可以開始通訊");

     });


     // 監(jiān)聽消息

     socket.addEventListener("message", function (event) {

       console.log("Message from server ", event.data);

       receivedMsgContainer.value = event.data;

     });


     function send() {

       const message = sendMsgContainer.value;

       if (socket.readyState !== WebSocket.OPEN) {

         console.log("連接未建立,還不能發(fā)送消息");

         return;

       }

       if (message) socket.send(message);

     }

   </script>

 </body>

</html>

其實(shí) WebSocket 除了支持發(fā)送普通的文本之外,它還支持發(fā)送二進(jìn)制數(shù)據(jù),比如 ArrayBuffer 對(duì)象、Blob 對(duì)象或者 ArrayBufferView 對(duì)象:


const socket = new WebSocket("ws://echo.websocket.org");

socket.onopen = function () {

 // 發(fā)送UTF-8編碼的文本信息

 socket.send("Hello Echo Server!");

 // 發(fā)送UTF-8編碼的JSON數(shù)據(jù)

 socket.send(JSON.stringify({ msg: "我是阿寶哥" }));

 

 // 發(fā)送二進(jìn)制ArrayBuffer

 const buffer = new ArrayBuffer(128);

 socket.send(buffer);

 

 // 發(fā)送二進(jìn)制ArrayBufferView

 const intview = new Uint32Array(buffer);

 socket.send(intview);


 // 發(fā)送二進(jìn)制Blob

 const blob = new Blob([buffer]);

 socket.send(blob);

};

以上代碼成功運(yùn)行后,通過 Chrome 開發(fā)者工具,我們可以看到對(duì)應(yīng)的數(shù)據(jù)交互過程:




下面阿寶哥以發(fā)送 Blob 對(duì)象為例,來介紹一下如何發(fā)送二進(jìn)制數(shù)據(jù)。


Blob(Binary Large Object)表示二進(jìn)制類型的大對(duì)象。在數(shù)據(jù)庫管理系統(tǒng)中,將二進(jìn)制數(shù)據(jù)存儲(chǔ)為一個(gè)單一個(gè)體的集合。Blob 通常是影像、聲音或多媒體文件。在 JavaScript 中 Blob 類型的對(duì)象表示不可變的類似文件對(duì)象的原始數(shù)據(jù)。

對(duì) Blob 感興趣的小伙伴,可以閱讀 “你不知道的 Blob” 這篇文章。


2.6 發(fā)送二進(jìn)制數(shù)據(jù)



在以上示例中,我們在頁面上創(chuàng)建了兩個(gè) textarea,分別用于存放 待發(fā)送的數(shù)據(jù) 和 服務(wù)器返回的數(shù)據(jù)。當(dāng)用戶輸入完待發(fā)送的文本之后,點(diǎn)擊 發(fā)送 按鈕時(shí),我們會(huì)先獲取輸入的文本并把文本包裝成 Blob 對(duì)象然后發(fā)送到服務(wù)端,而服務(wù)端成功接收到消息之后,會(huì)把收到的消息原封不動(dòng)地回傳到客戶端。


當(dāng)瀏覽器接收到新消息后,如果是文本數(shù)據(jù),會(huì)自動(dòng)將其轉(zhuǎn)換成 DOMString 對(duì)象,如果是二進(jìn)制數(shù)據(jù)或 Blob 對(duì)象,會(huì)直接將其轉(zhuǎn)交給應(yīng)用,由應(yīng)用自身來根據(jù)返回的數(shù)據(jù)類型進(jìn)行相應(yīng)的處理。


數(shù)據(jù)發(fā)送代碼


// const socket = new WebSocket("ws://echo.websocket.org");

// const sendMsgContainer = document.querySelector("#sendMessage");

function send() {

 const message = sendMsgContainer.value;

 if (socket.readyState !== WebSocket.OPEN) {

   console.log("連接未建立,還不能發(fā)送消息");

   return;

 }

 const blob = new Blob([message], { type: "text/plain" });

 if (message) socket.send(blob);

 console.log(`未發(fā)送至服務(wù)器的字節(jié)數(shù):${socket.bufferedAmount}`);

}

當(dāng)然客戶端接收到服務(wù)端返回的消息之后,會(huì)判斷返回的數(shù)據(jù)類型,如果是 Blob 類型的話,會(huì)調(diào)用 Blob 對(duì)象的 text() 方法,獲取 Blob 對(duì)象中保存的 UTF-8 格式的內(nèi)容,然后把對(duì)應(yīng)的文本內(nèi)容保存到 接收的數(shù)據(jù) 對(duì)應(yīng)的 textarea 文本框中。


數(shù)據(jù)接收代碼


// const socket = new WebSocket("ws://echo.websocket.org");

// const receivedMsgContainer = document.querySelector("#receivedMessage");

socket.addEventListener("message", async function (event) {

 console.log("Message from server ", event.data);

 const receivedData = event.data;

 if (receivedData instanceof Blob) {

   receivedMsgContainer.value = await receivedData.text();

 } else {

   receivedMsgContainer.value = receivedData;

 }

});

同樣,我們使用 Chrome 瀏覽器的開發(fā)者工具來看一下相應(yīng)的過程:




通過上圖我們可以很明顯地看到,當(dāng)使用發(fā)送 Blob 對(duì)象時(shí),Data 欄位的信息顯示的是 Binary Message,而對(duì)于發(fā)送普通文本來說,Data 欄位的信息是直接顯示發(fā)送的文本消息。


以上示例對(duì)應(yīng)的完整代碼如下所示:


<!DOCTYPE html>

<html>

 <head>

   <meta charset="UTF-8" />

   <meta name="viewport" content="width=device-width, initial-scale=1.0" />

   <title>WebSocket 發(fā)送二進(jìn)制數(shù)據(jù)示例</title>

   <style>

     .block {

       flex: 1;

     }

   </style>

 </head>

 <body>

   <h3>阿寶哥:WebSocket 發(fā)送二進(jìn)制數(shù)據(jù)示例</h3>

   <div style="display: flex;">

     <div class="block">

       <p>待發(fā)送的數(shù)據(jù):<button onclick="send()">發(fā)送</button></p>

       <textarea id="sendMessage" rows="5" cols="15"></textarea>

     </div>

     <div class="block">

       <p>接收的數(shù)據(jù):</p>

       <textarea id="receivedMessage" rows="5" cols="15"></textarea>

     </div>

   </div>


   <script>

     const sendMsgContainer = document.querySelector("#sendMessage");

     const receivedMsgContainer = document.querySelector("#receivedMessage");

     const socket = new WebSocket("ws://echo.websocket.org");


     // 監(jiān)聽連接成功事件

     socket.addEventListener("open", function (event) {

       console.log("連接成功,可以開始通訊");

     });


     // 監(jiān)聽消息

     socket.addEventListener("message", async function (event) {

       console.log("Message from server ", event.data);

       const receivedData = event.data;

       if (receivedData instanceof Blob) {

         receivedMsgContainer.value = await receivedData.text();

       } else {

         receivedMsgContainer.value = receivedData;

       }

     });


     function send() {

       const message = sendMsgContainer.value;

       if (socket.readyState !== WebSocket.OPEN) {

         console.log("連接未建立,還不能發(fā)送消息");

         return;

       }

       const blob = new Blob([message], { type: "text/plain" });

       if (message) socket.send(blob);

       console.log(`未發(fā)送至服務(wù)器的字節(jié)數(shù):${socket.bufferedAmount}`);

     }

   </script>

 </body>

</html>

可能有一些小伙伴了解完 WebSocket API 之后,覺得還不夠過癮。下面阿寶哥將帶大家來實(shí)現(xiàn)一個(gè)支持發(fā)送普通文本的 WebSocket 服務(wù)器。


三、手寫 WebSocket 服務(wù)器

在介紹如何手寫 WebSocket 服務(wù)器前,我們需要了解一下 WebSocket 連接的生命周期。




從上圖可知,在使用 WebSocket 實(shí)現(xiàn)全雙工通信之前,客戶端與服務(wù)器之間需要先進(jìn)行握手(Handshake),在完成握手之后才能開始進(jìn)行數(shù)據(jù)的雙向通信。


握手是在通信電路創(chuàng)建之后,信息傳輸開始之前。握手用于達(dá)成參數(shù),如信息傳輸率,字母表,奇偶校驗(yàn),中斷過程,和其他協(xié)議特性。 握手有助于不同結(jié)構(gòu)的系統(tǒng)或設(shè)備在通信信道中連接,而不需要人為設(shè)置參數(shù)。


既然握手是 WebSocket 連接生命周期的第一個(gè)環(huán)節(jié),接下來我們就先來分析 WebSocket 的握手協(xié)議。


3.1 握手協(xié)議

WebSocket 協(xié)議屬于應(yīng)用層協(xié)議,它依賴于傳輸層的 TCP 協(xié)議。WebSocket 通過 HTTP/1.1 協(xié)議的 101 狀態(tài)碼進(jìn)行握手。為了創(chuàng)建 WebSocket 連接,需要通過瀏覽器發(fā)出請(qǐng)求,之后服務(wù)器進(jìn)行回應(yīng),這個(gè)過程通常稱為 “握手”(Handshaking)。


利用 HTTP 完成握手有幾個(gè)好處。首先,讓 WebSocket 與現(xiàn)有 HTTP 基礎(chǔ)設(shè)施兼容:使得 WebSocket 服務(wù)器可以運(yùn)行在 80 和 443 端口上,這通常是對(duì)客戶端唯一開放的端口。其次,讓我們可以重用并擴(kuò)展 HTTP 的 Upgrade 流,為其添加自定義的 WebSocket 首部,以完成協(xié)商。


下面我們以前面已經(jīng)演示過的發(fā)送普通文本的例子為例,來具體分析一下握手過程。


3.1.1 客戶端請(qǐng)求

GET ws://echo.websocket.org/ HTTP/1.1

Host: echo.websocket.org

Origin: file://

Connection: Upgrade

Upgrade: websocket

Sec-WebSocket-Version: 13

Sec-WebSocket-Key: Zx8rNEkBE4xnwifpuh8DHQ==

Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits

備注:已忽略部分 HTTP 請(qǐng)求頭

字段說明


Connection 必須設(shè)置 Upgrade,表示客戶端希望連接升級(jí)。

Upgrade 字段必須設(shè)置 websocket,表示希望升級(jí)到 WebSocket 協(xié)議。

Sec-WebSocket-Version 表示支持的 WebSocket 版本。RFC6455 要求使用的版本是 13,之前草案的版本均應(yīng)當(dāng)棄用。

Sec-WebSocket-Key 是隨機(jī)的字符串,服務(wù)器端會(huì)用這些數(shù)據(jù)來構(gòu)造出一個(gè) SHA-1 的信息摘要。把 “Sec-WebSocket-Key” 加上一個(gè)特殊字符串 “258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,然后計(jì)算 SHA-1 摘要,之后進(jìn)行 Base64 編碼,將結(jié)果做為 “Sec-WebSocket-Accept” 頭的值,返回給客戶端。如此操作,可以盡量避免普通 HTTP 請(qǐng)求被誤認(rèn)為 WebSocket 協(xié)議。

Sec-WebSocket-Extensions 用于協(xié)商本次連接要使用的 WebSocket 擴(kuò)展:客戶端發(fā)送支持的擴(kuò)展,服務(wù)器通過返回相同的首部確認(rèn)自己支持一個(gè)或多個(gè)擴(kuò)展。

Origin 字段是可選的,通常用來表示在瀏覽器中發(fā)起此 WebSocket 連接所在的頁面,類似于 Referer。但是,與 Referer 不同的是,Origin 只包含了協(xié)議和主機(jī)名稱。

3.1.2 服務(wù)端響應(yīng)

HTTP/1.1 101 Web Socket Protocol Handshake ①

Connection: Upgrade ②

Upgrade: websocket ③

Sec-WebSocket-Accept: 52Rg3vW4JQ1yWpkvFlsTsiezlqw= ④

備注:已忽略部分 HTTP 響應(yīng)頭

① 101 響應(yīng)碼確認(rèn)升級(jí)到 WebSocket 協(xié)議。

② 設(shè)置 Connection 頭的值為 "Upgrade" 來指示這是一個(gè)升級(jí)請(qǐng)求。HTTP 協(xié)議提供了一種特殊的機(jī)制,這一機(jī)制允許將一個(gè)已建立的連接升級(jí)成新的、不相容的協(xié)議。

③ Upgrade 頭指定一項(xiàng)或多項(xiàng)協(xié)議名,按優(yōu)先級(jí)排序,以逗號(hào)分隔。這里表示升級(jí)為 WebSocket 協(xié)議。

④ 簽名的鍵值驗(yàn)證協(xié)議支持。

介紹完 WebSocket 的握手協(xié)議,接下來阿寶哥將使用 Node.js 來開發(fā)我們的 WebSocket 服務(wù)器。


3.2 實(shí)現(xiàn)握手功能

要開發(fā)一個(gè) WebSocket 服務(wù)器,首先我們需要先實(shí)現(xiàn)握手功能,這里阿寶哥使用 Node.js 內(nèi)置的 http 模塊來創(chuàng)建一個(gè) HTTP 服務(wù)器,具體代碼如下所示:


const http = require("http");


const port = 8888;

const { generateAcceptValue } = require("./util");


const server = http.createServer((req, res) => {

 res.writeHead(200, { "Content-Type": "text/plain; charset=utf-8" });

 res.end("大家好,我是阿寶哥。感謝你閱讀“你不知道的WebSocket”");

});


server.on("upgrade", function (req, socket) {

 if (req.headers["upgrade"] !== "websocket") {

   socket.end("HTTP/1.1 400 Bad Request");

   return;

 }

 // 讀取客戶端提供的Sec-WebSocket-Key

 const secWsKey = req.headers["sec-websocket-key"];

 // 使用SHA-1算法生成Sec-WebSocket-Accept

 const hash = generateAcceptValue(secWsKey);

 // 設(shè)置HTTP響應(yīng)頭

 const responseHeaders = [

   "HTTP/1.1 101 Web Socket Protocol Handshake",

   "Upgrade: WebSocket",

   "Connection: Upgrade",

   `Sec-WebSocket-Accept: ${hash}`,

 ];

 // 返回握手請(qǐng)求的響應(yīng)信息

 socket.write(responseHeaders.join("\r\n") + "\r\n\r\n");

});


server.listen(port, () =>

 console.log(`Server running at http://localhost:${port}`)

);

在以上代碼中,我們首先引入了 http 模塊,然后通過調(diào)用該模塊的 createServer() 方法創(chuàng)建一個(gè) HTTP 服務(wù)器,接著我們監(jiān)聽 upgrade 事件,每次服務(wù)器響應(yīng)升級(jí)請(qǐng)求時(shí)就會(huì)觸發(fā)該事件。由于我們的服務(wù)器只支持升級(jí)到 WebSocket 協(xié)議,所以如果客戶端請(qǐng)求升級(jí)的協(xié)議非 WebSocket 協(xié)議,我們將會(huì)返回 “400 Bad Request”。


當(dāng)服務(wù)器接收到升級(jí)為 WebSocket 的握手請(qǐng)求時(shí),會(huì)先從請(qǐng)求頭中獲取 “Sec-WebSocket-Key” 的值,然后把該值加上一個(gè)特殊字符串 “258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,然后計(jì)算 SHA-1 摘要,之后進(jìn)行 Base64 編碼,將結(jié)果做為 “Sec-WebSocket-Accept” 頭的值,返回給客戶端。


上述的過程看起來好像有點(diǎn)繁瑣,其實(shí)利用 Node.js 內(nèi)置的 crypto 模塊,幾行代碼就可以搞定了:


// util.js

const crypto = require("crypto");

const MAGIC_KEY = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";


function generateAcceptValue(secWsKey) {

 return crypto

   .createHash("sha1")

   .update(secWsKey + MAGIC_KEY, "utf8")

   .digest("base64");

}

開發(fā)完握手功能之后,我們可以使用前面的示例來測試一下該功能。待服務(wù)器啟動(dòng)之后,我們只要對(duì) “發(fā)送普通文本” 示例,做簡單地調(diào)整,即把先前的 URL 地址替換成 ws://localhost:8888,就可以進(jìn)行功能驗(yàn)證。


感興趣的小伙們可以試試看,以下是阿寶哥本地運(yùn)行后的結(jié)果:




從上圖可知,我們實(shí)現(xiàn)的握手功能已經(jīng)可以正常工作了。那么握手有沒有可能失敗呢?答案是肯定的。比如網(wǎng)絡(luò)問題、服務(wù)器異常或 Sec-WebSocket-Accept 的值不正確。


下面阿寶哥修改一下 “Sec-WebSocket-Accept” 生成規(guī)則,比如修改 MAGIC_KEY 的值,然后重新驗(yàn)證一下握手功能。此時(shí),瀏覽器的控制臺(tái)會(huì)輸出以下異常信息:


WebSocket connection to 'ws://localhost:8888/' failed: Error during WebSocket handshake: Incorrect 'Sec-WebSocket-Accept' header value

如果你的 WebSocket 服務(wù)器要支持子協(xié)議的話,你可以參考以下代碼進(jìn)行子協(xié)議的處理,阿寶哥就不繼續(xù)展開介紹了。


// 從請(qǐng)求頭中讀取子協(xié)議

const protocol = req.headers["sec-websocket-protocol"];

// 如果包含子協(xié)議,則解析子協(xié)議

const protocols = !protocol ? [] : protocol.split(",").map((s) => s.trim());


// 簡單起見,我們僅判斷是否含有JSON子協(xié)議

if (protocols.includes("json")) {

 responseHeaders.push(`Sec-WebSocket-Protocol: json`);

}

好的,WebSocket 握手協(xié)議相關(guān)的內(nèi)容基本已經(jīng)介紹完了。下一步我們來介紹開發(fā)消息通信功能需要了解的一些基礎(chǔ)知識(shí)。


3.3 消息通信基礎(chǔ)

在 WebSocket 協(xié)議中,數(shù)據(jù)是通過一系列數(shù)據(jù)幀來進(jìn)行傳輸?shù)摹榱吮苊庥捎诰W(wǎng)絡(luò)中介(例如一些攔截代理)或者一些安全問題,客戶端必須在它發(fā)送到服務(wù)器的所有幀中添加掩碼。服務(wù)端收到?jīng)]有添加掩碼的數(shù)據(jù)幀以后,必須立即關(guān)閉連接。


3.3.1 數(shù)據(jù)幀格式

要實(shí)現(xiàn)消息通信,我們就必須了解 WebSocket 數(shù)據(jù)幀的格式:


0                   1                   2                   3

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

+-+-+-+-+-------+-+-------------+-------------------------------+

|F|R|R|R| opcode|M| Payload len |    Extended payload length    |

|I|S|S|S|  (4)  |A|     (7)     |             (16/64)           |

|N|V|V|V|       |S|             |   (if payload len==126/127)   |

| |1|2|3|       |K|             |                               |

+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +

|     Extended payload length continued, if payload len == 127  |

+ - - - - - - - - - - - - - - - +-------------------------------+

|                               |Masking-key, if MASK set to 1  |

+-------------------------------+-------------------------------+

| Masking-key (continued)       |          Payload Data         |

+-------------------------------- - - - - - - - - - - - - - - - +

:                     Payload Data continued ...                :

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

|                     Payload Data continued ...                |

+---------------------------------------------------------------+

可能有一些小伙伴看到上面的內(nèi)容之后,就開始有點(diǎn) “懵逼” 了。下面我們來結(jié)合實(shí)際的數(shù)據(jù)幀來進(jìn)一步分析一下:




在上圖中,阿寶哥簡單分析了 “發(fā)送普通文本” 示例對(duì)應(yīng)的數(shù)據(jù)幀格式。這里我們來進(jìn)一步介紹一下 Payload length,因?yàn)樵诤竺骈_發(fā)數(shù)據(jù)解析功能的時(shí)候,需要用到該知識(shí)點(diǎn)。


Payload length 表示以字節(jié)為單位的 “有效負(fù)載數(shù)據(jù)” 長度。它有以下幾種情形:


如果值為 0-125,那么就表示負(fù)載數(shù)據(jù)的長度。

如果是 126,那么接下來的 2 個(gè)字節(jié)解釋為 16 位的無符號(hào)整形作為負(fù)載數(shù)據(jù)的長度。

如果是 127,那么接下來的 8 個(gè)字節(jié)解釋為一個(gè) 64 位的無符號(hào)整形(最高位的 bit 必須為 0)作為負(fù)載數(shù)據(jù)的長度。

多字節(jié)長度量以網(wǎng)絡(luò)字節(jié)順序表示,有效負(fù)載長度是指 “擴(kuò)展數(shù)據(jù)” + “應(yīng)用數(shù)據(jù)” 的長度。“擴(kuò)展數(shù)據(jù)” 的長度可能為 0,那么有效負(fù)載長度就是 “應(yīng)用數(shù)據(jù)” 的長度。


另外,除非協(xié)商過擴(kuò)展,否則 “擴(kuò)展數(shù)據(jù)” 長度為 0 字節(jié)。在握手協(xié)議中,任何擴(kuò)展都必須指定 “擴(kuò)展數(shù)據(jù)” 的長度,這個(gè)長度如何進(jìn)行計(jì)算,以及這個(gè)擴(kuò)展如何使用。如果存在擴(kuò)展,那么這個(gè) “擴(kuò)展數(shù)據(jù)” 包含在總的有效負(fù)載長度中。


3.3.2 掩碼算法

掩碼字段是一個(gè)由客戶端隨機(jī)選擇的 32 位的值。掩碼值必須是不可被預(yù)測的。因此,掩碼必須來自強(qiáng)大的熵源(entropy),并且給定的掩碼不能讓服務(wù)器或者代理能夠很容易的預(yù)測到后續(xù)幀。掩碼的不可預(yù)測性對(duì)于預(yù)防惡意應(yīng)用的作者在網(wǎng)上暴露相關(guān)的字節(jié)數(shù)據(jù)至關(guān)重要。


掩碼不影響數(shù)據(jù)荷載的長度,對(duì)數(shù)據(jù)進(jìn)行掩碼操作和對(duì)數(shù)據(jù)進(jìn)行反掩碼操作所涉及的步驟是相同的。掩碼、反掩碼操作都采用如下算法:


j = i MOD 4

transformed-octet-i = original-octet-i XOR masking-key-octet-j

original-octet-i:為原始數(shù)據(jù)的第 i 字節(jié)。

transformed-octet-i:為轉(zhuǎn)換后的數(shù)據(jù)的第 i 字節(jié)。

masking-key-octet-j:為 mask key 第 j 字節(jié)。

為了讓小伙伴們能夠更好的理解上面掩碼的計(jì)算過程,我們來對(duì)示例中 “我是阿寶哥” 數(shù)據(jù)進(jìn)行掩碼操作。這里 “我是阿寶哥” 對(duì)應(yīng)的 UTF-8 編碼如下所示:


E6 88 91 E6 98 AF E9 98 BF E5 AE 9D E5 93 A5

而對(duì)應(yīng)的 Masking-Key 為 0x08f6efb1,根據(jù)上面的算法,我們可以這樣進(jìn)行掩碼運(yùn)算:


let uint8 = new Uint8Array([0xE6, 0x88, 0x91, 0xE6, 0x98, 0xAF, 0xE9, 0x98,

 0xBF, 0xE5, 0xAE, 0x9D, 0xE5, 0x93, 0xA5]);

let maskingKey = new Uint8Array([0x08, 0xf6, 0xef, 0xb1]);

let maskedUint8 = new Uint8Array(uint8.length);


for (let i = 0, j = 0; i < uint8.length; i++, j = i % 4) {

 maskedUint8[i] = uint8[i] ^ maskingKey[j];

}


console.log(Array.from(maskedUint8).map(num=>Number(num).toString(16)).join(' '));

以上代碼成功運(yùn)行后,控制臺(tái)會(huì)輸出以下結(jié)果:


ee 7e 7e 57 90 59 6 29 b7 13 41 2c ed 65 4a

上述結(jié)果與 WireShark 中的 Masked payload 對(duì)應(yīng)的值是一致的,具體如下圖所示:




在 WebSocket 協(xié)議中,數(shù)據(jù)掩碼的作用是增強(qiáng)協(xié)議的安全性。但數(shù)據(jù)掩碼并不是為了保護(hù)數(shù)據(jù)本身,因?yàn)樗惴ū旧硎枪_的,運(yùn)算也不復(fù)雜。那么為什么還要引入數(shù)據(jù)掩碼呢?引入數(shù)據(jù)掩碼是為了防止早期版本的協(xié)議中存在的代理緩存污染攻擊等問題。


了解完 WebSocket 掩碼算法和數(shù)據(jù)掩碼的作用之后,我們再來介紹一下數(shù)據(jù)分片的概念。


3.3.3 數(shù)據(jù)分片

WebSocket 的每條消息可能被切分成多個(gè)數(shù)據(jù)幀。當(dāng) WebSocket 的接收方收到一個(gè)數(shù)據(jù)幀時(shí),會(huì)根據(jù) FIN 的值來判斷,是否已經(jīng)收到消息的最后一個(gè)數(shù)據(jù)幀。


利用 FIN 和 Opcode,我們就可以跨幀發(fā)送消息。操作碼告訴了幀應(yīng)該做什么。如果是 0x1,有效載荷就是文本。如果是 0x2,有效載荷就是二進(jìn)制數(shù)據(jù)。但是,如果是 0x0,則該幀是一個(gè)延續(xù)幀。這意味著服務(wù)器應(yīng)該將幀的有效負(fù)載連接到從該客戶機(jī)接收到的最后一個(gè)幀。


為了讓大家能夠更好地理解上述的內(nèi)容,我們來看一個(gè)來自 MDN 上的示例:


Client: FIN=1, opcode=0x1, msg="hello"

Server: (process complete message immediately) Hi.

Client: FIN=0, opcode=0x1, msg="and a"

Server: (listening, new message containing text started)

Client: FIN=0, opcode=0x0, msg="happy new"

Server: (listening, payload concatenated to previous message)

Client: FIN=1, opcode=0x0, msg="year!"

Server: (process complete message) Happy new year to you too!

在以上示例中,客戶端向服務(wù)器發(fā)送了兩條消息。第一個(gè)消息在單個(gè)幀中發(fā)送,而第二個(gè)消息跨三個(gè)幀發(fā)送。


其中第一個(gè)消息是一個(gè)完整的消息(FIN=1 且 opcode != 0x0),因此服務(wù)器可以根據(jù)需要進(jìn)行處理或響應(yīng)。而第二個(gè)消息是文本消息(opcode=0x1)且 FIN=0,表示消息還沒發(fā)送完成,還有后續(xù)的數(shù)據(jù)幀。該消息的所有剩余部分都用延續(xù)幀(opcode=0x0)發(fā)送,消息的最終幀用 FIN=1 標(biāo)記。


好的,簡單介紹了數(shù)據(jù)分片的相關(guān)內(nèi)容。接下來,我們來開始實(shí)現(xiàn)消息通信功能。


3.4 實(shí)現(xiàn)消息通信功能

阿寶哥把實(shí)現(xiàn)消息通信功能,分解為消息解析與消息響應(yīng)兩個(gè)子功能,下面我們分別來介紹如何實(shí)現(xiàn)這兩個(gè)子功能。


3.4.1 消息解析

利用消息通信基礎(chǔ)環(huán)節(jié)中介紹的相關(guān)知識(shí),阿寶哥實(shí)現(xiàn)了一個(gè) parseMessage 函數(shù),用來解析客戶端傳過來的 WebSocket 數(shù)據(jù)幀。出于簡單考慮,這里只處理文本幀,具體代碼如下所示:


function parseMessage(buffer) {

 // 第一個(gè)字節(jié),包含了FIN位,opcode, 掩碼位

 const firstByte = buffer.readUInt8(0);

 // [FIN, RSV, RSV, RSV, OPCODE, OPCODE, OPCODE, OPCODE];

 // 右移7位取首位,1位,表示是否是最后一幀數(shù)據(jù)

 const isFinalFrame = Boolean((firstByte >>> 7) & 0x01);

 console.log("isFIN: ", isFinalFrame);

 // 取出操作碼,低四位

 /**

  * %x0:表示一個(gè)延續(xù)幀。當(dāng) Opcode 為 0 時(shí),表示本次數(shù)據(jù)傳輸采用了數(shù)據(jù)分片,當(dāng)前收到的數(shù)據(jù)幀為其中一個(gè)數(shù)據(jù)分片;

  * %x1:表示這是一個(gè)文本幀(text frame);

  * %x2:表示這是一個(gè)二進(jìn)制幀(binary frame);

  * %x3-7:保留的操作代碼,用于后續(xù)定義的非控制幀;

  * %x8:表示連接斷開;

  * %x9:表示這是一個(gè)心跳請(qǐng)求(ping);

  * %xA:表示這是一個(gè)心跳響應(yīng)(pong);

  * %xB-F:保留的操作代碼,用于后續(xù)定義的控制幀。

  */

 const opcode = firstByte & 0x0f;

 if (opcode === 0x08) {

   // 連接關(guān)閉

   return;

 }

 if (opcode === 0x02) {

   // 二進(jìn)制幀

   return;

 }

 if (opcode === 0x01) {

   // 目前只處理文本幀

   let offset = 1;

   const secondByte = buffer.readUInt8(offset);

   // MASK: 1位,表示是否使用了掩碼,在發(fā)送給服務(wù)端的數(shù)據(jù)幀里必須使用掩碼,而服務(wù)端返回時(shí)不需要掩碼

   const useMask = Boolean((secondByte >>> 7) & 0x01);

   console.log("use MASK: ", useMask);

   const payloadLen = secondByte & 0x7f; // 低7位表示載荷字節(jié)長度

   offset += 1;

   // 四個(gè)字節(jié)的掩碼

   let MASK = [];

   // 如果這個(gè)值在0-125之間,則后面的4個(gè)字節(jié)(32位)就應(yīng)該被直接識(shí)別成掩碼;

   if (payloadLen <= 0x7d) {

     // 載荷長度小于125

     MASK = buffer.slice(offset, 4 + offset);

     offset += 4;

     console.log("payload length: ", payloadLen);

   } else if (payloadLen === 0x7e) {

     // 如果這個(gè)值是126,則后面兩個(gè)字節(jié)(16位)內(nèi)容應(yīng)該,被識(shí)別成一個(gè)16位的二進(jìn)制數(shù)表示數(shù)據(jù)內(nèi)容大小;

     console.log("payload length: ", buffer.readInt16BE(offset));

     // 長度是126, 則后面兩個(gè)字節(jié)作為payload length,32位的掩碼

     MASK = buffer.slice(offset + 2, offset + 2 + 4);

     offset += 6;

   } else {

     // 如果這個(gè)值是127,則后面的8個(gè)字節(jié)(64位)內(nèi)容應(yīng)該被識(shí)別成一個(gè)64位的二進(jìn)制數(shù)表示數(shù)據(jù)內(nèi)容大小

     MASK = buffer.slice(offset + 8, offset + 8 + 4);

     offset += 12;

   }

   // 開始讀取后面的payload,與掩碼計(jì)算,得到原來的字節(jié)內(nèi)容

   const newBuffer = [];

   const dataBuffer = buffer.slice(offset);

   for (let i = 0, j = 0; i < dataBuffer.length; i++, j = i % 4) {

     const nextBuf = dataBuffer[i];

     newBuffer.push(nextBuf ^ MASK[j]);

   }

   return Buffer.from(newBuffer).toString();

 }

 return "";

}

創(chuàng)建完 parseMessage 函數(shù),我們來更新一下之前創(chuàng)建的 WebSocket 服務(wù)器:


server.on("upgrade", function (req, socket) {

 socket.on("data", (buffer) => {

   const message = parseMessage(buffer);

   if (message) {

     console.log("Message from client:" + message);

   } else if (message === null) {

     console.log("WebSocket connection closed by the client.");

   }

 });

 if (req.headers["upgrade"] !== "websocket") {

   socket.end("HTTP/1.1 400 Bad Request");

   return;

 }

 // 省略已有代碼

});

更新完成之后,我們重新啟動(dòng)服務(wù)器,然后繼續(xù)使用 “發(fā)送普通文本” 的示例來測試消息解析功能。以下發(fā)送 “我是阿寶哥” 文本消息后,WebSocket 服務(wù)器輸出的信息。


Server running at http://localhost:8888

isFIN:  true

use MASK:  true

payload length:  15

Message from client:我是阿寶哥

通過觀察以上的輸出信息,我們的 WebSocket 服務(wù)器已經(jīng)可以成功解析客戶端發(fā)送包含普通文本的數(shù)據(jù)幀,下一步我們來實(shí)現(xiàn)消息響應(yīng)的功能。


3.4.2 消息響應(yīng)

要把數(shù)據(jù)返回給客戶端,我們的 WebSocket 服務(wù)器也得按照 WebSocket 數(shù)據(jù)幀的格式來封裝數(shù)據(jù)。與前面介紹的 parseMessage 函數(shù)一樣,阿寶哥也封裝了一個(gè) constructReply 函數(shù)用來封裝返回的數(shù)據(jù),該函數(shù)的具體代碼如下:


function constructReply(data) {

 const json = JSON.stringify(data);

 const jsonByteLength = Buffer.byteLength(json);

 // 目前只支持小于65535字節(jié)的負(fù)載

 const lengthByteCount = jsonByteLength < 126 ? 0 : 2;

 const payloadLength = lengthByteCount === 0 ? jsonByteLength : 126;

 const buffer = Buffer.alloc(2 + lengthByteCount + jsonByteLength);

 // 設(shè)置數(shù)據(jù)幀首字節(jié),設(shè)置opcode為1,表示文本幀

 buffer.writeUInt8(0b10000001, 0);

 buffer.writeUInt8(payloadLength, 1);

 // 如果payloadLength為126,則后面兩個(gè)字節(jié)(16位)內(nèi)容應(yīng)該,被識(shí)別成一個(gè)16位的二進(jìn)制數(shù)表示數(shù)據(jù)內(nèi)容大小

 let payloadOffset = 2;

 if (lengthByteCount > 0) {

   buffer.writeUInt16BE(jsonByteLength, 2);

   payloadOffset += lengthByteCount;

 }

 // 把JSON數(shù)據(jù)寫入到Buffer緩沖區(qū)中

 buffer.write(json, payloadOffset);

 return buffer;

}

創(chuàng)建完 constructReply 函數(shù),我們再來更新一下之前創(chuàng)建的 WebSocket 服務(wù)器:


server.on("upgrade", function (req, socket) {

 socket.on("data", (buffer) => {

   const message = parseMessage(buffer);

   if (message) {

     console.log("Message from client:" + message);

     // 新增以下

日歷

鏈接

個(gè)人資料

存檔

主站蜘蛛池模板: 免费裸体无遮挡黄网站免费看 | 国产日产欧产精品浪潮的免费功能 | 人成福利视频在线观看 | 嫩草国产在线 | 日韩视频中文 | 中文字幕第一页永久有效 | 欧美中文字幕视频 | 伊人操 | 成人91在线 | 午夜激情影院在线观看 | 久久99精品久久久久久园产越南 | 欧美桃色视频 | 99热r| 久久精品国产一区二区三区不卡 | 77777五月色婷婷丁香视频 | 九九视屏 | 亚洲熟悉妇女xxx妇女av | 日日碰日日操 | 色天天天 | 亚洲成人av一区二区三区 | 99久久精品免费看国产一区二区三区 | 91精品中文字幕 | 免费观看全黄做爰大片国产 | 老头老夫妇自拍性tv | 92看看福利1000集合集免费 | 痴汉电车在线播放 | 怡红院免费的全部视频 | 91在线丨porny丨国产 | 91插插插影库永久免费 | 久久国产精品久久久 | 亚洲第一激情 | 手机看黄色 | 亚洲精品一区二区另类图片 | 亚洲欧美日本国产高清 | 国产精品无码一区二区在线观一 | 国产高颜值大学生情侣酒店 | 日本国产忘忧草一区在线 | 成熟亚洲日本毛茸茸凸凹 | 国产手机在线αⅴ片无码观看 | 亚洲欧洲无码av不卡在线 | 免费a级毛片在线播放 | 久久久久久久久久久久国产精品 | 一级黄色片网址 | 毛片无遮挡高清免费 | 欧美人与性动交g欧美精器 狠狠躁18三区二区一区ai明星 | 欧美一区二区视频在线 | 欧美成人ⅴideosxxxxx | 亚洲人成无码区在线观看 | 欧美爱爱免费视频 | 少妇做爰免费视频网站www | 999re5这里只有精品 | 夜夜影院未满十八勿进 | 久久久久久一区国产精品 | 五姑娘影院在线观看免费 | 无码日韩精品一区二区免费 | 97视频国产 | 亚洲色视频 | 欧美福利一区二区 | 久操伊人网 | 亚洲一二三四专区 | 无码人妻aⅴ一区二区三区69岛 | 国产精品77777| 精品国产99 | 9l视频自拍九色9l视频成人 | 成人av在线一区二区 | 5a级毛片| 成人污污视频 | 69精品人人人人 | 日本一级xxxx | 超碰美女 | 久草视频免费看 | 欧美三级少妇高潮 | 亚洲v欧美 | 夜夜嗨av色一区二区不卡 | 国产精品视频合集 | 98婷婷狠狠成人免费视频 | 久久精品中文字幕无码绿巨人 | 日韩成人福利 | 男女激情免费网站 | 又大又粗又爽的少妇免费视频 | 亚洲女人天堂av | 欧美又大又黄又粗高潮免费 | 日韩黄色在线观看 | 日本老头xxxx视频 | 日本女人一级片 | 综合香蕉| 女的被弄到高潮娇喘喷水视频 | 97国产免费 | 99热精这里只有精品 | 日韩 在线 中文 制服一区 | 韩国黄色精品 | 日韩天堂视频 | 久久天天躁狠狠躁夜夜不卡 | 日韩插插插 | 亚洲精品av久久久久久久影院 | 免费一区二区三区四区 | 在线成人黄色 | 原神污文全文肉高h | 国产激情视频在线观看 | 亚洲欧美日韩国产成人精品影院 | 阿v天堂2018| 免费观看性欧美大片无片 | 国产三级农村妇女做受 | 最近中文字幕mv在线资源 | 刺激性视频黄页 | 三上悠亚久久精品 | 欧美一区二区福利视频 | 国产色视频免费 | 曰批全过程免费视频在线观看无码 | 国产乱码精品一区二区蜜臀 | 后入内射国产一区二区 | 成人精品国产一区二区4080 | 日韩欧美在线一区 | 亚洲一线二线三线久久久 | 色婷婷av777| 成人婷婷网色偷偷亚洲男人的天堂 | 午夜大片男女免费观看爽爽爽尤物 | 国产白嫩初高中害羞小美女 | av色吧| 亚洲精品国产精品乱码不卡 | 亚欧洲精品视频 | 天堂资源网 | 日本不卡视频 | 国产精品久久久午夜夜伦鲁鲁 | 亚洲色图在线观看视频 | a√在线视频| 午夜精品久久久内射近拍高清 | 国产精品成av人在线视午夜片 | 久久草在线视频播放 | 永久免费汤不热视频 | 精品视频一区二区三区 | 中文字幕久久久久人妻中出 | 伊人狠狠色丁香婷婷综合 | 国产在线观看你懂得 | 欧美粗大猛烈 | av日韩天堂 | 日本精品一二三 | 好吊视频在线观看 | 女人爽到高潮潮喷18禁网站 | 免费成人结看片 | 国产永久免费观看久久黄av片 | 蜜桃一本色道久久综合亚洲精品冫 | 国产精品天天看天天狠 | 成人综合网站 | 特级无码毛片免费视频 | 精品国精品无码自拍自在线 | 国产精品高潮呻吟久久av无 | 黄色成人免费视频 | 亚洲欧美日韩另类 | 久久久精品99 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 黄色激情在线 | 欧美一区二区三区大片 | 国产午夜激情 | 日韩av在线网 | 夜夜爱爱 | 97久久精品人人澡人人爽 | 国产精品99久久久久久久女警 | 夜夜添无码试看一区二区三区 | 日本特级黄色录像 | 好吊妞视频在线观看 | 久久免费精彩视频 | www国产区| 免费国产一级 | 一二三四精品 | 57pao国产成人免费 | 明星毛片| 99久热在线精品996热是什么 | 国产超碰91 | 国产精品人妻一码二码尿失禁 | 免费黄色特级片 | 亚洲一区二区在线观看视频 | 中文字幕精品av一区二区五区 | 欧洲熟妇色xxxx欧美老妇软件 | 国产精品一区二区精品 | 日韩黄色一级片 | 麻豆安全免费网址入口 | 欧美日本三级 | 91社区在线高清 | 国内老熟妇对白hdxxxx | 国产福利av | 国产亲子乱弄免费视频 | 免费av不卡 | 久久人人爽人人爽人人片ⅴ | 精品夜夜爽欧美毛片视频 | 亚色在线视频 | 无码中文av有码中文av | 91秘密入口 | 中国china体内裑精亚洲日本 | 少妇视频在线 | 亚洲精品无码久久久影院相关影片 | 麻豆久久久9性大片 | 97播播 | 成人羞羞国产免费软件 | 国产精品视频分类 | 香蕉视频亚洲 | 亚洲 欧美 激情 小说 另类 | 免费一级淫片aaa片毛片a级 | 欧美日韩亚洲精品瑜伽裤 | 日韩色网 | 日本000xxx免费视频 | 中文字幕乱码人妻无码久久 | 曰韩无码二三区中文字幕 | 国内爆初菊对白视频 | 日韩精品一区二区三区在线播放 | 久久久中文久久久无码 | 99久久免费看精品国产一区 | 欧美极品jizzhd欧美爆 | 亚洲瑟瑟| 五月激情小说 | 中文字幕久久熟女蜜桃 | 中文字幕在线网址 | 69视频网站| 亚洲一区小说 | аⅴ资源天堂资源库在线 | av片在线免费观看 | 国产成人a亚洲精v品无码 | 国产精品免费看jizzjlzz | 国产寡妇精品久久久久久 | 日本特黄特色a大片免费高清观看视频 | 少妇9999九九九九在线观看 | 在线成人精品国产区免费 | 天码av无码一区二区三区四区 | 免费精品99久久国产综合精品 | 强h辣文肉各种姿势h在线视频 | 国产97人人超碰caoprom | 成人在线观看免费 | 国产大尺度做爰床 | 3d动漫精品啪啪一区二区免费 | 成年美女黄网色视频免费4399 | 亚洲精品国产suv一区 | 91丨九色丨露脸 | 国产99爱 | 亚洲人成在线播放网站 | 亚洲一区二区三区四区五区乱码 | 亚洲精品日本无v一区 | 国产精品一区三区 | 午夜少妇拍拍视频在线观看 | 欧洲精品免费一区二区三区 | 欧美日韩激情在线观看 | 欧美黄色大片免费看 | 久久久精品中文字幕麻豆发布 | 二级特黄绝大片免费视频大片 | 精品国产网 | 黄色av网站在线播放 | 国产黄色视 | 国产a自拍 | 久久精品国产99精品国产2021 | 亚洲va久久久噜噜噜久久狠狠 | 伦人伦xxx国语对白 伦为伦xxxx国语对白 | 日本成人午夜视频 | 成 人 黄 色 视频免费播放 | 91精品国产综合久久四虎久久 | 中文字幕永久在线播放 | 亚洲熟妇丰满xxxxx | 三级慰安女妇威狂放播 | 最新国产精品亚洲 | 人操人视频 | 一级性爱视频 | 日韩美女做爰高潮免费 | 草草影院欧美 | 亚洲午夜片 | 91精品一区二区三区在线观看 | 国产精品suv一区二区69 | 欧洲裸体片 | www久久国产 | 久久最新网址 | 一区二区三区在线播放视频 | 日本三级香港三级人妇99 | 日韩免费一二三区 | 成年人视频网址 | 国产精品自在自线视频 | 日韩操操 | 18禁真人抽搐一进一出动态图 | 久久精品国产99 | 天天干夜夜操 | 精品国产乱码久久久久久夜甘婷婷 | 精品精品国产高清a毛片 | 天天天天色 | 中文字幕av免费专区 | 五月激情视频 | 日本大香伊一区二区三区 | 国产高清一区二区三区 | 少妇熟女久久综合网色欲 | 日韩中文人妻无码不卡 | 亚洲精品久久久久久久久 | 精品久久久久久久久久久久久久久久 | 妓院一钑片免看黄大片 | 91免费成人 | 广州毛片 | 国产亲子乱露脸 | 91极品国产情侣高潮对白 | 1000部羞羞视频在线看视频 | 成人av一区二区兰花在线播放 | 成人网站免费观看 | 区一区二在线观看 | 精品久久久网站 | 欧美极品少妇xxxxⅹ猛交 | 亚洲精品乱码久久久久久蜜桃不卡 | 少妇午夜三级伦理影院播放器 | 欧美交受高潮1 | 久久精品国产成人av | 日韩成人短视频 | 亚洲欧美精品伊人久久 | 日本人妻巨大乳挤奶水 | 欧美丰满熟妇xxxx性ppx人交 | 山东熟女啪啪哦哦叫 | 欧美三级中文字幕 | 特级西西444www大胆免费看 | 免费观看理伦片在线播放 | 男人天堂网址 | 麻豆短视频在线观看 | 香蕉网在线视频 | 精品无码av无码免费专区 | jiz亚洲| 国偷自产一区二区三区在线观看 | 熟女人妇 成熟妇女系列视频 | 加勒比日本在线 | 亚洲深深色噜噜狠狠爱网站 | 久久国产精品成人免费 | 免费av片| 97色伦97色伦国产欧美空 | 久久久久久久久久久免费精品 | 日韩一二在线 | 少妇性色淫片aaa播放 | 久久综合偷偷噜噜噜色 | 佐佐木明希av在线 | 国产欧美精品 | 久久婷婷五月综合97色 | 超薄肉色丝袜一区二区 | 碰碰久久| 久久久久久久久久国产 | 欧美日韩国产精品综合 | 亚洲tv久久 | 天天干天天舔天天射 | 欧美日韩黑人 | 五月天一区二区三区 | 嫩草一二三 | 精品国产一区二区三区色欲 | 69国产成人精品二区 | 国产女主播在线喷水呻吟 | 精品国偷自产在线视频 | 少妇裸体性生交 | 国产精品二区三区 | 国产乱淫a∨片免费视频牛牛 | 欧美老熟妇喷水 | 伊人焦久影院 | 国产精品成人观看视频国产奇米 | 一级欧美视频 | 色在线免费观看 | 都市激情av | 日本大胆欧美人术艺术 | 香蕉成人在线视频 | 天天躁夜夜躁天干天干2022 | 色八区人妻在线视频 | 色就是欧美 | 国内精自线一二三四在线看 | 国产理论片 | 九九热爱视频精品 | 精品美女在线观看 | 5a级毛片| 中文字幕无码不卡在线 | 成年人天堂com | 色偷偷888欧美精品久久久 | 97久久超碰精品视觉盛宴 | 亚洲国产专区 | 青青草97国产精品免费观看 | 久久人人爽人人爽人人片av麻烦 | 奇米影视第四色首页 | 国产无遮挡又黄又爽免费视频 | 国产卡一卡二 | 奇米影视奇米色777欧美 | 在线观看网站污 | 亚洲网站在线看 | 无码人妻精品丰满熟妇区 | avhd101在线播放高清谜片 | 91原创视频 | 日本少妇bbwbbw精品 | 一区二区三区高清在线观看 | 日韩经典午夜福利发布 | 少妇粉嫩小泬喷水视频 | 柠檬福利第一导航在线 | 天天色天天搞 | 国产毛片精品一区二区 | 色哟哟国产精品免费观看 | 国产a∨精品一区二区三区不卡 | 香蕉网站视频 | 久久久人成影片一区二区三区 | 人妻熟女欲求不满在线 | 久久欧美国产伦子伦精品 | 成人wwxx视频免费男女 | 精品日韩一区二区三区 | 内地级a艳片高清免费播放 内谢老女人视频在线观看 嫩草99 | 欧美无乱码久久久免费午夜一区 | 久久99精品国产99久久6尤物 | 欧美日韩一区二区三区在线观看视频 | 欧美疯狂性受xxxxx喷水 | 亚洲男人第一无码av网站 | 四虎影院黄色 | 一区在线观看 | 一区二区精品视频 | 午夜福利啪啪片 | 国模一区二区三区白浆 | 毛片久久久久 | 国产欧美日韩亚洲 | 丝袜美腿中文字幕 | 在线播放第一页 | 久久久久久97免费精品一级小说 | 欧美又粗又深又猛又爽啪啪九色 | 性欧美video另类hd尤物 | 亚洲欧美在线视频免费 | 成人天堂婷婷青青视频在线观看 | 国产麻豆剧果冻传媒白晶晶 | va欧美| www亚洲精品少妇裸乳一区二区 | 国产精品亚洲二区在线观看 | 日韩第一页在线 | 一区二区在线视频播放 | 亚洲国产精品久久一线不卡 | 亚洲精品少妇一区二区 | 久久不见久久见免费视频4 国产真人做爰毛片视频直播 | 精品国产av色一区二区深夜久久 | 香蕉久久久久久av成人 | 国产高清免费视频 | 欧美一级免费在线观看 | 久久国产一级片 | 午夜丰满少妇性开放视频 | 日韩精品中文字幕一区 | yy6080久久伦理一区二区 | aaa日本裸体| 懂爱av性色av粉嫩av | 精品久久久久久久久久中文字幕 | 成人性视频在线 | 国产在线麻豆 | 国产999精品久久久久久 | 欧美性生活网址 | 茄子视频国产在线观看 | 韩国美女av | zzzwww在线看片免费 | 美女裸体十八禁免费网站 | 穿越异世荒淫h啪肉np文 | 国产一精品av一免费爽爽 | 1000午夜黄三级 | 亚洲男人皇宫 | 九九伊人八戒 | 国产在线看 | 久99综合婷婷 | 国产乱码精品一区二区三区亚洲人 | 久久亚洲欧美日韩精品专区 | 久久综合综合久久综合 | 97人人澡人人深人人添 | 99re这里只有精品在线 | 久久香焦 | 中国一级女人毛片 | 中文字幕久热精品视频在线 | 亚洲熟妇无码八av在线播放 | 日本xxxx色视频在线观看免费 | 亚洲成年| 日本极品xnxxcom | 黄网站在线免费 | 日韩免费观看完整 | 国产激情视频一区二区三区 | 99久久精品免费看国产 | 久久久精品人妻一区二区三区四 | 中文字幕有码无码av | 日韩黄色一级 | 三级大片在线观看 | 一本色道久久88综合日韩精品 | 日本欧美色图 | 狠狠干天天干 | 欧洲亚洲另类 | 国产ts人妖另类 | 黄av网| 精品国产制服丝袜高跟 | 亚洲男人的天堂在线视频 | 欧美一级性生活视频 | 亚洲精品久久久久中文字幕m男 | 亚洲综合天堂av网站在线观看 | 夜夜躁狠狠躁日日躁202小说 | 国产精品成熟老女人 | 欧美久久精品一级黑人c片 欧美久久久 | 亚洲乱码国产乱码精品精小说 | 国产偷国产偷亚洲清高网站 | 刺激一区仑乱 | 美女嘘嘘嘘aaaaaaaa级 | 久久国产亚洲精品无码 | 国产男女做爰猛烈床吻戏网站 | 成人免费观看视频大全 | 青草影院内射中出高潮 | 非洲人成免费视频 | 120秒日本爱爱动态图 | 日本精品一区二区三区在线观看 | 日日夜夜撸啊撸 | 波多野42部无码喷潮 | 黄色欧美网站 | av影视在线观看 | 1000部夫妻午夜免费 | 久久精品女 | 亚洲综合图片网 | 四虎在线网址 | 亚洲精品人成无码中文毛片 | 精品区一区二区 | 国产精品日日摸夜夜添夜夜av | 欧美性淫爽ww久久久久无 | 欧洲成人一区二区三区 | 欧美在线视频网站 | 伊人久久伊人 | 亚洲精品xxx | 欧美深性狂猛ⅹxxx深喉 | 成片在线观看 | 另类激情视频 | 天堂√中文最新版在线 | 欧美在线视频一区二区 | 午夜三级影院 | 天天曰天天操 | 无码人妻久久一区二区三区 | 亚洲一页 | 韩国一区二区av | 黄色不卡 | 亚洲人在线播放 | 国产欧美另类精品久久久 | 国产一线二线在线观看 | 18成人片黄网站www | av网天堂| 国模欢欢炮交啪啪150 | 一日本道a高清免费播放 | 日本三级理论久久人妻电影 | 全肉乱妇杂乱视频在线观看 | 大乳美女a级三级三级 | 视频精品一区二区三区 | 欧美69久成人做爰视频 | 宅女噜噜66国产精品观看免费 | 国语对白新婚少妇在线观看 | www.国产在线播放 | av黄色在线观看 | 北岛玲一区二区 | 亚洲日韩中文第一精品 | 91在线视频网址 | 久久国产劲暴∨内射新川 | 久久99精品久久久久久9鸭 | 黄色网免费看 | 国产视频网站在线观看 | 亚洲天堂男人av | 欧美性猛交ⅹxx | 西西44rtwww国产精品 | 99久久无色码中文字幕婷婷 | 91亚洲欧美中文精品按摩 | 青青草福利| 国产成人黄色片 | 成人福利一区 | 少妇性bbb搡bbb爽爽爽 | 成人免费观看视频大全 | 国产性猛交╳xxx乱大交 | 国内av片 | 成人黄色在线观看 | 99精品欧美一区二区三区综合在线 | 亚洲精品一区二区精华 | 亚洲毛片视频 | 波多野结衣高清一区二区三区 | 日韩毛片免费无码无毒视频观看 | 午夜时刻免费入口 | 中文字幕av资源 | 精品国产99久久久久久宅男i | 白天躁晚上躁麻豆视频 | 色拍拍欧美视频在线看 | 高清一区二区三区四区 | 国产精品白嫩白嫩大学美女 | 夜夜躁狠狠躁日日躁 | 亚洲成a人片77777在线播放 | 日韩av日韩| 国产精品99久久久久久小说 | 国产亚洲福利 | 99久久精品国产亚洲 | 偷拍一区二区三区在线婷婷 | 日本激情网 | 亚洲色精品三区二区一区 | 国产一区二区在线播放视频 | 日本骚少妇 | 男女激情视频免费观看刺激 | 亚洲国产aⅴ成人精品无吗 亚洲国产aaa | 大陆一级a毛片杨玉环 | 免费a级毛片大学生免费观看 | 91插插影院| 97免费观看视频 | 亚洲第一综合天堂另类专 | 久久成人亚洲 | 免费国产黄网站在线观看视频 | 少妇被黑人到高潮喷出白浆 | 99国产超薄肉色丝袜交足 | 欧美第五页 | 99久久99久久精品国产片 | 在线视频一二区 | 国产白嫩护士被弄高潮 | 成人av在线一区二区 | 欧性猛交ⅹxxx乱大交 | 在线伊人 | 精品亚洲一区二区三区在线播放 | 国产精品一区二区久久 | 日韩av三区 | 亚洲爆乳无码专区www | 国产在线精品一区二区三区不卡 | 亚洲视频国产视频 | 性xx色xx综合久久久xx | 亚洲天堂首页 | 免费无码又爽又刺激软件下载直播 | 天堂在线中文8 | 一二三区乱码2021 | 五月激情av | 黄频网站在线观看 | 成人三级在线播放 | 欧美性受xxxx狂喷水 | 亚洲一区二区三区成人 | 老牛精品亚洲成av人片 | 色婷婷香蕉在线一区 | 久久久久久免费 | 色婷婷一区二区三区四区成人网 | 日韩欧美一区天天躁噜噜 | 少妇与大狼拘作爱性a | 国产精品嫩草影院av蜜臀 | 爱爱精品| 国产xxxx搡xxxxx搡麻豆 | 日产精品久久久久久久蜜臀 | 天堂久久一区二区 | 2019精品手机国产品在线 | 日韩第一视频 | 富婆如狼似虎找黑人老外 | 午夜男人av | 日本精品久久久久久草草 | 成人毛毛片 | 无码人妻品一区二区三区精99 | 97超碰人人草 | 亚洲一区在线免费观看 | 91精品视频一区二区三区 | 中老年熟妇激情啪啪大屁股 | 黄色性网站 | 中文字幕亚韩 | 青青草视频播放 | 调教丰满的已婚少妇在线观看 | 爱爱一区| 中文字幕日本人妻久久久免费 | 久久久久女教师免费一区 | 国产aaa视频 | 久久日韩激情一区二区三区四区 | 九九九九热精品免费视频点播观看 | 免费一级全黄少妇性色生活片 | 中文字幕亚洲无线码 | 欧美日韩a| 亚洲爆乳无码精品aaa片蜜桃 | 国产亚洲日韩一区二区三区 | 青青草原综合网 | 51久久精品夜色国产麻豆 | 色狠狠久久av五月综合 | 爱久久视频| 国产精品永久免费 | 久久精品大全 | 特黄aaaaaaaaa毛片免费视频 | 国产精品欧美一区乱破 | 国模无码大尺度一区二区三区 | 日p视频在线观看 | 婷婷久久综合九色综合 | 日本猛少妇色xxxxx | 日本久久黄色 | 免费黄色视屏 | 在线视频a | 免费播放一区二区三区 | 欧美精品一区二区在线观看 | 国产又爽又黄视频 | 午夜精品久久久久久毛片 | 19禁国产精品福利视频 | 亚洲 欧美 日韩 在线 | 久久免费视频3 | 精品成人乱色一区二区 | 欧美三根一起进三p | av老司机福利 | 国产寡妇亲子伦一区二区 | 少妇久久精品 | 欧美精品一区二区三区久久久 | 91资源新版在线天堂成人 | 亚色视频在线观看 | 哺乳期喷奶水丰满少妇 | √天堂8资源中文在线 | 秋霞影院一区二区 | 下面一进一出好爽视频 | 影音先锋中文字幕资源 | 久久精品国产99久久6动漫 | 少妇挑战三个黑人惨叫4p国语 | 久久久www影院人成_免费 | jzzjzzjzz日本丰满少妇 | 日本乱大交做爰 | 欧美精品成人影院 | 不用播放器的av网站 | 国产后入清纯学生妹 | 国产成人一区二区三区别 | 中文字幕――色哟哟 | 亚洲国产一区二区三区波多野结衣 | 国产视频资源在线观看 | 久久久麻豆| 91社影院| 国内精品久久久久 | 亚洲三级高清免费 | 超碰超在线| 天堂8资源最新版8 | 丰满少妇被猛烈进入 | 久操国产在线 | 99精品免费久久久久久久久日本 | 美女丝袜合集 | 亚洲爱视频 | 永久免费观看av | 99久久精品美女高潮喷水 | 亚洲精品区 | 少妇资源| 91麻豆蜜桃一区二区三区 | 欧美猛交ⅹxxx乱大交视频 | 成人精品亚洲 | 中文字幕在线导航 | 影音先锋中文字幕人妻 | 国产精品有码无码av在线播放 | 国产香蕉视频 | 亚洲欧美高清在线 | 久久久久久9 | 伊人久久一区二区三区 | 国产小仙女精品av揉 | a点w片 | 四季久久免费一区二区三区四区 | 日日操日日射 | 夜色毛片永久免费 | 青娱乐在线视频免费观看 | 欧美人与动物xxxxz0oz | 高清乱码男女免费观看 | 亚洲图片欧美激情 | 性高潮免费视频 | 蜜桔视频成人免费观看 | 国产剧情av麻豆香蕉精品 | 六月丁香在线视频 | 久久久综合婷婷精品国产一区影院 | 特黄三级男人添女人下面 | 先锋影音男人av资源 | 国产精品久久久国产盗摄 | 拔擦拔擦8x国产精品免费 | 精品国产美女福到在线不卡 | 国产寡妇亲子伦一区二区三区四区 | 欧美麻豆久久久久久中文 | 中文字幕第一页在线播放 | 国产嫩草在线观看视频 | 人人玩人人添人人澡超碰 | 国产色a在线观看 | 国产亚洲美女精品久久久2020 | 久久婷婷五月综合色精品 | 成人夜色视频 | 国产亚洲精久久久久久无码77777 | xxxx69视频| 婷婷久久久亚洲欧洲日产国码av | 999精品免费视频 | 四虎小视频 | 精品一二三四 | 在线黄色av | 欧美日p视频 | 成年人黄色 | 国产精品1区| 丰满少妇69激情啪啪无 | 久久激情影院 | 亚洲va久久久噜噜噜久久 | 99国产精品99久久久久久娜娜 | 91亚洲精品丁香在线观看 | 一道本在线视频 | 午夜天堂av| 91精品国产91久久久久久吃药 | 欧美碰碰碰 | 日韩精品久久久久久久白丝 | 国产亚洲精品久久久久久青梅 | 国产又爽又黄又无遮挡的激情视频 | 日本a在线免费观看 | 亚洲精品一卡二卡 | 日韩爽爽视频 | 久久久久久国产视频 | 天堂在线官网 | 亚洲精品在线免费看 | 日本牲交大片免费观看 | 欧亚毛片 | 亚洲日本aⅴ片在线观看香蕉 | 午夜精彩视频 | 又黄又爽又刺激久久久久亚洲精品 | 人人妻人人澡人人爽人人精品av | 老色批永久免费网站www | 国产无套粉嫩白浆在线 | 国产精品人成视频免费播放 | 天堂视频免费 | 亚洲精品久久久久国产 | 日韩三级黄 | 国产精品一区二区av日韩在线 | 久久99国产综合精品免费 | 免费色av| 2019nv天堂香蕉在线观看 | 五月婷婷综合在线 | 亚洲最大的熟女水蜜桃av网站 | 国产大片b站| 亚洲成熟毛多妇女av毛片 | 欧美性在线观看 | 午夜无码一区二区三区在线观看 | 在线天堂中文 | 自拍亚洲一区欧美另类 | 国产女人40精品一区毛片视频 | 免费拍拍拍网站 | 日本国产中文字幕 | 91麻豆精品久久久久蜜臀 | 国产一级80毛片古装片 | 日本黄色不卡 | 荡女淫春 在线观看69影院 | 亚洲制服丝袜精品久久 | 国产免费av片在线观看 | 日本精品人妻无码免费大全 | 黄色影片在线看 | 日本一级二级三级久久久 | 麻豆影音先锋 | 一级片视频播放 | 国产精品久久久久久久久久久免费看 | 欧州一级片| 国产偷人爽久久久久久老妇app | 亚洲综合色小说 | 亚洲国产精品激情综合图片 | www.成人在线观看 | 九色蜜桃臀丨porny丨自拍 | 午夜精品一区二区三区三上悠亚 | 亚洲v无码一区二区三区四区观看 | 亚洲成a人一区二区三区 | 深夜福利视频在线 | 亚洲黄色免费在线观看 | 亚洲狼人av | 色哒哒影院 | 99国产精品99久久久久久娜娜 | 亚洲日韩v无码中文字幕 | 国产香蕉视频在线播放 | 日韩免费片 | 亚洲乱论| 久久亚洲精品中文字幕 | 日韩精品无码中文字幕一区二区 | 国产乱子轮xxx农村 永久免费的av在线电影网无码 | 免费一级一片 | 新亚洲天堂 | 免费视频91 | 久久成人国产精品入口 | 闺蜜互慰吃奶互揉69式磨豆腐 | 老太脱裤子让老头玩xxxxx | 久久久亚洲国产天美传媒修理工 | 免费观看又色又爽又黄6699 | 性欧美高清come | 九色国产视频 | 黄色网页免费在线观看 | 色噜噜狠狠一区二区三区 | 久久精品伦理 | 日本色区 | 一本一道精品欧美中文字幕 | 国产成人精品综合久久久久 | 蜜桃一本色道久久综合亚洲精品冫 | 国产亚洲精品久久久闺蜜 | 日本无遮挡吸乳视频 | 日韩人妻无码一区二区三区综合部 | 亚洲精品国产suv一区88 | 那里可以看毛片 | 国产精品探花在线观看 | 黄色三级毛片 | 欧美大片va欧美在线播放 | 日日骚视频 | 老牛影视av一区二区在线观看 | 欧美阿v高清资源不卡在线播放 | 亚洲精品一区二区冲田杏梨 | 亚洲国产婷婷六月丁香 | 8x8ⅹ国产精品8x红人影库 | 亚洲一级一区 | hitomi一区二区在线播放 | 丰满双乳峰白嫩少妇视频 | 精品久久久蜜桃 | 丁香婷婷综合网 | 一区二区视频网 | 国产免费午夜a无码v视频 | 奶头又大又白喷奶水av | 欧美激情精品成人 | 国产91我把她日出白浆 | 亚洲精品久久久久久久蜜桃臀 | 免费观看国产精品视频 | 1000部禁片18勿进又色又爽 | 综合精品久久久 | 欧美亚洲色图视频 | 曰本女人与公拘交酡免费视频 | 无遮挡国产高潮视频免费观看 | 免费的黄网站在线观看 | a级高清免费毛片av在线 | 亚洲欧美在线视频 | av色哟哟| 久久成人 久久鬼色 | 久久久精品999 | 草草在线视频 | 300部国产真实乱 | 一区二区国产精品精华液 | 18禁黄网站男男禁片免费观看 | 一区免费在线 | 无码人妻精品一区二区三区不卡 | 日本人做爰全过程 | 一级α片免费看刺激高潮视频 | a级毛片黄免费观看 m | 尤物视频激情在线视频观看网站 | 特级黄色视频毛片 | 一级做a爰 | 奇米777四色在线精品 | 污视频大全 | 欧美精品韩国精品 | 国产精品jizz在线观看美国 | 国产精品9999久久久久 | 欧美一级特黄aaaaaa大片在线观看 | 日日噜噜夜夜狠狠视频 | 熟妇人妻午夜寂寞影院 | 欧美黑人又粗又大高潮喷水 | 日韩不卡的av | 国产a级免费视频 | 好吊妞国产欧美日韩免费观看网站 | 91色| 中文字幕资源在线 | 人妻少妇久久久久久97人妻 | 高清无码午夜福利视频 | 国产偷自拍视频 | 九九视屏| 范冰冰一级做a爰片久久毛片 | 久草免费在线色站 | 国产精品入口网站7777 | 亲嘴扒胸摸屁股激烈网站 | 国产精品视频在线播放 | 亚洲国产欧美在线成人 | 国产精品久久久av久久久 | 91精品国产爱久久丝袜脚 | 中文字幕在线有码 | 中国老太婆bb无套内射 | 伊人亚洲天堂 | 综合色爱 | 国产精品国产三级国产aⅴ入口 | 香蕉97视频观看在线观看 | 亚洲一区日韩 | 国产不卡视频在线 | 中文久久久久 | 国产色91| 国产精品黄在线观看免费软件 | 中文字幕――色哟哟 | 好吊操视频 | 国自产拍偷拍精品 | jizz日本免费 | 色撸撸在线观看 | 国产免费一区二区三区香蕉精 | 国产三级在线观看完整版 | 在线观看亚洲大片短视频 | 亚洲日韩色图 | 亚洲乱妇老熟女爽到高潮的片 | 人妻aⅴ无码一区二区三区 日本一卡2卡3卡四卡精品网站 | 偷拍av网 | 国产精品www老牛影视 | 国产黄色大片在线观看 | 91在线精品啪婷婷 | 久久高清 | 国产精品国产三级国产专播 | 国产寡妇亲子伦一区二区三区 | 久久久艹 | 少妇人妻丰满做爰xxx | 久久无码人妻丰满熟妇区毛片 | 日本一本视频 | 无套内谢的新婚少妇国语播放 | 国产伦久视频免费观看视频 | 亚洲涩涩视频 | 免费播放黄色片 | 国产精品久久久久久久久久免费看 | 天美传媒一区二区 | 免费黄色看片网站 | 中文字幕3 | 另类图片亚洲色图 | 国产情侣av自拍 | 日本黄色片视频 | 日韩精品无码一区二区中文字幕 | 久久福利网站 | 精品视频导航 | 国产精品久久久久久久久久久久 | 日本3p视频| 欧洲多毛裸体xxxxx | 久久精品夜色噜噜亚洲a∨ 久久精品一二三 | 国产黄大片在线观看 | 91精品国产福利在线观看的优点 | 亚洲欧美综合一区 | 日本高清裸体私密写真集 | 美女张开腿让人桶 | 中国白嫩丰满人妻videos | 久久亚洲精品无码aⅴ大香 人人妻人人玩人人澡人人爽 | 亚洲成a人v欧美综合天堂麻豆 | 天天干天天日夜夜操 | 成年网站在线免费观看 | 四虎永久在线精品免费网址 | 香蕉成人啪国产精品视频综合网 | 日韩一区二 | 欧美成人一区二区三区片免费 | 囯产精品久久久久久久久久妞妞 | 亚洲综合图色40p | 青草青草视频2免费观看 | 亚洲国产一区二区a毛片 | 黄网在线观看视频 | 中文字幕第一页在线vr | 中国女人性猛交 | 天天干天天操天天舔 | 亚洲精品国产a久久久久久 51国偷自产一区二区三区 | 精品午夜一区二区三区在线观看 | 纤纤影视理伦片在线看 | 九色亚洲 | 国产欧美久久久精品免费 | av片免费看 | 亚洲国产一区二区a毛片 | 欧洲性生活视频 | 国产专区第一页 | 亚洲综合精品香蕉久久网 | 免费的大尺度在线观看网站 | 日韩精品色呦呦 | 欧美国产成人精品一区二区三区 | 日韩精品区一区二区三vr | 少妇高潮zzzzzzzy一avhd | 无码专区天天躁天天躁在线 | 天天色欧美 | 国产成人av在线影院 | 樱桃成人精品视频在线播放 | 成人在线激情 | 成人免费视频国产免费网站 | 亚洲自拍偷拍综合 | 麻豆精品免费 | 交换配乱吟粗大农村大坑性事视频 | 久久久久久久久免费看无码 | 国产成人高潮免费观看精品 | 国产成人无码av片在线观看不卡 | 国产亚洲视频在线观看 | 不卡国产视频 | 国产午夜片无码区在线播放 | 亚洲欧美日韩一区在线观看 | 国产激情综合五月久久 | 日本人麻豆| 日本欧美一区二区 | 欧美成人高清视频在线观看 | 久久久欧美国产精品人妻噜噜 | 国产床戏无遮挡免费观看网站 | 国产午夜一级一片免费播放 | 日韩69av| 狠狠色丁香婷婷 | 阿v天堂2018 阿v天堂在线 | 亚洲欧美一区二区精品久久久 | 性猛交xxxx乱大交孕妇2十 | 免费看成人aa片无码视频羞羞网 | 黑人大战亚洲人精品一区 | 91精品福利少妇午夜100集 | 韩国无码av片在线观看网站 | 午夜大片网| 国产三级第一页 | sm调教小sao货叫主人语录 | 国产精品分类 | 高清911专区 | 国产农村妇女毛片精品久久 | 日日干夜夜撸 | 国产视频一区二区 | 久久久av片 | 国产丝袜自拍 | 成年免费视频黄网站在线观看 | 国产精品免费久久久久影院仙踪林 | 9色porny自拍视频一区二区 | 免费精品久久久久久久一区二区 | 久久精品一区二区 | av福利在线观看 | 国产日日干 | 天堂色播| 激情亚洲一区国产精品 | 黄色一级带 | 精品久久久久久无码人妻热 | 日本中文亲子偷伦 | 91久久久色在线观看 | 综合网在线 | 欧洲一区二区在线观看 | 人人做人人爽人人爱 | 91n视频| av观看在线观看 | 伊人久久噜噜噜躁狠狠躁 | 亚洲成人福利 | 国产国一国二wwwwww | 乱lun合集在线观看视频 | 天天免费视频 | 国产精品久久久久久av | 亚洲一区二区高潮无套美女 | 欧美成人一区二区三区片免费 | 久久久女人 | 一本—道久久a久久精品蜜桃 | 伊人网在线免费观看 | 日韩精品99久久久久久 | 伊人久久大香线蕉综合影院首页 | 懂色av中文在线 | av一区二区三区在线观看 | 91香蕉视频黄 | 91视频在线国产 | 亚洲国产精品美女 | 天天添天天射 | 国产情侣一区二区三区 | 亚洲午夜小视频 | av手机网站 | 亚洲午夜精品久久久久久浪潮 | 成年性生交大片免费看 | 黑人巨茎大战欧美白妇 | 亚洲天堂偷拍 | 国产99久久久国产精品 | 99精品免费久久久久久久久日本 | 久操精品 | 色婷婷av一区二区三区之一色屋 | 中国丰满老妇xxxxx交性 | 夜夜操免费视频 | 91精品国产综合久久久蜜臀图片 | 欧美一区二区三区四区五区 | 国产伊人自拍 | vvvv99日韩精品亚洲 | 日本美女a级片 | 欧美做受喷浆在线观看 | 女同互舔互慰dv毛片 | 福利视频在线播放 | 99久久精品美女高潮喷水 | 日本在线视频免费 | 日日夜操| 三级国产在线 | 日日噜噜夜夜狠狠久久蜜桃 | 黑人巨大精品欧美黑白配亚洲 | 2018天天干天天操 | 欧美色视| 最新亚洲人成无码网站 | 国产成a人亚洲精品在线观看 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 婷婷嫩草国产精品一区二区三区 | 小早川怜子xxxxaⅴ在线 | 91久久国产综合久久 | 蜜桃91丨九色丨蝌蚪91桃色 | 久久99久久99精品免视看婷婷 | 中文字幕亚洲一区二区va在线 | 亚洲a无码综合a国产av中文 | 亚洲一区激情 | 骚虎视频在线观看 | 日本三级韩国三级三级a级按摩 | 亚洲免费在线播放 | 免费萌白酱国产一区二区三区 | 亚洲影院丰满少妇中文字幕无码 | 亚洲狠狠色丁香婷婷综合 | 久久久久久毛片 | 九九久久99| 色欲人妻aaaaaaa无码 | 欧美最猛性xxxⅹ丝袜 | 欧美成人午夜一区二区三区 | av导航在线 | 最新的中文字幕 | 久久久久久久香蕉 | 伊人久久久 | 人妻 日韩精品 中文字幕 | 亚洲精品一区二区三区98年 | 欧美日韩一二 | 欧美日韩3p| 拍真实国产伦偷精品 | 99啦porny丨首页入口 | 在线免费观看国产精品 | 国产人与zoxxxx另类 | 免费视频国产在线观看 | 欧美午夜一区二区三区 | 中国少妇内射xxxhd免费 | 欧美日韩精品在线播放 | 亚洲国产成人无码网站大全 | 丰满少妇被猛男猛烈进入久久 | 看全色黄大色黄大片男爽一次 | 精品一区精品二区 | 少妇高潮尖叫黑人激情在线 | 先锋影音一区二区三区 | 国产午夜啪啪 | 超碰人人超碰人人 | 色婷婷国产精品视频 | 国产精品欧美一区二区三区喷水 | 大江大河第三部50集在线观看旭豪 | 黄色性大片 | 四虎视频 | 国产午夜精品久久久 | 狠狠综合久久av一区二区 | 日韩综合色 | 国产网站黄色 | 日本特黄一级片 | 三级黄色在线播放 | 视频一区二区国产 | 国产精品欧美大片 | 亚洲国产欧美一区二区潘金莲 | 天天欲色 | 午夜偷拍福利 | 国产99久久久久久免费看 | 亚洲成av人无码综合在线观看 | 欧美日韩三级 | 超薄肉色丝袜一区二区 | 玩弄少妇肉体到高潮动态图 | 国产精品99久久久 | 秋霞福利网 | 97av视频在线 | 91福利影院 | 中文欧美日韩 | 久久精品色欧美aⅴ一区二区 | 国产又猛又粗 | 亚洲 日韩 欧美 成人 在线 | 色一情一狱一爱一乱 | 香港曰本韩国三级网站 | 日本中文字幕有码在线视频 | 欧美风情第一页 | 嫩草影院在线观看视频 | 18在线观看视频网站 | 亚洲人人夜夜澡人人爽 | 中文在线天堂网 | 在线观看麻豆视频 | 天天摸夜夜添夜夜无码 | 精品视频一二三区 | 国精产品一区一区三区视频 | 久久久久黄 | 波多野结衣av无码久久一区 | 欧美日韩精品在线播放 | 91制片一二三专区亚洲 | a级片视频网站 | 久久国内免费视频 | 动漫av在线免费观看 | 国产精品99久久精品爆乳 | 亚洲综合视频在线观看 | 国产福利专区 | 一级片在线观看免费 | 国产乱人乱精一区二视频国产精品 | 久久精品国产曰本波多野结衣 | 在线综合av | 中文字幕一区二区三区四区久久 | 国产又色又刺激高潮视频 | 青青青看免费视频在线 | 国产精品无码一区二区三级 | 国产又色又爽又刺激在线播放 | 刚添一下她就呻吟起来的视频 | 国产精品久久久久久久久久久久午 | 黑人狂躁日本妞hd | 亚洲欧美韩国 | 182tv国产免费观看软件 | 在线你懂的视频 | 国产怡红院在线观看 | 国产对白精品刺激二区国语 | 免费一级淫片 | 美女少妇翘臀啪啪呻吟网站 | 国产精品资源 | 精品国产一区二区三区护卡密 | 精品国产一区二区在线观看 | 亚洲人性生活视频 | 高中生粉嫩无套第一次 | 成人性生交大片免费看中文视频 | 色屋在线 | 久久网亚洲 | 国产传媒在线播放 | 久久国产精品大桥未久av | 欧美双性人妖o0 | 成人小视频在线 | 中文字幕无码乱码人妻系列蜜桃 | 凹凸日日摸日日碰夜夜爽孕妇 | 亚洲欧美高清 | 国产一区二区三区在线观看 | 另类老妇奶性生bbwbbw | 欧美精品一级二级三级 | 国产丝袜一区二区在线 | 狠狠色狠狠色综合 | 中文字幕一区二区不卡 | 欧美日韩三级 | 水野朝阳av一区二区三区 | 婷婷91欧美777一二三区 | 久在线精品视频线观看 | 国产一精品久久99无吗一高潮 | 亚洲肥老太bbw中国熟女 | 亚洲精品无码高潮喷水在线 | 爱情岛论坛自拍亚洲品质极速福利 | 午夜视频体内射.com.com | 国产视频一区二区三区四区五区 | 欧美日本中文字幕 | 国产成人午夜视频 | 国精品一区二区 | 亚洲乱码国产乱码精品精乡村 | 友田真希一区二区 | 国产视频一二三 | 好色999| 911精品美国片911久久久 | 国产91清纯白嫩初高中在线观看 | 91插插插插插 | 国内精品免费午夜又爽又色愉情 | 久久国产欧美 | 欧美日在线观看 | 亚洲一区二区蜜桃 | 天堂综合久久 | 欧美日韩在线免费观看视频 | 日韩精品极品 | 国产乱人伦无无码视频试看 | 国产农村妇女毛片精品久久麻豆 | 午夜免费播放观看在线视频 | 中文字幕在线观看视频地址二 | 自拍偷拍第1页 | 国产在线视频一区二区三区 | 国产精品久久久一区二区 | 日韩精品在线不卡 | 精品一区二区超碰久久久 | 免费的黄色小视频 | 日本高潮视频 | 第四色在线视频 | 久久久国产一区二区三区四区小说 | www久久久久久 | 日本欧美色十大禁片毛片 | 久久男人av久久久久久男 | 亚洲福利视频一区二区 | 免费在线观看小视频 | 人妻熟女一区二区aⅴ林晓雪 | 欧美又大又色又爽aaaa片 | 一级片黄色毛片 | 综合久久五月天 | 日本免费一二三区视频 | 成人性生生活性生交免费 | 欧美一级无毛 | 成人免费观看网站 | 成人免费视频网站 | 91精品国产91久久久久 | 六月综合激情 | 九九视频网 | 亚洲天堂视频网 | 欧美影片网站推荐 | 欧美综合自拍亚洲综合图 | 男人的天堂aa | 国产主播一区二区三区 | 亚洲精品第一国产综合野 | 五月天激情开心网 | 五姑娘在线观看高清版 | 免费国产在线观看 | 欧美国产激情视频 | 伊人久久久久久久久久久久久 | 进去里视频在线观看 | 久久久亚洲国产天美传媒修理工 | 欧美激情猛片xxxⅹ大3 | 日本高清免费观看 | 国产精品一区二区三区在线播放 | 欧美人与性动交α欧美片 | 精品五月天 | 国产精品欧美一区乱破 | 日b视频在线观看 | 国产精品亚洲成在人线 | 俄罗斯av在线 | 扶她futa粗大做到怀孕 | 欧美日韩欧美日韩在线观看视频 | 少妇又色又紧又黄又刺激免费 | 亚洲不卡视频在线观看 | 国产精品丝袜黑色高跟鞋v18 | 少妇特黄a一区二区三区 | 亚洲娇小业余黑人巨大汇总 | 人妻天天爽夜夜爽一区二区 | 国产精品一区二区手机在线观看 | 亚洲午夜av久久乱码 | 天天噜夜夜噜 | 成人动漫区| 想要xx在线观看 | 精品国产美女 | 好吊妞这里有精品 | 国产草草影院 | av在线小说 | 国产福利不卡 | 99久久免费只有精品国产 | 人妻熟女一区二区aⅴ林晓雪 | 久草综合在线观看 | 国产精品我不卡 | 乱人伦中文字幕 | av日韩天堂 | 国产亚洲视频在线播放香蕉 | 国产精品色婷婷 | 精品国产99 | 日本三级视频网站 | 我的邻居在线观看 | 春草| 两女女百合互慰av赤裸无遮挡 | 寂寞骚妇被后入式爆草抓爆 | 国产精品久久久一区 | 亚洲а∨天堂久久精品2021 | 亚洲免费av网站 | 久久综合久久久 | 日干夜操| 男女性色大片免费网站 | 视频福利在线 | 久久久精品小视频 | 国产无遮挡又黄又爽在线视频 | 亚洲国产婷婷香蕉久久久久久 | 色天堂视频 | 亚洲一区二区三区四区的 | 操欧美老逼 | 少妇高清精品毛片在线视频 | 国产一区二区三区 | 国产免费a级片 | 女人张开腿涩涩网站 | 一本久在线 | 国产美女在线播放 | 亚洲成熟少妇 | 日韩综合精品 | 99热热热 | 一级片福利| 永久免费观看的毛片手机视频 | 天天躁日日躁狠狠躁800凹凸 | 成人一区二区免费视频 | 国内精品人妻久久毛片app | 东京一本一道一二三区 | 伊人原创视频 | 4438国产精品一区二区 | 欧美精品久久久久久久久免 | 媚药一区二区三区四区 | 白嫩丰满少妇xxxxx性视频 | 亚洲爆乳无码精品aaa片蜜桃 | 操操影视 | 日韩三级黄| 日韩黄色三级视频 | 99久久99这里只有免费费精品 | 国产亚洲人成网站在线观看 | 北条麻妃99精品青青久久 | 国产成人精品手机在线观看 | 亚洲自拍色图 | 18禁黄网站禁片免费观看女女 | 99久久综合狠狠综合久久止 | 亚洲人成77777在线播放网站 | 国产亚洲精品久久久久久无几年桃 | 黄色小说在线观看视频 | 女人被狂躁到高潮视频免费软件 | 国产人妻精品区一区二区三区 | 欧州一级片 | avtt男人天堂| 亚洲一在线 | 97日韩精品 | 国产女女调教女同 | 久久精品久久久久久久久久16 | 日本三级成本人网站 | 日本中出中文字幕 | 日日爽天天| 法国伦理少妇愉情 | videos娇小粉嫩精品 | 欧洲做受高潮片 | 懂色av一区二区三区免费 | 久久久久久久久久久久国产精品 | 北条麻妃在线一区二区 | 波多野结衣免费在线视频 | 特级西西人体444www高清 | 一级黄色a | 亚洲第一网站男人都懂 | 印度最猛性xxxxx69交 | 肥臀熟女一区二区三区 | 999国产精品999久久久久久 | 国产特级毛片aaaaaaa高清 | 久久综合伊人77777麻豆 | 精品欧美小视频在线观看 | 亚洲欧美综合精品另类天天更新 | 欧美日韩精品一区 | 日本肉体xxxx裸体784大胆 | 一区二区91| 国产成人午夜高潮毛片 | 欧美大浪妇猛交饥渴大叫 | 亚洲做爰日本做爰 | 丁香花五月 | 国产激情偷乱视频一区二区三区 | 国产精品一区二区在线观看 | 我和房东少妇激情 | 在线观看免费毛片 | 黄一区二区三区 | 一道本毛片 | 欧美在线brazzers免费视频 | 精品国产一区二区三区麻豆 | 成人性做爰aaa片免费看不忠 | 亚洲第九十九页 | 91香蕉在线看 | 三级伦理精品专区 | 中文字幕综合网 | www.亚洲视频.com | 色婷婷亚洲六月婷婷中文字幕 | 一区二视频 | 精品人无码一区二区三区 | 亚洲色婷婷一区二区三区 | 国精品99久9在线 | 免费 | 人人色在线视频播放 | 日本极品丰满ⅹxxxhd | 美女露出奶头扒开尿口免费网站 | 精久国产一区二区三区四区 | 国产精品久久久久久久久久东京 | 天天碰天天 | 久久视频免费观看 | 日韩 欧美 综合 | 久久久久国色av免费观看性色 | 在线91观看 | 亚洲黄色网址大全 | 野草社区在线观看 | 日本大乳高潮视频在线观看 | 九九久久久 | 亚洲91久久 | 中文字幕av第一页 | 黄色小毛片| 大香焦久久 | 欧美做爰性生交视频 | 欧美成人精品在线 | 91香蕉国产| 色8久久人人97超碰香蕉987 | 国内精品一区二区三区 | 国产亚洲精品美女久久久 | 日产精品久久久久久久蜜臀 | 又爽又大久久久级淫片毛片 | 哈利波特3在线观看免费版英文版 | www17ccom喷水少妇 | 亚洲国产美女精品久久久 | 无码精品人妻一区二区三区漫画 | 日本男女激情视频 | 日韩一级片一区二区三区 | 国产精品99久久久久久人免费 | 亚洲黄色小视频在线观看 | 欧美日韩亚洲综合 | 国产操操操 | 天天操天 | 日韩欧美中出 | 精品无码久久久久久久久水蜜桃 | 81精品国产乱码久久久久久 | 日韩色区 | 日日涩 | 精彩视频一区二区三区 | 亚洲精品怡红院 | 丰满老熟女毛片 | 国产蜜臀av在线一区尤物 | 国产一级大黄 | 最近中文字幕日本 | 中午日产幕无线码1区 | 日本三级在线视频 | 在线免费观看不卡av | 女教师少妇高潮免费 | 又湿又紧又大又爽a视频 | 三级理伦 | 国产在线日本 | 91精品在线国产 | 国产欧美日韩综合精品一区二区 | 欧美自拍另类欧美综合图片区 | 亚洲国产精品成人天堂 | 国产一级二级三级 | 婷婷网址| 精品欧洲av无码一区二区三区 | 99久久精品免费看国产一区二区三区 | 欧美久草视频 | 51久久国产露脸精品国产 | 亚洲毛片在线 | 国产精品久久久久久吹潮 | 一级视频在线免费观看 | 国产成人精品白浆久久69 | 国产人妻久久精品二区三区老狼 | 黄色aaa网站 | 女人被黑人狂躁c到高潮小说 | 人人妻人人妻人人片av | 欧美影院成年免费版 | 粉嫩无套白浆第一次 | 免费三级黄色 | 91视频综合| 亚洲精品网站在线观看 | 99久久国产热无码精品免费 | 好吊日免费视频 | 97人人精品 | av在线激情| 中文在线字幕免费观看电 | 国产成人精品亚洲一区 | 国产亚洲91 | 亚洲激情小视频 | 天天躁日日躁狠狠躁av | 少妇高潮太爽了在线观看 | 成人性视频网站 | 中文字幕一区二区三区视频 | 日韩国产毛片 | 免费三级网站 | 在线xxxxx| 成人年无码av片在线观看 | 国语自产少妇精品视频蜜桃 | 青青草一区二区 | 97人妻精品一区二区三区 | 任我撸在线视频 | 国产最爽乱淫视频免费 | 日本午夜视频 | 日韩中文字幕在线播放 | 真人真事免费毛片 | 九九精品在线观看 | 黄色大全免费看 | proumb性欧美在线观看 | 欧美疯狂做受xxxx高潮 | 少妇艹逼 | 偷偷操不一样的久久 | 婷婷综合精品 | 中文字幕亚洲中文字幕无码码 | 美女裸体无遮挡免费视频网站 | 欧美怡红院 | 青青草狠狠爱 | 青青操av在线 | 国产精品入口福利 | 亚洲国产日韩精品二三四区竹菊 | 国产美女自拍视频 | 日韩美av | 色午夜视频 | 老女人任你躁久久久久久老妇 | 老司机亚洲精品影院无码 |