久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

瀏覽:272日期:2024-04-14 13:00:59

前言

筆者一直覺得如果能知道從應(yīng)用到框架再到操作系統(tǒng)的每一處代碼,是一件Exciting的事情。今天筆者就來從Linux源碼的角度看下Client端的Socket在進(jìn)行Connect的時候到底做了哪些事情。由于篇幅原因,關(guān)于Server端的Accept源碼講解留給下次給大家介紹。(基于Linux 3.10內(nèi)核)

一個最簡單的Connect例子

int clientSocket;if((clientSocket = socket(AF_INET, SOCK_STREAM, 0)) < 0) {// 創(chuàng)建socket失敗失敗 return -1;}......if(connect(clientSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) {// connect 失敗return -1;}.......

首先我們通過socket系統(tǒng)調(diào)用創(chuàng)建了一個socket,其中指定了SOCK_STREAM,而且最后一個參數(shù)為0,也就是建立了一個通常所有的TCP Socket。在這里,我們直接給出TCP Socket所對應(yīng)的ops也就是操作函數(shù)。

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

如果你想知道上圖中的結(jié)構(gòu)是怎么來的,可以看下筆者以前的文章:

https://www.jb51.net/article/106563.htm

值得注意的是,由于socket系統(tǒng)調(diào)用操作做了如下兩個代碼的判斷

sock_map_fd|->get_unused_fd_flags|->alloc_fd|->expand_files (ulimit)|->sock_alloc_file|->alloc_file|->get_empty_filp (/proc/sys/fs/max_files)

第一個判斷,ulmit超限:

int expand_files(struct files_struct *files, int nr{......if (nr >= current->signal->rlim[RLIMIT_NOFILE].rlim_cur)return -EMFILE;......}

這邊的判斷即是ulimit的限制!在這里返回-EMFILE對應(yīng)的描述就是'Too many open files'

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

第二個判斷max_files超限

struct file *get_empty_filp(void){ ....../* * 由此可見,特權(quán)用戶可以無視文件數(shù)最大大小的限制! */if (get_nr_files() >= files_stat.max_files && !capable(CAP_SYS_ADMIN)) {/* * percpu_counters are inaccurate. Do an expensive check before * we go and fail. */if (percpu_counter_sum_positive(&nr_files) >= files_stat.max_files)goto over;} ......}

所以在文件描述符超過所有進(jìn)程能打開的最大文件數(shù)量限制(/proc/sys/fs/file-max)的時候會返回-ENFILE,對應(yīng)的描述就是'Too many open files in system',但是特權(quán)用戶確可以無視這一限制,如下圖所示:

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

connect系統(tǒng)調(diào)用

我們再來看一下connect系統(tǒng)調(diào)用:

int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen)

這個系統(tǒng)調(diào)用有三個參數(shù),那么依據(jù)規(guī)則,它肯定在內(nèi)核中的源碼長下面這個樣子

SYSCALL_DEFINE3(connect, ......

筆者全文搜索了下,就找到了具體的實現(xiàn):

socket.cSYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,int, addrlen){ ......err = sock->ops->connect(sock, (struct sockaddr *)&address, addrlen, sock->file->f_flags);......}

前面圖給出了在TCP下的sock->ops == inet_stream_ops,然后再陷入到更進(jìn)一步的調(diào)用棧中,即下面的:

SYSCALL_DEFINE3(connect|->inet_stream_ops|->inet_stream_connect|->tcp_v4_connect|->tcp_set_state(sk, TCP_SYN_SENT);設(shè)置狀態(tài)為TCP_SYN_SENT |->inet_hash_connect|->tcp_connect

首先,我們來看一下inet_hash_connect這個函數(shù),里面有一個端口號的搜索過程,搜索不到可用端口號就會導(dǎo)致創(chuàng)建連接失敗!內(nèi)核能夠建立一個連接也是跋涉了千山萬水的!我們先看一下搜索端口號的邏輯,如下圖所示:

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

獲取端口號范圍

首先,我們從內(nèi)核中獲取connect能夠使用的端口號范圍,在這里采用了Linux中的順序鎖(seqlock)

void inet_get_local_port_range(int *low, int *high){unsigned int seq;do {// 順序鎖seq = read_seqbegin(&sysctl_local_ports.lock);*low = sysctl_local_ports.range[0];*high = sysctl_local_ports.range[1];} while (read_seqretry(&sysctl_local_ports.lock, seq));}

順序鎖事實上就是結(jié)合內(nèi)存屏障等機制的一種樂觀鎖,主要依靠一個序列計數(shù)器。在讀取數(shù)據(jù)之前和之后,序列號都被讀取,如果兩者的序列號相同,說明在讀操作的時候沒有被寫操作打斷過。這也保證了上面的讀取變量都是一致的,也即low和high不會出現(xiàn)low是改前值而high是改后值得情況。low和high要么都是改之前的,要么都是改之后的!內(nèi)核中修改的地方為:

cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000

通過hash決定端口號起始搜索范圍

在Linux上進(jìn)行connect,內(nèi)核給其分配的端口號并不是線性增長的,但是也符合一定的規(guī)律。先來看下代碼:

int __inet_hash_connect(...){// 注意,這邊是static變量static u32 hint;// 這邊的port_offset是用對端ip:port hash的一個值// 也就是說對端ip:port固定,port_offset固定u32 offset = hint + port_offset;for (i = 1; i <= remaining; i++) {port = low + (i + offset) % remaining;/* port是否占用check */....goto ok;}.......ok:hint += i;......}

這里面有幾個小細(xì)節(jié),為了安全原因,Linux本身用對端ip:port做了一次hash作為搜索的初始o(jì)ffset,所以不同遠(yuǎn)端ip:port初始搜索范圍可以基本是不同的!但同樣的對端ip:port初始搜索范圍是相同的!

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

在筆者機器上,一個完全干凈的內(nèi)核里面,不停的對同一個遠(yuǎn)端ip:port,其以2進(jìn)行穩(wěn)定增長,也即38742->38744->38746,如果有其它的干擾,就會打破這個規(guī)律。

端口號范圍限制

由于我們指定了端口號返回ip_local_port_range是不是就意味著我們最多創(chuàng)建high-low+1個連接呢?當(dāng)然不是,由于檢查端口號是否重復(fù)是將(網(wǎng)絡(luò)命名空間,對端ip,對端port,本端port,Socket綁定的dev)當(dāng)做唯一鍵進(jìn)行重復(fù)校驗,所以限制僅僅是在同一個網(wǎng)絡(luò)命名空間下,連接同一個對端ip:port的最大可用端口號數(shù)為high-low+1,當(dāng)然可能還要減去ip_local_reserved_ports。如下圖所示:

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

檢查端口號是否被占用

端口號的占用搜索分為兩個階段,一個是處于TIME_WAIT狀態(tài)的端口號搜索,另一個是其它狀態(tài)端口號搜索。

TIME_WAIT狀態(tài)端口號搜索

眾所周知,TIME_WAIT階段是TCP主動close必經(jīng)的一個階段。如果Client采用短連接的方式和Server端進(jìn)行交互,就會產(chǎn)生大量的TIME_WAIT狀態(tài)的Socket。而這些Socket由占用端口號,所以當(dāng)TIME_WAIT過多,打爆上面的端口號范圍之后,新的connect就會返回錯誤碼:

C語言connect返回錯誤碼為-EADDRNOTAVAIL,對應(yīng)描述為Cannot assign requested address 對應(yīng)Java的異常為java.net.NoRouteToHostException: Cannot assign requested address (Address not available)

ip_local_reserved_ports。如下圖所示:

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

由于TIME_WAIT大概一分鐘左右才能消失,如果在一分鐘內(nèi)Client端和Server建立大量的短連接請求就容易導(dǎo)致端口號耗盡。而這個一分鐘(TIME_WAIT的最大存活時間)是在內(nèi)核(3.10)編譯階段就確定了的,無法通過內(nèi)核參數(shù)調(diào)整。 如下代碼所示:

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

Linux自然也考慮到了這種情況,所以提供了一個tcp_tw_reuse參數(shù)使得在搜索端口號時可以在某些情況下重用TIME_WAIT。代碼如下:

__inet_hash_connect|->__inet_check_establishedstatic int __inet_check_established(......){....../* Check TIME-WAIT sockets first. */sk_nulls_for_each(sk2, node, &head->twchain) {tw = inet_twsk(sk2);// 如果在time_wait中找到一個match的port,就判斷是否可重用if (INET_TW_MATCH(sk2, net, hash, acookie,saddr, daddr, ports, dif)) {if (twsk_unique(sk, sk2, twp))goto unique;elsegoto not_unique;}}......}

如上面代碼中寫的那樣,如果在一堆TIME-WAIT狀態(tài)的Socket里面能夠有當(dāng)前要搜索的port,則判斷是否這個port可以重復(fù)利用。如果是TCP的話這個twsk_unique的實現(xiàn)函數(shù)是:

int tcp_twsk_unique(......){......if (tcptw->tw_ts_recent_stamp && (twp == NULL || (sysctl_tcp_tw_reuse && get_seconds() - tcptw->tw_ts_recent_stamp > 1))) {tp->write_seq = tcptw->tw_snd_nxt + 65535 + 2......return 1;}return 0;}

上面這段代碼邏輯如下所示:

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

在開啟了tcp_timestamp以及tcp_tw_reuse的情況下,在Connect搜索port時只要比之前用這個port的TIME_WAIT狀態(tài)的Socket記錄的最近時間戳>1s,就可以重用此port,即將之前的1分鐘縮短到1s。同時為了防止?jié)撛诘男蛄刑枦_突,直接將write_seq加上在65537,這樣,在單Socket傳輸速率小于80Mbit/s的情況下,不會造成序列號沖突。同時這個tw_ts_recent_stamp設(shè)置的時機如下圖所示:

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

所以如果Socket進(jìn)入TIME_WAIT狀態(tài)后,如果一直有對應(yīng)的包發(fā)過來,那么會影響此TIME_WAIT對應(yīng)的port是否可用的時間。我們可以通過下面命令開始tcp_tw_reuse:

echo ’1’ > /proc/sys/net/ipv4/tcp_tw_reuse

ESTABLISHED狀態(tài)端口號搜索

ESTABLISHED的端口號搜索就簡單了許多

/* And established part... */sk_nulls_for_each(sk2, node, &head->chain) {if (INET_MATCH(sk2, net, hash, acookie,saddr, daddr, ports, dif))goto not_unique;}

以(網(wǎng)絡(luò)命名空間,對端ip,對端port,本端port,Socket綁定的dev)當(dāng)做唯一鍵進(jìn)行匹配,如果匹配成功,表明此端口無法重用。

端口號迭代搜索

Linux內(nèi)核在[low,high]范圍按照上述邏輯進(jìn)行port的搜索,如果沒有搜索到port,即port耗盡,就會返回-EADDRNOTAVAIL,也即Cannot assign requested address。但還有一個細(xì)節(jié),如果是重用TIME_WAIT狀態(tài)的Socket的端口的話,就會將對應(yīng)的TIME_WAIT狀態(tài)的Socket給銷毀。

__inet_hash_connect(......){......if (tw) {inet_twsk_deschedule(tw, death_row);inet_twsk_put(tw);}......}

尋找路由表

在我們找到一個可用端口號port后,就會進(jìn)入搜尋路由階段:

ip_route_newports|->ip_route_output_flow|->__ip_route_output_key|->ip_route_output_slow|->fib_lookup

這也是一個非常復(fù)雜的過程,限于篇幅,就不做詳細(xì)闡述了。如果搜索不到路由信息的話,會返回。

-ENETUNREACH,對應(yīng)描述為Network is unreachable

Client端的三次握手

在前面一大堆前置條件就緒后,才進(jìn)入到真正的三次握手階段。

tcp_connect |->tcp_connect_init 初始化tcp socket |->tcp_transmit_skb 發(fā)送SYN包 |->inet_csk_reset_xmit_timer 設(shè)置SYN重傳定時器

tcp_connect_init初始化了一大堆TCP相關(guān)的設(shè)置,例如mss_cache/rcv_mss等一大堆。而且如果開啟了TCP窗口擴大選項的話,其窗口擴大因子也在此函數(shù)里進(jìn)行計算:

tcp_connect_init|->tcp_select_initial_windowint tcp_select_initial_window(...){......(*rcv_wscale) = 0;if (wscale_ok) {/* Set window scaling on max possible window * See RFC1323 for an explanation of the limit to 14 */space = max_t(u32, sysctl_tcp_rmem[2], sysctl_rmem_max);space = min_t(u32, space, *window_clamp);while (space > 65535 && (*rcv_wscale) < 14) {space >>= 1;(*rcv_wscale)++;}}......}

如上面代碼所示,窗口擴大因子取決于Socket最大可允許的讀緩沖大小和window_clamp(最大允許滑動窗口大小,動態(tài)調(diào)整)。搞完了一票初始信息設(shè)置后,才開始真正的三次握手。在tcp_transmit_skb中才真正發(fā)送SYN包,同時在緊接著的inet_csk_reset_xmit_timer里設(shè)置了SYN超時定時器。如果對端一直不發(fā)送SYN_ACK,將會返回-ETIMEDOUT。

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

重傳的超時時間和

/proc/sys/net/ipv4/tcp_syn_retries

息息相關(guān),Linux默認(rèn)設(shè)置為5,建議設(shè)置成3,下面是不同設(shè)置的超時時間參照圖。

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

在設(shè)置了SYN超時重傳定時器后,tcp_connnect就返回,并一路返回到最初始的inet_stream_connect。在這里我們就等待對端返回SYN_ACK或者SYN定時器超時。

int __inet_stream_connect(struct socket *sock,...,){// 如果設(shè)置了O_NONBLOCK則timeo為0timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);......// 如果timeo=0即O_NONBLOCK會立刻返回// 否則等待timeo時間if (!timeo || !inet_wait_for_connect(sk, timeo, writebias))goto out;}

Linux本身提供一個SO_SNDTIMEO來控制對connect的超時,不過Java并沒有采用這個選項。而是采用別的方式進(jìn)行connect的超時控制。僅僅就C語言的connect系統(tǒng)調(diào)用而言,不設(shè)置SO_SNDTIMEO,就會將對應(yīng)用戶進(jìn)程進(jìn)行睡眠,直到SYN_ACK到達(dá)或者超時定時器超時才將次用戶進(jìn)程喚醒。

從Linux源碼看Socket(TCP)Client端的Connect的示例詳解

如果是NON_BLOCK的話,則是通過select/epoll等多路復(fù)用機制去捕獲超時或者連接成功事件。

對端SYN_ACK到達(dá)

在Server端SYN_ACK到達(dá)之后會按照下面的代碼路徑傳遞,并喚醒用戶態(tài)進(jìn)程:

tcp_v4_rcv|->tcp_v4_do_rcv|->tcp_rcv_state_process|->tcp_rcv_synsent_state_process|->tcp_finish_connect|->tcp_init_metrics 初始化度量統(tǒng)計|->tcp_init_congestion_control 初始化擁塞控制|->tcp_init_buffer_space 初始化buffer空間|->inet_csk_reset_keepalive_timer 開啟包活定時器|->sk_state_change(sock_def_wakeup) 喚醒用戶態(tài)進(jìn)程|->tcp_send_ack 發(fā)送三次握手的最后一次握手給Server端|->tcp_set_state(sk, TCP_ESTABLISHED) 設(shè)置為ESTABLISHED狀態(tài)

總結(jié)

Client(TCP)端進(jìn)行Connect的過程真是跋山涉水,從一開始文件描述符的限制到端口號的搜索再到路由表的搜索再到最后的三次握手,任何一個環(huán)節(jié)有問題就會導(dǎo)致創(chuàng)建連接失敗,筆者詳細(xì)的描述了這些機制的源碼實現(xiàn)。希望本篇文章可以對讀者在以后遇到Connect失敗問題時候有所幫助。

到此這篇關(guān)于從Linux源碼看Socket(TCP)Client端的Connect的文章就介紹到這了,更多相關(guān)Linux源碼看Socket內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Linux系統(tǒng)
相關(guān)文章:
主站蜘蛛池模板: 国产精品久久av | av中文字幕在线观看 | 久久久精品456亚洲影院 | 亚洲成人av在线 | 国产精品免费一区二区三区四区 | 中文字幕精品一区 | 日韩精品一区二区三区在线播放 | 新疆少妇videos高潮 | 一级毛片免费完整视频 | 亚洲人黄色片 | 久久国产一区二区 | 成人午夜精品一区二区三区 | 精品在线一区二区 | 亚洲第1页 | 午夜激情电影在线 | 国产精品1 | 伊人欧美在线 | 欧美亚洲啪啪 | 午夜午夜精品一区二区三区文 | 成人亚洲精品777777大片 | 日韩视频一区二区 | 精品免费国产一区二区三区四区 | 自拍视频在线观看 | 国产精品美女www爽爽爽动态图 | 久久毛片| 欧美一区免费 | 在线看一区| 日本阿v视频高清在线中文 中文二区 | 欧美精品一区二区三区四区五区 | 91小视频网站 | 国产精品免费一区二区 | 日韩成人黄色 | 日韩国产在线观看 | 爱操在线 | 国产精品有限公司 | 国产精品福利在线观看 | 伊人网在线免费观看 | 中文字幕一区二区三区在线视频 | 欧美二区在线 | 日本久久久久久久久久久久 | 一区二区三区不卡视频 | 国产精品久久久久久婷婷天堂 | 久久精品一区二区三区四区 | 天天天操 | 精品久久久久久久 | 免费观看黄色一级大片 | 一区二区在线视频 | 国产精品免费观看 | 日韩不卡一区 | 精品久久久久久一区二区 | 高清av一区| 成年视频在线观看福利资源 | 国产aaa大片 | 午夜大片在线观看 | 国产欧美日韩综合精品一区二区 | 天天天综合网 | 久久久久久日产精品 | 亚洲免费视频在线观看 | 91国内视频在线观看 | 亚洲视频在线播放 | 一区二区三区四区在线 | 韩国成人精品a∨在线观看 国产伊人av | 九色在线| av成人毛片 | 亚洲一区精品在线 | 日韩久久精品一区二区 | 中文一区 | 久在线 | 日韩中文字幕a | 国产主播福利 | www.天天草 | 国产精品久久久久久久岛一牛影视 | 久久毛片 | 国产欧美精品区一区二区三区 | 成人免费一区二区三区视频网站 | 欧美日韩精品综合 | 91久久精品一区二区二区 | 国产在线视频xxx | 91久久国产| 黄网免费| 毛片一级片 | 能免费看的av| 欧美国产一区二区 | 一区免费在线观看 | 九九热在线观看 | 久久精品免费观看视频 | 欧美一区二区三区在线观看视频 | 久久精品小视频 | 亚洲欧美日韩系列 | 视频在线一区 | 在线视频亚洲 | 日本久久久久久久久 | 国产成在线观看免费视频 | 国产精品综合 | 亚洲免费视频一区 | 日韩在线字幕 | 国产人妖视频 | xvideos视频 | 亚洲一区免费视频 | 男人的天堂在线视频 | 亚洲自拍一区在线 | 国产一区二区精品丝袜 | 看片wwwwwwwwwww| 国产免费拔擦拔擦8x高清在线人 | 亚洲欧美视频 | 久久爱综合网 | 国内精品国产三级国产在线专 | 在线观看成人小视频 | 亚洲国产精品成人 | 四虎av在线| 精精国产xxxx视频在线 | 日韩欧美一区二区三区免费观看 | 欧美一a一片一级一片 | 久久精品美女 | 久久久国产视频 | 欧美精品一区在线发布 | 在线国产一区 | 一级毛片视频播放 | 亚洲一区二区三区四区在线观看 | 亚洲成人日韩 | 午夜电影福利 | 亚洲一区二区三区视频 | 欧美精品一区二区在线观看 | 福利网站在线观看 | 超级碰在线视频 | 国产精品一区二区不卡 | 欧美 亚洲 另类 激情 另类 | 久草毛片| 999精品视频 | 日韩亚洲一区二区 | 精品无人乱码一区二区三区的优势 | 亚洲午夜精品 | 精品精品久久 | 午夜久久久| 一区二区三区无码高清视频 | 欧美日韩一区二区在线 | 一区二区三区在线 | 欧 | 一区二区三区国产好的精 | 欧美日韩视频 | 天天拍天天干天天操 | 日日做夜夜爽毛片麻豆 | 国产精品久久一区二区三区 | 91玖玖 | 午夜精品一区二区三区在线播放 | 超碰高清 | 一区二区不卡 | 日韩免费 | 欧美一区二区三 | 成人小视频在线看 | 亚洲国产精品成人 | 日韩精品一区二区三区在线观看 | 亚洲精品成人 | 国产精品99久久久久久www | 国产在线一区观看 | 中文字幕在线免费看 | 国产欧美精品区一区二区三区 | 2019中文字幕视频 | 在线观看污片 | 四虎影视免费在线观看 | 亚洲一区在线视频 | 午夜精品久久久久久久星辰影院 | 99成人 | 天天干天天躁 | 97国产一区二区精品久久呦 | av大片在线观看 | 成人h动漫免费观看网站 | 一区二区欧美视频 | 最新中文字幕久久 | 日韩欧美中文在线 | 久久久99精品免费观看 | 久久2| 色www精品视频在线观看 | 亚洲a级| 亚洲午夜视频在线观看 | 国产男人的天堂 | 日韩a| 免费一区二区三区 | 成人精品视频免费 | 欧美日韩精品一区二区三区蜜桃 | 99国产精品视频免费观看一公开 | 午夜在线一区 | 欧美理论片在线 | www久 | 日韩不卡一区二区 | 国产精品免费看 | 久久久999精品视频 五月天婷婷在线视频 | 亚洲国产成人在线 | 日韩视频二区 | 国产日韩一区 | 一区二区三区四区在线 | 精品96久久久久久中文字幕无 | 亚洲成av人片在线观看无码 | 天堂久久一区 | 九九九久久久 | 婷婷国产精品 | 国产精品毛片久久久久久久 | 国产精品婷婷午夜在线观看 | 成人一区二区三区在线观看 | 久久久噜噜噜www成人网 | 91亚洲一区| 国产在线激情 | 久久久久久亚洲国产 | 欧美精品成人一区二区三区四区 | 国产精品久久久久久久久 | 综合色综合 | 91精品国产综合久久久亚洲 | 中文字幕亚洲一区 | 国产中文字幕在线观看 | 欧美黑人一级毛片 | 国产亚洲精品精品国产亚洲综合 | 国产一区二区精品丝袜 | 草久网| 精品视频二区三区 | 黄色片一区 | av免费网站在线观看 | 色综合视频| 久久伦理电影网 | 久久1区 | 成人在线视频免费观看 | 久久福利 | 人人草人人 | 久久九九精品视频 | 久久成人国产 | 色综合久久久久久久久久久 | 欧美久久久久久久久久久久久久 | 91久久久久久久久久久久久久久久 | 国产精品一区二区三区在线播放 | 黄瓜av| 免费视频爱爱太爽了 | 亚洲视频免费看 | 91精品久久久久久久久 | 91av官网| 99精品热视频 | 日本久久久久久久久久久久 | 日韩欧美综合在线 | 亚洲综合精品在线 | 成人免费视频网站在线观看 | 亚洲人成人一区二区在线观看 | 久久九 | 亚洲视频免费在线观看 | 久久一| 欧美簧片在线 | 国产精品久久九九 | 国产精品毛片在线 | 欧美精品一二三区 | 黄色免费av | 国产视频综合 | 久久精品综合 | 91精品国产91久久综合桃花 | 亚洲日本精品视频 | 久久男女 | 九色porny丨国产精品 | 99热.com | 亚洲欧美日韩在线一区二区 | 综合久久综合久久 | 99久久电影| 久久国产精品无码网站 | 一级黄色毛片 | 欧美自拍视频在线 | 中国91视频| 欧美精品在线观看 | 国产精品久久久久久久久久久久久 | 日韩成人在线播放 | 成人av播放 | 国产真实精品久久二三区 | 免费看的av | 色综合久久久久 | 欧美福利在线 | 日韩在线一区二区 | 九色视频网站 | h片在线免费观看 | 黄色一级片视频播放 | 一区二区三区自拍 | www亚洲成人| 九九热精 | 久久精品视频一区 | 国产精品美女www爽爽爽动态图 | 涩涩视频大全 | 91日日| 欧美精产国品一二三区 | 日本在线观看www | 一级毛片免费完整视频 | 毛片免费观看 | 亚洲毛片网站 | 亚洲综合大片69999 | 新91在线 | 国产98色在线 | 日韩 | 超碰免费在线观看 | 国产精品久久久久9999鸭 | 国产视频久久 | 欧美午夜一区二区三区免费大片 | 高清av在线 | 中文一区 | 日韩一区二 | 日操干| 日韩成人在线观看 | 成人免费视频网 | 91视频一区二区 | www.xxx在线观看| 国产精品毛片久久久久久久 | 欧美一区二区三区在线看 | av色伊人久久综合一区二区 | 欧美日韩福利 | 97国产一区二区精品久久呦 | 999国产在线观看 | 天堂一区二区三区在线 | 亚洲第一免费看片 | 成人免费视频网站在线看 | 99久久婷婷国产综合精品 | 丁香久久 | 日韩手机专区 | 天堂一区二区三区四区 | 五月婷婷色 | 国产精品欧美一区二区三区 | 久久美女 | 羞羞视频在线观看视频 | 日韩精品一区二区三区 | 欧美日韩一区二区电影 | 黄色一级片视频播放 | 中文成人无字幕乱码精品 | 国产精国产精品 | 羞羞的视频在线免费观看 | 中文在线a在线 | 色综合一区| 国产精品久久久久久久天堂 | 中文字幕视频在线 | 亚洲第一免费网站 | 成人午夜电影网 | 亚洲免费综合 | 成人性生交大片免费看中文带字幕 | 韩国电影久久影院 | 中文字幕av第一页 | 国产一区二区三区四区三区 | 91看片在线观看 | 欧美激情在线精品一区二区三区 | 欧美夜夜骑 | 一区二区三区国产视频 | 精品欧美黑人一区二区三区 | 国产在线中文字幕 | 欧美日韩在线一 | 插插插干干干 | 国产中文在线 | 青青草视频在线免费观看 | 一区二区三区在线播放视频 | 亚洲激情一区 | 国产一区二区精品丝袜 | www97影院 | 国产一级一级国产 | 久热av中文字幕 | 成人免费一区二区三区视频网站 | www.国产在线 | 日本成人小视频 | 国产精品亚洲一区二区三区 | 一区二区视频在线观看 | 久久久久一区二区 | 亚洲天堂久久 | 大陆一级毛片免费视频观看 | 人和拘一级毛片 | 成人精品视频在线观看 | 欧美日韩亚洲三区 | 七七婷婷婷婷精品国产 | 成人1区| 做a视频免费观看 | 久久免费黄色网址 | 成人精品视频免费在线观看 | 美女视频一区二区三区 | 国产欧美久久一区二区三区 | 日韩午夜免费 | 久久久久一区二区 | 欧美日韩一区二区在线观看 | 中文字幕精品三区 | 国产福利91精品一区二区 | 日韩视频国产 | 国产精品一区二区三区在线播放 | 国产a视频 | 欧美日韩在线一区二区 | 欧美二区三区 | 亚洲影视一区二区 | 天堂亚洲 | 久久久精品 | 国产精品1区2区3区 欧美 中文字幕 | 中文字幕高清 | 国产一区二区三区精品久久久 | 色黄网站 | 国产成人高清在线 | 亚洲一区中文字幕 | 91视频8mav | 蜜桃αv| 久久久久国产亚洲日本 | 久久福利电影 | 亚洲一区二区三区四区 | 91精品国产综合久久福利软件 | 欧美日韩中文字幕在线 | 狠狠做深爱婷婷综合一区 | 国产乱码精品一区二区三 | 亚洲网站免费 | 黄色精品网站 | a在线看| 国产高清精品一区二区三区 | 国产成人在线一区二区 | 黄色网免费看 | 国产视频一区二区在线 | 亚洲三区在线观看 | 国产成人精品一区二区三区视频 | 欧美日一区二区 | 色接久久 | 国产一区二区三区视频在线观看 | a∨色狠狠一区二区三区 | 亚洲一区二区在线 | avsex国产 | 成人理论片 | 日韩视频精品在线 | 日本一区二区视频 | 99精品热视频 | 亚洲第一黄 | 久久国产精品免费一区二区三区 | 成人免费一区二区三区视频网站 | 嫩草视频在线播放 | 欧美一区久久 | 嫩呦国产一区二区三区av | 欧美不卡视频一区发布 | 欧美日韩精品一区二区三区在线观看 | www.99日本精品片com | 久综合网 | 女人毛片a毛片久久人人 | 日韩欧美一区二区三区四区 | 欧美啪啪一区二区 | 国产欧美综合一区二区三区 | www.99精品| 老妇激情毛片免费 | 欧美激情一区二区 | 国产精品久久久久一区二区三区 | 大伊人久久 | 欧美成人中文字幕 | 天天干夜夜操 | 欧美日韩精品久久久 | 丝袜久久 | 日本成人中文字幕 | 91看片在线观看 | 亚洲第一页在线 | 成人黄色免费 | 午夜亚洲| 亚洲九九 | h视频网站在线 | 欧洲成人午夜免费大片 | 91精产国品一二三区在线观看 | 久色视频在线观看 | 亚洲精品9999 | 久久久影视 | 久久一视频 | 99久久综合| 欧美在线观看免费观看视频 | 亚洲国产精品99久久久久久久久 | 国产一区二区三区欧美 | 欧美不卡 | av大片在线观看 | 久久精品首页 | 久久人人爽人人爽人人片亚洲 | 久久精品欧美一区二区三区不卡 | 国产一区二区亚洲 | 成人黄色在线视频 | 激情久久av一区av二区av三区 | 精品国产伦一区二区三区观看说明 | 欧美日韩不卡合集视频 | 一级毛片观看 | 能在线观看的黄色网址 | 一区二区三区四区日韩 | 亚洲不卡视频 | 国产一区在线看 | 欧美精品久久久 | 久久久久久九九九九九九 | 久久不射网 | 久久久99久久久国产自输拍 | 日韩欧美精品一区 | 一区二区三区国产 | 美女久久 | 一区二区在线不卡 | 午夜欧美 | 久久久久久久国产精品视频 | 蜜桃臀一区二区三区 | 成人国产精品视频 | 欧美日韩中文字幕 | 国产一区二 | 91精品国产综合久久婷婷香蕉 | 一级毛片在线免费看 | 九九国产精品视频 | 免费欧美一级 | 亚洲一区中文字幕 | 久久精品网| 天堂国产 | 成人美女免费网站视频 | 日本久久久久久久久久 | 国产一区二区三区四区五区加勒比 | 欧美一级内谢 | 91av国产在线视频 | 国产精品一区一区 | 久在线观看 | 国产日韩欧美精品一区二区三区 | 久久精品视频一区 | 精品国精品国产自在久不卡 | 精品中文字幕在线观看 | 91亚洲国产成人久久精品网站 | 国产成人精品一区二 | 日本久久久久久 | 久久三区| www.91在线| 一区二区三区高清 | 亚洲lesbianxxxxhd 黄色av网站免费 | 亚洲成人一区 | 欧美一级黄色片免费看 | 国产www在线 | 亚洲免费网站 | 一区二区三区四区精品 | 伊人色综合久久久天天蜜桃 | 九九色综合 | 国产精品永久久久久久久久久 | 久久一| 自拍视频在线观看 | 嫩草影院在线观看91麻豆 | 国产精品美女www爽爽爽动态图 | 韩国精品| 成人av播放 | 国产精品人人做人人爽 | 国产亚洲精品久久久久久久久 | 欧美激情a∨在线视频播放 中文字幕网在线 | 高清一区二区 | 亚洲成人精品一区 | 国产一区亚洲 | 婷婷激情五月 | 99日韩 | 久久99精品久久久久蜜臀 | 农村妇女毛片精品久久久 | 中文字幕第33页 | 精品伊人久久 | 午夜电影网址 | 国产精品久久久久久久 | 99视频这里有精品 | 最近的中文字幕在线看视频 | 免费的一级黄色片 | 色精品| 毛片久久久 | 浴室洗澡偷拍一区二区 | 国产精品久久久久久久久免费桃花 | 欧美日韩成人在线观看 | 在线中文字幕av | 97精品国产 | av免费网站在线观看 | 日本a v在线播放 | 国产亚洲精品综合一区91555 | 日韩一区二区三区在线 | 国产精品18hdxxxⅹ在线 | 欧美激情一区二区 | 亚洲1区2区在线 | 日韩精品视频久久 | 99伊人 | 日本在线免费电影 | 久久一级 | av免费在线观看网站 | 男女视频一区二区 | 欧美日韩91 | 三级视频在线 | 黄色精品 | 欧美成人a| 最新中文字幕 | 亚洲精品电影网在线观看 | 中文字幕三区 | 久久一区| 91视频免费网站 | 91精品一区二区三区久久久久久 | 日韩欧美国产一区二区 | 日日爱视频 | 久久电影一区 | 欧美小电影| 色吊丝在线永久观看最新版本 | 亚洲国产精品18久久 | 精品久久久久久久久久久久久久久久久久 | 国产精品久久久久久久一区探花 | 久久成人av | 国产美女精品一区二区三区 | 国产91av视频在线观看 | 国产精品欧美一区二区三区不卡 | 久久久久久黄 | 欧美日韩一区二区三区 | 国产精品久久久久久一级毛片 | 国产毛片视频 | 日韩一级片 | 综合一区二区三区 | 超碰精品在线观看 | 国产精品亚洲第一区在线暖暖韩国 | 久久精品国产亚洲blacked | 中文字幕日韩av | 成人片在线播放 | 碰碰视频 | 欧美日韩二区三区 | 国产精品久久久久久久久久小说 | 国产精品久久久久久久美男 | 天堂久久一区 | 欧美一区二区三区在线观看视频 | xnxx 日本19| 亚洲一区视频在线 | 日韩免费| 精品96久久久久久中文字幕无 | 久久机热| 国产99精品视频 | 成人免费一区二区三区视频软件 | 日韩精品1区 | 国产超碰人人爽人人做人人爱 | 久热久爱| 欧美精产国品一二三区 | 欧美成人激情 | 国产欧美在线视频 | 亚洲欧美成人网 | 曰韩中文字幕 | 日韩在线www | 最新免费视频 |