精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Netty常用招式—ChannelHandler與編解碼

開發(fā) 架構(gòu)
本文主要介紹了ChannelHandler的一種典型應(yīng)用場景——編解碼器。編解碼器核心關(guān)注點(diǎn)在于「粘包/拆包」的處理,我們介紹了「粘包/拆包」產(chǎn)生的原因以及常用解決方案。然后說明了如何使用Netty框架實(shí)現(xiàn)自定義編解碼器。

[[427477]]

上一篇文章我們深入學(xué)習(xí)了Netty邏輯架構(gòu)中的核心組件ChannelHandler和ChannelPipeline,并介紹了它在日常開發(fā)使用中的最佳實(shí)踐。文中也提到了,ChannelHandler主要用于數(shù)據(jù)輸入、輸出過程中的加工處理,比如編解碼、異常處理等。

今天,我們就選取日常開發(fā)中最常用的一種ChannelHandler用途來學(xué)習(xí)——編解碼器。

如果說ChannelHandler的學(xué)習(xí)是Netty的基礎(chǔ)招式,那么編解碼就是“基礎(chǔ)招式”中衍生出的“常用招式“,我們往往會以一個(gè)ChannelHandler來實(shí)現(xiàn)編解碼邏輯。無論是網(wǎng)絡(luò)編程實(shí)戰(zhàn),還是面試八股文,都離不開編解碼的知識。

[[427478]]

本文預(yù)計(jì)閱讀時(shí)間約 15分鐘,

將重點(diǎn)圍繞以下幾個(gè)問題展開:

  • 學(xué)習(xí)編解碼器,從粘包/拆包開始
  • 如何實(shí)現(xiàn)自定義編解碼器
  • Netty有哪些開箱即用的編解碼器

1、學(xué)習(xí)編解碼器,從粘包/拆包開始

1.1 為什么會有粘包/拆包粘包/拆包

問題,相信大家都有所耳聞,這個(gè)問題的出現(xiàn)主要包括三個(gè)原因:

1)MTU 和 MSS 限制

MTU(Maxitum Transmission Unit) 是OSI五層網(wǎng)絡(luò)模型中 數(shù)據(jù)鏈路層 對一次可以發(fā)送的最大數(shù)據(jù)的限制,一般來說大小為 1500 byte。

MSS(Maximum Segement Size) 是指 TCP報(bào)文中data部分的最大長度,它是傳輸層一次發(fā)送最大數(shù)據(jù)的大小限制。

MSS和MTU的關(guān)系如下所示:

  1. MSS長度=MTU長度 - IP Header - TCP Header 

因此,當(dāng) MSS長度 + IP Header + TCP Header > MTU長度 時(shí),就需要拆分多個(gè)報(bào)文進(jìn)行發(fā)送,會導(dǎo)致“拆包”現(xiàn)象。

2)TCP滑動窗口

TCP的流量控制方法就是“滑動窗口”。當(dāng)A向B發(fā)送數(shù)據(jù)時(shí),B作為接收端會告知發(fā)送端A自己可以接受的窗口數(shù)值,以此來控制A的發(fā)送流量大小,從而達(dá)到流量控制的目的。

假設(shè)接收方B告知發(fā)送方A的窗口大小為256,意味著發(fā)送方最多還可以發(fā)送256個(gè)字節(jié),而由于發(fā)送方的數(shù)據(jù)大小是518字節(jié),因此只能發(fā)送前256字節(jié),等到接收方ack后,才能發(fā)送剩余字節(jié)。會導(dǎo)致“拆包”現(xiàn)象。

3)Nagle算法

TCP/IP協(xié)議中,無論發(fā)送多少大小的數(shù)據(jù),都要在數(shù)據(jù)(DATA)前面加上協(xié)議頭(TCP Header + IP Header)。如果每次需要發(fā)送的數(shù)據(jù)只有 1 字節(jié),加上 20 個(gè)字節(jié) IP Header 和 20 個(gè)字節(jié) TCP Header,每次發(fā)送的數(shù)據(jù)包大小為 41 字節(jié),但真正有效的信息只有1個(gè)字節(jié),這就造成了非常大的浪費(fèi)。

因此,TCP/IP中使用Nagle 算法來提高效率。

Nagle 算法核心思想在于“化零為整“。它是在數(shù)據(jù)未得到確認(rèn)之前先寫入緩沖區(qū),等待數(shù)據(jù)確認(rèn)或者緩沖區(qū)積攢到一定大小再把數(shù)據(jù)包發(fā)送出去。

