黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

探究Android客戶端網(wǎng)絡預連接優(yōu)化機制

瀏覽:18日期:2022-09-18 08:12:07
目錄一、連接復用二、預連接實現(xiàn)三、源碼分析四、優(yōu)化五、問答一、連接復用

對于一個普通的接口請求,通過charles抓包,查看網(wǎng)絡請求Timing欄信息,我們可以看到類似如下請求時長信息:

Duration 175 ms DNS 6 ms Connect 50 msTLS Handshake 75 ms Request 1 ms Response 1 ms Latency 42 ms

同樣的請求,再來一次,時長信息如下所示:

Duration 39 ms DNS - Connect - TLS Handshake - Request 0 ms Response 0 ms Latency 39 ms

我們發(fā)現(xiàn),整體網(wǎng)絡請求時間從175ms降低到了39ms。其中DNS,Connect,TLS Handshake 后面是個橫線,表示沒有時長信息,于是整體請求時長極大的降低了。這就是Http(s)的連接復用的效果。那么問題來了,什么是連接復用,為什么它能降低請求時間?

在解決這個疑問之前,我們先來看看一個網(wǎng)絡請求發(fā)起,到收到返回的數(shù)據(jù),這中間發(fā)生了什么?

客戶端發(fā)起網(wǎng)絡請求 通過DNS服務解析域名,獲取服務器IP (基于UDP協(xié)議的DNS解析) 建立TCP連接(3次握手) 建立TLS連接(https才會用到) 發(fā)送網(wǎng)絡請求request 服務器接收request,構造并返回response TCP連接關閉(4次揮手)

上面的連接復用直接讓上面2,3,4步都不需要走了。這中間省掉的時長應該怎么算?如果我們定義網(wǎng)絡請求一次發(fā)起與收到響應的一個來回(一次通信來回)作為一個RTT(Round-trip delay time)。

1)DNS默認基于UDP協(xié)議,解析最少需要1-RTT;

2)建立TCP連接,3次握手,需要2-RTT;

探究Android客戶端網(wǎng)絡預連接優(yōu)化機制

3)建立TLS連接,根據(jù)TLS版本不同有區(qū)別,常見的TLS1.2需要2-RTT。

Client                                               Server

ClientHello                  -------->

                                                ServerHello

                                               Certificate*

                                         ServerKeyExchange*

                                        CertificateRequest*

                             <--------      ServerHelloDone

Certificate*

ClientKeyExchange

CertificateVerify*

[ChangeCipherSpec]

Finished                     -------->

                                         [ChangeCipherSpec]

                             <--------             Finished

Application Data             <------->     Application Data

                   TLS 1.2握手流程(來自 RFC 5246)

注:TLS1.3版本相比TLS1.2,支持0-RTT數(shù)據(jù)傳輸(可選,一般是1-RTT),但目前支持率比較低,用的很少。

http1.0版本,每次http請求都需要建立一個tcp socket連接,請求完成后關閉連接。前置建立連接過程可能就會額外花費4-RTT,性能低下。

http1.1版本開始,http連接默認就是持久連接,可以復用,通過在報文頭部中加上Connection:Close來關閉連接 。如果并行有多個請求,可能還是需要建立多個連接,當然我們也可以在同一個TCP連接上傳輸,這種情況下,服務端必須按照客戶端請求的先后順序依次回送結果。

注:http1.1默認所有的連接都進行了復用。然而空閑的持久連接也可以隨時被客戶端與服務端關閉。不發(fā)送Connection:Close不意味著服務器承諾連接永遠保持打開。

http2 更進一步,支持二進制分幀,實現(xiàn)TCP連接的多路復用,不再需要與服務端建立多個TCP連接了,同域名的多個請求可以并行進行。

探究Android客戶端網(wǎng)絡預連接優(yōu)化機制

還有個容易被忽視的是,TCP有擁塞控制,建立連接后有慢啟動過程(根據(jù)網(wǎng)絡情況一點一點的提高發(fā)送數(shù)據(jù)包的數(shù)量,前面是指數(shù)級增長,后面變成線性),復用連接可以避免這個慢啟動過程,快速發(fā)包。

二、預連接實現(xiàn)

客戶端常用的網(wǎng)絡請求框架如OkHttp等,都能完整支持http1.1與HTTP2的功能,也就支持連接復用。了解了這個連接復用機制優(yōu)勢,那我們就可以利用起來,比如在APP閃屏等待的時候,就預先建立首頁詳情頁等關鍵頁面多個域名的連接,這樣我們進入相應頁面后可以更快的獲取到網(wǎng)絡請求結果,給予用戶更好體驗。在網(wǎng)絡環(huán)境偏差的情況下,這種預連接理論上會有更好的效果。

具體如何實現(xiàn)?

