成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 分析從Linux源碼看TIME_WAIT的持續(xù)時間

分析從Linux源碼看TIME_WAIT的持續(xù)時間

熱門標簽:撫順移動400電話申請 貴陽教育行業(yè)電話外呼系統(tǒng) 烏海智能電話機器人 400電話申請方案 藍點外呼系統(tǒng) 在百度地圖標注車輛 做外呼系統(tǒng)的公司違法嗎 威海人工外呼系統(tǒng)供應(yīng)商 寧夏房產(chǎn)智能外呼系統(tǒng)要多少錢

一、前言

筆者一直以為在Linux下TIME_WAIT狀態(tài)的Socket持續(xù)狀態(tài)是60s左右。線上實際卻存在TIME_WAIT超過100s的Socket。由于這牽涉到最近出現(xiàn)的一個復(fù)雜Bug的分析。所以,筆者就去Linux源碼里面,一探究竟。

二、首先介紹下Linux環(huán)境

TIME_WAIT這個參數(shù)通常和五元組重用扯上關(guān)系。在這里,筆者先給出機器的內(nèi)核參數(shù)設(shè)置,以免和其它問題相混淆。

cat /proc/sys/net/ipv4/tcp_tw_reuse 0

cat /proc/sys/net/ipv4/tcp_tw_recycle 0

cat /proc/sys/net/ipv4/tcp_timestamps 1

可以看到,我們設(shè)置了tcp_tw_recycle為0,這可以避免NAT下tcp_tw_recycle和tcp_timestamps同時開啟導致的問題。

三、TIME_WAIT狀態(tài)轉(zhuǎn)移圖

提到Socket的TIME_WAIT狀態(tài),不得就不亮出TCP狀態(tài)轉(zhuǎn)移圖了:

持續(xù)時間就如圖中所示的2MSL。但圖中并沒有指出2MSL到底是多長時間,但筆者從Linux源碼里面翻到了下面這個宏定義。

#define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT
				  * state, about 60 seconds	*/

如英文字面意思所示,60s后銷毀TIME_WAIT狀態(tài),那么2MSL肯定就是60s嘍?

四、持續(xù)時間真如TCP_TIMEWAIT_LEN所定義么?

筆者之前一直是相信60秒TIME_WAIT狀態(tài)的socket就能夠被Kernel回收的。甚至筆者自己做實驗telnet一個端口號,人為制造TIME_WAIT,自己計時,也是60s左右即可回收。

但在追查一個問題時候,發(fā)現(xiàn),TIME_WAIT有時候能夠持續(xù)到111s,不然完全無法解釋問題的現(xiàn)象。這就逼得筆者不得不推翻自己的結(jié)論,重新細細閱讀內(nèi)核對于TIME_WAIT狀態(tài)處理的源碼。當然,這個追查的問題也會寫成博客分享出來,敬請期待_。

五、TIME_WAIT定時器源碼

談到TIME_WAIT何時能夠被回收,不得不談到TIME_WAIT定時器,這個就是專門用來銷毀到期的TIME_WAIT Socket的。而每一個Socket進入TIME_WAIT時,必然會經(jīng)過下面的代碼分支:

tcp_v4_rcv

|->tcp_timewait_state_process

/* 將time_wait狀態(tài)的socket鏈入時間輪

|->inet_twsk_schedule

由于我們的kernel并沒有開啟tcp_tw_recycle,所以最終的調(diào)用為:

/* 這邊TCP_TIMEWAIT_LEN 60 * HZ */
inet_twsk_schedule(tw, &tcp_death_row, TCP_TIMEWAIT_LEN,
					 TCP_TIMEWAIT_LEN);

好了,讓我們按下這個核心函數(shù)吧。

5.1、inet_twsk_schedule

在閱讀源碼前,先看下大致的處理流程。Linux內(nèi)核是通過時間輪來處理到期的TIME_WAIT socket,如下圖所示:

內(nèi)核將60s的時間分為8個slot(INET_TWDR_RECYCLE_SLOTS),每個slot處理7.5(60/8)范圍time_wait狀態(tài)的socket。

