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

Go 中如何強制關閉 TCP 連接

網絡 通信技術
本文我們介紹了 TCP 默認關閉與強制關閉兩種方式(其實還有種折中的方式:SetLinger(sec > 0)),它們都源于 TCP 的協議設計。

[[425673]]

本文轉載自微信公眾號「Golang技術分享」,作者機器鈴砍菜刀。轉載本文請聯系Golang技術分享公眾號。

在《Go 網絡編程和 TCP 抓包實操》一文中,我們編寫了 Go 版本的 TCP 服務器與客戶端代碼,并通過 tcpdump 工具進行抓包獲取分析。在該例中,客戶端代碼通過調用 Conn.Close() 方法發起了關閉 TCP 連接的請求,這是一種默認的關閉連接方式。

默認關閉需要四次揮手的確認過程,這是一種”商量“的方式,而 TCP 為我們提供了另外一種”強制“的關閉模式。

如何強制性關閉?具體在 Go 代碼中應當怎樣實現?這就是本文探討的內容。

默認關閉

相信每個程序員都知道 TCP 斷開連接的四次揮手過程,這是面試八股文中的股中股。我們在 Go 代碼中調用默認的 Conn.Close() 方法,它就是典型的四次揮手。

以客戶端主動關閉連接為例,當它調用 Close 函數后,就會向服務端發送 FIN 報文,如果服務器的本端 socket 接收緩存區里已經沒有數據,那服務端的 read 將會得到一個 EOF 錯誤。

發起關閉方會經歷 FIN_WAIT_1 -> FIN_WAIT_2 -> TIME_WAIT -> CLOSE 的狀態變化,這些狀態需要得到被關閉方的反饋而更新。

強制關閉

默認的關閉方式,不管是客戶端還是服務端主動發起關閉,都要經過對方的應答,才能最終實現真正的關閉連接。那能不能在發起關閉時,不關心對方是否同意,就結束掉連接呢?

答案是肯定的。TCP 協議為我們提供了一個 RST 的標志位,當連接的一方認為該連接異常時,可以通過發送 RST 包并立即關閉該連接,而不用等待被關閉方的 ACK 確認。

SetLinger() 方法

在 Go 中,我們可以通過 net.TCPConn.SetLinger() 方法來實現。

  1. // SetLinger sets the behavior of Close on a connection which still 
  2. // has data waiting to be sent or to be acknowledged. 
  3. // 
  4. // If sec < 0 (the default), the operating system finishes sending the 
  5. // data in the background. 
  6. // 
  7. // If sec == 0, the operating system discards any unsent or 
  8. // unacknowledged data. 
  9. // 
  10. // If sec > 0, the data is sent in the background as with sec < 0. On 
  11. // some operating systems after sec seconds have elapsed any remaining 
  12. // unsent data may be discarded. 
  13. func (c *TCPConn) SetLinger(sec int) error {} 

函數的注釋已經非常清晰,但是需要讀者有 socket 緩沖區的概念。

  • socket 緩沖區

當應用層代碼通過 socket 進行讀與寫的操作時,實質上經過了一層 socket 緩沖區,它分為發送緩沖區和接受緩沖區。

緩沖區信息可通過執行 netstat -nt 命令查看

  1. $ netstat -nt 
  2. Active Internet connections 
  3. Proto Recv-Q Send-Q  Local Address          Foreign Address        (state) 
  4. tcp4       0      0  127.0.0.1.57721        127.0.0.1.49448        ESTABLISHED 

其中,Recv-Q 代表的就是接收緩沖區,Send-Q 代表的是發送緩沖區。

默認關閉方式中,即 sec < 0 。操作系統會將緩沖區里未處理完的數據都完成處理,再關閉掉連接。

當 sec > 0 時,操作系統會以與默認關閉方式運行。但是當超過定義的時間 sec 后,如果還沒處理完緩存區的數據,在某些操作系統下,緩沖區中未完成的流量可能就會被丟棄。

而 sec == 0 時,操作系統會直接丟棄掉緩沖區里的流量數據,這就是強制性關閉。

示例代碼與抓包分析

我們通過示例代碼來學習 SetLinger() 的使用,并以此來分析強制關閉的區別。

服務端代碼

