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

字節(jié)一面,被問到兩個經(jīng)典問題!你知道是什么嗎?

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
當(dāng)服務(wù)端出現(xiàn)大量 CLOSE_WAIT 狀態(tài)的連接的時候,通常都是代碼的問題,這時候我們需要針對具體的代碼一步一步的進(jìn)行排查和定位,主要分析的方向就是服務(wù)端為什么沒有調(diào)用 close。

大家好,我是小林。

之前有位讀者面字節(jié)被問到兩個很經(jīng)典的 TCP 問題:

圖片

第一個問題:服務(wù)端大量處于 TIME_WAIT 狀態(tài)連接的原因。

第二個問題:服務(wù)端大量處于 CLOSE_WAIT 狀態(tài)連接的原因。

這兩個問題在面試中很常問,主要也是因為在工作中也很常遇到這個問題。

這次,我們就來聊聊這兩個問題。

圖片

服務(wù)端出現(xiàn)大量 TIME_WAIT 狀態(tài)的原因有哪些?

我們先來看一下 TCP 四次揮手的流程吧,看看 TIME_WAIT 狀態(tài)發(fā)生在哪一個階段。

下面這個圖,是由「客戶端」作為「主動關(guān)閉方」的 TCP 四次揮手的流程。

圖片

TCP 四次揮手的流程

從上面我們可以知道,TIME_WAIT 狀態(tài)是「主動關(guān)閉連接方」才會出現(xiàn)的狀態(tài)。而且 TIME_WAIT 狀態(tài)會持續(xù) 2MSL 時間才會進(jìn)入到 close 狀態(tài)。在 Linux 上 2MSL 的時長是 60 秒,也就是說停留在 TIME_WAIT 的時間為固定的 60 秒。

為什么需要 TIME_WAIT 狀態(tài)?(老八股文了,幫大家復(fù)習(xí)一波)主要有兩個原因:

  • 保證「被動關(guān)閉連接」的一方,能被正確的關(guān)閉。TCP 協(xié)議在關(guān)閉連接的四次揮手中,在主動關(guān)閉方發(fā)送的最后一個 ACK 報文,有可能丟失,這時被動方會重新發(fā) FIN 報文, 如果這時主動方處于 CLOSE 狀態(tài) ,就會響應(yīng) RST 報文而不是 ACK 報文。所以主動方要處于 TIME_WAIT 狀態(tài),而不能是 CLOSE。
  • 防止歷史連接中的數(shù)據(jù),被后面相同四元組的連接錯誤的接收。TCP 報文可能由于路由器異常而 “迷路”,在迷途期間,TCP 發(fā)送端可能因確認(rèn)超時而重發(fā)這個報文,迷途的報文在路由器修復(fù)后也會被送到最終目的地,這個原來的迷途報文就稱為 lost duplicate。在關(guān)閉一個 TCP 連接后,馬上又重新建立起一個相同的 IP 地址和端口之間的 TCP 連接,后一個連接被稱為前一個連接的化身,那么有可能出現(xiàn)這種情況,前一個連接的迷途重復(fù)報文在前一個連接終止后出現(xiàn),從而被誤解成從屬于新的化身。為了避免這個情 況, TIME_WAIT 狀態(tài)需要持續(xù) 2MSL,因為這樣就可以保證當(dāng)成功建立一個 TCP 連接的時候,來自連接先前化身的重復(fù)報文已經(jīng)在網(wǎng)絡(luò)中消逝。

很多人誤解以為只有客戶端才會有 TIME_WAIT 狀態(tài),這是不對的。TCP 是全雙工協(xié)議,哪一方都可以先關(guān)閉連接,所以哪一方都可能會有 TIME_WAIT 狀態(tài)。

總之記住,誰先關(guān)閉連接的,它就是主動關(guān)閉方,那么 TIME_WAIT 就會出現(xiàn)在主動關(guān)閉方。

什么場景下服務(wù)端會主動斷開連接呢?

如果服務(wù)端出現(xiàn)大量的 TIME_WAIT 狀態(tài)的 TCP 連接,就是說明服務(wù)端主動斷開了很多 TCP 連接。

問題來了,什么場景下服務(wù)端會主動斷開連接呢?

  • 第一個場景:HTTP 沒有使用長連接
  • 第二個場景:HTTP 長連接超時
  • 第三個場景:HTTP 長連接的請求數(shù)量達(dá)到上限

接下來,分別介紹下。

第一個場景:HTTP 沒有使用長連接

我們先來看看 HTTP 長連接(Keep-Alive)機制是怎么開啟的。

