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

從Linux源碼看Socket(TCP)的Accept

系統 Linux
筆者一直覺得如果能知道從應用到框架再到操作系統的每一處代碼,是一件Exciting的事情。今天筆者就從Linux源碼的角度看下Server端的Socket在進行Accept的時候到底做了哪些事情(基于Linux 3.10內核)。

[[404913]]

前言

筆者一直覺得如果能知道從應用到框架再到操作系統的每一處代碼,是一件Exciting的事情。今天筆者就從Linux源碼的角度看下Server端的Socket在進行Accept的時候到底做了哪些事情(基于Linux 3.10內核)。

一個最簡單的Server端例子

眾所周知,一個Server端Socket的建立,需要socket、bind、listen、accept四個步驟。

今天,筆者就聚焦于accept。

代碼如下:

  1. void start_server(){ 
  2.     // server fd 
  3.     int sockfd_server; 
  4.     // accept fd  
  5.     int sockfd; 
  6.     int call_err; 
  7.     struct sockaddr_in sock_addr; 
  8.      ...... 
  9.     call_err=bind(sockfd_server,(struct sockaddr*)(&sock_addr),sizeof(sock_addr)); 
  10.       ...... 
  11.     call_err=listen(sockfd_server,MAX_BACK_LOG); 
  12.      ...... 
  13.     while(1){ 
  14.         struct sockaddr_in* s_addr_client = mem_alloc(sizeof(struct sockaddr_in)); 
  15.               int client_length = sizeof(*s_addr_client); 
  16.          // 這邊就是我們今天的聚焦點accept 
  17.         sockfd = accept(sockfd_server,(struct sockaddr_ *)(s_addr_client),(socklen_t *)&(client_length)); 
  18.         if(sockfd == -1){ 
  19.             printf("Accept error!\n"); 
  20.             continue
  21.         } 
  22.         process_connection(sockfd,(struct sockaddr_in*)(&s_addr_client)); 
  23.     } 

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

accept系統調用

好了,我們直接進入accept系統調用吧。

  1. #include <sys/socket.h> 
  2. // 成功,返回代表新連接的描述符,錯誤返回-1,同時錯誤碼設置在errno 
  3. int accept(int sockfd,struct sockaddr* addr,socklen_t *addrlen); 
  4. // 注意,實際上Linux還有個accept擴展accept4: 
  5. // 額外添加的flags參數可以為新連接描述符設置O_NONBLOCK|O_CLOEXEC(執行exec后關閉)這兩個標記 
  6. int accept4(int sockfd, struct sockaddr *addr,socklen_t *addrlen, int flags); 

注意,這邊的accept調用是被glibc用SYSCALL_CANCEL包了一層,其將返回值修正為只有0和-1這兩個選擇,同時將錯誤碼的絕對值設置在errno內。由于glibc對于系統調用的封裝過于復雜,就不在這里細講了。如果要尋找具體的邏輯,用

  1. // 注意accept和(之間要有空格,不然搜索不到 
  2. accept (int 

在整個glibc代碼中搜索即可。

理解accept的關鍵點是,它會創建一個新的Socket,這個新的Socket來與對端運行connect()的對等Socket進行連接,如下圖所示:

接下來,我們就進入Linux內核源碼棧吧

  1. accept 
  2.  |->SYSCALL_CANCEL(accept......) 
  3.    ...... 
  4.     |->SYSCALL_DEFINE3(accept 
  5.      // 最終調用了sys_accept4 
  6.      |->sys_accept4     
  7.       /* 檢測監聽描述符fd是否存在,不存在,返回-BADF 
  8.       |->sockfd_lookup_light 
  9.        |->sock_alloc /*新建Socket*/ 
  10.          |->get_unused_fd_flags /*獲取一個未用的fd*/ 
  11.           |->sock->ops->accept(sock...) /*調用核心*/ 

上述流程如下面所示:

由此得知,核心函數在sock->ops->accept上,由于我們關注的是TCP,那么其實現即為

inet_stream_ops->accept也即inet_accept,再次跟蹤下調用棧:

  1. sock->ops->accept 
  2.         |->inet_steam_ops->accept(inet_accept) 
  3.             /* 由一開始的sock圖可知sk_prot=tcp_prot 
  4.             |->sk1->sk_prot->accept 
  5.                 |->inet_csk_accept 

好了,穿過了層層包裝,終于到具體邏輯部分了。上代碼:

  1. struct sock *inet_csk_accept(struct sock *sk, int flags, int *err) 
  2.     struct inet_connection_sock *icsk = inet_csk(sk); 
  3.     /* 獲取當前監聽sock的accept隊列*/ 
  4.     struct request_sock_queue *queue = &icsk->icsk_accept_queue; 
  5.     ...... 
  6.     /* 如果監聽Socket狀態非TCP_LISEN,返回錯誤 */ 
  7.     if (sk->sk_state != TCP_LISTEN) 
  8.         goto out_err 
  9.     /* 如果當前accept隊列為空 */ 
  10.     if (reqsk_queue_empty(queue)) { 
  11.         long timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); 
  12.         /* 如果是非阻塞模式,直接返回-EAGAIN */ 
  13.         error = -EAGAIN; 
  14.         if (!timeo) 
  15.             goto out_err; 
  16.         /* 如果是阻塞模式,切超時時間不為0,則等待新連接進入隊列 */ 
  17.         error = inet_csk_wait_for_connect(sk, timeo); 
  18.         if (error) 
  19.             goto out_err; 
  20.     }     
  21.     /* 到這里accept queue不為空,從queue中獲取一個連接 */ 
  22.     req = reqsk_queue_remove(queue); 
  23.     newsk = req->sk; 
  24.     /* fastopen 判斷邏輯 */ 
  25.     ...... 
  26.     /* 返回新的sock,也就是accept派生出的和client端對等的那個sock */ 
  27.     return newsk 

上面流程如下圖所示:

我們關注下inet_csk_wait_for_connect,即accept的超時邏輯:

  1. static int inet_csk_wait_for_connect(struct sock *sk, long timeo) 
  2.     for (;;) { 
  3.         /* 通過增加EXCLUSIVE標志使得在BIO中調用accept中不會產生驚群效應 */ 
  4.         prepare_to_wait_exclusive(sk_sleep(sk), &wait, 
  5.                       TASK_INTERRUPTIBLE); 
  6.         if (reqsk_queue_empty(&icsk->icsk_accept_queue)) 
  7.             timeo = schedule_timeout(timeo); 
  8.         ....... 
  9.         err = -EAGAIN; 
  10.         /* 這邊accept超時,返回的是-EAGAIN */ 
  11.         if (!timeo) 
  12.             break; 
  13.     } 
  14.     finish_wait(sk_sleep(sk), &wait); 
  15.     return err;                         

通過exclusice標志使得我們在BIO中調用accept(不用epoll/select等)時,不會驚群。

由代碼得知在accept超時時候返回(errno)的是EAGAIN而不是ETIMEOUT。

EPOLL(在accept時候)”驚群”

由于在EPOLL LT(水平觸發模式下),一次accept事件,可能會喚醒多個等待在此listen fd上的(epoll_wait)線程,而最終可能只有一個能成功的獲取到新連接(newfd),其它的都是-EGAIN,也即有一些不必要的線程被喚醒了,做了無用功。關于epoll的原理可以看下筆者之前的博客《從linux源碼看epoll》:

  1. https://my.oschina.net/alchemystar/blog/3008840 

在這里描述一下原因,核心就是epoll_wait在水平觸發下會在這個fd仍有未處理事件的時候重新塞回ready_list并在此喚醒另一個等待在epoll上的進程!

所以我們看到,雖然epoll_wait的時候給自己加了exclusive不會在有中斷事件觸發的時候驚群,但是水平觸發這個機制確也造成了類似”驚群”的現象!

由上面的討論看出,fd1仍舊有事件是造成額外喚醒的原因,這個也很好理解,畢竟這個事件是另一個線程處理的,那個線程估摸著還沒來得及運行,自然也來不及處理!

我們看下在accept事件中,怎么判定這個fd(listen sock的fd)還有未處理事件的。

  1. // 通過f_op->poll判定 
  2. epi->ffd.file->f_op->poll 
  3.     |->tcp_poll 
  4.         /* 如果sock是listen狀態,則由下面函數負責 */ 
  5.         |->inet_csk_listen_poll 
  6.  
  7. /* 通過accept_queue隊列是否為空判斷監聽sock是否有未處理事件*/ 
  8. static inline unsigned int inet_csk_listen_poll(const struct sock *sk) 
  9.     return !reqsk_queue_empty(&inet_csk(sk)->icsk_accept_queue) ? 
  10.             (POLLIN | POLLRDNORM) : 0; 

那么我們就可以根據邏輯畫出時序圖了。

其實不僅僅是accept,要是多線程epoll_wait同一個fd的read/write也是同樣的驚群,只不過應該不會有人這么做吧。

正是由于這種”驚群”效應的存在,所以我們經常采用單開一個線程去專門accept的形式,例如reactor模式即是如此。但是,如果一瞬間有大量連接涌進來,單線程處理還是有瓶頸的,無法充分利用多核的優勢,在海量短連接場景下就顯得稍顯無力了。這也是有解決方式的!

采用so_reuseport解決驚群

前面講過,由于我們是在同一個fd上多線程去運行epoll_wait才會有此問題,那么其實我們多開幾個fd就解決了。首先想到的方案是,多開幾個端口號,人為分開監聽fd,但這個明顯帶來了額外的復雜性。為了解決這一問題,Linux提供了so_reuseport這個參數,其原理如下圖所示:

多個fd監聽同一個端口號,在內核中做負載均衡(Sharding),將accept的任務分散到不同的線程的不同Socket上(Sharding),毫無疑問可以利用多核能力,大幅提升連接成功后的Socket分發能力。那么我們的線程模型也可以改為用多線程accept了,如下圖所示:

accept_queue全連接隊列

在前面的討論中,accept_queue是accept系統調用中的核心成員,那么這個accept_queue是怎么被填充(add)的呢?如下圖所示:

圖中展示了client和server在三次交互中,accept_queue(全連接隊列)和syn_table半連接hash表的變遷情況。在accept_queue被填充后,由用戶線程通過accept系統調用從隊列中獲取對應的fd

值得注意的是,當用戶線程來不及處理的時候,內核會drop掉三次握手成功的連接,導致一些詭異的現象,具體可以看筆者另一篇博客《解Bug之路-dubbo流量上線時的非平滑問題》:

  1. https://my.oschina.net/alchemystar/blog/3098219 

另外,對于accept_queue具體的填充機制以及源碼,可以見筆者另一篇博客的詳細分析

《從Linux源碼看Socket(TCP)的listen及連接隊列》:

  1. https://my.oschina.net/alchemystar/blog/4672630 

總結

Linux內核源碼博大精深,每次扎進去探索時候都會廢寢忘食,其間可以看到各種優雅的設計,在此分享出來,希望對讀者有所幫助。

本文轉載自微信公眾號「解Bug之路」,可以通過以下二維碼關注。轉載本文請聯系解Bug之路公眾號。

 

責任編輯:武曉燕 來源: 解Bug之路
相關推薦

2020-10-10 07:00:16

LinuxSocketTCP

2020-10-14 14:31:37

LinuxTCP連接

2021-07-15 14:27:47

LinuxSocketClose

2021-07-14 09:48:15

Linux源碼Epoll

2025-11-05 03:00:00

Linux內核TCP粘包

2010-01-21 11:19:44

TCP Socketlinux

2019-11-17 22:11:11

TCPSYN隊列Accept隊列

2021-03-10 08:20:54

設計模式OkHttp

2017-04-05 20:00:32

ChromeObjectJS代碼

2015-05-28 10:34:16

TCPsocket

2018-02-02 15:48:47

ChromeDNS解析

2012-03-19 11:41:30

JavaSocket

2009-08-28 14:15:19

SocketVisual C#.N

2017-02-09 15:15:54

Chrome瀏覽器

2020-09-23 12:32:18

網絡IOMySQL

2010-06-18 09:51:51

Linux Accep

2022-03-08 11:29:06

Linux進程系統

2011-01-18 13:42:18

Linuxsocket性能

2021-05-06 14:46:18

LinuxIcmpudp

2020-09-07 14:30:37

JUC源碼CAS
點贊
收藏

51CTO技術棧公眾號

亚洲视频综合网| 亚洲国产精品人人做人人爽| 日本欧美一二三区| 最新日韩免费视频| 国内不卡的一区二区三区中文字幕| |精品福利一区二区三区| 91精品视频播放| 国产情侣自拍av| 久久理论电影| 亚洲电影免费观看高清完整版在线| 无码人妻丰满熟妇区五十路百度| 老司机在线看片网av| 国产精品1024久久| 国产精品91视频| 国产一级特黄aaa大片| 欧美日韩中文一区二区| 亚洲成人中文字幕| 亚洲欧美日本一区二区| 日韩伦理福利| 一区二区久久久久| 天堂av一区二区| 日韩在线观看视频一区二区三区| 久久99国产精品免费| 91高潮精品免费porn| 久久午夜精品视频| 亚洲精品一级二级三级| 欧美tickling网站挠脚心| 黑人粗进入欧美aaaaa| 麻豆理论在线观看| 亚洲人成亚洲人成在线观看图片| 永久免费看av| 调教驯服丰满美艳麻麻在线视频| 香蕉免费一区二区三区在线观看| 色哟哟日韩精品| 成人免费毛片在线观看| 精产国品自在线www| 久久久久久**毛片大全| 国产精品乱码视频| 国产激情无套内精对白视频| 美女久久久精品| 热99在线视频| 国产精品suv一区二区三区| 中文字幕亚洲精品乱码| 日韩在线激情视频| 你懂的视频在线一区二区| 国产精品爽爽久久| 久久精品国产99久久6| 国产精品大陆在线观看| 天堂网中文字幕| 亚洲制服少妇| 欧美性受xxxx白人性爽| 国产成人无码精品亚洲| 亚洲黄色一区| 91av在线精品| 日韩在线视频不卡| 丝袜亚洲精品中文字幕一区| 日本在线观看天堂男亚洲 | 日韩av电影免费播放| 亚洲精品一区二区三区四区| 国产乱人伦偷精品视频不卡| 亚洲aⅴ日韩av电影在线观看| 91精品国产色综合久久不8| 久久精品国产精品青草| 成人情趣片在线观看免费| 国产一区二区三区视频免费观看| 麻豆久久久久久| 91精品国产自产在线| 国产免费一区二区三区最新不卡| 久久婷婷蜜乳一本欲蜜臀| 一道本无吗dⅴd在线播放一区| av黄色在线免费观看| 日韩中文在线电影| 久久天天躁狠狠躁老女人| 91嫩草丨国产丨精品| 欧美特黄视频| 国产91精品不卡视频| 无码人妻丰满熟妇奶水区码| 美女mm1313爽爽久久久蜜臀| 99久久综合狠狠综合久久止| 天天操天天干天天| 国产午夜亚洲精品午夜鲁丝片| 亚洲视频导航| 青青草原国产在线| 天天色 色综合| 黄色三级视频在线| 欧美a级大片在线| 日韩经典第一页| 亚洲欧美日韩第一页| 欧美国产精品| 日韩av免费在线播放| 一级做a爰片久久毛片16| 国产不卡免费视频| 欧美一区免费视频| а√中文在线8| 精品女厕一区二区三区| 亚洲免费av一区| 国产精品视频3p| 国产亚洲精品日韩| 国产一级视频在线播放| 三级亚洲高清视频| 91久久精品国产91久久| 污污视频在线免费看| 国产精品久久久久一区| 浮妇高潮喷白浆视频| 看片一区二区| 精品一区电影国产| 久久国产在线视频| 麻豆传媒一区二区三区| 精品国产一区二区三| 美女免费久久| 日本高清无吗v一区| 男人添女人荫蒂国产| 欧美一区三区| 2020国产精品视频| 性一交一乱一精一晶| 欧美激情一区二区| www黄色日本| 香蕉大人久久国产成人av| 中文字幕日韩精品有码视频| 国产午夜激情视频| 国产精品一区二区x88av| 视频一区二区在线观看| 这里有精品可以观看| 欧美xxxx在线观看| 美国一级片在线观看| 日韩综合一区二区| 免费在线观看91| 俺来俺也去www色在线观看| 欧美日韩成人综合在线一区二区| 国产免费成人在线| 日韩欧美另类中文字幕| 日韩日本欧美亚洲| 青青艹在线观看| 久久精品一区二区三区av| 妺妺窝人体色777777| 亚洲1区在线观看| 久久婷婷国产麻豆91天堂| 中文字字幕在线中文乱码| 久久久久久久久久久电影| 国产视频九色蝌蚪| 久久99偷拍| 97精品视频在线播放| 高h调教冰块play男男双性文| 亚洲女与黑人做爰| 久久精品一二三四| 欧美fxxxxxx另类| 91成人伦理在线电影| av免费在线观看网站| 欧美一卡二卡在线观看| 中文字幕av播放| 国产成人精品www牛牛影视| 三年中文高清在线观看第6集 | 国产精品免费视频xxxx| eeuss影院www在线观看| 欧美三级电影在线观看| 婷婷综合在线视频| 极品少妇xxxx精品少妇| 日韩人妻精品一区二区三区| 精品国产乱码一区二区三区| 欧美福利视频在线| 欧美一级片免费| 欧美午夜片欧美片在线观看| 中文字幕在线看高清电影| 日韩高清国产一区在线| 伊人情人网综合| 精品久久久久久久久久岛国gif| 九九九久久久久久| 色欲av永久无码精品无码蜜桃| 五月天久久比比资源色| www.色多多| 免费成人小视频| 亚洲自拍偷拍一区二区三区| 91久久精品无嫩草影院| 91av在线免费观看| 3p视频在线观看| 欧美一区二区精美| 亚洲另类欧美日韩| 国产精品久久午夜夜伦鲁鲁| 亚洲精品一二三四| 99精品国产99久久久久久福利| 欧美日韩一区在线视频| 日韩成人在线一区| 久久久久久网址| 国产黄色免费在线观看| 91精品国产综合久久福利| 日韩免费一级片| 国产精品欧美综合在线| 成人欧美精品一区二区| 老鸭窝毛片一区二区三区| 在线视频不卡一区二区| 91综合久久爱com| 国产999在线观看| 色yeye免费人成网站在线观看| 亚洲韩国日本中文字幕| 一级黄色片在线| 婷婷亚洲久悠悠色悠在线播放| 免费看一级黄色| www.欧美日韩国产在线| 亚洲综合婷婷久久| 中文亚洲字幕| 伊人久久在线观看| 不卡中文一二三区| 精品欧美国产| 日韩三级av高清片| 国产成人在线一区| 爱情岛亚洲播放路线| 久久五月天综合| 国产一区电影| 亚洲第一黄色网| 国产毛片一区二区三区va在线| 欧美日韩一区二区在线| 欧美日韩在线观看成人| 欧美国产亚洲另类动漫| 国产伦精品一区二区三区妓女 | 天天综合天天做天天综合| jizzjizz日本少妇| 久久久电影一区二区三区| 国内自拍偷拍视频| 国产一区二区三区黄视频| 日本999视频| 免费在线观看成人av| 丰满的少妇愉情hd高清果冻传媒 | 色哟哟在线观看一区二区三区| 九九热只有精品| 亚洲视频1区2区| 亚洲不卡的av| 国产农村妇女毛片精品久久麻豆 | 国产美女免费看| 欧美视频在线一区二区三区| 国产精品视频一区在线观看| 亚洲线精品一区二区三区| www欧美com| 亚洲人成人一区二区在线观看| 日本综合在线观看| 91精品久久久久久久蜜月| 精品中文字幕一区| 国产亚洲精品美女久久| 成人黄色在线免费观看| 欧美日韩中出| 91成人免费在线观看| 91麻豆精品国产91久久久更新资源速度超快| 人人爽久久涩噜噜噜网站| 成人国产电影在线观看| 欧美激情视频一区| 美女尤物在线视频| 久久久免费av| 日本片在线看| 97热精品视频官网| 欧美aaaaa性bbbbb小妇| 国产91精品青草社区| 天堂中文av在线资源库| 欧美在线一级va免费观看| 在线观看爽视频| 国产v综合v亚洲欧美久久| 吞精囗交69激情欧美| 国产精品对白刺激| 成人黄色免费观看| 国产欧美一区二区三区四区| 久久女人天堂| 亚洲精品欧美极品| 国产精品久av福利在线观看| 久草精品电影| 教室别恋欧美无删减版| 亚洲欧洲一二三| 欧美成熟视频| 少妇高潮喷水在线观看| 久久影院亚洲| 天天综合天天添夜夜添狠狠添| 国产精品一区免费视频| www.四虎在线| 久久久www免费人成精品| 欧美美女性生活视频| 亚洲综合另类小说| 国产精品一区二区三区四| 91成人看片片| 国产乱码精品一区二三区蜜臂| 欧美不卡一二三| 国产视频精选在线| 久久福利视频导航| 伊人网在线播放| 成人黄色av网站| 久草在线综合| 一区二区在线观看网站| 1024日韩| av污在线观看| 成人免费观看男女羞羞视频| 国产手机在线观看| 一区二区成人在线观看| 国语对白永久免费| 欧美一区二区三区四区在线观看| 天天干天天色天天| 久久精品国产一区二区三区| 超碰高清在线| 成人女保姆的销魂服务| 亚洲v天堂v手机在线| 午夜啪啪福利视频| 免费日韩av| 少妇精品无码一区二区| 中文字幕乱码一区二区免费| 欧美日韩在线视频免费播放| 色综合久久中文字幕| 亚洲av无码乱码在线观看性色| 亚洲人成在线观| 欧美女同一区| 成人精品视频99在线观看免费| 国产精品巨作av| 亚洲第一综合网站| 日韩电影免费在线看| 亚洲图片综合网| 亚洲精品成人悠悠色影视| 五月婷婷激情五月| 亚洲精品ady| 青春草免费在线视频| 国产精品久久久久久久久久久久久久 | 日本综合久久| 国产精品网址在线| 亚洲美女久久| 日韩五码在线观看| 国产激情视频一区二区三区欧美| av鲁丝一区鲁丝二区鲁丝三区| 国产精品成人免费精品自在线观看| 久久精品国产成人av| 精品1区2区在线观看| 成年人网站在线| 成人免费视频网| 91久久国产| 91丨九色丨蝌蚪| 欧美高清在线一区二区| 国产成人精品777777| 日韩av影视在线| 98色花堂精品视频在线观看| 99久久99| 欧美日本一区二区视频在线观看 | 99精品偷自拍| 国产一级大片在线观看| 日韩欧美一区二区不卡| 国产黄色在线免费观看| 成人性生交大片免费观看嘿嘿视频| 国产一区国产二区国产三区| 国产成人无码一二三区视频| 99精品国产91久久久久久| 日韩美女黄色片| 亚洲成色999久久网站| 超碰97国产精品人人cao| 成人在线看片| 一区二区亚洲| 午夜视频在线观看国产| 亚洲午夜久久久久久久久久久| www.99视频| 久久久视频免费观看| 精品国产一区二区三区成人影院 | 婷婷伊人五月天| 欧美一区二区三区白人| 中文字幕中文字幕在线中高清免费版 | 啪啪一区二区三区| 欧美日本高清视频在线观看| 亚洲精品传媒| 亚洲影院污污.| 影音先锋日韩资源| 精品人妻一区二区三区香蕉 | 日韩资源在线观看| 亚洲精品tv| 国产精品videossex国产高清| 国产 日韩 欧美大片| 日韩和一区二区| 国产亚洲精品久久| 大胆国模一区二区三区| 妞干网在线播放| 2019国产精品| 亚洲一级黄色大片| 欧美激情欧美狂野欧美精品| 日韩影视高清在线观看| 91视频免费版污| 国产精品国产馆在线真实露脸 | 久久综合色鬼综合色| 国产男人搡女人免费视频| 久久久久www| 久久久久影视| 少妇一级淫免费播放| 一区二区久久久久| 国产午夜精品一区理论片| 成人性生交大片免费观看嘿嘿视频| 在线精品亚洲| 2019男人天堂| 精品国产乱码久久久久久闺蜜| 亚洲欧洲高清| av电影一区二区三区| 91免费在线看| 国产女18毛片多18精品| 欧美在线视频网站| 91成人看片| 国产真实乱人偷精品人妻| 91精品国产入口| 日韩免费va| 大西瓜av在线| 国产精品家庭影院| 污视频软件在线观看| 91久久久久久久久久久| 欧美亚洲自偷自偷| 国产一级av毛片|