以服務端為主動關閉連接方示例

  1. package main 
  2.  
  3. import ( 
  4.  "log" 
  5.  "net" 
  6.  "time" 
  7.  
  8. func main() { 
  9.  // Part 1: create a listener 
  10.  l, err := net.Listen("tcp"":8000"
  11.  if err != nil { 
  12.   log.Fatalf("Error listener returned: %s", err) 
  13.  } 
  14.  defer l.Close() 
  15.  
  16.  for { 
  17.   // Part 2: accept new connection 
  18.   c, err := l.Accept() 
  19.   if err != nil { 
  20.    log.Fatalf("Error to accept new connection: %s", err) 
  21.   } 
  22.  
  23.   // Part 3: create a goroutine that reads and write back data 
  24.   go func() { 
  25.    log.Printf("TCP session open"
  26.    defer c.Close() 
  27.  
  28.    for { 
  29.     d := make([]byte, 100) 
  30.  
  31.     // Read from TCP buffer 
  32.     _, err := c.Read(d) 
  33.     if err != nil { 
  34.      log.Printf("Error reading TCP session: %s", err) 
  35.      break 
  36.     } 
  37.     log.Printf("reading data from client: %s\n", string(d)) 
  38.  
  39.     // write back data to TCP client 
  40.     _, err = c.Write(d) 
  41.     if err != nil { 
  42.      log.Printf("Error writing TCP session: %s", err) 
  43.      break 
  44.     } 
  45.    } 
  46.   }() 
  47.  
  48.   // Part 4: create a goroutine that closes TCP session after 10 seconds 
  49.   go func() { 
  50.    // SetLinger(0) to force close the connection 
  51.    err := c.(*net.TCPConn).SetLinger(0) 
  52.    if err != nil { 
  53.     log.Printf("Error when setting linger: %s", err) 
  54.    } 
  55.  
  56.    <-time.After(time.Duration(10) * time.Second
  57.    defer c.Close() 
  58.   }() 
  59.  } 

服務端代碼根據邏輯分為四個部分

第一部分:端口監聽。我們通過 net.Listen("tcp", ":8000")開啟在端口 8000 的 TCP 連接監聽。

第二部分:建立連接。在開啟監聽成功之后,調用 net.Listener.Accept()方法等待 TCP 連接。Accept 方法將以阻塞式地等待新的連接到達,并將該連接作為 net.Conn 接口類型返回。

第三部分:數據傳輸。當連接建立成功后,我們將啟動一個新的 goroutine 來處理 c 連接上的讀取和寫入。本文服務器的數據處理邏輯是,客戶端寫入該 TCP 連接的所有內容,服務器將原封不動地寫回相同的內容。

第四部分:強制關閉連接邏輯。啟動一個新的 goroutine,通過 c.(*net.TCPConn).SetLinger(0) 設置強制關閉選項,并于 10 s 后關閉連接。

客戶端代碼

以客戶端為被動關閉連接方示例

  1. package main 
  2.  
  3. import ( 
  4.  "log" 
  5.  "net" 
  6.  
  7. func main() { 
  8.  // Part 1: open a TCP session to server 
  9.  c, err := net.Dial("tcp""localhost:8000"
  10.  if err != nil { 
  11.   log.Fatalf("Error to open TCP connection: %s", err) 
  12.  } 
  13.  defer c.Close() 
  14.  
  15.  // Part2: write some data to server 
  16.  log.Printf("TCP session open"
  17.  b := []byte("Hi, gopher?"
  18.  _, err = c.Write(b) 
  19.  if err != nil { 
  20.   log.Fatalf("Error writing TCP session: %s", err) 
  21.  } 
  22.  
  23.  // Part3: read any responses until get an error 
  24.  for { 
  25.   d := make([]byte, 100) 
  26.   _, err := c.Read(d) 
  27.   if err != nil { 
  28.    log.Fatalf("Error reading TCP session: %s", err) 
  29.   } 
  30.   log.Printf("reading data from server: %s\n", string(d)) 
  31.  } 

客戶端代碼根據邏輯分為三個部分

第一部分:建立連接。我們通過 net.Dial("tcp", "localhost:8000")連接一個 TCP 連接到服務器正在監聽的同一個 localhost:8000 地址。

第二部分:寫入數據。當連接建立成功后,通過 c.Write() 方法寫入數據 Hi, gopher? 給服務器。

第三部分:讀取數據。除非發生 error,否則客戶端通過 c.Read() 方法(記住,是阻塞式的)循環讀取 TCP 連接上的內容。

tcpdump 抓包結果

tcpdump 是一個非常好用的數據抓包工具,在《Go 網絡編程和 TCP 抓包實操》一文中已經簡單介紹了它的命令選項,這里就不再贅述。

  • 開啟 tcpdump 數據包監聽
  1. tcpdump -S -nn -vvv -i lo0 port 8000 
  • 運行服務端代碼
  1. $ go run main.go 
  2. 2021/09/25 20:21:44 TCP session open 
  3. 2021/09/25 20:21:44 reading data from client: Hi, gopher? 
  4. 2021/09/25 20:21:54 Error reading TCP session: read tcp 127.0.0.1:8000->127.0.0.1:59394: use of closed network connection 

服務器和客戶端建立連接之后,從客戶端讀取到數據 Hi, gopher? 。在 10s 后,服務端強制關閉了 TCP 連接,阻塞在 c.Read 的服務端代碼返回了錯誤: use of closed network connection。

  • 運行客戶端代碼
  1. $ go run main.go 
  2. 2021/09/25 20:21:44 TCP session open 
  3. 2021/09/25 20:21:44 reading data from server: Hi, gopher? 
  4. 2021/09/25 20:21:54 Error reading TCP session: read tcp 127.0.0.1:59394->127.0.0.1:8000: readconnection reset by peer 

客戶端和服務器建立連接之后,發送數據給服務端,服務端返回相同的數據 Hi, gopher? 回來。在 10s 后,由于服務器強制關閉了 TCP 連接,因此阻塞在 c.Read 的客戶端代碼捕獲到了錯誤:connection reset by peer。

  • tcpdump 的抓包結果
  1. $ tcpdump -S -nn -vvv -i lo0 port 8000 
  2. tcpdump: listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes 
  3. 20:21:44.682942 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 64, bad cksum 0 (->3cb6)!) 
  4.     127.0.0.1.59394 > 127.0.0.1.8000: Flags [S], cksum 0xfe34 (incorrect -> 0xfa62), seq 3783365585, win 65535, options [mss 16344,nop,wscale 6,nop,nop,TS val 725769370 ecr 0,sackOK,eol], length 0 
  5. 20:21:44.683042 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 64, bad cksum 0 (->3cb6)!) 
  6.     127.0.0.1.8000 > 127.0.0.1.59394: Flags [S.], cksum 0xfe34 (incorrect -> 0x23d3), seq 1050611715, ack 3783365586, win 65535, options [mss 16344,nop,wscale 6,nop,nop,TS val 725769370 ecr 725769370,sackOK,eol], length 0 
  7. 20:21:44.683050 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->3cc2)!) 
  8.     127.0.0.1.59394 > 127.0.0.1.8000: Flags [.], cksum 0xfe28 (incorrect -> 0x84dc), seq 3783365586, ack 1050611716, win 6379, options [nop,nop,TS val 725769370 ecr 725769370], length 0 
  9. 20:21:44.683055 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->3cc2)!) 
  10.     127.0.0.1.8000 > 127.0.0.1.59394: Flags [.], cksum 0xfe28 (incorrect -> 0x84dc), seq 1050611716, ack 3783365586, win 6379, options [nop,nop,TS val 725769370 ecr 725769370], length 0 
  11. 20:21:44.683302 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 63, bad cksum 0 (->3cb7)!) 
  12.     127.0.0.1.59394 > 127.0.0.1.8000: Flags [P.], cksum 0xfe33 (incorrect -> 0x93f5), seq 3783365586:3783365597, ack 1050611716, win 6379, options [nop,nop,TS val 725769370 ecr 725769370], length 11 
  13. 20:21:44.683311 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->3cc2)!) 
  14.     127.0.0.1.8000 > 127.0.0.1.59394: Flags [.], cksum 0xfe28 (incorrect -> 0x84d1), seq 1050611716, ack 3783365597, win 6379, options [nop,nop,TS val 725769370 ecr 725769370], length 0 
  15. 20:21:44.683499 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 152, bad cksum 0 (->3c5e)!) 
  16.     127.0.0.1.8000 > 127.0.0.1.59394: Flags [P.], cksum 0xfe8c (incorrect -> 0x9391), seq 1050611716:1050611816, ack 3783365597, win 6379, options [nop,nop,TS val 725769370 ecr 725769370], length 100 
  17. 20:21:44.683511 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->3cc2)!) 
  18.     127.0.0.1.59394 > 127.0.0.1.8000: Flags [.], cksum 0xfe28 (incorrect -> 0x846e), seq 3783365597, ack 1050611816, win 6378, options [nop,nop,TS val 725769370 ecr 725769370], length 0 
  19. 20:21:54.688350 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40, bad cksum 0 (->3cce)!) 
  20.     127.0.0.1.8000 > 127.0.0.1.59394: Flags [R.], cksum 0xfe1c (incorrect -> 0xcd39), seq 1050611816, ack 3783365597, win 6379, length 0 