在 HTTP/1.0 中默認(rèn)是關(guān)閉的,如果瀏覽器要開啟 Keep-Alive,它必須在請求的 header 中添加:

Connection: Keep-Alive

然后當(dāng)服務(wù)器收到請求,作出回應(yīng)的時候,它也被添加到響應(yīng)中 header 里:

Connection: Keep-Alive

這樣做,TCP 連接就不會中斷,而是保持連接。當(dāng)客戶端發(fā)送另一個請求時,它會使用同一個 TCP 連接。這一直繼續(xù)到客戶端或服務(wù)器端提出斷開連接。

從 HTTP/1.1 開始, 就默認(rèn)是開啟了 Keep-Alive,現(xiàn)在大多數(shù)瀏覽器都默認(rèn)是使用 HTTP/1.1,所以 Keep-Alive 都是默認(rèn)打開的。一旦客戶端和服務(wù)端達(dá)成協(xié)議,那么長連接就建立好了。

如果要關(guān)閉 HTTP Keep-Alive,需要在 HTTP 請求或者響應(yīng)的 header 里添加 Connection:close 信息,也就是說,只要客戶端和服務(wù)端任意一方的 HTTP header 中有 Connection:close 信息,那么就無法使用 HTTP 長連接的機制。

關(guān)閉 HTTP 長連接機制后,每次請求都要經(jīng)歷這樣的過程:建立 TCP -> 請求資源 -> 響應(yīng)資源 -> 釋放連接,那么此方式就是 HTTP 短連接,如下圖:

圖片

HTTP 短連接

在前面我們知道,只要任意一方的 HTTP header 中有 Connection:close 信息,就無法使用 HTTP 長連接機制,這樣在完成一次 HTTP 請求/處理后,就會關(guān)閉連接。

問題來了,這時候是客戶端還是服務(wù)端主動關(guān)閉連接呢?

在 RFC 文檔中,并沒有明確由誰來關(guān)閉連接,請求和響應(yīng)的雙方都可以主動關(guān)閉 TCP 連接。

不過,根據(jù)大多數(shù) Web 服務(wù)的實現(xiàn),不管哪一方禁用了 HTTP Keep-Alive,都是由服務(wù)端主動關(guān)閉連接,那么此時服務(wù)端上就會出現(xiàn) TIME_WAIT 狀態(tài)的連接。

客戶端禁用了 HTTP Keep-Alive,服務(wù)端開啟 HTTP Keep-Alive,誰是主動關(guān)閉方?

當(dāng)客戶端禁用了 HTTP Keep-Alive,這時候 HTTP 請求的 header 就會有 Connection:close 信息,這時服務(wù)端在發(fā)完 HTTP 響應(yīng)后,就會主動關(guān)閉連接。

為什么要這么設(shè)計呢?HTTP 是請求-響應(yīng)模型,發(fā)起方一直是客戶端,HTTP Keep-Alive 的初衷是為客戶端后續(xù)的請求重用連接,如果我們在某次 HTTP 請求-響應(yīng)模型中,請求的 header 定義了 connection:close 信息,那不再重用這個連接的時機就只有在服務(wù)端了,所以我們在 HTTP 請求-響應(yīng)這個周期的「末端」關(guān)閉連接是合理的。

客戶端開啟了 HTTP Keep-Alive,服務(wù)端禁用了 HTTP Keep-Alive,誰是主動關(guān)閉方?

當(dāng)客戶端開啟了 HTTP Keep-Alive,而服務(wù)端禁用了 HTTP Keep-Alive,這時服務(wù)端在發(fā)完 HTTP 響應(yīng)后,服務(wù)端也會主動關(guān)閉連接。

為什么要這么設(shè)計呢?在服務(wù)端主動關(guān)閉連接的情況下,只要調(diào)用一次 close() 就可以釋放連接,剩下的工作由內(nèi)核 TCP 棧直接進(jìn)行了處理,整個過程只有一次 syscall;如果是要求 客戶端關(guān)閉,則服務(wù)端在寫完最后一個 response 之后需要把這個 socket 放入 readable 隊列,調(diào)用 select / epoll 去等待事件;然后調(diào)用一次 read() 才能知道連接已經(jīng)被關(guān)閉,這其中是兩次 syscall,多一次用戶態(tài)程序被激活執(zhí)行,而且 socket 保持時間也會更長。

因此,當(dāng)服務(wù)端出現(xiàn)大量的 TIME_WAIT 狀態(tài)連接的時候,可以排查下是否客戶端和服務(wù)端都開啟了 HTTP Keep-Alive,因為任意一方?jīng)]有開啟  HTTP Keep-Alive,都會導(dǎo)致服務(wù)端在處理完一個 HTTP 請求后,就主動關(guān)閉連接,此時服務(wù)端上就會出現(xiàn)大量的 TIME_WAIT 狀態(tài)的連接。

