婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

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

一、前言

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

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

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

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

可以看到,我們?cè)O(shè)置了tcp_tw_recycle為0,這可以避免NAT下tcp_tw_recycle和tcp_timestamps同時(shí)開(kāi)啟導(dǎo)致的問(wèn)題。

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

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

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

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

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

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

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

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

五、TIME_WAIT定時(shí)器源碼

談到TIME_WAIT何時(shí)能夠被回收,不得不談到TIME_WAIT定時(shí)器,這個(gè)就是專(zhuān)門(mén)用來(lái)銷(xiāo)毀到期的TIME_WAIT Socket的。而每一個(gè)Socket進(jìn)入TIME_WAIT時(shí),必然會(huì)經(jīng)過(guò)下面的代碼分支:

tcp_v4_rcv

|->tcp_timewait_state_process

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

|->inet_twsk_schedule

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

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

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

5.1、inet_twsk_schedule

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

內(nèi)核將60s的時(shí)間分為8個(gè)slot(INET_TWDR_RECYCLE_SLOTS),每個(gè)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)
{
	......
	// 計(jì)算時(shí)間輪的slot
	slot = (timeo + (1 << INET_TWDR_RECYCLE_TICK) - 1) >> INET_TWDR_RECYCLE_TICK;
	......
	// 慢時(shí)間輪的邏輯,由于沒(méi)有開(kāi)啟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當(dāng)前正在處理的slot
		// 在TIME_WAIT_LEN下,這個(gè)邏輯一般7
		slot = (twdr->slot + slot) & (INET_TWDR_TWKILL_SLOTS - 1);
		list = &twdr->cells[slot];
	} else{
		// 走短時(shí)間定時(shí)器,由于篇幅原因,不在這里贅述
		......
	}
	......
	/* 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皆為T(mén)CP_TIMEWAIT_LEN。所以,每次剛成為的TIME_WAIT狀態(tài)的socket即將鏈接到當(dāng)前處理slot最遠(yuǎn)的slot(+7)以便處理。如下圖所示:

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

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

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

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

/*參數(shù)中的tcp_death_row即為承載時(shí)間輪處理函數(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í)間輪處理函數(shù) */
	.tw_timer	= TIMER_INITIALIZER(inet_twdr_hangman, 0,
					    (unsigned long)&tcp_death_row),
	/* slow_timer時(shí)間輪輔助處理函數(shù)*/
	.twkill_work	= __WORK_INITIALIZER(tcp_death_row.twkill_work,
					     inet_twdr_twkill_work),
	/* 短時(shí)間輪處理函數(shù) */
	.twcal_timer	= TIMER_INITIALIZER(inet_twdr_twcal_tick, 0,
					    (unsigned long)&tcp_death_row),				
};

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

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)達(dá)到了100個(gè),且還沒(méi)處理完
	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;
		// 如果當(dāng)前slot處理完了,才跳轉(zhuǎn)到下一個(gè)slot
		twdr->slot = ((twdr->slot + 1) & (INET_TWDR_TWKILL_SLOTS - 1));
	}
	// 如果還需要繼續(xù)處理,則在7.5s后再運(yùn)行此函數(shù)
	if (need_timer)
		mod_timer(&twdr->tw_timer, jiffies + twdr->period);
out:
	spin_unlock(&twdr->death_lock);
}

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

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

注: 小時(shí)間輪(tw\_cal)在tcp\_tw\_recycle開(kāi)啟的情況下會(huì)使用

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

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

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

因?yàn)閷?shí)際計(jì)算的時(shí)候是拿60*HZ進(jìn)行計(jì)算,

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

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

5.4、如果一個(gè)slot中的TIME_WAIT<=100

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

5.5、如果一個(gè)slot中的TIME_WAIT>100

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

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

對(duì)于這種情況,筆者寫(xiě)了個(gè)程序進(jìn)行模擬。

public class TimeWaitSimulator {

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

