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

深入解析常見三次握手異常

網絡 通信技術
在正常情況下一次 TCP 連接耗時也就大約是一次 RTT 多一點。但事情不一定總是這么美好,總會有意外發生。在某些情況下,可能會導致連接耗時上漲、CPU 處理開銷增加、甚至是超時失敗。

[[416112]]

本文轉載自微信公眾號「開發內功修煉」,作者張彥飛allen。轉載本文請聯系開發內功修煉公眾號。

大家好,我是飛哥!

在后端接口性能指標中一類重要的指標就是接口耗時。具體包括平均響應時間 TP90、TP99 耗時值等。這些值越低越好,一般來說是幾毫秒,或者是幾十毫秒。如果響應時間一旦過長,比如超過了 1 秒,在用戶側就能感覺到非常明顯的卡頓。如果長此以往,用戶可能就直接用腳投票,卸載我們的 App 了。

在正常情況下一次 TCP 連接耗時也就大約是一次 RTT 多一點。但事情不一定總是這么美好,總會有意外發生。在某些情況下,可能會導致連接耗時上漲、CPU 處理開銷增加、甚至是超時失敗。

今天飛哥就來說一下我在線上遇到過的那些 TCP 握手相關的各種異常情況。

一、客戶端 connect 異常

端口號和 CPU 消耗這二者聽起來感覺沒啥太大聯系。但我卻遭遇過因為端口號不足導致 CPU 消耗大幅上漲的情況。來聽飛哥分析分析為啥會出現這種問題!

客戶端在發起 connect 系統調用的時候,主要工作就是端口選擇(參見TCP連接中客戶端的端口號是如何確定的?)。

在選擇的過程中,有個大循環,從 ip_local_port_range 的一個隨機位置開始把這個范圍遍歷一遍,找到可用端口則退出循環。如果端口很充足,那么循環只需要執行少數幾次就可以退出。但假設說端口消耗掉很多已經不充足,或者干脆就沒有可用的了。那么這個循環就得執行很多遍。我們來看下詳細的代碼。

  1. //file:net/ipv4/inet_hashtables.c 
  2. int __inet_hash_connect(...) 
  3.  inet_get_local_port_range(&low, &high); 
  4.  remaining = (high - low) + 1; 
  5.  
  6.  for (i = 1; i <= remaining; i++) { 
  7.   // 其中 offset 是一個隨機數 
  8.   port = low + (i + offset) % remaining; 
  9.   head = &hinfo->bhash[inet_bhashfn(net, port, 
  10.      hinfo->bhash_size)]; 
  11.  
  12.   //加鎖 
  13.   spin_lock(&head->lock);  
  14.  
  15.   //一大段的選擇端口邏輯 
  16.   //...... 
  17.   //選擇成功就 goto ok 
  18.   //不成功就 goto next_port 
  19.  
  20.   next_port: 
  21.    //解鎖 
  22.    spin_unlock(&head->lock);  
  23.  } 

在每次的循環內部需要等待鎖,以及在哈希表中執行多次的搜索。注意這里的是自旋鎖,是一種非阻塞的鎖,如果資源被占用,進程并不會被掛起,而是會占用 CPU 去不斷嘗試獲取鎖。

但假設端口范圍 ip_local_port_range 配置的是 10000 - 30000, 而且已經用盡了。那么每次當發起連接的時候都需要把循環執行兩萬遍才退出。這時會涉及大量的 HASH 查找以及自旋鎖等待開銷,系統態 CPU 將會出現大幅度的上漲。

這是線上截取到的正常時的 connect 系統調用耗時,是 22 us(微秒)。

這個是我們一臺服務器在端口不足情況下 connect 開銷,是 2581 us(微秒)。

從上兩張圖中可以看出,異常情況下的 connect 耗時是正常情況下的 1000 多倍。雖然換算成毫秒只有 2 ms 多一點,但是要知道這消耗的全是 CPU 時間。

二、第一次握手丟包

服務器在響應來自客戶端的第一次握手請求的時候,會判斷一下半連接隊列和全連接隊列是否溢出。如果發生溢出,可能會直接將握手包丟棄,而不會反饋給客戶端。接下來我們分別來詳細看一下。