多個(gè)小數(shù)據(jù)包合并后一起發(fā)送出去,就造成了粘包。

1.2 怎么處理粘包/拆包

對于TCP,其實(shí)我們都知道它的一個(gè)特點(diǎn)就是“面向字節(jié)流”的傳輸協(xié)議,本身并沒有數(shù)據(jù)包的界限。所以不管什么原因造成了“粘包/拆包”,TCP協(xié)議本身的數(shù)據(jù)傳輸是可靠且正確的。

我們首先要明確一點(diǎn):“粘包/拆包”導(dǎo)致的問題,本質(zhì)上是應(yīng)用層的數(shù)據(jù)解析問題。

因此,解決拆包/粘包問題的核心方法:定義應(yīng)用層的通信協(xié)議。

核心在于定義正確的數(shù)據(jù)邊界。

常見協(xié)議的解決方案包括三種:

1)固定長度

每個(gè)數(shù)據(jù)報(bào)文都約定一個(gè)固定的長度。

當(dāng)接收方累計(jì)讀取到固定長度的報(bào)文后,就認(rèn)為已經(jīng)獲得一個(gè)完整的消息。

比如我們要發(fā)送一個(gè)ABCDEFGHIJKLM的消息,約定固定消息長度為4,那么接收方就可以按照4的長度來解析。如下所示。

當(dāng)發(fā)送方的數(shù)據(jù)小于固定長度時(shí),比如最后一個(gè)數(shù)據(jù)包,只有MN兩個(gè)字符,這時(shí)候就需要空位補(bǔ)齊。

這種方案非常簡單,但是缺點(diǎn)也非常明顯,非常不靈活。

如果固定長度定義太長,就會浪費(fèi)數(shù)據(jù)傳輸空間。如果定義太短,就會影響正確的數(shù)據(jù)傳輸。

這種方法一般不采用。

2)特定分隔符

除了固定長度外,我們比較容易想到的區(qū)分“數(shù)據(jù)邊界”的方法,就是用“特定分隔符”。當(dāng)接收方讀到特定的分隔符,就認(rèn)為拿到了一個(gè)完整的消息。

比如我們使用換行符 \n 來區(qū)分。

  1. AB\nCDEFG\nHIJK\nLMN\n 

這種方法就比較靈活了,適應(yīng)不同長度的消息。但是,必須要注意,“特殊分隔符”不能和消息內(nèi)容重復(fù),否則就會解析失敗了。

因此,我們在實(shí)踐過程中,可以考慮把消息進(jìn)行編碼(如base64),然后用編碼字符集之外的符號作為“特定分隔符”。

這種方案一般用在協(xié)議比較簡單的場景中。

3)消息長度+內(nèi)容

一般項(xiàng)目開發(fā)中,最通用的方式還是采用 消息長度+內(nèi)容 的方式進(jìn)行處理。

比如定義一個(gè)這樣的消息格式:

以這樣一個(gè)格式存儲,消息接收方在解析時(shí),先讀取4字節(jié)長度的信息作為”消息長度“,這里是3,表示消息長度為3字節(jié)。然后就讀取3字節(jié)的消息內(nèi)容作為 完整 的消息。

舉個(gè)例子:

  1. 2AB5CDEFG4HIJK3LMN 

消息長度+內(nèi)容 的方式非常靈活,可以應(yīng)用于各種場景中。

注意,在消息頭中,除了定義消息長度外,還可以自定義其他擴(kuò)展字段,比如消息版本、算法類型等。

2、如何在Netty中實(shí)現(xiàn)自定義編解碼器

上面我們了解了出現(xiàn)“粘包/拆包”的原因以及常用的解決方法。下面看看如何在Netty中實(shí)現(xiàn)自定義編解碼器。

Netty作為一個(gè)優(yōu)秀的網(wǎng)絡(luò)通信框架,已經(jīng)提供了非常豐富的處理編解碼的抽象類,我們只需要自定義編解碼算法擴(kuò)展即可。

2.1 自定義編碼器

我們先來看看自定義編碼器。因?yàn)榫幋a器比較簡單,不需要關(guān)注「粘包/拆包問題」。

常用的編碼抽象類包括MessageToByteEncoder 和 MessageToMessageEncoder,繼承自