我們重點關注內容 Flags [],其中 [S] 代表 SYN 包,用于建立連接;[P] 代表 PSH 包,表示有數據傳輸;[R]代表 RST 包,用于重置連接;[.] 代表對應的 ACK 包。例如 [S.] 代表 SYN-ACK。

搞懂了這幾個 Flags 的含義,那我們就可以分析出本次服務端強制關閉的 TCP 通信全過程。

我們和《Go 網絡編程和 TCP 抓包實操》一文中,客戶端正常關閉的通信過程進行比較

可以看到,當通過設定 SetLinger(0) 之后,主動關閉方調用 Close() 時,系統內核會直接發送 RST 包給被動關閉方。這個過程并不需要被動關閉方的回復,就已關閉了連接。主動關閉方也就沒有了默認關閉模式下 FIN_WAIT_1 -> FIN_WAIT_2 -> TIME_WAIT -> CLOSE 的狀態改變。

總結

本文我們介紹了 TCP 默認關閉與強制關閉兩種方式(其實還有種折中的方式:SetLinger(sec > 0)),它們都源于 TCP 的協議設計。

在大多數的場景中,我們都應該選擇使用默認關閉方式,因為這樣才能確保數據的完整性(不會丟失 socket 緩沖區里的數據)。

當使用默認方式關閉時,每個連接都會經歷一系列的連接狀態轉變,讓其在操作系統上停留一段時間。尤其是服務器要主動關閉連接時(大多數應用場景,都應該是由客戶端主動發起關閉操作),這會消耗服務器的資源。