第一反應,我們可以簡單的對域名鏈接提前發(fā)起一個HEAD請求(沒有body可以省流量),這樣就能提前建立好連接,下次同域名的請求就可以直接復用,實現(xiàn)起來也是簡單方便。于是寫了個demo,試了個簡單接口,完美,粗略統(tǒng)計首次請求速度可以提升40%以上。

于是在游戲中心App啟動Activity中加入了預連接相關邏輯,跑起來試了下,竟然沒效果...

抓包分析,發(fā)現(xiàn)連接并沒有復用,每次進去詳情頁后都重新創(chuàng)建了連接,預連接可能只是省掉了DNS解析時間,demo上的效果無法復現(xiàn)。看樣子分析OkHttp連接復用相關源碼是跑不掉了。

三、源碼分析

OKHttp通過幾個默認的Interceptor用于處理網(wǎng)絡請求相關邏輯,建立連接在ConnectInterceptor類中;

public final class ConnectInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { RealInterceptorChain realChain = (RealInterceptorChain) chain; Request request = realChain.request(); StreamAllocation streamAllocation = realChain.streamAllocation();​ // We need the network to satisfy this request. Possibly for validating a conditional GET. boolean doExtensiveHealthChecks = !request.method().equals('GET'); HttpCodec httpCodec = streamAllocation.newStream(client, chain, doExtensiveHealthChecks); RealConnection connection = streamAllocation.connection();​ return realChain.proceed(request, streamAllocation, httpCodec, connection); }}

RealConnection即為后面使用的connection,connection生成相關邏輯在StreamAllocation類中;

public HttpCodec newStream( OkHttpClient client, Interceptor.Chain chain, boolean doExtensiveHealthChecks) { ... RealConnection resultConnection = findHealthyConnection(connectTimeout, readTimeout,writeTimeout, pingIntervalMillis, connectionRetryEnabled, doExtensiveHealthChecks); HttpCodec resultCodec = resultConnection.newCodec(client, chain, this); ...}​private RealConnection findHealthyConnection(int connectTimeout, int readTimeout, int writeTimeout, int pingIntervalMillis, boolean connectionRetryEnabled, boolean doExtensiveHealthChecks) throws IOException { while (true) { RealConnection candidate = findConnection(connectTimeout, readTimeout, writeTimeout, pingIntervalMillis, connectionRetryEnabled); ... return candidate; }} /** * Returns a connection to host a new stream. This prefers the existing connection if it exists, * then the pool, finally building a new connection. */ private RealConnection findConnection(int connectTimeout, int readTimeout, int writeTimeout, int pingIntervalMillis, boolean connectionRetryEnabled) throws IOException { ...// 嘗試從connectionPool中獲取可用connection Internal.instance.acquire(connectionPool, address, this, null); if (connection != null) { foundPooledConnection = true; result = connection; } else { selectedRoute = route; } ... if (!foundPooledConnection) { ... // 如果最終沒有可復用的connection,則創(chuàng)建一個新的result = new RealConnection(connectionPool, selectedRoute); } ...}

這些源碼都是基于okhttp3.13版本的代碼,3.14版本開始這些邏輯有修改。

StreamAllocation類中最終獲取connection是在findConnection方法中,優(yōu)先復用已有連接,沒可用的才新建立連接。獲取可復用的連接是在ConnectionPool類中;

/** * Manages reuse of HTTP and HTTP/2 connections for reduced network latency. HTTP requests that * share the same {@link Address} may share a {@link Connection}. This class implements the policy * of which connections to keep open for future use. */public final class ConnectionPool { private final Runnable cleanupRunnable = () -> { while (true) { long waitNanos = cleanup(System.nanoTime()); if (waitNanos == -1) return; if (waitNanos > 0) {long waitMillis = waitNanos / 1000000L;waitNanos -= (waitMillis * 1000000L);synchronized (ConnectionPool.this) { try { ConnectionPool.this.wait(waitMillis, (int) waitNanos); } catch (InterruptedException ignored) { }} } } }; // 用一個隊列保存當前的連接 private final Deque<RealConnection> connections = new ArrayDeque<>(); /** * Create a new connection pool with tuning parameters appropriate for a single-user application. * The tuning parameters in this pool are subject to change in future OkHttp releases. Currently * this pool holds up to 5 idle connections which will be evicted after 5 minutes of inactivity. */ public ConnectionPool() { this(5, 5, TimeUnit.MINUTES); } public ConnectionPool(int maxIdleConnections, long keepAliveDuration, TimeUnit timeUnit) { ... } void acquire(Address address, StreamAllocation streamAllocation, @Nullable Route route) { assert (Thread.holdsLock(this)); for (RealConnection connection : connections) { if (connection.isEligible(address, route)) {streamAllocation.acquire(connection, true);return; } } }

由上面源碼可知,ConnectionPool默認最大維持5個空閑的connection,每個空閑connection5分鐘后自動釋放。如果connection數(shù)量超過最大數(shù)5個,則會移除最舊的空閑connection。

最終判斷空閑的connection是否匹配,是在RealConnection的isEligible方法中;

/** * Returns true if this connection can carry a stream allocation to {@code address}. If non-null * {@code route} is the resolved route for a connection. */ public boolean isEligible(Address address, @Nullable Route route) { // If this connection is not accepting new streams, we’re done. if (allocations.size() >= allocationLimit || noNewStreams) return false; // If the non-host fields of the address don’t overlap, we’re done. if (!Internal.instance.equalsNonHost(this.route.address(), address)) return false; // If the host exactly matches, we’re done: this connection can carry the address. if (address.url().host().equals(this.route().address().url().host())) { return true; // This connection is a perfect match. } // At this point we don’t have a hostname match. But we still be able to carry the request if // our connection coalescing requirements are met. See also: // https://hpbn.co/optimizing-application-delivery/#eliminate-domain-sharding // https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing/ // 1. This connection must be HTTP/2. if (http2Connection == null) return false; // 2. The routes must share an IP address. This requires us to have a DNS address for both // hosts, which only happens after route planning. We can’t coalesce connections that use a // proxy, since proxies don’t tell us the origin server’s IP address. if (route == null) return false; if (route.proxy().type() != Proxy.Type.DIRECT) return false; if (this.route.proxy().type() != Proxy.Type.DIRECT) return false; if (!this.route.socketAddress().equals(route.socketAddress())) return false; // 3. This connection’s server certificate’s must cover the new host. if (route.address().hostnameVerifier() != OkHostnameVerifier.INSTANCE) return false; if (!supportsUrl(address.url())) return false; // 4. Certificate pinning must match the host. try { address.certificatePinner().check(address.url().host(), handshake().peerCertificates()); } catch (SSLPeerUnverifiedException e) { return false; } return true; // The caller’s address can be carried by this connection. }

這塊代碼比較直白,簡單解釋下比較條件:

如果該connection已達到承載的流上限(即一個connection可以承載幾個請求,http1默認是1個,http2默認是Int最大值)則不符合;

如果2個Address除Host之外的屬性有不匹配,則不符合(如果2個請求用的okhttpClient不同,復寫了某些重要屬性,或者服務端端口等屬性不一樣,那都不允許復用);

如果host相同,則符合,直接返回true(其它字段已經(jīng)在上一條比較了);

如果是http2,則判斷無代理、服務器IP相同、證書相同等條件,如果都符合也返回true;

整體看下來,出問題的地方應該就是ConnectionPool 的隊列容量太小導致的。游戲中心業(yè)務復雜,進入首頁后,觸發(fā)了很多接口請求,導致連接池直接被占滿,于是在啟動頁做好的預連接被釋放了。通過調(diào)試驗證了下,進入詳情頁時,ConnectionPool中的確已經(jīng)沒有之前預連接的connection了。

四、優(yōu)化

在http1.1中,瀏覽器一般都是限定一個域名最多保留5個左右的空閑連接。然而okhttp的連接池并沒有區(qū)分域名,整體只做了默認最大5個空閑連接,如果APP中不同功能模塊涉及到了多個域名,那這默認的5個空閑連接肯定是不夠用的。有2個修改思路:

重寫ConnectionPool,將連接池改為根據(jù)域名來限定數(shù)量,這樣可以完美解決問題。然而OkHttp的ConnectionPool是final類型的,無法直接重寫里面邏輯,另外OkHttp不同版本上,ConnectionPool邏輯也有區(qū)別,如果考慮在編譯過程中使用ASM等字節(jié)碼編寫技術來實現(xiàn),成本很大,風險很高。 直接調(diào)大連接池數(shù)量和超時時間。這個簡單有效,可以根據(jù)自己業(yè)務情況適當調(diào)大這個連接池最大數(shù)量,在構建OkHttpClient的時候就可以傳入這個自定義的ConnectionPool對象。

我們直接選定了方案2。

五、問答

1、如何確認連接池最大數(shù)量值?

這個數(shù)量值有2個參數(shù)作為參考:頁面最大同時請求數(shù),App總的域名數(shù)。也可以簡單設定一個很大的值,然后進入APP后,將各個主要頁面都點一遍,看看當前ConnectionPool中留存的connection數(shù)量,適當做一下調(diào)整即可。

2、調(diào)大了連接池會不會導致內(nèi)存占用過多?

經(jīng)測試:將connectionPool最大值調(diào)成50,在一個頁面上,用了13個域名鏈接,總共重復4次,也就是一次發(fā)起52個請求之后,ConnectionPool中留存的空閑connection平均22.5個,占用內(nèi)存為97Kb,ConnectionPool中平均每多一個connection會占用4.3Kb內(nèi)存。

3、調(diào)大了連接池會影響到服務器嗎?

理論上是不會的。連接是雙向的,即使客戶端將connection一直保留,服務端也會根據(jù)實際連接數(shù)量和時長調(diào)整,自動關閉連接的。比如服務端常用的nginx就可以自行設定最大保留的connection數(shù)量,超時也會自動關閉舊連接。因此如果服務器定義的最大連接數(shù)和超時時間比較小,可能我們的預連接會無效,因為連接被服務端關閉了。

探究Android客戶端網(wǎng)絡預連接優(yōu)化機制

用charles可以看到這種連接被服務端關閉的效果:TLS大類中Session Resumed里面看到復用信息。

這種情況下,客戶端會重新建立連接,會有tcp和tls連接時長信息。

4、預連接會不會導致服務器壓力過大?

由于進入啟動頁就發(fā)起了網(wǎng)絡請求進行預連接,接口請求數(shù)增多了,服務器肯定會有影響,具體需要根據(jù)自己業(yè)務以及服務器壓力來判斷是否進行預連接。

5、如何最大化預連接效果?

由上面第3點問題可知,我們的效果實際是和服務器配置息息相關,此問題涉及到服務器的調(diào)優(yōu)。

服務器如果將連接超時設置的很小或關閉,那可能每次請求都需要重新建立連接,這樣服務器在高并發(fā)的時候會因為不斷創(chuàng)建和銷毀TCP連接而消耗很多資源,造成大量資源浪費。

服務器如果將連接超時設置的很大,那會由于連接長時間未釋放,導致服務器服務的并發(fā)數(shù)受到影響,如果超過最大連接數(shù),新的請求可能會失敗。

可以考慮根據(jù)客戶端用戶訪問到預連接接口平均用時來調(diào)節(jié)。比如游戲中心詳情頁接口預連接,那可以統(tǒng)計一下用戶從首頁平均瀏覽多長時間才會進入到詳情頁,根據(jù)這個時長和服務器負載情況來適當調(diào)節(jié)。

以上就是探究Android客戶端網(wǎng)絡預連接優(yōu)化機制的詳細內(nèi)容,更多關于Android客戶端網(wǎng)絡 預連接優(yōu)化的資料請關注好吧啦網(wǎng)其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 51国产偷自视频区视频 | 中文精品视频 | 亚洲五码在线 | 黄色免费国产 | 成人超碰在线 | 免费在线视频一区 | 亚洲国产成人精品无色码 | 欧美俄罗斯40老熟妇 | 女主播户外勾搭啪啪 | 色在线视频观看 | 中文字幕资源站 | 亚洲欧洲日产国码av老年人 | 免费裸体美女网站 | 日韩福利片在线观看 | 日一本二本三本在线2021 | 免费一级毛毛片 | 成年人黄色在线观看 | 81精品国产乱码久久久久久 | 国产精品人妻熟女毛片av久 | 又爽又大又黄a级毛片在线视频 | 久久国产乱子伦免费精品 | 欧美精品在线观看 | 91精品国产麻豆国产自产影视 | 国产精品99久久不卡 | 99成人免费视频 | 91亚洲精品乱码久久久久久蜜桃 | 国产一区二区三区在线观看视频 | 国产婷婷成人久久av免费高清 | 久久精品高清 | 日本a级c片免费看三区 | 精品乱子伦| 国产99久久久国产精品免费看 | 国内黄色一级片 | 少妇啊灬啊别停灬用力啊房东 | 亚洲精品一区二区三区h | 四季av中文字幕一区 | 成人区精品一区二区婷婷 | 色婷婷综合视频 | 国产精品亚洲成在人线 | 久久久亚洲精品成人 | 亚洲码国产日韩欧美高潮在线播放 | 国产一区二区99 | www成人免费 | 亚洲精品乱码久久久久久蜜桃 | 男人搞女人网站 | 中国少妇内射xxxx狠干 | 99精品自拍 | 久热网| 久久精品专区 | 日韩欧美亚 | 亚洲国产成人a精品不卡在线 | 狠狠综合久久av一区二区蜜桃 | 久久久无码中文字幕久... | 国产做爰xxxⅹ高潮视频12p | 国产乱码精品 | 尤物在线视频观看 | 中文字幕亚洲欧美日韩在线不卡 | www成年人视频| 国产精品福利在线 | 在线中文字幕一区二区 | 一本一道波多野结衣av中文 | 国产猛男猛女超爽免费视频网站 | 精品亚洲成a人片在线观看 国产精品视频二区不卡 | 亚洲6080yy久久无码产自国产 | 国精品99久9在线 | 免费 | 成年人视屏 | 色狠狠一区二区三区 | 天天射寡妇射 | 男人天堂网在线视频 | 熟妇人妻无乱码中文字幕真矢织江 | 亚洲国产第一页 | 国产精品久久免费视频 | 无翼乌口工全彩无遮挡h全彩 | 波多野结衣aⅴ在线 | 中文字幕h | 精品国产乱码91久久久久久网站 | 哪里有毛片看 | 国产亚洲精品久久久久蜜臀 | 性欧美videos另类极品小说 | 免费中文字幕在线观看 | 成人三级晚上看 | 高潮添下面视频免费看 | www..com色| 灌满闺乖女h高h调教尿h | 男人扒开女人双腿猛进视频 | 夜夜高潮夜夜爽精品视频 | 色综合色综合色综合 | 亚洲va久久久噜噜噜久久 | 亚洲视频在线观看 | 色综合久久久久综合体桃花网 | 野外做受又硬又粗又大视幕 | 永久黄网站色视频免费直播 | 99ri精品| 两个人做羞羞的视频 | 一级α片免费看刺激高潮视频 | 欧美v成 人在线观看 | 午夜一区二区国产好的精华液 | 日av一区| 女女百合av大片一区二区三区九县 | 在线观看日韩欧美 | 美日韩av在线播放 | 国产乱xxxxx978国语对白 | 亚洲精品视频在线观看免费 | 国产一区精品视频 | 欧美一级视频 | 国产精品一区二区欧美 | 日批黄色片 | 91无人区乱码卡一卡二卡 | 成人黄色激情网 | 北条麻妃一二三区 | 国产ts三人妖大战直男 | 男人j进入女人j内部免费网站 | 久久免费视频3 | 国产亚洲日韩欧美另类第八页 | 少妇一级淫片免费视频 | 亚洲国产精品影院 | 麻豆91视频| 亚洲精品美女久久久久99 | 美女流白浆视频 | 黄色香蕉网| 少妇人妻偷人精品无码视频新浪 | 台湾女老板性三级 | 丁香社区五月天 | 亚洲成a人v欧美综合天堂 | 国内精品伊人久久久久7777 | 国产精品久久久久久婷婷天堂 | 亚洲欧洲综合在线 | 成人av网站在线播放 | 亚洲国产果冻传媒av在线观看 | 日日碰狠狠添天天爽五月婷 | 亚洲成a人片 | 传媒av在线 | 97福利影院| 舌吻激情大尺度做爰视频 | 性高爱久久久久久久久 | 免费成人深夜夜行网站视频 | 污污的网站在线观看 | 婷婷午夜精品久久久久久性色av | 性高朝久久久久久久3小时 av片在线观看 | 一本无码av中文出轨人妻 | 五月天激情四射 | 黑人粗大猛烈进出高潮视频 | 99精品无人区乱码1区2区3区 | 欧美精品一区二区免费 | 久久国产欧美一区二区 | 91av综合| 丰满爆乳一区二区三区 | 激情综合网五月婷婷 | 国产精品码在线观看0000 | 精品卡一卡二卡3卡高清乱码 | 日韩av成人网| 午夜小福利 | 国91精品久久久久9999不卡 | 国产真实在线 | 亚洲精品久久久艾草网 | 欧美日韩视频无码一区二区三 | 成人交性视频免费看 | 香蕉视频黄色片 | 99久久99久久精品免费看蜜桃 | 国产精品美女一区 | 98超碰在线 | 99精品在线免费观看 | 欧美视频一区二区三区四区在线观看 | 国产精品久久久久久久久久大牛 | 青青草狠狠爱 | 成人无码在线视频网站 | 欧美久久99| 免费看男女做好爽好硬视频 | 福利所第一导航福利 | 亚洲成a人v欧美综合天堂下载 | 激情开心成人网 | 91精品国产综合久久久蜜臀九色 | 国产无区一区二区三麻豆 | 欧美久久精品一级黑人c片 欧美久久久 | 日日日干| h视频在线免费看 | 九九热爱视频精品视频 | 国产精品久久久久久久久人妻 | 伊人精品久久久大香线蕉 | 人妻熟女一区二区aⅴ林晓雪 | 中文字幕免费在线看 | 999一个人免费看ww | 成人性视频sm | 日本裸体xx少妇18在线 | 久久久看片| 精品国产免费一区二区三区 | 亚洲天堂国产精品 | 麻豆短视频在线观看 | 国产一二三区写真福利视频 | 日韩一欧美内射在线观看 | 福利在线视频导航 | 亚洲精品成人av在线观看爽翻天 | 欧美精品二区三区四区免费看视频 | 少妇太紧太爽又黄又硬又爽 | 人人揉人人 | 日韩在线视频在线 | 国产超碰在线观看 | 在线免费观看成年人视频 | 性欧美丰满熟妇xxxx性仙踪林 | 久久久久久国产精品久久 | 日本www视频在线观看 | 国产成人无码a区视频在线观看 | 国产精品免费看久久久无码 | 成人午夜免费毛片 | 无套内射蜜桃小视频 | 亚洲黄色毛片 | 亚洲色成人网站www永久 | 1000部精品久久久久久久久 | 欧美三级少妇高潮 | 欧美成人精品三级在线观看播放 | 日韩精品久久中文字幕 | 国产永久免费观看 | 天天操天天操天天干 | 欧美抠逼视频 | 国产日产欧美一区二区 | 91精品国产一区二区三区动漫 | 欧美日韩aa | 国产一区二区 | 欧美性免费 | 日本视频在线免费观看 | 日日橹狠狠爱欧美视频 | 国产精品免费大片 | 美女久久久 | 激情网网站 | 14萝自慰专用网站 | 成人做爰视频www | 久久精品99久久 | 91av中文字幕 | 精品少妇ay一区二区三区 | 粗大猛烈进出高潮视频 | 日韩中文字幕在线看 | 欧美视频观看 | 亚洲码中文 | 精品国产免费久久久久久桃子图片 | 超碰97人人射妻 | xxx性视频 | juliaann风流的主妇hd | 国产啪精品视频网站 | 成 人片 黄 色 大 片 | 嫩草影院ncyy入口 | 久久免费少妇高潮99精品 | 色窝窝无码一区二区三区色欲 | 日日干,夜夜操 | 日日噜噜噜夜夜爽爽狠狠片 | 久久久亚洲精华液精华液精华液 | 亚洲色成人一区二区三区小说 | 97夜夜澡人人爽人人 | 天堂网www网在线最新版 | 免费草逼网站 | 国产你懂 | 一区二区网 | 伊人狼人久久 | 2021国产在线视频 | 免费一区二区三区视频在线 | 91蜜桃| 偷拍精偷拍精品欧洲亚洲网站 | 91久久| 国产黄a三级三级看三级 | 国产一区999 | 欧洲极品少妇 | 欧美老肥妇做爰bbww | 国产成人99久久亚洲综合精品 | 久久久久亚洲精品 | 色偷偷人人澡人人爽人人模 | 日本一区午夜艳熟免费 | 久久久999视频 | 用力来高潮了再用力91 | 国产欧美精品在线 | 色妺妺视频网 | 91久久久色在线观看 | 五月天婷婷在线观看 | 成人性生交大全免 | 久久久国产一区二区三区四区 | 国产妇女乱码一区二区三区 | 91禁在线看 | 女人与黑人做爰啪啪 | 国产精品久久久久久久久 | 精品国产一区二区三区久久久蜜月 | 久久久这里有精品 | 亚洲成人第一区 | 91九色丨porny丨朋友 | 91天天看| 欧美第十页 | 午夜精品久久久久久 | 粉嫩av一区二区三区在线播放 | 欧美高清视频一区二区 | 国产自啪精品视频网站丝袜 | 蜜桃va| 天堂中文网在线 | 欧洲美女黑人粗性暴交视频 | 波多野结衣aⅴ在线 | 成年人黄色片 | 97精品国产97久久久久久免费 | 欧美成人一区二免费视频软件 | 女人大荫蒂毛茸茸视频 | 亚洲午夜国产一区99re久久 | 日韩欧美有码 | 国产午夜精品一区理论片飘花 | 成人毛片免费网站 | 国产精品久久久久久久免费软件 | 国产av天堂无码一区二区三区 | 99在线视频播放 | 4hu四虎永久在线影院 | 希岛爱理av免费一区二区 | 色综合色狠狠天天综合色 | 欧美在线性爱视频 | 国产精彩视频在线 | 成a人v| 67194熟妇在线直接进入 | 暴操白丝美女 | 天天操天天爽天天射 | 另类重口aaa | 麻豆传谋在线观看免费mv | 午夜丁香婷婷 | 婷婷色伊人 | 加勒比久久综合网天天 | 久热这里只有精品视频6 | 丁香婷婷社区 | 99色婷婷| 国产女人与zoxxxx另类 | 欧美片一区二区三区 | 亚洲色成人一区二区三区小说 | 国精品99久9在线 | 免费 | 国产孕妇孕交高潮 | 欧美午夜性 | 怡红院av一区二区三区 | japanese丰满少妇最高潮 | 久久黄色成人 | 亚洲色图3p | 亚洲色18禁成人网站www | 亚洲成人第一网站 | 午夜秋霞 | 国产精品久久高潮呻吟声 | 三级免费看 | 日韩人妻精品一区二区三区视频 | 久久国产热精品波多野结衣av | 午夜在线不卡 | videos国产单亲乱 | 久久久久亚洲精品无码网址 | 永久免费在线观看视频 | 明星乱淫免费视频欧美 | 精品久久久久久18免费网站 | 日韩一欧美内射在线观看 | 中文字幕精品一二三四五六七八 | 国产又黄又爽又色的免费视频白丝 | 久久久精品久久日韩一区综合 | 91国偷自产一区二区使用方法 | 韩国黄色精品 | 6080亚洲精品一区二区 | 少妇9999九九九九在线观看 | 成人午夜免费福利 | 精品动漫3d一区二区三区免费版 | 一区二区三区乱码在线 | 欧洲 | 伊人激情在线 | 好吊色一区二区三区 | 野花社区在线观看视频 | 四虎在线免费观看视频 | 国产精品一二三 | 99热这里只有精品最新地址获取 | 国产午夜亚洲精品理论片色戒 | 中国内地毛片免费高清 | 潘金莲性生交大片免费看图片 | 夜色视频网| 99精品久久久久 | 全黄色毛片 | 国产卡一卡二无线乱码 | 欧美一级片 | 久久久久久亚洲精品杨幂圣光 | 精品亚洲欧美无人区乱码 | 亚洲精品一区二区三区四区乱码 | 亚洲一区二区av | 国产午夜精品久久久久久 | 国产成人精品123区免费视频 | 日本丰满熟妇乱子伦 | 日本在线一级片 | 亚洲精品大全 | 超碰97在线资源 | 香蕉在线影院 | 国产精品免费入口 | 免费污视频在线观看 | 成人一区二 | 欧美激情精品久久久久久 | asian性开放少妇pics | 奶大臀圆magnet少妇 | 日韩欧美视频免费观看 | 最新中文字幕av专区 | 超碰免费在线观看 | 99热超碰在线 | 日韩欧美猛交xxxxx无码 | 精品无码av无码专区 | 国产7777777| 国产一区二区三区av网站 | 国产青青操 | 综合 欧美 亚洲日本 | 永久精品网站 | 无码中文av波多野吉衣迅雷下载 | 天天做天天爱夜夜爽导航 | 亚洲s色大片在线观看 | 亚洲成熟丰满熟妇高潮xxxxx | 国产一级理论 | 国产毛茸茸毛毛多水水多 | 一级片av| 亚洲精品一区二区久 | 日批视频在线播放 | 李宗瑞91在线正在播放 | 色婷婷美国农夫综合激情亚洲 | 国产又大又黑又粗免费视频 | 免费观看色 | 日本大尺度激情做爰电2022 | 国产日韩一区二区三免费高清 | 婷婷久久久 | 国产三级黄色毛片 | 观看成人永久免费视频 | 国产又黄又爽又色视频 | 婷婷丁香社区 | 国产精品入口夜色视频大尺度 | 午夜精品久久久久久中宇牛牛影视 | 国产av一区二区三区天堂综合网 | 国产av无码专区亚洲awww | 95香蕉视频 | 97视频在线观看播放 | 国产无套水多在线观看 | 久久久久香蕉 | 少妇激情视频一二三区 | 精品国产一区二区三 | 亚洲色精品vr一区区三区 | wwwcom亚洲| 菲律宾黄色片 | 色综合久久久久久久久五月 | 少妇中文字幕乱码亚洲影视 | 一级美女黄色片 | 青久草视频 | 一卡二卡三卡在线视频 | 久久97精品国产96久久小草 | 永久免费观看av | aⅴ亚洲 日韩 色 图网站 播放 | 欧美日韩六区 | 91国精产品新 | 国产免费人成xvideos视频 | 亚洲一区二区三区四区五区六区 | 四色永久网址在线观看 | 一级特黄色毛片 | 免费的一级黄色片 | www91麻豆 | 国产精品天天在线午夜更新 | 偷偷在线观看免费高清av | 乡下小少妇xxxxx性开教 | 国产一区二区三区久久久久久久 | av观看网址 | 国产av激情无码久久 | 激情五月中文字幕 | 欧美日本色 | 中日韩精品视频在线观看 | 国产娇喘精品一区二区三区图片 | 国内精品视频一区二区三区 | 久久激情视频 | 久久久久亚洲精品中文字幕 | 国产免费看又黄又粗又硬 | 久久久久69 | 国产裸体无遮挡免费精品视频 | 亚洲精品乱码久久久久久蜜桃图片 | 国产一区二区免费看 | 色综合五月 | 撕开奶罩揉吮奶头视频 | 欧美精品久久久久久久监狱 | 欧美jiizzhd精品欧美 | 欧美手机在线观看 | 夜夜欢性恔免费视频 | 日韩精品毛片无码一区到三区 | 青青草www| 日韩亚洲欧美中文字幕 | 91亚洲精品乱码久久久久久蜜桃 | 男女国产视频 | 91色多多 | 亚洲午夜一区二区三区 | 最近的中文字幕在线看视频 | 亚洲精品国产精品乱码不66 | 亚洲综合精品伊人久久 | 成人免费观看av | 欧美日韩性生活视频 | 成人午夜视频在线 | 中文字幕av在线一二三区 | 亚洲一区成人 | 青青草国产在线视频 | 日本麻豆一区二区三区视频 | 亚洲午夜色| 狠狠色图片 | 天堂网ww | 欧美不卡一区二区三区 | 亚洲伦理天堂 | 国产乱老熟视频网站 视频 国产乱了实正在真 | 91最新视频 | 日韩在线视频第一页 | 国产真实乱对白精彩 | 国产av一区二区三区无码野战 | 日韩欧美国产成人 | 精品欧美久久久 | 亚洲 欧美 制服 综合 另类 | 国产乱子伦视频一区二区三区 | 中国少妇内射xxxhd | 蜜臀久久 | 亚洲午夜天堂吃瓜在线 | 日韩精品国产另类专区 | 色5月婷婷 | 欧美亚洲一区二区三区四区 | 欧美色图日韩 | 日日碰狠狠躁久久躁综合小说 | 欧美日韩国产中文 | 欧美成人三级精品 | 久久午夜夜伦鲁鲁片不卡 | 牲高潮99爽久久久久777 | 乱色精品无码一区二区国产盗 | 国产精品久久久久久久久久久久久久久久久久 | 吃奶摸下的激烈视频 | 国产精欧美一区二区三区 | 天天操夜夜操视频 | 免费羞羞午夜爽爽爽视频 | 一个人看的日本hd免费 | 国产又大又黑又粗免费视频 | 亚洲精品国产精品乱码不66 | 精品色| 欧美一区二区三区在线观看视频 | 亚洲欧美日韩中文高清www777 | 久久日本三级韩国三级 | а√中文在线资源库 | 特黄色毛片 | 亚洲国产精品一区二区成人片国内 | 成年午夜性影院 | 日韩 在线 中文 制服一区 | 女同舌吻互慰一区二区 | 久久久九九九热 | 国产精品9999久久久久 | 日本视频久久 | 亚洲精品国产一区二区在线观看 | 四虎精品在线观看 | 狂野欧美性猛交xxⅹ李丽珍 | 久久久久久久艹 | 亚洲人亚洲人成电影网站色 | 天堂资源网在线 | 91免费看大片 | √新版天堂资源在线资源 | 女人扒开屁股爽桶30分钟 | 亚洲欧洲成人精品久久一码二码 | 理论片午午伦夜理片影院99 | 精品国产18久久久久久二百 | 日本少妇爱做按摩xxxⅹ | 日韩福利在线 | 国产精品久久久久久久久久三级 | 东京热久久综合久久88 | 五月婷婷伊人网 | 亚洲高清揄拍自拍午夜婷婷 | 国产女人爽的流水毛片 | 男女毛片视频 | 99爱在线视频这里只有精品 | 国产成人无码av片在线观看不卡 | 国产精品久线在线观看 | 亚洲乱码精品久久久久.. | 一本加勒比hezyo无码专区 | 久草在线香蕉 | 7878成人国产在线观看 | 欧美精品日韩在线观看 | 蜜桃视频在线观看污 | 人妻aⅴ无码一区二区三区 日本一卡2卡3卡四卡精品网站 | wwwtianlulacom| 亚洲香蕉网站 | 女仆裸体打屁屁羞羞免费 | 一本久久综合亚洲鲁鲁五月天 | 日日碰狠狠躁久久躁 | 综合五月天 | 黄色一级免费大片 | 超碰伊人网| 看全色黄大色黄女片18 | 久久91久久久久麻豆精品 | 少妇人妻在线视频 | 好吊妞在线观看 | 黑人好猛厉害爽受不了好大撑 | 国产精品xxx | 欧美日韩国产一区二区 | 97精品视频在线播放 | 精品97国产免费人成视频 | 亚洲一区免费在线观看 | 日日噜噜噜夜夜爽爽狠狠视频寻花 | 国产综合有码无码中文字幕 | 麻豆av一区二区三区 | 香港三级日本三级妇三级 | 四虎影院在线观看免费 | 亚洲国产日韩精品二三四区竹菊 | 亚洲一区二区三区国产好的精华液 | 91张津瑜 午夜在线播放 | 精品一区二区三区中文字幕 | 色妞视频| 国产激情一区二区三区成人免费 | 麻豆黄色一级片 | 阿v天堂2017 阿v天堂2018 | 小sao货水好多真紧h视频, | 国产精品美女一区二区三区 | 奇米影视777四色米奇影院 | 青青草原成人网 | 特级西西444ww大胆视频 | 神马久久久久久久久 | yy8男人的天堂 | 日本丰满大乳奶做爰 | 男人添女人囗交做爰视频 | 国产对白叫床清晰在线播放图片 | a√视频在线观看 | 国产精品av免费观看 | 日日日人人人 | 亚洲产国偷v产偷自拍网址 亚洲超丰满肉感bbw | 国产美女爆我菊免费观看88av | 三级不卡视频 | 亚洲女人被黑人巨大进入 | 高柳家动漫在线观看 | 4438xx亚洲最大五色丁香 | 成年片色大黄全免费网站久久 | 最新国产精品亚洲 |