ChannelOutboundHandlerAdapter,操作的是Outbound相關(guān)數(shù)據(jù)。

1)MessageToByteEncoder<I>

這個(gè)編碼器用于消息對象編碼成字節(jié)流。它提供了encode的抽象方法,我們只需要實(shí)現(xiàn)encode方法,就能進(jìn)行自定義編碼了。

編碼器實(shí)現(xiàn)非常簡單,不需要關(guān)注拆包/粘包問題。

我們舉一個(gè)栗子,將String類型消息轉(zhuǎn)換為字節(jié)流:

2)MessageToMessageEncoder

這個(gè)編碼器用于將一種消息對象編碼成另一種消息對象。這里的第二個(gè)Message可以理解為任意一個(gè)對象。如果是使用ByteBuf對象的話,就和上面的MessageToByteEncoder是一樣的了。

我們找一個(gè)Netty自帶的栗子看看,StringEncoder:

2.2 自定義解碼器

解碼器比編碼器要復(fù)雜一些,因?yàn)樾枰紤]“拆包/粘包”問題。

由于接收方有可能沒有接收到完整的消息,所以解碼框架需要對入站的數(shù)據(jù)做緩沖操作,直至獲取到完整的消息。

常用的解碼器抽象類包括 ByteToMessageDecoder 和 MessageToMessageDecoder,繼承自

ChannelInboundHandlerAdapter,操作的是Inbbound相關(guān)數(shù)據(jù)。

一般通用的做法是使用 ByteToMessageDecoder 解析 TCP 協(xié)議,解決拆包/粘包問題。解析得到有效的 ByteBuf 數(shù)據(jù),然后傳遞給后續(xù)的 MessageToMessageDecoder 做數(shù)據(jù)對象的轉(zhuǎn)換。

1)ByteToMessageDecoder

ByteToMessageDecoder解碼器用于字節(jié)流解碼成消息對象。

拿上面的“固定長度法”解決“粘包/拆包”舉一個(gè)栗子,Netty自帶的FixedLengthFrameDecoder。

通過固定長度frameLength,來對消息進(jìn)行解析。

生產(chǎn)實(shí)踐中,可能會使用更加復(fù)雜的協(xié)議來實(shí)現(xiàn)自定義編解碼,比如protobuf。

2)MessageToMessageDecoder

MessageToMessageDecoder解碼器用于將一種消息對象解碼成另一種消息對象。如果你需要對解析后的字節(jié)數(shù)據(jù)做對象模型的轉(zhuǎn)換,這時(shí)候便需要用到這個(gè)解碼器。

3、Netty有哪些開箱即用的解碼器

作為一個(gè)優(yōu)秀的網(wǎng)絡(luò)編程框架,Netty除了支持?jǐn)U展自定義編解碼器外,還提供了非常豐富的開箱即用的編解碼器。尤其是針對我們上文1.2節(jié)中提過的三種解決「粘包/拆包問題」的方式,都有開箱即用的實(shí)現(xiàn)。

3.1 固定長度解碼器 FixedLengthFrameDecoder

這個(gè)解碼器上文已經(jīng)提到過,對應(yīng)1.2節(jié)中的「固定長度解碼」,這里再稍微展開一下。

通過構(gòu)造函數(shù)配置固定長度 frameLength,然后在decode時(shí),按照frameLength 進(jìn)行解碼。

  • 當(dāng)讀取到長度大小為 frameLength 的消息,那么解碼器認(rèn)為已經(jīng)獲取到了一個(gè)完整的消息。
  • 當(dāng)消息長度小于 frameLength,F(xiàn)ixedLengthFrameDecoder 解碼器會一直等后續(xù)數(shù)據(jù)包的到達(dá),直至獲得完整的消息。

3.2 特殊分隔符解碼器 DelimiterBasedFrameDecoder

這個(gè)解碼器對應(yīng)1.2節(jié)中的「特殊分隔符解碼」,也是一個(gè)繼承自ByteToMessageDecoder的解碼器。

這個(gè)解碼器會使用 1個(gè) 或 多個(gè) 符號delimiter 對傳入的消息(ByteBuf)進(jìn)行解碼。

我們看一下構(gòu)造器,了解一下幾個(gè)重要參數(shù)。

  • maxFranmeLength

maxFranmeLength 是待處理消息的最大長度限制。如果超過 maxFranmeLength 還沒有檢測到指定分隔符,將會拋出 TooLongFrameException。

  • stripDelimiter