void inet_twsk_schedule(struct inet_timewait_sock *tw,struct inet_timewait_death_row *twdr,const int timeo, const int timewait_len)
{
	......
	// 計算時間輪的slot
	slot = (timeo + (1 << INET_TWDR_RECYCLE_TICK) - 1) >> INET_TWDR_RECYCLE_TICK;
	......
	// 慢時間輪的邏輯,由于沒有開啟TCP\_TW\_RECYCLE,timeo總是60*HZ(60s)
	// 所有都走slow_timer邏輯 
	if (slot >= INET_TWDR_RECYCLE_SLOTS) {
		/* Schedule to slow timer */
		if (timeo >= timewait_len) {
			slot = INET_TWDR_TWKILL_SLOTS - 1;
		} else {
			slot = DIV_ROUND_UP(timeo, twdr->period);
			if (slot >= INET_TWDR_TWKILL_SLOTS)
				slot = INET_TWDR_TWKILL_SLOTS - 1;
		}
		tw->tw_ttd = jiffies + timeo;
		// twdr->slot當前正在處理的slot
		// 在TIME_WAIT_LEN下,這個邏輯一般7
		slot = (twdr->slot + slot) & (INET_TWDR_TWKILL_SLOTS - 1);
		list = &twdr->cells[slot];
	} else{
		// 走短時間定時器,由于篇幅原因,不在這里贅述
		......
	}
	......
	/* twdr->period 60/8=7.5 */
	if (twdr->tw_count++ == 0)
		mod_timer(&twdr->tw_timer, jiffies + twdr->period);
	spin_unlock(&twdr->death_lock);
}

從源碼中可以看到,由于我們傳入的timeout皆為TCP_TIMEWAIT_LEN。所以,每次剛成為的TIME_WAIT狀態(tài)的socket即將鏈接到當前處理slot最遠的slot(+7)以便處理。如下圖所示:

如果Kernel不停的產(chǎn)生TIME_WAIT,那么整個slow timer時間輪就會如下圖所示:

所有的slot全部掛滿了TIME_WAIT狀態(tài)的Socket。

5.2、具體的清理函數(shù)

每次調(diào)用inet_twsk_schedule時候傳入的處理函數(shù)都是:

/*參數(shù)中的tcp_death_row即為承載時間輪處理函數(shù)的結(jié)構(gòu)體*/
inet_twsk_schedule(tw,&tcp_death_row,TCP_TIMEWAIT_LEN,TCP_TIMEWAIT_LEN)
/* 具體的處理結(jié)構(gòu)體 */
struct inet_timewait_death_row tcp_death_row = {
	......
	/* slow_timer時間輪處理函數(shù) */
	.tw_timer	= TIMER_INITIALIZER(inet_twdr_hangman, 0,
					    (unsigned long)&tcp_death_row),
	/* slow_timer時間輪輔助處理函數(shù)*/
	.twkill_work	= __WORK_INITIALIZER(tcp_death_row.twkill_work,
					     inet_twdr_twkill_work),
	/* 短時間輪處理函數(shù) */
	.twcal_timer	= TIMER_INITIALIZER(inet_twdr_twcal_tick, 0,
					    (unsigned long)&tcp_death_row),				
};

由于我們這邊主要考慮的是設(shè)置為TCP_TIMEWAIT_LEN(60s)的處理時間,所以直接考察slow_timer時間輪處理函數(shù),也就是inet_twdr_hangman。這個函數(shù)還是比較簡短的:

void inet_twdr_hangman(unsigned long data)
{
	struct inet_timewait_death_row *twdr;
	unsigned int need_timer;

	twdr = (struct inet_timewait_death_row *)data;
	spin_lock(&twdr->death_lock);

	if (twdr->tw_count == 0)
		goto out;

	need_timer = 0;
	// 如果此slot處理的time_wait socket已經(jīng)達到了100個,且還沒處理完
	if (inet_twdr_do_twkill_work(twdr, twdr->slot)) {
		twdr->thread_slots |= (1 << twdr->slot);
		// 將余下的任務(wù)交給work queue處理
		schedule_work(&twdr->twkill_work);
		need_timer = 1;
	} else {
		/* We purged the entire slot, anything left?  */
		// 判斷是否還需要繼續(xù)處理
		if (twdr->tw_count)
			need_timer = 1;
		// 如果當前slot處理完了,才跳轉(zhuǎn)到下一個slot
		twdr->slot = ((twdr->slot + 1) & (INET_TWDR_TWKILL_SLOTS - 1));
	}
	// 如果還需要繼續(xù)處理,則在7.5s后再運行此函數(shù)
	if (need_timer)
		mod_timer(&twdr->tw_timer, jiffies + twdr->period);
out:
	spin_unlock(&twdr->death_lock);
}