2.1 半連接隊列滿

我們來看下半連接隊列在何種情況下會導致丟包。

  1. //file: net/ipv4/tcp_ipv4.c 
  2. int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb) 
  3.  //看看半連接隊列是否滿了 
  4.  if (inet_csk_reqsk_queue_is_full(sk) && !isn) { 
  5.   want_cookie = tcp_syn_flood_action(sk, skb, "TCP"); 
  6.   if (!want_cookie) 
  7.    goto drop
  8.  } 
  9.  
  10.  //看看全連接隊列是否滿了 
  11.  ... 
  12. drop
  13.  NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); 
  14.  return 0;  

在上面代碼中,inet_csk_reqsk_queue_is_full 如果返回 true 就表示半連接隊列滿了,另外 tcp_syn_flood_action 判斷是否打開了內核參數 tcp_syncookies,如果未打開則返回 false。

  1. //file: net/ipv4/tcp_ipv4.c 
  2. bool tcp_syn_flood_action(...) 
  3.  bool want_cookie = false
  4.  
  5.  if (sysctl_tcp_syncookies) { 
  6.   want_cookie = true
  7.  }  
  8.  return want_cookie; 

也就是說,如果半連接隊列滿了,而且 ipv4.tcp_syncookies 參數設置為 0,那么來自客戶端的握手包將 goto drop,意思就是直接丟棄!

SYN Flood 攻擊就是通過消耗光服務器上的半連接隊列來使得正常的用戶連接請求無法被響應。不過在現在的 Linux 內核里只要打開 tcp_syncookies,半連接隊列滿了仍然也還可以保證正常握手的進行。

2.2 全連接隊列滿

我們注意到當半連接隊列判斷通過以后,緊接著還有全連接隊列滿的相關判斷。如果這個條件成立,服務器對握手包的處理還是會 goto drop,丟棄了之。我們來看下源碼:

  1. //file: net/ipv4/tcp_ipv4.c 
  2. int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb) 
  3.  //看看半連接隊列是否滿了 
  4.  ... 
  5.  
  6.  //看看全連接隊列是否滿了 
  7.  if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1) { 
  8.   NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS); 
  9.   goto drop
  10.  } 
  11.  ... 
  12. drop
  13.  NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENDROPS); 
  14.  return 0;  

sk_acceptq_is_full 來判斷全連接隊列是否滿了,inet_csk_reqsk_queue_young 判斷的是有沒有 young_ack(未處理完的半連接請求)。

這段代碼可以看到,假如全連接隊列滿的情況下,且同時有 young_ack ,那么內核同樣直接丟掉該 SYN 握手包。

2.3 客戶端發起重試

假設說服務器側發生了全/半連接隊列溢出而導致的丟包。那么從轉換到客戶端視角來看就是 SYN 包沒有任何響應。

好在客戶端在發出握手包的時候,開啟了一個重傳定時器。如果收不到預期的 synack 的話,超時重傳的邏輯就會開始執行。不過重傳計時器的時間單位都是以秒來計算的,這意味著,如果有握手重傳發生,即使第一次重傳就能成功,那接口最快響應也是 1 s 以后的事情了。這對接口耗時影響非常的大。

我們來詳細看下重傳相關的邏輯。服務器在 connect 發出 syn 后就開啟了重傳定時器。

  1. //file:net/ipv4/tcp_output.c 
  2. int tcp_connect(struct sock *sk) 
  3.  ... 
  4.  //實際發出 syn 
  5.  err = tp->fastopen_req ? tcp_send_syn_data(sk, buff) : 
  6.        tcp_transmit_skb(sk, buff, 1, sk->sk_allocation); 
  7.  
  8.  //啟動重傳定時器 
  9.  inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, 
  10.       inet_csk(sk)->icsk_rto, TCP_RTO_MAX); 