針對這個場景下,解決的方式也很簡單,讓客戶端和服務(wù)端都開啟 HTTP Keep-Alive 機制。

第二個場景:HTTP 長連接超時

HTTP 長連接的特點是,只要任意一端沒有明確提出斷開連接,則保持 TCP 連接狀態(tài)。

HTTP 長連接可以在同一個 TCP 連接上接收和發(fā)送多個 HTTP 請求/應(yīng)答,避免了連接建立和釋放的開銷。

圖片

可能有的同學(xué)會問,如果使用了 HTTP 長連接,如果客戶端完成一個 HTTP 請求后,就不再發(fā)起新的請求,此時這個 TCP 連接一直占用著不是挺浪費資源的嗎?

對沒錯,所以為了避免資源浪費的情況,web 服務(wù)軟件一般都會提供一個參數(shù),用來指定 HTTP 長連接的超時時間,比如 nginx 提供的 keepalive_timeout 參數(shù)。

假設(shè)設(shè)置了 HTTP 長連接的超時時間是 60 秒,nginx 就會啟動一個「定時器」,如果客戶端在完后一個 HTTP 請求后,在 60 秒內(nèi)都沒有再發(fā)起新的請求,定時器的時間一到,nginx 就會觸發(fā)回調(diào)函數(shù)來關(guān)閉該連接,那么此時服務(wù)端上就會出現(xiàn) TIME_WAIT 狀態(tài)的連接。

圖片

HTTP 長連接超時

當(dāng)服務(wù)端出現(xiàn)大量 TIME_WAIT 狀態(tài)的連接時,如果現(xiàn)象是有大量的客戶端建立完 TCP 連接后,很長一段時間沒有發(fā)送數(shù)據(jù),那么大概率就是因為 HTTP 長連接超時,導(dǎo)致服務(wù)端主動關(guān)閉連接,產(chǎn)生大量處于 TIME_WAIT 狀態(tài)的連接。

可以往網(wǎng)絡(luò)問題的方向排查,比如是否是因為網(wǎng)絡(luò)問題,導(dǎo)致客戶端發(fā)送的數(shù)據(jù)一直沒有被服務(wù)端接收到,以至于 HTTP 長連接超時。

第三個場景:HTTP 長連接的請求數(shù)量達(dá)到上限

Web 服務(wù)端通常會有個參數(shù),來定義一條 HTTP 長連接上最大能處理的請求數(shù)量,當(dāng)超過最大限制時,就會主動關(guān)閉連接。

比如 nginx 的 keepalive_requests 這個參數(shù),這個參數(shù)是指一個 HTTP 長連接建立之后,nginx 就會為這個連接設(shè)置一個計數(shù)器,記錄這個 HTTP 長連接上已經(jīng)接收并處理的客戶端請求的數(shù)量。如果達(dá)到這個參數(shù)設(shè)置的最大值時,則 nginx 會主動關(guān)閉這個長連接,那么此時服務(wù)端上就會出現(xiàn) TIME_WAIT 狀態(tài)的連接。

keepalive_requests 參數(shù)的默認(rèn)值是 100 ,意味著每個 HTTP 長連接最多只能跑 100  次請求,這個參數(shù)往往被大多數(shù)人忽略,因為當(dāng) QPS (每秒請求數(shù)) 不是很高時,默認(rèn)值 100 湊合夠用。

但是,對于一些 QPS 比較高的場景,比如超過 10000 QPS,甚至達(dá)到 30000 , 50000 甚至更高,如果 keepalive_requests 參數(shù)值是 100,這時候就 nginx 就會很頻繁地關(guān)閉連接,那么此時服務(wù)端上就會出大量的 TIME_WAIT 狀態(tài)。

針對這個場景下,解決的方式也很簡單,調(diào)大 nginx 的 keepalive_requests 參數(shù)就行。

TIME_WAIT 狀態(tài)過多有什么危害?

過多的 TIME-WAIT 狀態(tài)主要的危害有兩種:

第一是占用系統(tǒng)資源,比如文件描述符、內(nèi)存資源、CPU 資源等;

第二是占用端口資源,端口資源也是有限的,一般可以開啟的端口為32768~61000,也可以通過 net.ipv4.ip_local_port_range參數(shù)指定范圍。

客戶端和服務(wù)端 TIME_WAIT 過多,造成的影響是不同的。