雖然簡單,但這個函數(shù)里面有不少細節(jié)。第一個細節(jié),就在inet_twdr_do_twkill_work,為了防止這個slot的time_wait過多,卡住當前的流程,其會在處理完100個time_wait socket之后就回返回。這個slot余下的time_wait會交給Kernel的work_queue機制去處理。

值得注意的是。由于在這個slow_timer時間輪判斷里面,根本不判斷精確時間,直接全部刪除。所以輪到某個slot,例如到了52.5-60s這個slot,直接清理52.5-60s的所有time_wait。即使time_wait還沒有到60s也是如此。而小時間輪(tw_cal)會精確的判定時間,由于篇幅原因,就不在這里細講了。

注: 小時間輪(tw\_cal)在tcp\_tw\_recycle開啟的情況下會使用

5.3、先作出一個假設(shè)

我們假設(shè),一個時間輪的數(shù)據(jù)最多能在一個slot間隔時間,也就是(60/8=7.5)內(nèi)肯定能處理完畢。由于系統(tǒng)有tcp_tw_max_buckets設(shè)置,如果設(shè)置的比較合理,這個假設(shè)還是比較靠譜的。

注: 這里的60/8為什么需要精確到小數(shù),而不是7。

因為實際計算的時候是拿60*HZ進行計算,

如果HZ是1024的話,那么period應(yīng)該是7680,即精度精確到ms級。

所以在本文中計算的時候需要精確到小數(shù)。

5.4、如果一個slot中的TIME_WAIT<=100

如果一個slot的TIME_WAIT<=100,很自然的,我們的處理函數(shù)并不會啟用work_queue。同時,還將slot+1,使得在下一個period的時候可以處理下一個slot。如下圖所示:

5.5、如果一個slot中的TIME_WAIT>100

如果一個slot的TIME_WAIT>100,Kernel會將余下的任務(wù)交給work_queue處理。同時,slot不變!也即是說,下一個period(7.5s后)到達的時候,還會處理同樣的slot。按照我們的假設(shè),這時候slot已經(jīng)處理完畢,那么在第7.5s的時候才將slot向前推進。也就是說,假設(shè)slot一開始為0,到真正處理slot 1需要15s!

假設(shè)每一個slot的TIME_WAIT都>100的話,那么每個slot的處理都需要15s。

對于這種情況,筆者寫了個程序進行模擬。

public class TimeWaitSimulator {

    public static void main(String[] args) {
        double delta = (60) * 1.0 / 8;

        // 0表示開始清理,1表示清理完畢
        // 清理完畢之后slot向前推進
        int startPurge = 0;
        double sum = 0;
        int slot = 0;
        while (slot < 8) {
            if (startPurge == 0) {
                sum += delta;
                startPurge = 1;
                if (slot == 7) {
                    // 因為假設(shè)進入work_queue之后,很快就會清理完
                    // 所以在slot為7的時候并不需要等最后的那個purge過程7.5s
                    System.out.println("slot " + slot + " has reach the last " + sum);
                    break;
                }
            }
            if (startPurge == 1) {
                sum += delta;
                startPurge = 0;
                System.out.println("slot " + "move to next at time " + sum);
                // 清理完之后,slot才應(yīng)該向前推進
                slot++;
            }
        }
    }
}

得出結(jié)果如下面所示:

slot move to next at time 15.0

slot move to next at time 30.0

slot move to next at time 45.0

slot move to next at time 60.0

slot move to next at time 75.0

slot move to next at time 90.0

slot move to next at time 105.0

slot 7 has reach the last  112.5

也即處理到52.5-60s這個時間輪的時候,其實外面時間已經(jīng)過去了112.5s,處理已經(jīng)完全滯后了。不過由于TIME_WAIT狀態(tài)下的Socket(inet_timewait_sock)所占用內(nèi)存很少,所以不會對系統(tǒng)可用資源造成太大的影響。但是,這會在NAT環(huán)境下造成一個坑,這也是筆者文章前面提到過的Bug。
上面的計算如果按照圖和時間線畫出來,應(yīng)該是這么個情況:

也即TIME_WAIT狀態(tài)的Socket在一個period(7.5s)內(nèi)能處理完當前slot的情況下,最多能夠存在112.5s!

如果7.5s內(nèi)還處理不完,那么響應(yīng)時間輪的輪轉(zhuǎn)還得繼續(xù)加上一個或多個perod。但在tcp_tw_max_buckets的限制,應(yīng)該無法達到這么嚴苛的條件。