在定時器設置中傳入的 inet_csk(sk)->icsk_rto 是超時時間,該值初始的時候被設置為了 1 秒。

  1. //file:ipv4/tcp_output.c 
  2. void tcp_connect_init(struct sock *sk) 
  3.  //初始化為 TCP_TIMEOUT_INIT  
  4.  inet_csk(sk)->icsk_rto = TCP_TIMEOUT_INIT; 
  5.  ... 
  6.  
  7. //file: include/net/tcp.h 
  8. #define TCP_TIMEOUT_INIT ((unsigned)(1*HZ))  

在一些老版本的內核,比如 2.6 里,重傳定時器的初始值是 3 秒。

  1. //內核版本:2.6.32 
  2. //file: include/net/tcp.h 
  3. #define TCP_TIMEOUT_INIT ((unsigned)(3*HZ)) 

如果能正常接收到服務器響應的 synack,那么客戶端的這個定時器會清除。這段邏輯在 tcp_rearm_rto 里。(tcp_rcv_state_process -> tcp_rcv_synsent_state_process -> tcp_ack -> tcp_clean_rtx_queue -> tcp_rearm_rto)

  1. //file:net/ipv4/tcp_input.c 
  2. void tcp_rearm_rto(struct sock *sk) 
  3.  inet_csk_clear_xmit_timer(sk, ICSK_TIME_RETRANS); 

如果服務器端發生了丟包,那么定時器到時后會進行回調函數 tcp_write_timer 中進行重傳。

其實不只是握手,連接狀態的超時重傳也是在這里完成的。不過這里我們只討論握手重傳的情況。

  1. //file: net/ipv4/tcp_timer.c 
  2. static void tcp_write_timer(unsigned long data) 
  3.  tcp_write_timer_handler(sk); 
  4.  ... 
  5.  
  6. void tcp_write_timer_handler(struct sock *sk) 
  7.  //取出定時器類型。 
  8.  event = icsk->icsk_pending; 
  9.  
  10.  switch (event) { 
  11.  case ICSK_TIME_RETRANS: 
  12.   icsk->icsk_pending = 0; 
  13.   tcp_retransmit_timer(sk); 
  14.   break; 
  15.  ...... 
  16.  } 

tcp_retransmit_timer 是重傳的主要函數。在這里完成重傳,以及下一次定時器到期時間的設置。

  1. //file: net/ipv4/tcp_timer.c 
  2. void tcp_retransmit_timer(struct sock *sk) 
  3.  ... 
  4.  
  5.  //超過了重傳次數則退出 
  6.  if (tcp_write_timeout(sk)) 
  7.   goto out
  8.  
  9.  //重傳 
  10.  if (tcp_retransmit_skb(sk, tcp_write_queue_head(sk)) > 0) { 
  11.   //重傳失敗 
  12.   ...... 
  13.  } 
  14.  
  15. //退出前重新設置下一次超時時間 
  16. out_reset_timer: 
  17.  //計算超時時間 
  18.  if (sk->sk_state == TCP_ESTABLISHED ){ 
  19.   ...... 
  20.  } else { 
  21.   icsk->icsk_rto = min(icsk->icsk_rto << 1, TCP_RTO_MAX); 
  22.  } 
  23.  
  24.  //設置 
  25.  inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, icsk->icsk_rto, TCP_RTO_MAX);  

tcp_write_timeout 是判斷是否重試過多,如果是則退出重試邏輯。

tcp_write_timeout 的判斷邏輯其實也有點小復雜。對于 SYN 握手包主要是判斷依據是 net.ipv4.tcp_syn_retries,但其實并不是簡單對比次數,而是轉化成了時間進行對比。所以如果你在線上看到實際重傳次數和對應內核參數不一致也不用太奇怪。

接著在 tcp_retransmit_timer 重發了發送隊列里的頭元素。而且還設置了下一次超時的時間,為前一次的兩倍(右移操作相當于乘2)。

2.4 實際抓包結果

我們來看一個因為服務器端響應第一次握手丟包的握手過程抓包截圖。

通過該圖可以看到,客戶端在 1 s 以后進行了第一次握手重試。重試仍然沒有響應,那么接下來依次又分別在 3 s、7 s 15 s,31 s,63 s 等時間共重試了 6 次(我的 tcp_syn_retries 當時設置是 6)。