stripDelimiter是一個(gè)boolean類型, 用于判斷解碼后得到的消息是否移除分隔符。如果 stripDelimiter=false,那么解碼后的消息內(nèi)容就會保留分隔符信息。

  • failFast

failFast是一個(gè)boolean類型。如果為true,那么消息在超出 maxFranmeLength 后,會立即拋出 TooLongFrameException。如果為false,那么會等到解碼出一個(gè)完整的消息后才會拋出TooLongFrameException。

  • delimiters

delimiters 的類型是 ByteBuf 數(shù)組,可以在構(gòu)造器中同時(shí)傳入多個(gè)分隔符,但是在解析時(shí),最終會選擇長度最短的分隔符進(jìn)行消息拆分。

例如收到的數(shù)據(jù)為:

  1. ABCD\nEFG\r\n  

如果指定的分隔符為 \n 和 \r\n,那么會解碼出兩個(gè)消息。

  1. ABCD   EFG 

如果指定的特定分隔符只有 \r\n,那么只會解碼出一個(gè)消息:

  1. ABCD\nEFG 

3.3 長度域解碼器 LengthFieldBasedFrameDecoder

這個(gè)解碼器是生產(chǎn)實(shí)踐中運(yùn)用比較廣泛的一種(比如RocketMQ),相對復(fù)雜,但是特別靈活,基本能覆蓋各種基于長度進(jìn)行拆包的方案,比如1.2節(jié)中提到的「消息長度+內(nèi)容」的方案。

使用這個(gè)解碼器的時(shí)候,重點(diǎn)需要了解4個(gè)參數(shù),掌握了參數(shù)的設(shè)置,就能快速實(shí)現(xiàn)不同的基于長度的拆包解碼方案。

1)解碼方案一:基于消息長度 + 消息內(nèi)容,解碼結(jié)果不截?cái)嘞㈩^

報(bào)文只包含消息長度 Length 和消息內(nèi)容 Content 字段,其中 Length 為 16 進(jìn)制表示,共占用 2 字節(jié),Length 的值 0x000C 代表 Content 占用 12 字節(jié)。

解碼示例:

2)解碼方案二:基于消息長度 + 消息內(nèi)容,解碼結(jié)果截?cái)?/h3>

與方案一不同之處在于,解碼結(jié)果會截?cái)嘞㈩^(跳過2字節(jié))

解碼示例:

3)解碼方案三:基于消息頭 + 消息長度 + 消息內(nèi)容

消息起始位置添加特殊消息頭,消息長度 Length字段 后移。

解碼示例:

4)解碼方案四:基于消息長度 + 消息頭 + 消息內(nèi)容

消息起始位置為消息長度 Length字段,后面并不直接添加 消息內(nèi)容,而是先添加 消息頭header,再添加 消息內(nèi)容。

解碼示例:

由于 Length 后面不是馬上添加content,所以需要加上 lengthAdjustment(2 字節(jié))才能得到 Header + Content 的內(nèi)容(14 字節(jié))。

4、小結(jié)

來簡單回顧下吧。

本文主要介紹了ChannelHandler的一種典型應(yīng)用場景——編解碼器。

編解碼器核心關(guān)注點(diǎn)在于「粘包/拆包」的處理,我們介紹了「粘包/拆包」產(chǎn)生的原因以及常用解決方案。然后說明了如何使用Netty框架實(shí)現(xiàn)自定義編解碼器。

最后,介紹了Netty中非常好用的幾個(gè)開箱即用的編解碼器。

 

責(zé)任編輯:姜華 來源: 阿丸筆記
相關(guān)推薦

2021-08-09 09:48:16

NettyChannelHand架構(gòu)

2021-08-03 08:38:21

Netty解碼器使用

2020-12-21 06:58:12

Web安全編解碼工具

2020-10-15 18:31:36

理解Netty編解碼

2021-06-11 21:46:31

RocketMQ數(shù)據(jù)JSON

2025-04-10 10:15:30

2020-12-22 07:58:46

Netty編碼器解碼器

2023-08-23 14:53:05

火山引擎視頻云視頻編解碼

2021-09-16 15:05:39

鴻蒙HarmonyOS應(yīng)用

2022-03-24 15:00:09

Harmony編解碼鴻蒙

2021-11-08 18:37:45