5.6、PAWS(Protection Against Wrapped Sequences)使得TIME_WAIT延長

事實上,以上結(jié)論還是不夠嚴謹。TIME_WAIT時間還可以繼續(xù)延長!看下這段源碼:

enum tcp_tw_status
tcp_timewait_state_process(struct inet_timewait_sock *tw, struct sk_buff *skb,
			   const struct tcphdr *th)
{
	......
	if (paws_reject)
		NET_INC_STATS_BH(twsk_net(tw), LINUX_MIB_PAWSESTABREJECTED);
		
	if (!th->rst) {
		/* In this case we must reset the TIMEWAIT timer.
		 *
		 * If it is ACKless SYN it may be both old duplicate
		 * and new good SYN with random sequence number <rcv_nxt.
		 * Do not reschedule in the last case.
		 */
		/* 如果有回繞校驗失敗的包到達的情況下,或者其實ack包 
		 * 重置定時器到新的60s之后
		 * /
		if (paws_reject || th->ack)
			inet_twsk_schedule(tw, &tcp_death_row, TCP_TIMEWAIT_LEN,
					   TCP_TIMEWAIT_LEN);

		/* Send ACK. Note, we do not put the bucket,
		 * it will be released by caller.
		 */
		/* 向?qū)Χ税l(fā)送當前time wait狀態(tài)應(yīng)該返回的ACK */
		return TCP_TW_ACK;
	}
	inet_twsk_put(tw);
	/* 注意,這邊通過paws校驗的包,會返回tcp_tw_success,使得time_wait狀態(tài)的
	 * socket五元組也可以三次握手成功重新復(fù)用
	 * /
	return TCP_TW_SUCCESS;
}

上面的邏輯如下圖所示:

注意代碼最后的return TCP_TW_SUCCESS,通過PAWS校驗的包,會返回TCP_TW_SUCCESS,使得TIME_WAIT狀態(tài)的Socket(五元組)也可以三次握手成功重新復(fù)用!

以上就是分析從Linux源碼看TIME_WAIT的持續(xù)時間的詳細內(nèi)容,更多關(guān)于Linux源碼 TIME_WAIT持續(xù)時間的資料請關(guān)注腳本之家其它相關(guān)文章!

標簽:銅川 周口 慶陽 松原 泰州 蕪湖 那曲 朝陽

巨人網(wǎng)絡(luò)通訊聲明:本文標題《分析從Linux源碼看TIME_WAIT的持續(xù)時間》,本文關(guān)鍵詞  分析,從,Linux,源碼,看,TIME,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《分析從Linux源碼看TIME_WAIT的持續(xù)時間》相關(guān)的同類信息!
  • 本頁收集關(guān)于分析從Linux源碼看TIME_WAIT的持續(xù)時間的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    真实原创一区二区影院| bt电影在线| 欧美少妇网站| 国产亚洲欧美一区| www.色五月.com| 91精品入口| 一二三四中文在线| 林ゆな中文字幕一区二区| 美国一级片在线观看| 免费国产麻豆传| 麻豆91精品91久久久| 欧美国产日韩xxxxx| 亚洲最大福利视频网站| 亚洲午夜日本在线观看| 亚洲午夜无码av毛片久久| 网红女主播少妇精品视频| 色妞欧美日韩在线| 国产高清一区在线观看| 成人av电影免费| 免费精品视频一区二区三区| 91福利精品在线观看| 一区二区免费在线视频| 91久久国产综合久久91| 亚洲精品小区久久久久久| 91精品黄色| 国产精品免费网站在线观看| 小小的日本在线观看免费色网| 国模大尺度视频一区二区| 影音先锋男人资源在线观看| 飘雪影视在线观看免费观看| 麻豆成人精品| 国产系列精品av| 亚洲第一在线综合网站| 国产精品中文字幕久久久| 波多野结衣在线观看一区二区三区| 日韩成人av电影在线| 欧美精品二区三区四区免费看视频| 日韩在线视屏| 秋霞午夜理伦电影在线观看| 国产在线69| 中文字幕日韩一区二区| 国产美女三级视频| 精品国产aⅴ| 99精品久久99久久久久| 国产成+人+综合+亚洲欧美丁香花| www在线观看黄色| 精品中文字幕一区二区小辣椒| 淫行教师动漫| 国产 欧美在线| 亚洲成人在线观看视频| 九九九九热精品免费视频| 性18欧美另类| 亚洲 中文字幕 日韩 无码| 天堂网av2014| 在线欧美三级| 久久久综合久久| 亚洲精品传媒| 久久亚洲欧美日韩精品专区| 久久伊人一区| a在线视频观看| 羞羞网站在线免费观看| 波多野结衣在线观看| 亚洲一区二区自拍| 国产精品一区二区三区美女| 日本www视频| 欧美日韩在线视频一区| 久久久久久久久久久久国产| 亚洲天堂2024| 午夜在线电影亚洲一区| 精品成人一区二区三区免费视频| 秋霞av亚洲一区二区三| av在线免费观看网| 欧美在线播放一区二区| 99久久国产综合精品五月天喷水| 污网站免费在线| 国产91在线观看| 国产亚洲精久久久久久无码77777| 国产毛片视频网站| 国产高清一区日本| 亚洲ⅴ国产v天堂a无码二区| 欧美一区二区三区在线电影| 全色精品综合影院| 午夜精品一区二区三区四区| 青青青视频在线| 欧美性猛交一区二区三区精品| 欧美午夜精品久久久久久人妖| 久久久久亚洲av无码专区体验| 91吃瓜网在线观看| 一区二区三区小说| 人妻互换一区二区激情偷拍| 中文字幕人妻一区二| 欧美色图国产精品| 三级黄色在线视频| 国产视频一区二区不卡| 日本成人中文字幕| 日韩一级片网站| 久久精品久久久| 亚洲欧美制服另类日韩| 日韩av网站免费在线| 免费成人直播| 国产麻豆免费视频| 国产精品视频在线观看| 国产人伦精品一区二区| 精品福利视频导航| 午夜影院黄色片| 中文字幕22页| 亚州av中文字幕在线免费观看| 尤物99国产成人精品视频| 日韩超碰人人爽人人做人人添| 欧美成免费一区二区视频| 亚洲蜜桃精久久久久久久久久久久| 4kfree性满足欧美hd18| 台湾十八成人网| 亚洲亚洲人成综合网络| 国模视频一区| 国产黄片一区二区三区| 免费的很黄很污的视频网站| 亚洲影视资源网| 熟妇人妻无乱码中文字幕真矢织江| 国产乱子轮精品视频| 日本精品网站| 欧美视频三区在线播放| www.国产一区二区| 精品亚洲成a人片在线观看| 亚洲精品欧美二区三区中文字幕| 国产传媒第一页| 日韩不卡av| 日韩电影大片中文字幕| 性欧美ⅴideo另类hd| 久久精品国产亚洲av久| 欧美成a人免费观看久久| 手机在线理论片| 不卡日韩av| 国产成人精品亚洲午夜麻豆| 2019年精品视频自拍| 最新不卡av在线| 日韩电影第一页| 天堂网一区二区| 久久国产婷婷国产香蕉| 亚洲欧美视频一区二区| 免费在线观看一级毛片| 色综合中文字幕| 中文字字幕一区二区三区四区五区| 红桃一区二区三区| 国产精品爽爽爽爽爽爽在线观看| 久草免费新视频| 国模视频一区二区| 免费不卡在线观看| 国产福利视频一区二区三区| 欧美日韩国产综合视频在线观看| 亚洲欧洲免费| 天堂中文在线8| 国产porn在线| 羞羞污视频在线观看| 农村黄色一级片| 国产欧美一区二区三区精品观看| 一区二区三区高清在线视频| 亚洲国产成人在线观看| melody高清在线观看| 天天爽夜夜爽夜夜爽| 裸体在线国模精品偷拍| 欧美人与性动交α欧美精品济南到| 97国产精品视频人人做人人爱| 久久香蕉国产线看观看网| 91精品久久久久久久久久另类| 婷婷色在线观看| 这里精品视频免费| av中文在线播放| 国产精品丝袜一区二区三区| 国产三级理论片| 在线观看日产精品| 欧美精品一区在线播放| 欧美a在线看| 欧美私人啪啪vps| 亚洲国产专区校园欧美| 亚洲人体一区| 成人午夜视频在线播放| bdsm国产| 亚洲国产成人无码av在线| 99热精品一区二区| аⅴ资源天堂资源库在线| 岳的好大精品一区二区三区| zzjj国产精品一区二区| 久久久久成人精品免费播放动漫| 日韩久久午夜影院| 成人av动漫在线| 黄色a级片免费| 香蕉97视频观看在线观看| 日韩精品极品视频免费观看| 成年女人在线看片| 久久国产中文字幕| 日本老熟俱乐部h0930| 免费日韩成人| 婷婷久久综合九色综合99蜜桃| 久久丫精品国产亚洲av不卡| 一级二级三级欧美| jizzjizz丝袜老师| 777精品久无码人妻蜜桃| 美女脱光衣服与内衣内裤一区二区三区四区| 国产亚洲欧美色| a看欧美黄色女同性恋| 懂色av粉嫩av蜜臀av一区二区三区| 久久精品这里有| 国内毛片毛片毛片毛片毛片| 欧美高清精品一区二区| 成人在线观看一区| 欧美极品在线观看| 国产aa视频| 国偷自拍第113页| 天堂网站www天堂资源在线| www.66久久| 久草在线资源网| 日本色护士高潮视频在线观看| 动漫3d精品一区二区三区| 久久综合九色综合97婷婷女人| 尹人成人综合网| 波多野结衣精品| 久久九九国产精品怡红院| 精品视频一二三区| 亚洲精品国产精品粉嫩| 久久久久久国产精品日本| 色乱码一区二区三区88| 无码人妻一区二区三区精品视频| 日本高清视频精品| 欧洲生活片亚洲生活在线观看| 久久久久国产一区二区| 日韩欧美国产综合一区| 日韩成人在线电影| 狠狠干综合网| 亚洲一区二区av电影| 久草福利在线观看| av一本久道久久波多野结衣| 色视频在线免费观看| 亚洲免费视频观看| av在线播放免费| youjizz.com在线观看| 成人在线观看免费高清| 久久综合九色| 欧洲一区在线观看| 国产超碰人人爽人人做人人爱| 日韩免费三级| 91精品国产91久久综合| 亚洲欧美va天堂人熟伦| 日本高清不卡免费| 高清无码视频直接看| 久久久成人av| 亚洲欧美日韩综合aⅴ视频| 欧美另类videos黑人极品| 好看的日韩精品| 欧美性猛交xxxx免费看久久| 菠萝蜜影院一区二区免费| 无码国产精品一区二区色情男同| 狠狠色丁香九九婷婷综合五月| 亚洲伦理在线观看| 91精品国产91久久久久福利| 97一区二区三区| 白浆视频在线观看| 日韩欧美亚洲一区二区三区| 日韩亚洲精品电影| 久久久久久久97| 亚洲精品视频网上网址在线观看| 亚洲毛茸茸少妇高潮呻吟| 日本高清视频www| 色婷婷综合久久久久| 亚洲一区黄色| 国产精品网址| 国产探花在线视频| 91精品国产欧美一区二区18| 18岁成人毛片| 国产大片一区二区三区| www.久草| 人妻互换免费中文字幕| 精品久久中文字幕久久av| 性欧美疯狂xxxxbbbb| 97久久久久久| 老司机精品视频在线观看6| 亚洲久久一区| 欧美高清视频在线高清观看mv色露露十八| 红杏成人性视频免费看| 中文久久乱码一区二区| 在线一区二区三区精品| 天天射天天色天天干| 在线观看免费网站| 天海翼在线播放| 高清不卡日本v二区在线| 久久综合久中文字幕青草| 亚洲日穴在线视频| 亚洲影音一区| 国产精品美女一区二区三区四区| 黄色日韩网站视频| 综合蜜桃精品| 人人干人人爱人人爱| 免费看a在线观看| 五月婷婷六月激情| 中文字幕国产在线| 中文字幕人妻精品一区| 久久国产精品亚洲| 欧美日本在线一区| 亚洲在线www| 最新亚洲一区| 成品网站w灬+源码1688网页| 成人高清dvd| 日日夜夜中文字幕| 日韩女在线观看| 日韩电影网站| 亚洲午夜精品久久久久久性色| 国产精品成人免费精品自在线观看| 韩国精品福利一区二区三区| 精品av综合导航| 欧美一级免费在线观看| 91在线一区二区| 亚洲精品成人久久电影| 天堂av一区| 丁香桃色午夜亚洲一区二区三区| 激情婷婷综合网| 国产91porn| 一个人看的www视频在线免费观看| 欧美色第一页| 午夜精品成人在线| 欧美人妖巨大在线| 欧美精品系列| 欧美性三三影院| 一个人看免费www视频有多爽| 天天干天天色天天爽| 久久先锋影音av鲁色资源| 日本在线视频站| 国产精品久久久久久久久免费桃花| 中文字幕一区二区三区在线乱码|