假如我們服務器上在第一次握手的時候出現了半/全連接隊列溢出導致的丟包,那么我們的接口響應時間將至少是 1 s 以上(在某些老版本的內核上,SYN 第一次的重試就需要等 3 秒),如果連續兩三次握手都失敗,那 7,8 秒就出去了。你想想這對用戶是不是影響很大。

三、第三次握手丟包

客戶端在收到服務器的 synack 響應的時候,就認為連接建立成功了,然后會將自己的連接狀態設置為 ESTABLISHED,發出第三次握手請求。但服務器在第三次握手的時候,還有可能會有意外發生。

  1. //file: net/ipv4/tcp_ipv4.c 
  2. struct sock *tcp_v4_syn_recv_sock(struct sock *sk, ...) 
  3. {     
  4.     //判斷接收隊列是不是滿了 
  5.     if (sk_acceptq_is_full(sk)) 
  6.         goto exit_overflow; 
  7.     ... 
  8. exit_overflow: 
  9.  NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_LISTENOVERFLOWS); 
  10.  ... 

從上述代碼可以看出,第三次握手時,如果服務器全連接隊列滿了,來自客戶端的 ack 握手包又被直接丟棄了。

想想也很好理解,三次握手完的請求是要放在全連接隊列里的。但是假如全連接隊列滿了,仍然三次握手也不會成功。

不過有意思的是,第三次握手失敗并不是客戶端重試,而是由客戶端來重發 synack。

我們搞一個實際的 Case 來直接抓包看一下。我專門寫了個簡單的 Server 只 listen 不 accept,然后找個客戶端把它的連接隊列消耗光。這時候,再用另一個客戶端向它發起請求時的抓包結果。

第一個紅框內是第三次握手,其實這個握手請求在服務器端以及被丟棄了。但是這時候客戶端并不知情,它一直傻傻地以為三次握手已經妥了呢。不過還好,這時在服務器的半連接隊列中仍然記錄著第一次握手時存的握手請求。

服務器等到半連接定時器到時后,向客戶端重新發起 synack ,客戶端收到后再重新回復第三次握手 ack。如果這期間服務器端全連接隊列一直都是滿的,那么服務器重試 5 次(受內核參數 net.ipv4.tcp_synack_retries 控制)后就放棄了。

在這種情況下大家還要注意另外一個問題。在實踐中,客戶端往往是以為連接建立成功就會開始發送數據,其實這時候連接還沒有真的建立起來。他發出去的數據,包括重試都將全部被服務器無視。直到連接真正建立成功后才行。

四、總結

衡量工程師是否優秀的標準之一就是看他能否有能力定位和處理線上發生的各種問題。連看似簡單的一個 TCP 三次握手,工程實踐中可能會有各種意外發生。如果對握手理解不深,那么很有可能無法處理線上出現的各種故障。

今天的文章主要是描述了端口不足、半連接隊列滿、全連接隊列滿時的情況,

當端口不充足的時候,會導致 connect 系統調用的時候過多地執行自旋鎖等待與 Hash 查找,會引起 CPU 開銷上漲。嚴重情況下會耗光 CPU,影響用戶業務邏輯的執行。出現這種問題處理起來方法有這么幾個。

通過調整 ip_local_port_range 來盡量加大端口范圍

盡量復用連接,使用長連接來削減頻繁的握手處理

第三個有用,但是不太推薦的是開啟 tcp_tw_reuse 和 tcp_tw_recycle

服務器端在第一次握手時可能會丟包, 在如下兩種情況下會發生。

半連接隊列滿,且 tcp_syncookies 為 0

全連接隊列滿,且有未完成的半連接請求

在這兩種情況下,客戶端視角來看和網絡斷了沒有區別,就是發出去的 SYN 包沒有任何反饋,然后等待定時器到時后重傳握手請求。第一次重傳時間是 1 s ,接下來的等待間隔是翻倍地增長,2 s,4 s,8 s ...。總的重傳次數由 net.ipv4.tcp_syn_retries 內核參數影響(注意我的用詞是影響,而不是決定)。