MySQL解碼測試

2024-02-28 08:22:07

2022-09-05 08:12:28

Google二進(jìn)制Protobuf

2022-06-29 13:59:40

家居應(yīng)用鴻蒙

2023-02-06 21:58:23

2021-12-27 11:30:51

數(shù)據(jù)結(jié)構(gòu)算法動態(tài)規(guī)劃

2022-09-06 11:13:16

接口PipelineHandler

2022-07-07 08:57:45

WSA更新

2024-05-20 08:45:46

2022-08-20 07:56:48

FFmpeg數(shù)字音頻流瀏覽器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

在线天堂新版最新版在线8| 99视频免费看| 黄色在线观看免费| 天天免费亚洲黑人免费| 中文字幕永久在线不卡| 国产精品一区在线观看| 无码人妻精品一区二区三区蜜桃91 | 欧美日本一区二区视频在线观看| 亚洲福利视频免费观看| 日韩欧美黄色大片| 欧美女同一区| 国产欧美一区二区精品性色 | 欧美极品美女电影一区| 中文字幕免费视频| japanese色系久久精品| 精品视频999| 国产老熟妇精品观看| 美女国产在线| 久久久高清一区二区三区| 成人资源av| 亚洲综合精品视频| 亚洲在线日韩| 欧美激情精品久久久久久免费印度 | 欧美亚洲视频一区二区| 天天看片中文字幕| 波多野结衣在线观看一区二区三区 | 亚洲六月丁香色婷婷综合久久| 欧美精品一区在线| 黄色一级大片在线免费看国产一 | 欧美三级日韩在线| 免费看国产曰批40分钟| 亚洲综合影视| 中文字幕在线视频一区| 欧洲精品久久| 午夜福利视频一区二区| 成人免费精品视频| 91原创国产| 国产欧美综合视频| 激情综合五月婷婷| 国产精品永久免费视频| 国产性生活视频| 在线综合欧美| 欧美性受xxx| 日韩成年人视频| 伊人久久亚洲热| 久久久久久国产精品三级玉女聊斋| chinese全程对白| 欧美3p视频| 久久精品成人欧美大片古装| 黄色一级片一级片| 久久一本综合| 精品久久久91| 黑人巨大精品一区二区在线| 亚洲一级淫片| 久久精品99无色码中文字幕| 婷婷国产成人精品视频| 98精品久久久久久久| 日韩中文字幕在线观看| 四虎884aa成人精品| 99久久精品网| 久久久精品2019中文字幕神马| 麻豆精品国产免费| 亚洲精品二区三区| 欧美精品一区二区免费| 久热这里只有精品在线| 在线日本成人| 日韩av成人在线| 无码久久精品国产亚洲av影片| 石原莉奈在线亚洲三区| 国产精品美腿一区在线看| 在线观看色网站| 国产麻豆成人精品| 国产精品国产亚洲精品看不卡15| 香蕉视频免费看| 国产午夜精品理论片a级大结局 | 欧美三级资源在线| 欧美一级小视频| www国产精品| 亚洲男人天堂网站| 萌白酱视频在线| 欧美日韩精品| 456亚洲影院| 这里只有精品999| 国产精品99久久久久久宅男| 国产欧美一区二区三区另类精品 | 国产精品国产三级国产aⅴ| 国产在线播放一区三区四| 国产精品免费一区二区三区观看 | 亚洲人妖av一区二区| 菠萝蜜视频在线观看入口| 一个人www视频在线免费观看| 欧美中文字幕亚洲一区二区va在线| 亚洲一区二区福利视频| 久久99精品国产自在现线| 中文字幕不卡av| 久久午夜无码鲁丝片午夜精品| 亚洲女人av| 1卡2卡3卡精品视频| 精品电影在线| 一区二区三区 在线观看视频 | 国产在线麻豆精品观看| 精品免费日产一区一区三区免费| 95在线视频| 亚洲mv在线观看| 五月天中文字幕在线| 日韩激情网站| 免费成人高清视频| 午夜久久久久久久久久影院| 国产成人免费视频一区| 亚洲va韩国va欧美va精四季| 91福利在线尤物| 欧美久久久久久蜜桃| 成人网站免费观看| 午夜天堂精品久久久久| 国产精品视频大全| 天堂在线中文字幕| 一区二区视频在线看| 久热免费在线观看| 哺乳一区二区三区中文视频 | 欧美xxxx老人做受| 亚洲不卡的av| 日韩高清不卡在线| 久久久久久国产精品免费免费| 最新av在线播放| 欧美美女一区二区在线观看| 人人妻人人藻人人爽欧美一区| 一区免费在线| 99精彩视频在线观看免费| 在线免费观看黄| 欧洲av一区二区嗯嗯嗯啊| 亚洲制服丝袜在线播放| 欧美破处大片在线视频| 91久久国产精品91久久性色| 国产高清av在线| 日韩欧美a级成人黄色| 国产精品入口麻豆| 黄色精品免费| 国产精品theporn88| 1stkiss在线漫画| 7799精品视频| 动漫性做爰视频| 久久99精品久久久久久久久久久久| 欧洲av一区| 巨胸喷奶水www久久久| 亚洲天堂色网站| 中文字幕高清在线免费播放| 久久综合狠狠综合久久综合88 | 日本不卡网站| 精品亚洲精品福利线在观看| 欧美亚洲精品天堂| 久久综合久久鬼色| 少妇性l交大片| 成人在线免费观看视频| 国产精品免费视频久久久| www.av在线| 欧美久久高跟鞋激| 多男操一女视频| 国产精品18久久久久久vr | 国产精品久久久久久久免费软件 | 欧美剧情电影在线观看完整版免费励志电影| 黄色三级生活片| 精品一区二区三区影院在线午夜 | 九色综合日本| 日韩电影免费观| 在线观看欧美www| 国产一区二区三区四区视频| 亚洲精品一二三| www.日本高清| 奇米一区二区三区| 熟女熟妇伦久久影院毛片一区二区| 国产精品一级在线观看| 久久久人成影片一区二区三区| 四虎精品在线| 欧美日韩国产欧美日美国产精品| 免费在线观看h片| 不卡高清视频专区| 毛葺葺老太做受视频| 国产精品久久久久9999赢消| 97久草视频| 中日韩脚交footjobhd| 在线视频欧美性高潮| 国产精品自产拍| 亚洲www啪成人一区二区麻豆| 美国黄色a级片| 免费高清不卡av| 国产免费一区二区视频| 亚洲婷婷伊人| 国产日产欧美a一级在线| 国产91足控脚交在线观看| 亚洲人成五月天| av免费在线不卡| 高跟丝袜一区二区三区| 开心激情五月网| 91亚洲精品久久久蜜桃| 日本中文字幕观看| 免费亚洲一区| 日本天堂免费a| 欧美日韩第一| 国产精品久久久久久久天堂第1集| 欧美最新精品| 久久久久这里只有精品| av在线播放免费| 亚洲精品wwww| 国产免费不卡av| 色婷婷久久一区二区三区麻豆| 538任你躁在线精品视频网站| 久久精品夜夜夜夜久久| 扒开伸进免费视频| 蜜桃视频一区二区三区| 国产精品无码一区二区在线| 午夜精品久久久久99热蜜桃导演| 日韩av电影在线观看| 免费成人三级| 成人一区二区电影| 成人日韩在线| 欧美性一区二区三区| 色呦呦在线看| 久热精品在线视频| av在线播放免费| 亚洲欧洲第一视频| 人人妻人人澡人人爽精品日本| 欧美男男青年gay1069videost| 中文字幕xxxx| 欧美视频在线免费看| 国产午夜视频在线播放| 亚洲品质自拍视频| 免费一级suv好看的国产网站| 久久精品人人做人人综合| 日本黄色免费观看| 成人av免费在线播放| 性高潮免费视频| 国产精品18久久久久久久网站| 亚洲综合在线一区二区| 国模娜娜一区二区三区| 中文字幕第38页| 免费久久精品视频| 欧美自拍小视频| 久久久久久夜| 亚洲熟妇av一区二区三区| 99在线精品免费视频九九视| 亚洲人成无码网站久久99热国产 | 污污视频网站免费观看| 爽爽淫人综合网网站| 一级黄色香蕉视频| 秋霞影院一区二区| 色婷婷成人在线| 久久国产福利国产秒拍| 91 视频免费观看| 国产精品18久久久| 美国黄色一级视频| 成人中文字幕在线| 欧类av怡春院| 久久先锋影音av鲁色资源| 久久久久久久久久久国产精品| 91麻豆免费观看| 欧美做受高潮6| 国产精品成人在线观看| 黄色一级片中国| 亚洲国产一区二区在线播放| 日韩精品久久久久久久| 欧美日韩一区免费| 姑娘第5集在线观看免费好剧| 欧美丝袜自拍制服另类| 91黄色在线视频| 欧美成人bangbros| 日韩av成人| 日韩中文在线中文网在线观看 | 一区二区三区视频在线观看| 国产一级中文字幕| 日韩欧美a级成人黄色| 中文字幕av久久爽| 欧美tk—视频vk| 麻豆导航在线观看| 深夜福利日韩在线看| 日韩伦理电影网站| 情事1991在线| 亚洲伦理网站| 韩国成人av| 日韩黄色大片| 久青草视频在线播放| 亚洲在线电影| www.亚洲自拍| 91麻豆高清视频| www.5588.com毛片| 黑丝美女久久久| 国产精品视频a| 日韩久久午夜影院| 蜜桃视频网站在线| 91av在线视频观看| 成人日韩视频| 欧美另类视频在线| 亚洲天堂免费| 日日碰狠狠躁久久躁婷婷| 国产综合久久久久影院| v8888av| 亚洲欧美乱综合| 日韩综合在线观看| 欧美mv日韩mv| 91福利在线视频| 69精品小视频| 精品国产亚洲日本| 日本一区二区在线视频| 欧美网站在线| 一女二男3p波多野结衣| 91在线视频播放| 日本中文在线视频| 色视频成人在线观看免| 亚洲精品久久久久久久久久| 视频在线一区二区| 欧美18av| 国产一区二区三区四区五区在线| 99精品视频在线观看播放| 欧美激情国产精品日韩| 粉嫩绯色av一区二区在线观看| 懂色av粉嫩av浪潮av| 欧美视频13p| 欧美 日韩 国产 在线| 久久亚洲电影天堂| 欧美在线一级| 日韩精品一线二线三线| 国产精品丝袜xxxxxxx| 在线xxxxx| 亚洲精品久久7777| 国产又粗又猛又爽又黄视频| 亚洲午夜女主播在线直播| 亚洲精品中文字幕| 精品一区二区日本| 激情另类综合| 日本精品一二三区| 一区二区在线免费观看| 国产乱淫片视频| 中文字幕日韩综合av| 日韩精品影院| 欧洲亚洲一区二区| 另类av一区二区| 大又大又粗又硬又爽少妇毛片 | 国产精品久久久久一区二区三区| 国产成人无码av| 亚洲色图在线观看| av综合电影网站| 欧美一区二区在线视频观看| 国产精品视频| 性猛交娇小69hd| 欧美视频在线不卡| 91青青在线视频| 成人免费观看网址| 亚洲色图插插| 亚洲一级片免费观看| 亚洲激情中文1区| 亚洲国产欧美另类| 高清欧美性猛交xxxx黑人猛交| 最新精品在线| 国产97在线 | 亚洲| 91亚洲精品久久久蜜桃| 国产又粗又猛又爽又| 视频一区视频二区国产精品| 久久亚洲精品中文字幕| 18视频在线观看娇喘| 高清国产一区二区三区| 亚洲黄色小说图片| 亚洲视频欧洲视频| 99riav视频一区二区| 手机福利在线视频| 国产精品亚洲一区二区三区在线| 国产精品成人免费一区二区视频| 日韩av网站大全| 主播大秀视频在线观看一区二区| 一区二区不卡在线视频 午夜欧美不卡'| 久久精品国产在热久久| 欧美成人三级在线观看| 日韩av综合网| 青草综合视频| av无码久久久久久不卡网站| 91在线视频官网| 国产尤物在线观看| 欧美激情精品在线| 国产99久久| 欧美视频国产视频| 性做久久久久久久免费看| 都市激情在线视频| 成人在线看片| 免费成人av在线播放| 久久久久99精品成人片毛片| 日韩精品中文字幕在线| 曰本一区二区| 天天夜碰日日摸日日澡性色av| 欧美国产精品中文字幕| 性欧美8khd高清极品| 日韩免费视频在线观看| 亚洲精品小说| 熟女俱乐部一区二区| 91精品久久久久久久91蜜桃| 手机av在线| 黄色影视在线观看| 国产欧美一区二区在线| 午夜久久久久久久久久| 国产成人免费av| 伊人精品成人久久综合软件| 看黄色录像一级片| 国产视频丨精品|在线观看|