如果短時間內有大量的或者惡意的連接涌入,我們或許需要采用強制關閉方式。因為使用強制關閉,能立即關閉這些連接,釋放資源,保證服務器的可用與性能。

當然,我們還可以選擇折中的方式,容忍一段時間的緩存區數據處理時間,再進行關閉操作。

這里給讀者朋友留一個思考題。如果在本文示例中,我們將 SetLinger(0) 改為 SetLinger(1) ,抓包結果又會是如何?

最后,讀者朋友們在項目中,有使用過強制關閉方式嗎?

 

責任編輯:武曉燕 來源: Golang技術分享
相關推薦

2021-10-14 20:33:16

TCP連接關閉

2009-10-12 19:45:58

Windows 7連接數限制

2010-09-13 15:55:17

SQL Server數

2019-09-02 10:39:15

TCPWindows連接

2010-06-13 15:02:05

TCP IP協議

2023-12-01 14:57:22

TCP連接

2022-01-14 13:53:03

TCP進程窗口

2009-10-10 08:50:30

Windows 7系統黑屏使用辦法

2019-12-26 09:28:34

TCPPython通信

2025-06-04 08:40:00

Go語言鏈表

2021-07-09 12:37:31

GoPython編程語言

2019-02-14 09:30:40

Ubuntu應用程序UI

2024-03-19 14:15:48

Go程序os.Exit()

2018-11-08 10:40:25

Windows 10Windows藍屏死機

2015-04-23 18:46:38

TCPTCP協議

2018-05-14 09:48:45

Linux內核模塊Kgotobed

2015-07-20 11:20:03

Windows 10更新