服務器在第三次握手時也可能會出問題,如果全連接隊列滿,仍將會發生丟包。不過第三次握手失敗時,只有服務器端知道(客戶端誤以為連接已經建立成功了)。服務器根據半連接隊列里的握手信息發起 synack 重試,重試次數由 net.ipv4.tcp_synack_retries 控制。

一旦你的線上出現了上面這些連接隊列溢出導致的問題,你的服務將會受到比較嚴重的影響。即使第一次重試就能夠成功,那你的接口響應耗時將直接上漲到 1 s(老版本上是 3 s)。如果重試上兩三次都沒有成功,Nginx 很有可能直接就報訪問超時失敗了。

正因為握手重試對我們服務影響很大,所以能深刻理解三次握手中的這些異常情況很有必要。再說說如果出現了丟包的問題,我們該如何應對。

方法1,打開 syncookie

在現代的 Linux 版本里,我們可以通過打開 tcp_syncookies 來防止過多的請求打滿半連接隊列包括 SYN Flood 攻擊,來解決服務器因為半連接隊列滿而發生的丟包。

方法2,加大連接隊列長度

在《為什么服務端程序都需要先 listen 一下?》中,我們討論過全連接隊列的長度是 min(backlog, net.core.somaxconn)半連接隊列長度是。半連接隊列長度有點小復雜,是 min(backlog, somaxconn, tcp_max_syn_backlog) + 1 再上取整到 2 的冪次,但最小不能小于16。

如果需要加大全/半連接隊列長度,請調節以上的一個或多個參數來達到目的。只要隊列長度合適,就能很大程序降低握手異常概率的發生。

方法3,盡快地 accept

另外這個雖然一般不會成為問題,但也要注意一下。你的應用程序應該盡快在握手成功之后通過 accept 把新連接取走。不要忙于處理其它業務邏輯而導致全連接隊列塞滿了。

方法4,盡量減少 TCP 連接的次數

 

如果上述方法都未能根治你的問題,那說明你的服務器上 TCP 連接請求太、太過于頻繁了。這個時候你應該思考下是否可以用長連接代替短連接,減少過于頻繁的三次握手。這個方法不但能解決握手出問題的可能,而且還順帶砍掉了三次握手的各種內存、CPU、時間上的開銷,對提升性能也有較大幫助。

 

責任編輯:武曉燕 來源: 開發內功修煉
相關推薦

2024-10-09 20:54:16

2023-09-07 16:46:54

TCP數據傳遞

2024-07-15 08:21:26

TCPC#連接

2015-11-09 09:58:56

2022-10-10 07:34:36

TCP三次握手區塊鏈

2025-09-02 01:45:00

TCP通信字節流

2020-12-08 06:34:16

TCP握手SYN 報文

2019-06-12 11:26:37

TCP三次握手四次揮手

2015-10-13 09:42:52

TCP網絡協議

2024-01-12 08:23:11

TCPACK服務器

2021-04-30 13:32:17

TCP三次握手網絡協議

2021-07-03 17:47:25

TCP控制協議

2024-04-03 11:40:58

SYN服務器序號

2021-03-08 18:08:08

TCP Connect 協議

2022-07-25 07:07:35

TCP客戶端服務器

2023-10-24 15:22:09

TCPUDP

2021-01-29 06:11:08

TCP通信三次握手

2019-02-01 09:38:16

2021-05-18 12:27:40

TCP控制協議

2022-07-07 09:00:17

TCP 連接HTTP 協議
點贊
收藏

51CTO技術棧公眾號