        // 0表示開(kāi)始清理,1表示清理完畢
        // 清理完畢之后slot向前推進(jìn)
        int startPurge = 0;
        double sum = 0;
        int slot = 0;
        while (slot < 8) {
            if (startPurge == 0) {
                sum += delta;
                startPurge = 1;
                if (slot == 7) {
                    // 因?yàn)榧僭O(shè)進(jìn)入work_queue之后,很快就會(huì)清理完
                    // 所以在slot為7的時(shí)候并不需要等最后的那個(gè)purge過(guò)程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)該向前推進(jìn)
                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這個(gè)時(shí)間輪的時(shí)候,其實(shí)外面時(shí)間已經(jīng)過(guò)去了112.5s,處理已經(jīng)完全滯后了。不過(guò)由于TIME_WAIT狀態(tài)下的Socket(inet_timewait_sock)所占用內(nèi)存很少,所以不會(huì)對(duì)系統(tǒng)可用資源造成太大的影響。但是,這會(huì)在NAT環(huán)境下造成一個(gè)坑,這也是筆者文章前面提到過(guò)的Bug。
上面的計(jì)算如果按照?qǐng)D和時(shí)間線(xiàn)畫(huà)出來(lái),應(yīng)該是這么個(gè)情況:

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

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

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

事實(shí)上,以上結(jié)論還是不夠嚴(yán)謹(jǐn)。TIME_WAIT時(shí)間還可以繼續(xù)延長(zhǎng)!看下這段源碼:

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.
		 */
		/* 如果有回繞校驗(yàn)失敗的包到達(dá)的情況下,或者其實(shí)ack包 
		 * 重置定時(shí)器到新的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ā)送當(dāng)前time wait狀態(tài)應(yīng)該返回的ACK */
		return TCP_TW_ACK;
	}
	inet_twsk_put(tw);
	/* 注意,這邊通過(guò)paws校驗(yàn)的包,會(huì)返回tcp_tw_success,使得time_wait狀態(tài)的
	 * socket五元組也可以三次握手成功重新復(fù)用
	 * /
	return TCP_TW_SUCCESS;
}

上面的邏輯如下圖所示:

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

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

標(biāo)簽:銅川 周口 慶陽(yáng) 松原 泰州 蕪湖 那曲 朝陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《分析從Linux源碼看TIME_WAIT的持續(xù)時(shí)間》,本文關(guān)鍵詞  分析,從,Linux,源碼,看,TIME,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《分析從Linux源碼看TIME_WAIT的持續(xù)時(shí)間》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于分析從Linux源碼看TIME_WAIT的持續(xù)時(shí)間的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美亚洲一区二区在线观看| 亚洲免费观看高清完整版在线观看熊 | 日韩一区二区三区四区| 亚洲线精品一区二区三区| 在线亚洲精品福利网址导航| 一区二区三区在线高清| 在线观看免费亚洲| 日韩精品电影在线观看| 欧美成人精品1314www| 国产一区高清在线| 国产精品女同互慰在线看 | 在线观看视频欧美| 日韩国产一区二| 精品久久五月天| 成人午夜免费电影| 亚洲综合在线视频| 日韩一级黄色片| 成人天堂资源www在线| 夜夜精品浪潮av一区二区三区| 欧美日韩成人在线| 国产成人精品网址| 亚洲蜜臀av乱码久久精品| 91精品免费观看| 国产精品综合一区二区| 亚洲精品一二三区| 精品美女一区二区| 91浏览器入口在线观看| 日本午夜一本久久久综合| 久久久久9999亚洲精品| 色综合久久综合网97色综合 | 精品一区二区三区免费毛片爱| 国产日产欧美精品一区二区三区| 色综合天天综合在线视频| 另类综合日韩欧美亚洲| 国产精品不卡在线| 精品国产123| 日本高清不卡在线观看| 黄页网站大全一区二区| 一个色妞综合视频在线观看| 久久久久99精品国产片| 欧美另类高清zo欧美| 国产999精品久久久久久绿帽| 婷婷综合另类小说色区| 久久综合成人精品亚洲另类欧美| 91理论电影在线观看| 国产精品一区二区在线看| 五月婷婷久久综合| 一区二区三区在线观看欧美| 中文字幕精品一区二区三区精品| 日韩一级在线观看| 欧美综合一区二区三区| 波多野结衣中文字幕一区二区三区| 日韩精品乱码免费| 亚洲猫色日本管| 国产精品欧美精品| 久久久久久久性| 日韩一区二区三区在线视频| 在线观看成人小视频| 94-欧美-setu| 成人app下载| 国产精品白丝av| 美女视频第一区二区三区免费观看网站 | 日韩制服丝袜av| 亚洲自拍另类综合| 亚洲精品欧美专区| 亚洲人一二三区| 国产精品久久看| 欧美激情一区二区三区四区| 精品久久久久久久久久久久久久久久久| 欧美日韩黄色一区二区| 欧美精品在线视频| 欧美日产国产精品| 欧美日韩小视频| 欧美日韩精品三区| 9191国产精品| 日韩视频中午一区| 欧美一区二区三区男人的天堂| 884aa四虎影成人精品一区| 欧美色老头old∨ideo| 91福利视频在线| 欧美女孩性生活视频| 欧美一区二区福利在线| 欧美一区欧美二区| 久久蜜桃一区二区| 国产欧美精品一区二区色综合朱莉 | 91亚洲精品久久久蜜桃网站| caoporen国产精品视频| 91免费小视频| 欧美在线观看你懂的| 欧美另类z0zxhd电影| 成人午夜碰碰视频| 精品国产免费人成电影在线观看四季| 欧美福利一区二区| 日韩精品一区二区三区swag| 久久久亚洲精华液精华液精华液| 中文字幕欧美激情一区| 中文字幕精品一区二区三区精品 | 51精品国自产在线| 久久免费美女视频| 国产日产欧美一区二区视频| 亚洲欧美视频一区| 日韩国产精品久久久| 黑人巨大精品欧美一区| voyeur盗摄精品| 欧美日韩一级片在线观看| 欧美成人一区二区| 中文av字幕一区| 亚洲成人激情社区| 国产精品69毛片高清亚洲| 一本色道久久综合精品竹菊| 制服丝袜中文字幕亚洲| 国产视频一区二区在线| 亚洲午夜电影在线| 国产一区二区伦理| 欧美在线999| 久久久高清一区二区三区| 亚洲欧美日韩一区二区| 久久精品国产精品亚洲综合| 成人免费视频播放| 日韩视频一区二区三区| 中文字幕一区不卡| 免费在线成人网| 91热门视频在线观看| 欧美mv日韩mv| 亚洲国产你懂的| 国产成人99久久亚洲综合精品| 欧美性videosxxxxx| 久久久亚洲国产美女国产盗摄| 亚洲成精国产精品女| 不卡电影一区二区三区| 26uuu欧美日本| 亚洲电影一区二区| 成人av网站免费观看| 日韩欧美久久久| 有坂深雪av一区二区精品| 国产老女人精品毛片久久| 欧美日韩成人在线| 亚洲乱码一区二区三区在线观看| 久久99精品久久只有精品| 在线观看免费亚洲| 亚洲女与黑人做爰| 粉嫩绯色av一区二区在线观看 | 久久久久久毛片| 美日韩一级片在线观看| 欧美在线色视频| 亚洲天堂中文字幕| 成人黄色免费短视频| 久久久99精品免费观看| 精品一区二区三区在线播放| 欧美一区二区精美| 丝袜诱惑制服诱惑色一区在线观看| 91黄色免费观看| 亚洲人快播电影网| fc2成人免费人成在线观看播放| 国产欧美综合在线观看第十页| 日韩av在线发布| 欧美精品久久久久久久久老牛影院| 一卡二卡欧美日韩| 色先锋资源久久综合| 亚洲欧美一区二区三区国产精品| 99re热这里只有精品视频| 国产精品无码永久免费888| 国产黄色91视频| 久久久久国产一区二区三区四区 | 福利电影一区二区| 国产精品女同互慰在线看| 成人av综合在线| 国产精品三级av| 91美女在线视频| 一区二区三区日韩精品| 欧美在线999| 日韩avvvv在线播放| 欧美一区二视频| 久久99精品久久久久久动态图 | 久久草av在线| 国产日产欧产精品推荐色| www.欧美.com| 亚洲一区二区三区三| 欧美另类一区二区三区| 久久成人羞羞网站| 国产欧美一区二区精品婷婷| 成人激情黄色小说| 一区二区久久久| 欧美日本在线播放| 捆绑紧缚一区二区三区视频| 久久精品亚洲精品国产欧美kt∨ | 日韩美女在线视频| 一区二区三区在线看| 亚洲另类春色校园小说| 色综合久久综合网欧美综合网| 亚洲在线视频一区| 日韩女优电影在线观看| 成人永久aaa| 亚洲成人精品在线观看| 欧美三级电影网| 国产一区二区三区| 亚洲女同ⅹxx女同tv| 日韩你懂的在线播放| 波多野结衣中文字幕一区二区三区| 性做久久久久久|