2022-04-08 12:08:28

Hydra市場非法黑市網絡犯罪

2018-04-23 10:10:25

Windows 10關閉通知

2021-09-11 22:32:26

Go 綁定 Host
點贊
收藏

51CTO技術棧公眾號

欧美日韩在线一| 国产在线观看91精品一区| 毛茸茸free性熟hd| 91精品论坛| 国产精品情趣视频| 99久久自偷自偷国产精品不卡| 日产欧产va高清| 欧美限制电影| 精品国产乱码久久| 久久国产这里只有精品| av2020不卡| 国产视频不卡一区| www.成人三级视频| 中文字幕理论片| 亚洲高清久久| 久久久91精品国产| 色无极影院亚洲| 风间由美性色一区二区三区四区| 欧美中文字幕久久| 亚洲熟妇无码另类久久久| 黄视频网站在线| 日韩黄色三级| 精品freesex老太交| 777午夜精品免费视频| 成人综合视频在线| 午夜小视频福利在线观看| 国产日韩欧美亚洲| 久久久久一区二区| 国产精品无码在线播放| 人妻换人妻仑乱| 精品乱子伦一区二区| 老鸭窝亚洲一区二区三区| 欧美成年人网站| 欧美黄色一级生活片| 1313精品午夜理伦电影| 欧美日韩一区小说| 韩国日本在线视频| av中文字幕在线观看第一页| 中文字幕一区av| 视频在线一区二区三区| 久久久pmvav| 成人毛片老司机大片| 91久久国产自产拍夜夜嗨| 在线观看日韩一区二区| 石原莉奈在线亚洲二区| 欧美一区二区三区免费视| 久久综合色综合| 欧美黄色aaaa| 欧美日韩ab片| 欧美精品xxxxx| 欧美成人久久| 欧美激情国产高清| 国产一级特黄视频| 国模吧视频一区| 久久久久女教师免费一区| 五月婷婷一区二区| 欧美涩涩网站| 久久久久久久91| 免费在线观看黄网站| 亚洲看片免费| 欧美一级在线播放| 天天干天天插天天射| 日韩中文字幕麻豆| 国产精品中文字幕在线| 精品国产乱子伦| 三级久久三级久久久| 国产精品久久久久秋霞鲁丝| 一区二区视频免费观看| 激情av综合网| 99久久伊人精品影院| 日本国产在线观看| 久久一区二区三区国产精品| 免费观看国产成人| 五月香视频在线观看| 亚洲男人天堂av网| 奇米影视亚洲色图| 成人美女黄网站| 欧美日韩免费观看一区三区| 手机看片国产精品| 米奇精品关键词| 亚洲天天在线日亚洲洲精| 日本 欧美 国产| 欧美日韩亚洲一区二区三区在线| 97超级碰碰碰久久久| 狠狠狠狠狠狠狠| 国产一区二区女| 精品一卡二卡三卡四卡日本乱码 | 岛国精品一区二区| 蜜桃999成人看片在线观看| 成年女人的天堂在线| 一区二区三区欧美视频| 六月丁香婷婷激情| 伊人久久大香| 国产视频精品xxxx| 天天爽天天爽天天爽| 在线视频精品| 成人综合网网址| 无码精品人妻一区二区| 国产精品欧美经典| 一区二区传媒有限公司| 91成人app| 亚洲欧美色婷婷| 国产精品老熟女一区二区| 亚洲经典一区二区三区| 欧美久久影院| 国产精品久久久久9999| 国产 欧美 自拍| 国产精品每日更新| 国产美女无遮挡网站| 国产精品视频一区二区三区综合| 亚洲精品一区av在线播放| 2014亚洲天堂| 日本不卡一区二区三区 | 天堂av一区二区三区在线播放| 中文字幕日韩高清| 国产免费av一区| 国产91精品一区二区麻豆网站 | 欧美在线观看视频一区二区| 日日夜夜精品视频免费观看| 国产成人一区二区三区影院| 久久久久久综合网天天| 精品毛片一区二区三区| 国产精品高潮呻吟| 人人干人人视频| 日韩成人av在线资源| 欧美高清自拍一区| 国产美女永久免费| 国产精品久久久久久久久免费相片 | 天天色综合成人网| 中文字幕第10页| 91一区二区| 国产精品久久久久99| 麻豆导航在线观看| 黄色成人在线免费| 国产伦精品一区二区三区88av| 中文字幕一区二区av| 国产成人亚洲综合色影视| 国产精品成人aaaaa网站| 日韩中文字幕影院| 亚洲狠狠爱一区二区三区| 特级黄色片视频| 亚洲高清影视| 91久久久在线| a毛片在线观看| 欧美一区二区三区性视频| 北条麻妃在线观看视频| 久久精品久久99精品久久| 性高潮久久久久久久久| av在线日韩| 国产一区二区三区高清在线观看| 久久精品一二区| 99精品视频在线播放观看| 美女扒开大腿让男人桶| 精品精品精品| 欧美亚洲国产日韩2020| 日韩电影网址| 色婷婷国产精品综合在线观看| 草草影院第一页| 久久久久久色| 亚洲电影网站| www一区二区三区| 欧美富婆性猛交| 日本免费一区视频| 欧美性猛交xxxx| 国产18无套直看片| 国产精品夜夜爽| heyzo亚洲| 国产尤物久久久| 91精品国产综合久久久久久蜜臀| 麻豆网站在线观看| 欧美精品一区二区三区四区| 依依成人综合网| 欧美激情自拍偷拍| 波多野结衣免费观看| 伊人精品成人久久综合软件| 欧美污视频久久久| 亚洲欧洲专区| 久久免费视频观看| 国产日本在线视频| 欧美不卡一二三| 国产高清中文字幕| **欧美大码日韩| av网页在线观看| 男女男精品网站| 国产精品久久久久久久久电影网| 欧美性生活一级片| 91精品久久久久久久久久久久久| av在线免费网址| 亚洲剧情一区二区| 国产精品九九九九| 天天影视网天天综合色在线播放| 激情五月深爱五月| 成人短视频下载| 91香蕉视频污版| 在线看片日韩| 中文字幕中文字幕在线中一区高清| 亚洲精品不卡在线观看| 国产成人综合一区二区三区| 性欧美videoshd高清| 亚洲男人天堂古典| 亚洲欧美激情国产综合久久久| 91福利在线导航| 日本天堂在线视频| 亚洲欧美一区二区久久| 亚洲熟妇无码av| 国产成人免费av在线| 日韩免费高清在线| 亚洲毛片av| 一级黄色片播放| 精品一区二区三区的国产在线观看| 成人18视频| 少妇高潮一区二区三区99| 2019中文字幕在线| 久久亚洲导航| www.亚洲成人| 国产系列电影在线播放网址| 亚洲成人三级在线| 精品国自产在线观看| 欧美日韩视频在线观看一区二区三区 | 欧美日韩麻豆| 豆国产97在线| 99精品在线免费观看| 国产精品一区二区三区成人| 中文在线资源| 51色欧美片视频在线观看| 欧美性受ⅹ╳╳╳黑人a性爽| 综合网中文字幕| 欧美扣逼视频| 日韩精品欧美国产精品忘忧草| www.国产免费| 日韩亚洲欧美中文三级| 一级黄色片在线观看| 欧美午夜影院一区| 最近国语视频在线观看免费播放| 日韩欧美在线观看| 日本亚洲欧美在线| 午夜亚洲国产au精品一区二区| 91视频综合网| 亚洲精选视频免费看| 三上悠亚作品在线观看| 国产精品久久久久久久久久久免费看 | 国产精品视频xxxx| 国产极品久久久久久久久波多结野| 26uuu久久噜噜噜噜| 国产色播av在线| 69**夜色精品国产69乱| av日韩亚洲| 日韩av电影国产| 88xx成人永久免费观看| 国产精品久久视频| 国产精品亚洲成在人线| 国产精品自在线| 成人在线视频区| 91在线视频一区| 91九色鹿精品国产综合久久香蕉| 亚洲在线观看视频| 波多野结衣在线一区二区| 国产高清精品一区二区三区| 免费萌白酱国产一区二区三区| 国产一区二区在线网站| 亚洲精品国产精品粉嫩| 热re99久久精品国产99热 | 少妇久久久久久被弄到高潮| 欧美日本不卡高清| 欧美激情 国产精品| 久久久久一区| 午夜精品中文字幕| 国产精品自拍网站| 深田咏美中文字幕| 久久久精品国产99久久精品芒果| jizz中文字幕| 一区二区三区在线视频播放| 国产一级淫片a| 在线视频国产一区| 国产麻豆91视频| 日韩av在线网站| 在线日本视频| 欧美激情视频播放| 欧美色999| av成人午夜| 红桃成人av在线播放| 天天做天天爱天天高潮| 日韩亚洲国产欧美| 视色视频在线观看| 懂色av一区二区在线播放| www.色天使| 亚洲欧洲99久久| 日韩少妇裸体做爰视频| 欧美午夜在线一二页| 囯产精品久久久久久| 在线中文字幕日韩| 蜜臀av国内免费精品久久久夜夜| 欧美在线xxx| 国产亚洲字幕| 欧美日韩一区在线观看视频| 在线成人超碰| 国产福利一区视频| 成人午夜伦理影院| 欧美另类69xxxx| 色综合一区二区| www视频在线| 在线日韩中文字幕| 美女搞黄视频在线观看| 亚洲va欧美va国产综合剧情| 国产精品一在线观看| 黄网站色视频免费观看| 日日摸夜夜添夜夜添国产精品 | 亚洲人妖av一区二区| 青草视频在线观看免费| 日韩一级二级三级| h视频在线播放| 2018中文字幕一区二区三区| 日韩精品视频一区二区三区| 亚洲成人午夜在线| 国产农村妇女精品一二区| 91丨porny丨九色| 亚洲国产成人在线| www毛片com| 亚洲国产成人一区| 欧美日韩经典丝袜| 成人中文字幕+乱码+中文字幕| 欧美伦理影院| 熟女性饥渴一区二区三区| 成人免费视频网站在线观看| 熟女少妇a性色生活片毛片| 91国产福利在线| 三级在线播放| 久久人人爽人人爽人人片av高清| 成人污污www网站免费丝瓜| 亚洲最新在线| 免费xxxx性欧美18vr| 亚洲日本精品视频| 一本到不卡精品视频在线观看| 天天操天天干天天插| 国内揄拍国内精品| 成人av影音| 日本中文字幕亚洲| 成人毛片老司机大片| 国产精品23p| 精品国产一区久久| 女子免费在线观看视频www| 99re在线视频观看| 欧美日韩国产免费观看| 激情小说欧美色图| 亚洲国产三级在线| 少妇人妻偷人精品一区二区| 韩国美女主播一区| 亚洲大片精品免费| 情侣黄网站免费看| 国产日本一区二区| 免费av中文字幕| 中文字幕国产亚洲| 日本亚洲欧洲无免费码在线| 宅男一区二区三区| 国产伦精一区二区三区| 国产精品九九九九九九| 亚洲成人免费网站| 欧美黄色网页| 亚洲欧洲日本国产| 国产一区二区福利| 国产亚洲欧美精品久久久www| 亚洲精品一区二区在线观看| 僵尸再翻生在线观看| 欧美h视频在线| 男人的j进女人的j一区| 2025国产精品自拍| 欧美精品一区二区在线播放| 在线天堂资源| 一区二区三区我不卡| 国产福利一区二区三区视频在线| 国产精品成人免费一区二区视频| 精品视频中文字幕| 欧美成人家庭影院| 国产av熟女一区二区三区| 成人深夜福利app| 成人a v视频| 操日韩av在线电影| 日韩欧美ww| 男生操女生视频在线观看 | 久久久99久久精品女同性| aiss精品大尺度系列| 国产男女激情视频| 自拍av一区二区三区| 天天干天天插天天操| 国产有码在线一区二区视频| 伊人久久大香线蕉综合热线 | 国产精品国产高清国产| 国产精品男女猛烈高潮激情| 欧美喷水视频| av女人的天堂| 欧美mv和日韩mv的网站| 日韩影片中文字幕| 免费视频爱爱太爽了| 日本一区二区三区久久久久久久久不 | 国产精品迅雷| 在线观看17c| 日本一区二区三区久久久久久久久不 | 玖玖爱免费视频| 这里只有精品久久| 另类春色校园亚洲|