如果客戶端(主動發(fā)起關(guān)閉連接方)的 TIME_WAIT 狀態(tài)過多,占滿了所有端口資源,那么就無法對「目的 IP+ 目的 PORT」都一樣的服務(wù)端發(fā)起連接了,但是被使用的端口,還是可以繼續(xù)對另外一個服務(wù)端發(fā)起連接的。具體可以看我這篇文章:客戶端的端口可以重復(fù)使用嗎?

因此,客戶端(發(fā)起連接方)都是和「目的 IP+ 目的 PORT 」都一樣的服務(wù)端建立連接的話,當(dāng)客戶端的 TIME_WAIT 狀態(tài)連接過多的話,就會受端口資源限制,如果占滿了所有端口資源,那么就無法再跟「目的 IP+ 目的 PORT」都一樣的服務(wù)端建立連接了。

不過,即使是在這種場景下,只要連接的是不同的服務(wù)端,端口是可以重復(fù)使用的,所以客戶端還是可以向其他服務(wù)端發(fā)起連接的,這是因為內(nèi)核在定位一個連接的時候,是通過四元組(源IP、源端口、目的IP、目的端口)信息來定位的,并不會因為客戶端的端口一樣,而導(dǎo)致連接沖突。

如果服務(wù)端(主動發(fā)起關(guān)閉連接方)的 TIME_WAIT 狀態(tài)過多,并不會導(dǎo)致端口資源受限,因為服務(wù)端只監(jiān)聽一個端口,而且由于一個四元組唯一確定一個 TCP 連接,因此理論上服務(wù)端可以建立很多連接,但是 TCP 連接過多,會占用系統(tǒng)資源,比如文件描述符、內(nèi)存資源、CPU 資源等。

如何優(yōu)化 TIME_WAIT 狀態(tài)?

這里給出優(yōu)化 TIME-WAIT 的幾個方式,都是有利有弊:

  • 打開 net.ipv4.tcp_tw_reuse 和 net.ipv4.tcp_timestamps 選項;
  • net.ipv4.tcp_max_tw_buckets
  • 程序中使用 SO_LINGER ,應(yīng)用強制使用 RST 關(guān)閉。

方式一:net.ipv4.tcp_tw_reuse 和 tcp_timestamps

開啟 tcp_tw_reuse,則可以復(fù)用處于 TIME_WAIT 的 socket 為新的連接所用。

有一點需要注意的是,tcp_tw_reuse 功能只能用客戶端(連接發(fā)起方),因為開啟了該功能,在調(diào)用 connect() 函數(shù)時,內(nèi)核會隨機找一個 time_wait 狀態(tài)超過 1 秒的連接給新的連接復(fù)用。

net.ipv4.tcp_tw_reuse = 1

使用這個選項,還有一個前提,需要打開對 TCP 時間戳的支持,即

net.ipv4.tcp_timestamps=1(默認(rèn)即為 1

這個時間戳的字段是在 TCP 頭部的「選項」里,它由一共 8 個字節(jié)表示時間戳,其中第一個 4 字節(jié)字段用來保存發(fā)送該數(shù)據(jù)包的時間,第二個 4 字節(jié)字段用來保存最近一次接收對方發(fā)送到達(dá)數(shù)據(jù)的時間。

由于引入了時間戳,可以使得重復(fù)的數(shù)據(jù)包會因為時間戳過期被自然丟棄,因此 TIME_WAIT 狀態(tài)才可以被復(fù)用。

方式二:net.ipv4.tcp_max_tw_buckets

這個值默認(rèn)為 18000,當(dāng)系統(tǒng)中處于 TIME_WAIT 的連接一旦超過這個值時,系統(tǒng)就會將后面的 TIME_WAIT 連接狀態(tài)重置,這個方法比較暴力。

net.ipv4.tcp_max_tw_buckets = 18000

方式三:程序中使用 SO_LINGER

我們可以通過設(shè)置 socket 選項,來設(shè)置調(diào)用 close 關(guān)閉連接行為。

struct linger so_linger;
so_linger.l_onoff = 1;
so_linger.l_linger = 0;
setsockopt(s, SOL_SOCKET, SO_LINGER, &so_linger,sizeof(so_linger));

如果l_onoff為非 0, 且l_linger值為 0,那么調(diào)用close后,會立該發(fā)送一個RST標(biāo)志給對端,該 TCP 連接將跳過四次揮手,也就跳過了TIME_WAIT狀態(tài),直接關(guān)閉。

但這為跨越TIME_WAIT狀態(tài)提供了一個可能,不過是一個非常危險的行為,不值得提倡。

前面介紹的方法都是試圖越過 TIME_WAIT狀態(tài)的,這樣其實不太好。雖然 TIME_WAIT 狀態(tài)持續(xù)的時間是有一點長,顯得很不友好,但是它被設(shè)計來就是用來避免發(fā)生亂七八糟的事情。

《UNIX網(wǎng)絡(luò)編程》一書中卻說道:TIME_WAIT 是我們的朋友,它是有助于我們的,不要試圖避免這個狀態(tài),而是應(yīng)該弄清楚它。

如果服務(wù)端要避免過多的 TIME_WAIT 狀態(tài)的連接,就永遠(yuǎn)不要主動斷開連接,讓客戶端去斷開,由分布在各處的客戶端去承受 TIME_WAIT。

服務(wù)端出現(xiàn)大量 CLOSE_WAIT 狀態(tài)的原因有哪些?

還是拿這張圖:

圖片

TCP 四次揮手的流程

從上面這張圖我們可以得知,CLOSE_WAIT 狀態(tài)是「被動關(guān)閉方」才會有的狀態(tài),而且如果「被動關(guān)閉方」沒有調(diào)用 close 函數(shù)關(guān)閉連接,那么就無法發(fā)出 FIN 報文,從而無法使得 CLOSE_WAIT 狀態(tài)的連接轉(zhuǎn)變?yōu)?LAST_ACK 狀態(tài)。