国产一级18片视频| 国产ts丝袜人妖系列视频| 怡红院在线播放| 国产99久久久国产精品潘金网站| 7777精品视频| 妖精视频在线观看免费| 亚洲一二av| 在线精品国精品国产尤物884a| 日本三级福利片| 亚洲 小说区 图片区 都市| 日本网站在线观看一区二区三区 | 国产精品高潮视频| 婷婷在线精品视频| 精品久久久亚洲| 亚洲成人av在线播放| jizz大全欧美jizzcom| 1234区中文字幕在线观看| 国产精品福利一区二区三区| 蜜桃传媒一区二区| 亚洲黄色片视频| 蜜臀av一区二区在线免费观看 | 久久久久免费看| 日韩成人三级| 亚洲嫩模很污视频| 免费黄视频在线观看| 国产三级一区| 在线亚洲人成电影网站色www| 日韩国产成人无码av毛片| 午夜免费福利在线观看| 久久九九国产精品| 久久久影院一区二区三区| 国产强被迫伦姧在线观看无码| 肉丝袜脚交视频一区二区| 韩国精品美女www爽爽爽视频| 在线日韩国产网站| 日韩av久操| 亚洲日本欧美中文幕| 三级电影在线看| 国产一区福利| 亚洲精品一线二线三线无人区| 亚洲理论中文字幕| 欧美综合影院| 欧美精品乱码久久久久久按摩| 中文字幕在线观看第三页| 在线天堂新版最新版在线8| 亚洲第一av色| 欧美综合在线播放| 国产免费拔擦拔擦8x在线播放 | 欧美黑人性生活视频| 欧美人禽zoz0强交| 久久精品久久久| 插插插亚洲综合网| 国产黄在线免费观看| 久久精品青草| 色综合久久悠悠| 免费在线观看黄色av| 欧美日本中文| 国内精品400部情侣激情| 日本少妇在线观看| 国产一区导航| 欧美中文在线免费| 国产欧美日韩亚洲精品| 99热国产在线观看| 亚洲国产第一| 欧美极品欧美精品欧美视频| 免费在线观看亚洲| 亚洲国产日本| 51色欧美片视频在线观看| 国产无人区码熟妇毛片多| 国产一区二区精品| 日韩免费av片在线观看| 在线播放一级片| 国产一区二区三区精品欧美日韩一区二区三区 | 久久久www免费人成黑人精品| 天堂网av2014| 久久久精品免费观看| 亚洲黄色一区二区三区| a级在线观看| 精品久久香蕉国产线看观看亚洲| 欧美韩国日本在线| 国语自产精品视频在线看抢先版结局| 91精品欧美福利在线观看| 中文字幕天堂av| 久久不见久久见中文字幕免费| 中文字幕日韩在线观看| 久久精品一级片| 老鸭窝91久久精品色噜噜导演| 国产福利成人在线| 国内毛片毛片毛片毛片| 99久久精品免费观看| 日韩资源av在线| 超碰在线观看免费| 欧美午夜美女看片| 91福利免费观看| 久久免费视频66| 色悠悠久久88| 久久精品视频6| 日韩av中文在线观看| 亚洲va国产va天堂va久久| 日本xxxx人| 亚洲国产精品ⅴa在线观看| 成人免费观看在线| yiren22亚洲综合| 亚洲аv电影天堂网| 亚洲精品国产精品国自| 在线成人h网| 成人精品视频99在线观看免费| 色婷婷av一区二区三| 国产精品久久久久影院色老大| 日韩精品―中文字幕| 国产麻豆精品| 中文字幕欧美日韩在线| 国产区在线观看视频| 黑人精品欧美一区二区蜜桃| 日韩电影在线播放| 手机在线观看av| 日韩欧美一区二区三区在线| 日韩福利在线视频| 免费欧美在线| 国产区欧美区日韩区| 成人日韩欧美| 欧美日韩一区二区电影| 精品人妻少妇嫩草av无码| 在线电影一区| 成人片在线免费看| 国产黄a三级三级三级av在线看 | 亚洲一二区在线观看| 激情五月综合| 2019日本中文字幕| 丁香六月天婷婷| 亚洲乱码国产乱码精品精的特点 | 老司机激情视频| av在线播放一区二区| 中文字幕免费国产精品| 久草热在线观看| 国产欧美一区二区在线| www.日本xxxx| 精品成人影院| 国产精品久久久久免费a∨| 国产毛片在线看| 91久久一区二区| 欧美激情aaa| 可以免费看不卡的av网站| 久久久久久久久久久一区| 超碰成人av| 亚洲精品福利免费在线观看| 国产成人精品a视频一区| av亚洲产国偷v产偷v自拍| 久久精品国产sm调教网站演员| 国产乱人伦精品一区| 久久久久一本一区二区青青蜜月| 亚洲精品国产片| 亚洲一区二区3| 中文在线观看免费视频| 亚洲精品视频啊美女在线直播| 精品久久精品久久| 性欧美18xxxhd| 亚洲性日韩精品一区二区| 中文在线字幕av| 亚洲视频狠狠干| 国产精品熟女一区二区不卡| 欧美三级免费| 精品国产免费一区二区三区 | 欧美性猛交xxxx富婆| 精品少妇人妻一区二区黑料社区| 久久一二三区| 亚洲午夜激情| 亚洲一区二区三区免费| 97视频在线观看亚洲| 国产片在线观看| 5566中文字幕一区二区电影| 九九视频免费在线观看| 99久久国产综合精品色伊| 一区二区三区视频在线观看免费| 欧美疯狂party性派对| 成人乱色短篇合集| 91九色美女在线视频| 一区二区三区久久精品| 国产精选久久久| 亚洲18女电影在线观看| 亚洲一区二区自偷自拍| 国产精一区二区三区| 欧美女人性生活视频| 色天天久久综合婷婷女18| 国产福利一区二区三区在线观看| 英国三级经典在线观看| 久久精品国产欧美亚洲人人爽| 免费av一级片| 欧美日韩在线直播| 日韩特黄一级片| 一区视频在线播放| 变态另类丨国产精品| 精品在线观看免费| 精品久久久久久久免费人妻| 中文字幕一区二区三区欧美日韩| 久久免费视频1| 国产一区 二区| 国产精品99久久久久久久久| 四虎影院观看视频在线观看| 亚洲人在线观看| 免费观看毛片网站| 欧美精品在线观看一区二区| 国产精品久免费的黄网站| 亚洲私人黄色宅男| 91av在线免费| 岛国精品一区二区| 九九九九九国产| 久久大逼视频| 亚洲精品蜜桃久久久久久| 91青青国产在线观看精品| 久草精品电影| 中文在线综合| 亚洲直播在线一区| 国内欧美日韩| 国产国产精品人在线视| 蜜桃视频在线观看免费视频| 色综合久久88色综合天天看泰| 日韩美女网站| 一区二区三区国产视频| 青青久在线视频免费观看| 精品国内二区三区| 国产人妖在线播放| 欧美日韩国产另类不卡| 国产精品51麻豆cm传媒| 一本久久a久久精品亚洲| 中文字幕亚洲精品一区| 亚洲国产精品天堂| 久久亚洲AV无码| 亚洲欧美日韩人成在线播放| 亚洲熟女少妇一区二区| 国产精品美女一区二区在线观看| 国产123在线| 久久久国产精华| 婷婷色一区二区三区| 久久久久9999亚洲精品| 丰满少妇一区二区三区| 99久久精品免费看国产| 久久精品女同亚洲女同13| 成人精品小蝌蚪| 稀缺呦国内精品呦| 成人午夜视频在线| 成人免费看片载| 成人午夜又粗又硬又大| 亚洲精品国产成人av在线| 99久久精品国产麻豆演员表| 欧美熟妇精品黑人巨大一二三区| 91原创在线视频| 亚洲国产无码精品| 国产欧美va欧美不卡在线| 蜜桃av乱码一区二区三区| 国产人成一区二区三区影院| 夫妇交换中文字幕| 中文字幕中文字幕中文字幕亚洲无线| 91麻豆制片厂| 国产精品蜜臀在线观看| 全程偷拍露脸中年夫妇| 亚洲国产日韩在线一区模特| 中日韩黄色大片| 欧美视频中文在线看| 天天射天天干天天| 在线播放中文字幕一区| 午夜精品久久久久久久99| 精品国产乱码久久久久久蜜臀| 五月婷在线视频| 国产亚洲欧美日韩美女| 免费在线观看av网站| 久久99热这里只有精品国产| 乱馆动漫1~6集在线观看| 国产精欧美一区二区三区| 亚洲欧美一级| 国产精品一区在线播放| 禁断一区二区三区在线| 中文字幕一区二区三区最新| 在线观看视频日韩| 黑人糟蹋人妻hd中文字幕 | 日本少妇xxxx软件| 久久综合网色—综合色88| 五月婷婷婷婷婷| 亚洲影视在线观看| 日韩精品一区不卡| 欧美一区二区网站| 欧美香蕉爽爽人人爽| 久久久国产成人精品| 涩涩视频网站在线观看| 国产日韩欧美自拍| 欧美天堂社区| 国产免费色视频| 亚洲欧美不卡| 亚洲免费在线播放视频| 久久久久久久久岛国免费| 全网免费在线播放视频入口| 欧美性生交xxxxx久久久| 99久久久无码国产精品免费| 国产婷婷色综合av蜜臀av| 久久精品视频免费看| 欧美与黑人午夜性猛交久久久| 91精品国产色综合久久不卡粉嫩| 久久亚洲综合网| 欧美国产精品| 中文字幕 91| 97久久精品人人澡人人爽| 外国一级黄色片| 欧洲精品一区二区| 头脑特工队2在线播放| 美日韩精品视频免费看| 亚洲成人va| 久久久久久99| 国产字幕视频一区二区| 91 在线视频观看| 国产清纯白嫩初高生在线观看91| 国产一级特黄毛片| 制服丝袜亚洲播放| av网站无病毒在线| 欧美在线精品免播放器视频| 6080成人| 91网站在线观看免费| 精品一区二区三区的国产在线播放| 麻豆精品免费视频| 狠狠操狠狠色综合网| 欧美一级免费片| 欧美黑人一区二区三区| 成人亚洲精品| 一区二区三区四区五区精品 | 91精品在线播放| 国产一区二区精品福利地址| 成人免费毛片网| jlzzjlzz国产精品久久| 久久午夜无码鲁丝片| 欧美大肚乱孕交hd孕妇| 成人在线影视| 91久久精品国产| 天天射成人网| 天天操狠狠操夜夜操| 国产精品视频观看| 中文字幕+乱码+中文乱码91| 国产性色av一区二区| 手机看片久久| 日韩av不卡在线播放| 日韩中文字幕不卡| 国产熟妇久久777777| 色94色欧美sute亚洲线路一ni| 欧美另类自拍| 国产99久久精品一区二区永久免费 | 亚洲日本精品国产第一区| 蜜桃av一区二区在线观看| 可以免费看av的网址| 69久久夜色精品国产69蝌蚪网| 黄网站免费在线观看| 97在线资源站| 99精品国产99久久久久久福利| 超碰男人的天堂| 欧美视频一二三| a天堂中文在线| 国产这里只有精品| 欧美影视一区| 亚洲欧美日韩偷拍| 91久久精品日日躁夜夜躁欧美| 国产原创av在线| 成人黄色免费片| 欧美破处大片在线视频| 亚洲AV无码国产精品| 欧美性做爰猛烈叫床潮| 黄色成人在线观看| 99免费在线观看视频| 一区二区三区四区五区精品视频| 人人妻人人藻人人爽欧美一区| 欧美日韩一卡二卡三卡| 一色桃子av在线| 精品日韩电影| 久久国产人妖系列| av资源吧首页| 亚洲午夜色婷婷在线| 国产精一区二区| 欧美牲交a欧美牲交| 国产精品丝袜久久久久久app| 国产日韩精品suv| 欧美怡春院一区二区三区| 欧美a级片视频| v天堂中文在线| 欧美日韩在线播放一区| 人人超在线公开视频| 欧美一区少妇| 国产福利一区二区三区| 五月婷婷六月婷婷| 欧美福利在线观看| 成人三级视频| 欧美一级大片免费看| 欧美性xxxxx极品少妇| sm在线观看| 永久免费精品视频网站| www.66久久| 国产免费av电影| 国产精品xxx视频| 亚洲视频观看| 蜜桃av免费观看| 精品无人国产偷自产在线| 精品视频一二| 欧美精品久久久久久久久25p| 精品女厕一区二区三区| 4438x成人网全国最大|