精品欧美一区二区三区在线观看 _久久久久国色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久久国产精品91久久性色| 最近的2019中文字幕免费一页| 国产精品一二三在线观看| a天堂在线观看视频| 亚洲每日更新| 色偷偷亚洲男人天堂| 无码人妻一区二区三区精品视频| 在线看的毛片| 亚洲色图一区二区三区| 国产偷久久久精品专区| 国产精品第六页| 午夜国产欧美理论在线播放| 亚洲人免费视频| 丰满人妻一区二区三区大胸| 台湾佬中文娱乐久久久| 一区二区在线观看不卡| 日韩亚洲视频| 无码精品一区二区三区在线| 日韩黄色免费网站| 性色av一区二区三区在线观看| 男人的午夜天堂| 午夜欧洲一区| 欧美zozo另类异族| 中文字幕 91| a欧美人片人妖| 亚洲尤物视频在线| 一道本在线观看视频| 国外av在线| 成人白浆超碰人人人人| 成人网中文字幕| 成人黄色三级视频| 亚洲综合激情| 久久99热精品这里久久精品| 日韩精品一区二区三区在线视频| 美女毛片一区二区三区四区| 亚洲成人a级网| 国产精品二区视频| 曰本一区二区| 欧美综合欧美视频| 国产xxxxx在线观看| 24小时免费看片在线观看| 国产精品成人在线观看| 先锋影音亚洲资源| 成人在线观看一区| 国产欧美一二三区| 日本一区二区免费看| 欧美性孕妇孕交| 97精品久久久久中文字幕 | 日本三级欧美三级| 欧美日韩国产探花| 欧美日韩电影在线观看| 国产精品老熟女一区二区| 久久精品一区二区不卡| 日韩中文字幕在线看| 丁香六月激情综合| 99精品在线免费在线观看| 色天天综合狠狠色| 91免费公开视频| 五月激情综合| 欧美另类极品videosbestfree| 欧美激情图片小说| 国产精品videossex久久发布| 欧美黑人性视频| 国产成年人免费视频| 国产日韩视频| 国产精品白嫩美女在线观看| 中文字幕一区二区久久人妻| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品网站入口| 国产裸体永久免费无遮挡| 国产精一品亚洲二区在线视频| 亚洲精品日韩av| 亚洲免费一级片| 91伊人久久大香线蕉| 日本一区二区不卡高清更新| 欧美精品日韩少妇| 亚洲在线视频网站| 激情综合网婷婷| 91av一区| 日韩精品一区在线| 久久无码人妻精品一区二区三区| 久久99高清| 精品激情国产视频| 亚洲精品在线观看av| 美女国产一区| 91热精品视频| 天天综合网天天综合| 国产欧美日韩麻豆91| 精品少妇人妻av一区二区| aa级大片免费在线观看| 色综合色狠狠综合色| 亚洲欧美日韩三级| 日韩超碰人人爽人人做人人添| 一区二区三区视频免费| 精国产品一区二区三区a片| 亚洲一区二区免费看| 成人信息集中地欧美| 无码h黄肉3d动漫在线观看| 中文一区二区完整视频在线观看 | 国产欧美日韩综合一区在线播放 | 欧美激情videoshd| 中文字幕精品视频在线观看| 国产一区二区看久久| 久久久综合香蕉尹人综合网| 美女隐私在线观看| 富二代精品短视频| 久久久久无码精品| 成人精品天堂一区二区三区| 久久久欧美一区二区| 在线观看毛片网站| www.av精品| 日本一区二区免费看| 9999精品成人免费毛片在线看 | 最新亚洲精品| 欧美另类交人妖| 中文字幕1区2区3区| 99re亚洲国产精品| wwwjizzjizzcom| 日韩一区二区三免费高清在线观看| 亚洲精品xxx| 麻豆一区二区三区精品视频| 韩国一区二区在线观看| 日本最新一区二区三区视频观看| 91九色美女在线视频| 91精品国产欧美日韩| 国产综合精品久久久久成人av | 99re精彩视频| 国产精品一区二区av交换| 久久久久久91香蕉国产| 国产精品久久久久久在线| 欧美激情资源网| 黄色国产精品视频| 日韩人体视频| 18一19gay欧美视频网站| 亚洲免费一级片| 一区二区欧美精品| 三级黄色片免费观看| 欧美r级电影| 国产免费一区二区三区香蕉精| 黄色软件在线观看| 色综合天天综合网天天狠天天 | 久久免费国产视频| 亚洲乱码在线观看| 亚洲激情图片小说视频| 亚洲一级片av| 永久91嫩草亚洲精品人人| 成人黄色片网站| 巨大荫蒂视频欧美大片| 538prom精品视频线放| 亚洲区一区二区三| 国产麻豆视频一区二区| 欧美少妇在线观看| 99热这里只有精品首页| 欧美激情二区三区| 日韩中文字幕综合| 欧美日韩免费观看中文| 久久无码人妻精品一区二区三区| 先锋影音久久| 日本一区美女| 日韩黄色三级在线观看| 久久网福利资源网站| a视频免费在线观看| 亚洲国产精品视频| 粉嫩av懂色av蜜臀av分享| 亚洲欧美成人综合| 日韩久久在线| 国产精品日韩精品在线播放| 欧美激情2020午夜免费观看| 天堂中文在线观看视频| 91黄色小视频| 日本精品在线免费观看| 成人一区二区三区视频| 久久久久久久久久久久久国产精品| 欧美大片网址| 国产精品激情自拍| 国产1区在线| 欧美一区二区福利视频| 国产亚洲成人精品| 久久久国产综合精品女国产盗摄| 狠狠躁狠狠躁视频专区| 影视亚洲一区二区三区| 九九九久久久| 在线成人免费| 欧美一级高清免费播放| 夜级特黄日本大片_在线| 欧美大片拔萝卜| 亚洲影院在线播放| 日韩一区在线播放| 国产精品无码一区二区三区免费 | 麻豆导航在线观看| 91麻豆精品国产91久久久更新时间 | 国产调教精品| 国产精品丝袜白浆摸在线| 中文在线免费| 亚洲视频axxx| 亚洲精品一区二区三区四区| 在线观看91精品国产入口| 欧美精品一级片| 国产亚洲精品久| 两性午夜免费视频| 日韩精品亚洲一区| 青草青青在线视频| 亚洲乱码精品| 日韩精品久久一区| 林ゆな中文字幕一区二区| 成人高h视频在线| 性孕妇free特大另类| 欧美人在线视频| 日本美女在线中文版| 亚洲精品自拍偷拍| 亚洲AV无码精品自拍| 欧美性xxxxx极品少妇| 久久中文字幕无码| 亚洲色欲色欲www| 亚洲第一视频区| 99视频在线观看一区三区| 日本r级电影在线观看| 青青草91视频| 亚洲色欲综合一区二区三区| 欧美区国产区| 亚洲天堂电影网| 一区二区美女| 精品国产一区二区三区麻豆小说 | 国产精品xxx在线观看www| 精品女同一区二区三区在线观看| 欧美一区二区色| 国产高清中文字幕在线| 欧美丰满片xxx777| caopen在线视频| 久久精品国产免费观看| av在线三区| 一区二区三区精品99久久 | 欧美成人剧情片在线观看| 北条麻妃在线| 一区二区av在线| 免费福利在线观看| 亚洲老头同性xxxxx| 午夜黄色小视频| 亚洲国产精品小视频| 黄色美女一级片| 精品国产精品网麻豆系列| 亚洲不卡免费视频| 日韩欧美中文字幕公布| 精品国自产在线观看| 欧美一级高清片| 精品久久久久久亚洲综合网站| 91精品国产综合久久福利| 96日本xxxxxⅹxxx17| 欧美精品aⅴ在线视频| 亚洲天堂手机版| 欧美老年两性高潮| 国产又粗又猛又黄又爽| 欧美精选一区二区| 国产精品一区二区免费视频| 91精品国产综合久久香蕉麻豆| 一级黄色小视频| 日韩三级免费观看| 性欧美8khd高清极品| 精品久久久久一区| 午夜国产在线视频| 亚洲日本中文字幕| av一区在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 成人av福利| 高清欧美电影在线| 国产夫妻在线播放| 国产精品福利久久久| 国产一区影院| 亚洲最大成人免费视频| 亚洲综合影院| 玖玖玖精品中文字幕| 精品视频免费| 一区二区三区四区久久| 国内视频精品| 国产精品亚洲二区在线观看| 久久成人av少妇免费| 香蕉在线观看视频| 成人av在线网| 又色又爽的视频| 亚洲午夜久久久久久久久电影院 | 久久精品国产免费| 农村末发育av片一区二区| 久久蜜桃av一区精品变态类天堂 | 国产日本欧美一区二区三区在线| 另类视频一区二区三区| 欧美成熟毛茸茸复古| 欧美黄色录像片| 久久国产精品网| 麻豆一区二区三| 无码av免费精品一区二区三区| 久久久久久久久岛国免费| chinese全程对白| 欧美日韩精品中文字幕| 国产老女人乱淫免费| 亚洲精品午夜精品| 天天干在线视频论坛| 国产精品久久久久av| 澳门精品久久国产| 亚洲一区二区三区乱码| 中文久久精品| 乳色吐息在线观看| 国产精品污网站| 国产三级av片| 欧美成人在线直播| 男人和女人做事情在线视频网站免费观看| 欧美精品成人91久久久久久久| 99久久婷婷国产综合精品首页| 国产亚洲欧美一区二区| 天天综合久久| 亚洲高清在线免费观看| heyzo一本久久综合| 欧美风情第一页| 日本二三区不卡| 四虎永久在线观看| 久久亚洲国产精品| 国产精品无码久久久久| 精品亚洲一区二区三区四区五区高| 香蕉av一区二区| 男女爽爽爽视频| 26uuu亚洲综合色| 日韩美女一级片| 日韩视频免费观看高清完整版| 欧美尤物美女在线| 国产精品欧美日韩久久| 五月天亚洲一区| 亚洲中文字幕无码专区| 成人永久aaa| 免费一级黄色大片| 51午夜精品国产| 成人免费在线| 91九色国产社区在线观看| 欧美1级片网站| 性chinese极品按摩| 欧美激情在线观看视频免费| 天堂网免费视频| 亚洲精品福利在线| 国产福利电影在线播放| 狠狠久久综合婷婷不卡| 亚洲欧洲一区| 黄色网址在线视频| 午夜视频一区在线观看| 老熟妇高潮一区二区高清视频| 欧美激情女人20p| 99久久香蕉| 国产老熟妇精品观看| 91丝袜国产在线播放| 99热只有这里有精品| 亚洲精品视频免费在线观看| 麻豆mv在线观看| 欧美xxxx黑人又粗又长精品| 性欧美精品高清| 人妻aⅴ无码一区二区三区| 欧美影视一区在线| 免费黄色在线| 亚洲综合色av| 亚洲黄色一区| 少妇按摩一区二区三区| 欧美主播一区二区三区美女| 婷婷五月在线视频| 亚洲一区二区在线| 韩日精品视频| 性欧美13一14内谢| 欧美日韩一区中文字幕| 岛国中文字幕在线| 国产精品乱码视频| 久久精品男女| 国产午夜精品久久久久久久久| 91麻豆精品久久久久蜜臀| 色图在线观看| 精选一区二区三区四区五区| 久久精品人人| 五月综合色婷婷| 亚洲国产精品嫩草影院久久| 周于希免费高清在线观看| 日韩电影免费观看高清完整| 久久99国产精品麻豆| 免费在线观看黄色av| 国产手机视频精品| 日韩av懂色| 131美女爱做视频| 国产精品美女久久久久久2018| 国产黄色片av| 日本三级久久久| 女人色偷偷aa久久天堂| 搡老熟女老女人一区二区| 欧美日韩国产首页| 成人av影院在线观看| 亚洲欧美国产精品桃花| 成人av资源网站| 国产裸体美女永久免费无遮挡| 久久免费国产视频| 欧美国产偷国产精品三区| 日本一卡二卡在线| 在线播放视频一区| 国产精品迅雷| 国产精品无码免费专区午夜| 国产欧美1区2区3区| 少妇喷水在线观看| 成人a免费视频| 葵司免费一区二区三区四区五区|