所以,當(dāng)服務(wù)端出現(xiàn)大量 CLOSE_WAIT 狀態(tài)的連接的時候,說明服務(wù)端的程序沒有調(diào)用 close 函數(shù)關(guān)閉連接。

那什么情況會導(dǎo)致服務(wù)端的程序沒有調(diào)用 close 函數(shù)關(guān)閉連接?這時候通常需要排查代碼。

我們先來分析一個普通的 TCP 服務(wù)端的流程:

  • 創(chuàng)建服務(wù)端 socket,bind 綁定端口、listen 監(jiān)聽端口
  • 將服務(wù)端 socket 注冊到 epoll
  • epoll_wait 等待連接到來,連接到來時,調(diào)用 accpet 獲取已連接的 socket
  • 將已連接的 socket 注冊到 epoll
  • epoll_wait 等待事件發(fā)生
  • 對方連接關(guān)閉時,我方調(diào)用 close

可能導(dǎo)致服務(wù)端沒有調(diào)用 close 函數(shù)的原因,如下。

第一個原因:第 2 步?jīng)]有做,沒有將服務(wù)端 socket 注冊到 epoll,這樣有新連接到來時,服務(wù)端沒辦法感知這個事件,也就無法獲取到已連接的 socket,那服務(wù)端自然就沒機會對 socket 調(diào)用 close 函數(shù)了。

不過這種原因發(fā)生的概率比較小,這種屬于明顯的代碼邏輯 bug,在前期 read view 階段就能發(fā)現(xiàn)的了。

第二個原因:第 3 步?jīng)]有做,有新連接到來時沒有調(diào)用 accpet 獲取該連接的 socket,導(dǎo)致當(dāng)有大量的客戶端主動斷開了連接,而服務(wù)端沒機會對這些 socket 調(diào)用 close 函數(shù),從而導(dǎo)致服務(wù)端出現(xiàn)大量 CLOSE_WAIT 狀態(tài)的連接。

發(fā)生這種情況可能是因為服務(wù)端在執(zhí)行 accpet  函數(shù)之前,代碼卡在某一個邏輯或者提前拋出了異常。

第三個原因:第 4 步?jīng)]有做,通過 accpet 獲取已連接的 socket 后,沒有將其注冊到 epoll,導(dǎo)致后續(xù)收到 FIN 報文的時候,服務(wù)端沒辦法感知這個事件,那服務(wù)端就沒機會調(diào)用 close 函數(shù)了。

發(fā)生這種情況可能是因為服務(wù)端在將已連接的 socket 注冊到 epoll 之前,代碼卡在某一個邏輯或者提前拋出了異常。之前看到過別人解決 close_wait 問題的實踐文章,感興趣的可以看看:一次 Netty 代碼不健壯導(dǎo)致的大量 CLOSE_WAIT 連接原因分析

第四個原因:第 6 步?jīng)]有做,當(dāng)發(fā)現(xiàn)客戶端關(guān)閉連接后,服務(wù)端沒有執(zhí)行 close 函數(shù),可能是因為代碼漏處理,或者是在執(zhí)行 close 函數(shù)之前,代碼卡在某一個邏輯,比如發(fā)生死鎖等等。

可以發(fā)現(xiàn),當(dāng)服務(wù)端出現(xiàn)大量 CLOSE_WAIT 狀態(tài)的連接的時候,通常都是代碼的問題,這時候我們需要針對具體的代碼一步一步的進(jìn)行排查和定位,主要分析的方向就是服務(wù)端為什么沒有調(diào)用 close。

責(zé)任編輯:武曉燕 來源: 小林coding
相關(guān)推薦

2022-08-13 12:07:14

URLHTTP加密

2024-11-26 08:52:34

SQL優(yōu)化Kafka

2022-01-05 21:54:51

網(wǎng)絡(luò)分層系統(tǒng)

2022-03-30 10:10:17

字節(jié)碼棧空間

2022-08-18 17:44:25

HTTPS協(xié)議漏洞

2025-04-15 08:00:00

Java開發(fā)服務(wù)網(wǎng)格

2024-04-30 09:02:48

2024-09-19 08:51:01

HTTP解密截取

2022-10-10 08:13:16

遞歸通用代碼

2022-07-26 00:00:02

TCPUDPMAC

2024-09-26 06:48:36

2025-02-18 08:11:17

2024-08-20 08:29:55

2024-10-10 16:53:53

守護線程編程

2024-09-04 15:17:23

2024-03-18 08:21:06

TCPUDP協(xié)議

2022-05-10 22:00:41

UDPTCP協(xié)議

2025-08-11 05:00:00

2012-08-03 09:14:23

2024-03-05 10:07:22

TCPUDP協(xié)議
點贊
收藏

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

在线观看av免费| 一级做a爱片性色毛片| 久久久久影视| 在线观看成人免费视频| www.午夜色| 天天射天天操天天干| 日本视频一区二区| 久久久久久综合网天天| 37p粉嫩大胆色噜噜噜| 日韩午夜电影免费看| 亚洲成a人v欧美综合天堂下载| 欧美在线激情| www.久久成人| 欧美人体视频xxxxx| 精品亚洲成人| 亚洲精品一区二区三区99| 日韩欧美在线免费观看视频| 久久亚洲资源| 1区2区3区国产精品| 欧美 日韩 国产在线| 99久久久国产精品无码网爆| 日日骚欧美日韩| 久久久亚洲网站| 永久免费看片直接| 亚洲小说图片视频| 精品1区2区在线观看| 亚洲va综合va国产va中文| 天堂av中文在线观看| 亚洲精品日韩一| 水蜜桃一区二区| 亚洲av片一区二区三区| 丰满亚洲少妇av| 91精品在线一区| 综合久久中文字幕| 久久亚洲二区| 91av在线免费观看| 日产精品久久久久| 国产精品www994| 欧美成在线视频| 精品少妇一区二区三区密爱| 国内黄色精品| 亚洲午夜精品视频| 国产美女免费无遮挡| 日韩高清影视在线观看| 亚洲第一av网站| 中文字幕1区2区| 九色精品蝌蚪| 日韩视频一区二区三区在线播放| 国产成人美女视频| 欧洲午夜精品| 欧美日韩国产大片| www午夜视频| 日韩精品第二页| 7878成人国产在线观看| www.色就是色.com| 国产午夜亚洲精品一级在线| 欧美精品丝袜中出| 中文字幕av一区二区三区人妻少妇 | 国产成人精品免费在线| 亚洲一区精品电影| 国产av一区二区三区| 国产乱色国产精品免费视频| 亚洲一区二区自拍| 黄色一级大片在线免费看国产一| 成人综合在线观看| 久精品国产欧美| 日韩黄色影片| 国产欧美中文在线| 亚洲一二区在线| 含羞草www国产在线视频| 亚洲女人****多毛耸耸8| 亚洲中文字幕无码一区二区三区| 免费在线观看的电影网站| 亚洲一区二区三区四区在线| 无码中文字幕色专区| 韩国主播福利视频一区二区三区| 91国内精品野花午夜精品| 久久国产这里只有精品| 精品视频一区二区三区| 亚洲成人a**站| 香蕉网在线播放| 欧美gayvideo| 欧美极品欧美精品欧美视频| 一级成人黄色片| 麻豆精品视频在线观看| 超碰97在线播放| 婷婷亚洲一区二区三区| 国产精品青草久久| 91网站在线观看免费| 成人影院网站| 在线不卡免费av| 久久久国产精品无码| 日本欧美国产| 久久久之久亚州精品露出| 欧美日韩a v| 国产xxx精品视频大全| 久久久久网址| a级在线观看| 欧美特级www| 中文字幕av一区二区三区人妻少妇| 欧美理论电影在线精品| xxx一区二区| 免费在线一区二区| 色网站免费观看| 中文字幕一区二区三区在线观看 | 欧美aaaxxxx做受视频| 日韩欧美在线视频观看| 性色av浪潮av| 欧美一二区在线观看| 欧美成人免费一级人片100| 国产毛片aaa| 国产成人在线网站| 亚洲成人自拍视频| 丝袜诱惑一区二区| 欧美成人一区二区三区在线观看| 国产成人福利在线| 亚洲精品美女| 91精品国产综合久久久久久丝袜| 国产在线观看黄| 亚洲电影一级黄| 在线一区二区不卡| 日韩午夜电影网| 热99精品里视频精品| 亚洲精品国产精品国| 一区视频在线播放| 国产又粗又长又大的视频| 日本午夜精品| 欧美激情亚洲一区| www.精品视频| 又紧又大又爽精品一区二区| gogogo高清免费观看在线视频| 亚洲色图美女| 91av视频在线| 日韩一二三四| 精品国产精品自拍| 日本一卡二卡在线| 亚洲国产二区| 国产一区免费| 96av在线| 亚洲国产第一页| 亚欧洲精品在线视频| 国产v综合v亚洲欧| 成人免费观看在线| 大奶在线精品| 97视频免费在线看| 日本美女一级视频| 图片区小说区区亚洲影院| 女性生殖扒开酷刑vk| 欧美三级午夜理伦三级中文幕| 丰满岳妇乱一区二区三区| 欧美日韩视频在线一区二区观看视频| 女人高潮被爽到呻吟在线观看| 亚洲国产精品99| 日韩欧美亚洲视频| 91网上在线视频| 不卡影院一区二区| 欧美一二区在线观看| 国产精品对白刺激| 91在线品视觉盛宴免费| 欧美日韩高清不卡| 免费精品在线视频| 国产福利视频一区二区三区| 中文精品无码中文字幕无码专区| 91精品啪在线观看国产爱臀| 久久久伊人日本| 四虎影院在线域名免费观看| 欧美性xxxxxxxxx| 性猛交娇小69hd| 开心九九激情九九欧美日韩精美视频电影| 一区二区三区四区视频在线观看| 成人网av.com/| 久久久午夜视频| 青青草在线播放| 欧美色视频在线观看| 男女性高潮免费网站| 成人在线综合网| 欧美成人黑人猛交| 国产精品伦理久久久久久| 成人免费看片网址| 这里有精品可以观看| 在线视频欧美日韩精品| 国产喷水吹潮视频www| 亚洲h动漫在线| 中字幕一区二区三区乱码| 国模少妇一区二区三区| 国产精品无码人妻一区二区在线 | 亚洲欧美www| 国产又黄又爽视频| 五月激情综合网| 国产探花在线视频| av中文字幕一区| 天堂网在线免费观看| 在线欧美福利| 亚洲国产精品久久久久婷婷老年| 视频二区欧美毛片免费观看| 欧美与欧洲交xxxx免费观看| 黄网站在线免费看| 日韩精品在线观看视频| 国产偷拍一区二区| 日韩欧美国产网站| 亚洲av鲁丝一区二区三区| 黑人久久a级毛片免费观看| 色婷婷激情综合| 后入内射无码人妻一区| 不卡的看片网站| 午夜影院免费观看视频| 视频一区视频二区中文| r级无码视频在线观看| 欧美午夜精品一区二区三区电影| 国产一区不卡在线观看| 在线观看亚洲精品福利片| 日本老师69xxx| 欧美人与禽猛交乱配| 久久精品视频播放| 精品亚洲成a人片在线观看| 精品999在线播放| 国产黄色小视频在线观看| 在线观看一区二区视频| 国产午夜性春猛交ⅹxxx| 一区二区三区蜜桃| 国产探花在线视频| 国产精品系列在线| 亚洲天堂久久新| 99久久婷婷国产综合精品| 巨乳女教师的诱惑| 韩国成人在线视频| www.这里只有精品| 日韩av在线播放中文字幕| 国模吧无码一区二区三区| 黄色成人91| 国产午夜精品视频一区二区三区| 欧美aaaa视频| 中日韩在线视频| 色999日韩| 四虎永久国产精品| 成人高清电影网站| 色狠狠久久av五月综合|| 九九综合在线| 免费看污久久久| 免费欧美视频| 欧美一区1区三区3区公司 | 免费观看一级视频| 亚洲激情在线激情| 久久久精品国产sm调教| 亚洲最大色网站| 国产亚洲精品女人久久久久久| 亚洲精品国产视频| 免费在线视频一区二区| 亚洲国产美国国产综合一区二区| 欧美精品一区二区蜜桃| 亚洲综合成人网| 在线免费观看毛片| 天天爽夜夜爽夜夜爽精品视频| 日韩xxx高潮hd| 欧美午夜精品久久久久久浪潮| www.国产com| 偷偷要91色婷婷| 成年人晚上看的视频| 国产综合色在线观看| 久久久久久久久久久人体| 2020av在线| 日韩av片免费在线观看| 精品视频一区二区三区四区五区| 国产精品毛片a∨一区二区三区|国| 97成人超碰| 亚洲一区中文字幕| 97久久综合区小说区图片区| 国内成+人亚洲| 精品成人影院| 国产91av视频在线观看| 欧美一区精品| 免费看一级大黄情大片| 日韩成人伦理电影在线观看| 日韩av一卡二卡三卡| 岛国一区二区三区| 色欲av无码一区二区三区| 国产精品久久久久久久久果冻传媒| 日本午夜在线观看| 亚洲成人高清在线| 成人黄色免费网| 日韩一二三区不卡| 色综合888| yellow中文字幕久久| а√天堂8资源在线| 国产精品第一页在线| 综合成人在线| 日本不卡一区二区三区在线观看| 亚洲v在线看| 国产精品丝袜久久久久久消防器材| 麻豆视频观看网址久久| 制服丝袜在线第一页| 国产人伦精品一区二区| 久久婷婷国产麻豆91| 欧洲视频一区二区| 亚洲产国偷v产偷v自拍涩爱| 亚洲网站在线播放| 日韩av官网| 国产精品一区电影| 农村少妇一区二区三区四区五区| 亚洲日本理论电影| 国产精品久久国产愉拍| 天堂在线精品视频| 久久精品视频一区| 国产精品第九页| 91精品啪在线观看国产60岁| 久蕉在线视频| 久久久久久91| 国产视频一区二| 午夜欧美性电影| 亚洲伊人观看| 欧美图片自拍偷拍| 中文字幕在线不卡视频| chinese国产精品| 亚洲成人av在线播放| 秋霞成人影院| 国产精品va在线播放| 欧美a一欧美| 日韩精品在线观看av| 国产呦萝稀缺另类资源| 娇妻被老王脔到高潮失禁视频| 激情久久av一区av二区av三区| 国产黄色片av| 久久在线免费观看视频| 国产精品国产一区二区三区四区| 国产一区二区三区四区五区美女 | 亚洲免费电影在线| 亚洲 小说区 图片区| 亚洲男人天堂久| 九色porny视频在线观看| caoporn国产精品免费公开| 久久精品亚洲人成影院 | 制服.丝袜.亚洲.中文.综合懂色| 制服丝袜成人动漫| 欧洲不卡视频| 国产免费一区二区三区在线观看 | 久操视频在线免费观看| 亚洲免费人成在线视频观看| 日本蜜桃在线观看视频| 国产一区高清视频| av成人天堂| 国产xxxxxxxxx| 精品久久久久久亚洲精品| 神马久久久久久久久久| 97在线视频一区| 精品淫伦v久久水蜜桃| 日韩xxxx视频| 91欧美一区二区| 国产又黄又猛又粗又爽| 日韩精品在线视频美女| 深夜成人在线| 热re99久久精品国产99热| 蜜桃视频一区| 中字幕一区二区三区乱码| 欧美日韩国产在线播放网站| 日本福利专区在线观看| 成人欧美一区二区三区黑人| 香蕉视频官网在线观看日本一区二区| 午夜久久福利视频| 亚洲精品乱码久久久久久黑人| 亚洲毛片欧洲毛片国产一品色| 久久久久久av| 亚洲区小说区图片区qvod按摩| 国内自拍视频一区| 国产精品电影一区二区三区| 国产男女无套免费网站| 久久久久九九九九| 日韩黄色网络| 日本不卡一区在线| 亚洲激情成人在线| 日漫免费在线观看网站| 国产精品久久久精品| 中文字幕人成人乱码| 亚洲一级Av无码毛片久久精品| 日韩欧美在线观看视频| 日本在线看片免费人成视1000| 91精品网站| 国产欧美激情| 亚洲一区电影在线观看| 精品久久99ma| 91亚洲视频| 欧美中日韩在线| 久久久精品蜜桃| av av片在线看| 欧日韩在线观看| 国产精品久久久久久久免费观看| www男人天堂| 欧美日韩精品二区第二页| 久久www人成免费看片中文| 欧美精品一区二区视频| 国产做a爰片久久毛片| 西西44rtwww国产精品| www.日韩视频| 偷拍亚洲色图| 日本一本在线视频| 91福利在线播放| 波多野结衣在线播放| 亚洲美女搞黄| 久久午夜老司机| 亚洲AV无码成人片在线观看| 国产成人精品在线|