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

TCP 的那些事兒之一:TCP協議、算法和原理

網絡 網絡管理 算法
TCP是一個巨復雜的協議,因為他要解決很多問題,而這些問題又帶出了很多子問題和陰暗面。

TCP是一個巨復雜的協議,因為他要解決很多問題,而這些問題又帶出了很多子問題和陰暗面。所以學習TCP本身是個比較痛苦的過程,但對于學習的過程卻能讓人有很多收獲。關于TCP這個協議的細節,我還是推薦你去看W.Richard Stevens的《TCP/IP 詳解 卷1:協議》(當然,你也可以去讀一下RFC793以及后面N多的RFC)。另外,本文我會使用英文術語,這樣方便你通過這些英文關鍵詞來查找相關的技術文檔。

之所以想寫這篇文章,目的有三個:

  • 一個是想鍛煉一下自己是否可以用簡單的篇幅把這么復雜的TCP協議描清楚的能力。
  • 另一個是覺得現在的好多程序員基本上不會認認真真地讀本書,喜歡快餐文化,所以,希望這篇快餐文章可以讓你對TCP這個古典技術有所了解,并能體會到軟件設計中的種種難處。并且你可以從中有一些軟件設計上的收獲。
  • 最重要的希望這些基礎知識可以讓你搞清很多以前一些似是而非的東西,并且你能意識到基礎的重要。

所以,本文不會面面俱到,只是對TCP協議、算法和原理的科普。

廢話少說,首先,我們需要知道TCP在網絡OSI的七層模型中的第四層——Transport層,IP在第三層——Network層,ARP在第二層——Data Link層,在第二層上的數據,我們叫Frame,在第三層上的數據叫Packet,第四層的數據叫Segment。

首先,我們需要知道,我們程序的數據首先會打到TCP的Segment中,然后TCP的Segment會打到IP的Packet中,然后再打到以太網Ethernet的Frame中,傳到對端后,各個層解析自己的協議,然后把數據交給更高層的協議處理。

TCP頭格式

接下來,我們來看一下TCP頭的格式:

TCP頭格式(圖片來源)

你需要注意這么幾點:

  • TCP的包是沒有IP地址的,那是IP層上的事。但是有源端口和目標端口。
  • 一個TCP連接需要四個元組來表示是同一個連接(src_ip, src_port, dst_ip, dst_port)準確說是五元組,還有一個是協議。但因為這里只是說TCP協議,所以,這里我只說四元組。
  • 注意上圖中的四個非常重要的東西:
  • Sequence Number是包的序號,用來解決網絡包亂序(reordering)問題。
  • Acknowledgement Number就是ACK——用于確認收到,用來解決不丟包的問題。
  • Window又叫Advertised-Window,也就是著名的滑動窗口(Sliding Window),用于解決流控的。
  • TCP Flag ,也就是包的類型,主要是用于操控TCP的狀態機的。

關于其它的東西,可以參看下面的圖示:

(圖片來源)

TCP的狀態機

其實,網絡上的傳輸是沒有連接的,包括TCP也是一樣的。而TCP所謂的“連接”,其實只不過是在通訊的雙方維護一個“連接狀態”,讓它看上去好像有連接一樣。所以,TCP的狀態變換是非常重要的。

下面是:“TCP協議的狀態機”(圖片來源) 和 “TCP建鏈接”、“TCP斷鏈接”、“傳數據” 的對照圖,我把兩個圖并排放在一起,這樣方便在你對照著看。另外,下面這兩個圖非常非常的重要,你一定要記牢。(吐個槽:看到這樣復雜的狀態機,就知道這個協議有多復雜,復雜的東西總是有很多坑爹的事情,所以TCP協議其實也挺坑爹的)。

很多人會問,為什么建鏈接要3次握手,斷鏈接需要4次揮手?

  • 對于建鏈接的3次握手,主要是要初始化Sequence Number 的初始值。通信的雙方要互相通知對方自己的初始化的Sequence Number(縮寫為ISN:Inital Sequence Number)——所以叫SYN,全稱Synchronize Sequence Numbers。也就上圖中的 x 和 y。這個號要作為以后的數據通信的序號,以保證應用層接收到的數據不會因為網絡上的傳輸的問題而亂序(TCP會用這個序號來拼接數據)。
  • 對于4次揮手,其實你仔細看是2次,因為TCP是全雙工的,所以,發送方和接收方都需要Fin和Ack。只不過,有一方是被動的,所以看上去就成了所謂的4次揮手。如果兩邊同時斷連接,那就會就進入到CLOSING狀態,然后到達TIME_WAIT狀態。下圖是雙方同時斷連接的示意圖(你同樣可以對照著TCP狀態機看):

兩端同時斷連接(圖片來源)

另外,有幾個事情需要注意一下:

  • 關于建連接時SYN超時。試想一下,如果server端接到了clien發的SYN后回了SYN-ACK后client掉線了,server端沒有收到client回來的ACK,那么,這個連接處于一個中間狀態,即沒成功,也沒失敗。于是,server端如果在一定時間內沒有收到的TCP會重發SYN-ACK。在Linux下,默認重試次數為5次,重試的間隔時間從1s開始每次都翻售,5次的重試時間間隔為1s, 2s, 4s, 8s, 16s,總共31s,第5次發出后還要等32s都知道第5次也超時了,所以,總共需要 1s + 2s + 4s+ 8s+ 16s + 32s = 2^6 -1 = 63s,TCP才會把斷開這個連接。
  • 關于SYN Flood。一些惡意的人就為此制造了SYN Flood——給服務器發了一個SYN后,就下線了,于是服務器需要默認等63s才會斷開連接,這樣,黑客就可以把服務器的syn連接的隊列耗盡,讓正常的連接請求不能處理。于是,Linux下給了一個叫tcp_syncookies的參數來應對這個事——當SYN隊列滿了后,TCP會通過源地址端口、目標地址端口和時間戳打造出一個特別的Sequence Number發回去(又叫cookie),如果是黑客則不會有響應,如果是正常連接,則會把這個 SYN Cookie發回來,然后服務端可以通過cookie建連接(即使你不在SYN隊列中)。請注意,請先千萬別用tcp_syncookies來處理正常的大負載的連接的情況。因為,synccookies是妥協版的TCP協議,并不嚴謹。對于正常的請求,你應該調整三個TCP參數可供你選擇,一個是:tcp_synack_retries 可以用他來減少重試次數;第二個是:tcp_max_syn_backlog,可以增大SYN連接數;第三個是:tcp_abort_on_overflow 處理不過來干脆就直接拒絕連接了。
  • 關于ISN的初始化。ISN是不能hard code的,不然會出問題的——比如:如果連接建好后始終用1來做ISN,如果client發了30個segment過去,但是網絡斷了,于是 client重連,又用了1做ISN,但是之前連接的那些包到了,于是就被當成了新連接的包,此時,client的Sequence Number 可能是3,而Server端認為client端的這個號是30了。全亂了。RFC793中說,ISN會和一個假的時鐘綁在一起,這個時鐘會在每4微秒對ISN做加一操作,直到超過2^32,又從0開始。這樣,一個ISN的周期大約是4.55個小時。因為,我們假設我們的TCP Segment在網絡上的存活時間不會超過Maximum Segment Lifetime(縮寫為MSL – Wikipedia語條),所以,只要MSL的值小于4.55小時,那么,我們就不會重用到ISN。
  • 關于 MSL 和 TIME_WAIT。通過上面的ISN的描述,相信你也知道MSL是怎么來的了。我們注意到,在TCP的狀態圖中,從TIME_WAIT狀態到CLOSED狀態,有一個超時設置,這個超時設置是 2*MSL(RFC793定義了MSL為2分鐘,Linux設置成了30s)為什么要這有TIME_WAIT?為什么不直接給轉成CLOSED狀態呢?主要有兩個原因:1)TIME_WAIT確保有足夠的時間讓對端收到了ACK,如果被動關閉的那方沒有收到Ack,就會觸發被動端重發Fin,一來一去正好2個MSL,2)有足夠的時間讓這個連接不會跟后面的連接混在一起(你要知道,有些自做主張的路由器會緩存IP數據包,如果連接被重用了,那么這些延遲收到的包就有可能會跟新連接混在一起)。你可以看看這篇文章《TIME_WAIT and its design implications for protocols and scalable client server systems》。
  • 關于TIME_WAIT數量太多。從上面的描述我們可以知道,TIME_WAIT是個很重要的狀態,但是如果在大并發的短鏈接下,TIME_WAIT 就會太多,這也會消耗很多系統資源。只要搜一下,你就會發現,十有八九的處理方式都是教你設置兩個參數,一個叫tcp_tw_reuse,另一個叫tcp_tw_recycle的參數,這兩個參數默認值都是被關閉的,后者recyle比前者resue更為激進,resue要溫柔一些。另外,如果使用tcp_tw_reuse,必需設置tcp_timestamps=1,否則無效。這里,你一定要注意,打開這兩個參數會有比較大的坑——可能會讓TCP連接出一些詭異的問題(因為如上述一樣,如果不等待超時重用連接的話,新的連接可能會建不上。正如官方文檔上說的一樣“It should not be changed without advice/request of technical experts”)。
  • 關于tcp_tw_reuse。官方文檔上說tcp_tw_reuse 加上tcp_timestamps(又叫PAWS, for Protection Against Wrapped Sequence Numbers)可以保證協議的角度上的安全,但是你需要tcp_timestamps在兩邊都被打開(你可以讀一下tcp_twsk_unique的源碼 )。我個人估計還是有一些場景會有問題。
  • 關于tcp_tw_recycle。如果是tcp_tw_recycle被打開了話,會假設對端開啟了tcp_timestamps,然后會去比較時間戳,如果時間戳變大了,就可以重用。但是,如果對端是一個NAT網絡的話(如:一個公司只用一個IP出公網)或是對端的IP被另一臺重用了,這個事就復雜了。建鏈接的SYN可能就被直接丟掉了(你可能會看到connection time out的錯誤)(如果你想觀摩一下Linux的內核代碼,請參看源碼 tcp_timewait_state_process)。
  • 關于tcp_max_tw_buckets。這個是控制并發的TIME_WAIT的數量,默認值是180000,如果超限,那么,系統會把多的給destory掉,然后在日志里打一個警告(如:time wait bucket table overflow),官網文檔說這個參數是用來對抗DDoS的。也說的默認值180000并不小。這個還是需要根據實際情況考慮。

Again,使用tcp_tw_reuse和tcp_tw_recycle來解決TIME_WAIT的問題是非常非常危險的,因為這兩個參數違反了TCP協議(RFC 1122)。

其實,TIME_WAIT表示的是你主動斷連接,所以,這就是所謂的“不作死不會死”。試想,如果讓對端斷連接,那么這個破問題就是對方的了,呵呵。另外,如果你的服務器是于HTTP服務器,那么設置一個HTTP的KeepAlive有多重要(瀏覽器會重用一個TCP連接來處理多個HTTP請求),然后讓客戶端去斷鏈接(你要小心,瀏覽器可能會非常貪婪,他們不到萬不得已不會主動斷連接)。

數據傳輸中的Sequence Number

下圖是我從Wireshark中截了個我在訪問coolshell.cn時的有數據傳輸的圖給你看一下,SeqNum是怎么變的。(使用Wireshark菜單中的Statistics ->Flow Graph… )

你可以看到,SeqNum的增加是和傳輸的字節數相關的。上圖中,三次握手后,來了兩個Len:1440的包,而第二個包的SeqNum就成了1441。然后前面一個ACK回的是1441,表示一個1440收到了。

注意:如果你用Wireshark抓包程序看3次握手,你會發現SeqNum總是為0,不是這樣的,Wireshark為了顯示更友好,使用了Relative SeqNum——相對序號,你只要在右鍵菜單中的protocol preference 中取消掉就可以看到“Absolute SeqNum”了。

TCP重傳機制

TCP要保證所有的數據包都可以到達,所以,必需要有重傳機制。

注意,接收端給發送端的Ack確認只會確認末尾一個連續的包,比如,發送端發了1,2,3,4,5一共五份數據,接收端收到了1,2,于是回ack 3,然后收到了4(注意此時3沒收到),此時的TCP會怎么辦?我們要知道,因為正如前面所說的,SeqNum和Ack是以字節數為單位,所以ack的時候,不能跳著確認,只能確認相對較大的連續收到的包,不然,發送端就以為之前的都收到了。

超時重傳機制

一種是不回ack,死等3,當發送方發現收不到3的ack超時后,會重傳3。一旦接收方收到3后,會ack 回 4——意味著3和4都收到了。

但是,這種方式會有比較嚴重的問題,那就是因為要死等3,所以會導致4和5即便已經收到了,而發送方也完全不知道發生了什么事,因為沒有收到Ack,所以,發送方可能會悲觀地認為也丟了,所以有可能也會導致4和5的重傳。

對此有兩種選擇:

  • 一種是僅重傳timeout的包。也就是第3份數據。
  • 另一種是重傳timeout后所有的數據,也就是第3,4,5這三份數據。

這兩種方式有好也有不好。一種會節省帶寬,但是慢,第二種會快一點,但是會浪費帶寬,也可能會有無用功。但總體來說都不好。因為都在等timeout,timeout可能會很長(在下篇會說TCP是怎么動態地計算出timeout的)。

快速重傳機制

于是,TCP引入了一種叫Fast Retransmit 的算法,不以時間驅動,而以數據驅動重傳。也就是說,如果,包沒有連續到達,就ack末尾那個可能被丟了的包,如果發送方連續收到3次相同的ack,就重傳。Fast Retransmit的好處是不用等timeout了再重傳。

比如:如果發送方發出了1,2,3,4,5份數據,一份先到送了,于是就ack回2,結果2因為某些原因沒收到,3到達了,于是還是ack回2,后面的4和5都到了,但是還是ack回2,因為2還是沒有收到,于是發送端收到了三個ack=2的確認,知道了2還沒有到,于是就馬上重轉2。然后,接收端收到了2,此時因為3,4,5都收到了,于是ack回6。示意圖如下:

Fast Retransmit只解決了一個問題,就是timeout的問題,它依然面臨一個艱難的選擇,就是,是重傳之前的一個還是重傳所有的問題。對于上面的示例來說,是重傳#2呢還是重傳#2,#3,#4,#5呢?因為發送端并不清楚這連續的3個ack(2)是誰傳回來的?也許發送端發了20份數據,是#6,#10,#20傳來的呢。這樣,發送端很有可能要重傳從2到20的這堆數據(這就是某些TCP的實際的實現)。可見,這是一把雙刃劍。

SACK 方法

另外一種更好的方式叫:Selective Acknowledgment (SACK)(參看RFC 2018),這種方式需要在TCP頭里加一個SACK的東西,ACK還是Fast Retransmit的ACK,SACK則是匯報收到的數據碎版。參看下圖:

這樣,在發送端就可以根據回傳的SACK來知道哪些數據到了,哪些沒有到。于是就優化了Fast Retransmit的算法。當然,這個協議需要兩邊都支持。在 Linux下,可以通過tcp_sack參數打開這個功能(Linux 2.4后默認打開)。

這里還需要注意一個問題——接收方Reneging,所謂Reneging的意思就是接收方有權把已經報給發送端SACK里的數據給丟了。這樣干是不被鼓勵的,因為這個事會把問題復雜化了,但是,接收方這么做可能會有些極端情況,比如要把內存給別的更重要的東西。所以,發送方也不能完全依賴SACK,還是要依賴ACK,并維護Time-Out,如果后續的ACK沒有增長,那么還是要把SACK的東西重傳,另外,接收端這邊永遠不能把SACK的包標記為Ack。

注意:SACK會消費發送方的資源,試想,如果一個黑客給數據發送方發一堆SACK的選項,這會導致發送方開始要重傳甚至遍歷已經發出的數據,這會消耗很多發送端的資源。詳細的東西請參看《TCP SACK的性能權衡》。

Duplicate SACK – 重復收到數據的問題

Duplicate SACK又稱D-SACK,其主要使用了SACK來告訴發送方有哪些數據被重復接收了。RFC-2883 里有詳細描述和示例。下面舉幾個例子(來源于RFC-2883)

D-SACK使用了SACK的首段來做標志,

  • 如果SACK的首段的范圍被ACK所覆蓋,那么就是D-SACK
  • 如果SACK的首段的范圍被SACK的第二個段覆蓋,那么就是D-SACK

示例一:ACK丟包

下面的示例中,丟了兩個ACK,所以,發送端重傳了開始的那個數據包(3000-3499),于是接收端發現重復收到,于是回了一個SACK=3000-3500,因為ACK都到了4000意味著收到了4000之前的所有數據,所以這個SACK就是D-SACK——旨在告訴發送端我收到了重復的數據,而且我們的發送端還知道,數據包沒有丟,丟的是ACK包。

  • Transmitted Received ACK Sent
  • Segment Segment (Including SACK Blocks)
  • 3000-3499 3000-3499 3500 (ACK dropped)
  • 3500-3999 3500-3999 4000 (ACK dropped)
  • 3000-3499 3000-3499 4000, SACK=3000-3500
  • ---------

示例二,網絡延誤

下面的示例中,網絡包(1000-1499)被網絡給延誤了,導致發送方沒有收到ACK,而后面到達的三個包觸發了“Fast Retransmit算法”,所以重傳,但重傳時,被延誤的包又到了,所以,回了一個SACK=1000-1500,因為ACK已到了3000,所以,這個SACK是D-SACK——標識收到了重復的包。

這個案例下,發送端知道之前因為“Fast Retransmit算法”觸發的重傳不是因為發出去的包丟了,也不是因為回應的ACK包丟了,而是因為網絡延時了。

  • Transmitted Received ACK Sent
  • Segment Segment (Including SACK Blocks)
  • 500-999 500-999 1000
  • 1000-1499 (delayed)
  • 1500-1999 1500-1999 1000, SACK=1500-2000
  • 2000-2499 2000-2499 1000, SACK=1500-2500
  • 2500-2999 2500-2999 1000, SACK=1500-3000
  • 1000-1499 1000-1499 3000
  • 1000-1499 3000, SACK=1000-1500
  • ---------

可見,引入了D-SACK,有這么幾個好處:

1)可以讓發送方知道,是發出去的包丟了,還是回來的ACK包丟了。

2)是不是自己的timeout太小了,導致重傳。

3)網絡上出現了先發的包后到的情況(又稱reordering)

4)網絡上是不是把我的數據包給復制了。

知道這些東西可以很好得幫助TCP了解網絡情況,從而可以更好的做網絡上的流控。

Linux下的tcp_dsack參數用于開啟這個功能(Linux 2.4后默認打開)。

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-01-13 11:11:29

TCP連接耗時網絡協議

2022-09-21 11:54:22

TCPUDP協議

2010-06-13 15:32:57

TCP協議

2010-07-06 15:50:12

TCP和UDP協議

2013-05-27 10:48:16

TCPUDP傳輸協議

2020-07-28 08:38:10

TCPUDP協議

2021-09-04 16:12:33

壓縮算法數據

2018-12-03 05:54:48

Wireshark網絡協議TCP

2011-08-19 15:32:06

2010-07-01 16:38:18

Linux TCP I

2013-08-01 10:01:02

網絡協議TCP協議UDP協議

2019-01-07 12:02:02

TCP長連接Java

2010-06-13 15:16:02

2014-10-10 15:28:08

TCP

2020-01-05 22:46:31

TCPIP網絡協議

2020-11-10 13:52:19

TCPRST攻擊IP

2010-06-19 13:32:36

TCP IP協議棧

2021-05-12 00:07:27

TCPIP協議

2019-09-30 09:41:04

五層協議OSITCP

2019-05-16 15:19:40

TCP協議TCP通信三次握手
點贊
收藏

51CTO技術棧公眾號

日韩中文字幕亚洲| 在线欧美小视频| 高清免费日韩| 亚洲欧美精品一区二区三区| 成人黄色av| 欧美性极品少妇| 三级在线免费观看| 日韩欧美亚洲系列| 麻豆国产精品一区二区三区| 欧美极品在线播放| 日韩视频在线观看免费视频| 麻豆精品久久| 一本到三区不卡视频| 自拍另类欧美| 色综合久久网女同蕾丝边| 精品一区二区综合| 青青久久av北条麻妃黑人| 精品在线观看一区| 日韩美女毛片| 欧美一区二区三区在线看| 日本香蕉视频在线观看| 91视频在线观看| av一区二区三区四区| 国产精品亚洲美女av网站| 欧美一区二区三区图| 91嫩草国产丨精品入口麻豆| 青青草在线视频免费观看| 精品一区二区三区的国产在线播放| 久久久久九九九九| 青青操在线视频观看| 国产伦精品一区二区三区免费优势| 欧美最新大片在线看| www.九色.com| 国产成人无吗| 日本一区二区视频在线观看| 国产精品国产亚洲精品看不卡15| 一区二区三区亚洲视频| 老司机亚洲精品| 午夜精品一区二区三区在线视| 精品国产视频一区二区三区| 成人嫩草影院| 国产视频精品va久久久久久| 中文字幕无人区二| 日韩三级av高清片| 欧美日高清视频| 亚洲欧美日韩一级| 先锋欧美三级| 在线视频国内一区二区| 国产欧美高清在线| videos性欧美另类高清| 激情成人中文字幕| 欧美黑人经典片免费观看| 毛片网站在线看| 亚洲自拍偷拍av| 久久www视频| 日本乱理伦在线| 亚洲欧美日韩久久| 欧美a级黄色大片| 主播国产精品| 亚洲一区国产视频| 日韩极品视频在线观看| 久久不射影院| 亚洲图片有声小说| 91免费黄视频| 水蜜桃在线视频| 一本到三区不卡视频| 日本999视频| 亚洲四虎影院| 欧美精品乱人伦久久久久久| 日韩成人av免费| 欧美大片91| 亚洲第一区中文99精品| jizz日本免费| 成久久久网站| 久久亚洲电影天堂| 黄页网站免费观看| 99re国产精品| 国产精品扒开腿做爽爽爽男男 | 久久93精品国产91久久综合| 亚洲天堂影视av| 91禁男男在线观看| 午夜国产一区| 欧美亚洲日本黄色| 最近中文在线观看| 国内成+人亚洲+欧美+综合在线| 波多野结衣久草一区| 视频在线不卡| 亚洲欧洲精品天堂一级| 91午夜在线观看| 亚洲成人激情社区| 日韩亚洲欧美在线| 日本黄色网址大全| 98精品久久久久久久| 国内精品久久久久影院 日本资源| 区一区二在线观看| 国产精品综合av一区二区国产馆| 精品欧美一区二区三区久久久| 国产黄在线看| 夜夜嗨av一区二区三区网页| 欧美牲交a欧美牲交aⅴ免费真 | 国产乱码精品一区二区三区不卡| 蜜桃视频在线观看网站| 亚洲色图欧美在线| 欧美日韩中文在线视频| www.成人在线.com| 日韩精品有码在线观看| 中文字幕五月天| 亚洲一区一卡| 91丝袜脚交足在线播放| 国内精品在线视频| 亚洲一区二区三区在线播放| av丝袜天堂网| 琪琪久久久久日韩精品| 伦理中文字幕亚洲| 国产精品成人久久久| 成人精品免费视频| 色乱码一区二区三区熟女| 午夜久久中文| 欧美不卡激情三级在线观看| 国产第一页精品| 鲁大师影院一区二区三区| www.av一区视频| 91社区在线高清| 高跟丝袜一区二区三区| 日批视频在线看| 日韩欧美高清| 国产精品成人v| 空姐吹箫视频大全| 亚洲精选在线视频| 美女扒开大腿让男人桶| 国产一区二区三区精品在线观看| 亚洲一级片在线看| 可以免费看的av毛片| 国产精品主播直播| 一区二区视频在线播放| 成人精品国产| 国产亚洲精品成人av久久ww| 国产无遮挡又黄又爽| 国产剧情av麻豆香蕉精品| 亚洲一区三区| 久久女人天堂| 正在播放国产一区| 久草视频在线免费| 国产亚洲综合性久久久影院| 国产免费黄色av| 青青草原在线亚洲| 91精品国产91久久久久| 乱精品一区字幕二区| 亚洲一区二区三区四区中文字幕 | 久久永久免费视频| 2020日本不卡一区二区视频| 国产h视频在线播放| 国产丝袜一区| 69av在线播放| 丝袜+亚洲+另类+欧美+变态| 精品久久久免费| 中文字幕免费在线播放| 中文日韩欧美| 欧美日韩国产高清视频| 久久99久久99精品免观看软件| 亚洲欧美日韩高清| 波多野结衣在线观看一区| 国产日韩欧美综合一区| 一本色道久久亚洲综合精品蜜桃| 91视频综合| 亚洲一区二区免费在线| 高h视频在线播放| 日韩电影在线观看中文字幕 | 国精产品99永久一区一区| √天堂8资源中文在线| 日韩高清人体午夜| 欧美一级淫片免费视频黄| 国产亚洲精品久| 午夜久久福利视频| 欧美日韩p片| 久精品国产欧美| 国内欧美日韩| 欧美福利在线观看| 日本中文字幕一区二区有码在线| 色婷婷久久综合| 日韩精品久久久久久久的张开腿让| 极品少妇一区二区三区精品视频| 妺妺窝人体色www看人体| 狼人天天伊人久久| 国产成人精品999| 精产国品自在线www| 亚洲福利视频免费观看| 免费精品一区二区| 亚洲欧美日本韩国| av无码av天天av天天爽| 九色综合狠狠综合久久| 奇米影视亚洲色图| av在线不卡顿| 国产福利久久精品| 国产福利亚洲| 97视频在线免费观看| 日本中文字幕在线观看| 亚洲国产精品久久精品怡红院| 日韩av大片在线观看| 亚洲欧洲性图库| 国产一区二区免费| 日韩伦理在线免费观看| 欧美日本成人| 91中文字幕一区| 毛片无码国产| 欧美激情免费在线| 日韩三级影院| 亚洲级视频在线观看免费1级| 国产乡下妇女三片| 精品动漫一区二区三区| 成人在线观看高清| 国产日韩成人精品| 一级黄色片毛片| 国产综合久久久久久鬼色| 欧美日韩激情视频在线观看| 欧美激情第二页| 天堂av一区二区| 国产精品tv| 51国偷自产一区二区三区的来源| 日韩和的一区二在线| 午夜欧美不卡精品aaaaa| 国产成人无吗| 日韩中文字幕免费| 毛片免费在线观看| 亚洲а∨天堂久久精品9966| 国产免费黄色网址| 欧美日韩国产一级片| 无码无套少妇毛多18pxxxx| 亚洲成人av电影| 日韩精品一区二区亚洲av性色| 欧美高清在线精品一区| 999精品免费视频| 国产成人免费在线视频| 欧美精品 - 色网| 麻豆精品视频在线观看免费| 欧美精品aaaa| 丝袜美腿亚洲一区| 99久久国产宗和精品1上映| av成人天堂| 日本丰满少妇xxxx| 在线日韩中文| 国产无限制自拍| 欧美日韩1区| 国产av熟女一区二区三区| 欧美fxxxxxx另类| 久久福利一区二区| 欧美午夜不卡| av网站大全免费| 亚洲日本欧美| 国产97在线 | 亚洲| 中文在线不卡| 国产日韩一区二区在线观看| 美女精品在线观看| 日韩欧美xxxx| 日韩va欧美va亚洲va久久| 无需播放器的av| 精品亚洲国产成人av制服丝袜| 最新免费av网址| 国产精品综合网| 男人网站在线观看| 91热门视频在线观看| 爱爱的免费视频| 国产日韩精品一区| 久草视频手机在线| 亚洲国产成人91porn| 1级黄色大片儿| 色婷婷久久久亚洲一区二区三区| 少妇无套内谢久久久久| 在线综合视频播放| 性中国xxx极品hd| 亚洲精品久久7777777| 国产一级二级三级在线观看| 中文字幕亚洲情99在线| 午夜小视频在线观看| 96精品视频在线| 成人国产在线| 99久久一区三区四区免费| 你懂的在线观看一区二区| 日韩精品久久一区二区三区| 国产精品麻豆久久| 岛国大片在线播放| 久久亚洲美女| 搡的我好爽在线观看免费视频| 成人免费三级在线| x88av在线| 亚洲精品久久久蜜桃| 国语对白永久免费| 欧美精三区欧美精三区| 秋霞网一区二区| 揄拍成人国产精品视频| av观看在线| 全球成人中文在线| 国产日韩一区二区三免费高清| 国产精品一区二区在线观看| 欧美亚洲国产一区| 日本香蕉视频在线观看| 免费在线观看日韩欧美| 漂亮人妻被黑人久久精品| 中文字幕欧美三区| 久青草视频在线观看| 色菇凉天天综合网| 性少妇videosexfreexxx片| 亚洲毛片在线看| 亚洲卡一卡二| 国产精品第三页| 欧美毛片免费观看| 亚洲小说欧美另类激情| 久久精品网址| 国产原创剧情av| 亚洲视频网在线直播| 中文字幕国产在线观看| 欧美xxxxxxxx| 色大18成网站www在线观看| 久久露脸国产精品| 国产精选久久| 亚洲五月六月| 老司机亚洲精品| 青青草视频播放| 亚洲国产日产av| av中文字幕观看| 日韩中文字在线| 日韩av一级| 欧美日韩一区二区三| 日韩视频一区| 国产女主播在线播放| 亚洲黄色尤物视频| 一级特黄特色的免费大片视频| 亚洲欧美精品一区| 九色porny自拍视频在线播放| 鬼打鬼之黄金道士1992林正英| 99久久这里只有精品| 日本xxxx黄色| 欧美激情中文字幕一区二区| 黄网在线观看视频| 亚洲成av人乱码色午夜| 日韩特级毛片| 51蜜桃传媒精品一区二区| 91精品国产91久久久久久黑人| 天天干天天综合| 国产精品区一区二区三区| 中文字幕一区二区人妻视频| 日韩毛片在线看| 高清不卡av| 欧美午夜精品久久久久免费视 | 久久免费视频在线| 一区中文字幕电影| 成人短视频在线观看免费| 国产精品一区在线| 久草视频免费在线| 精品国产亚洲在线| 波多野在线观看| 国产在线一区二区三区播放| 99国产精品| 丝袜美腿中文字幕| 在线观看日韩高清av| 国产高清一级毛片在线不卡| 国产精品麻豆va在线播放| 成人影视亚洲图片在线| 亚洲涩涩在线观看| 自拍偷拍欧美精品| 精品久久久久久亚洲综合网站| 久久99青青精品免费观看| caoporn成人| 欧美 日本 亚洲| 欧美国产一区在线| 97国产成人无码精品久久久| 日韩视频免费大全中文字幕| 亚洲精品在线播放| 9久久9毛片又大又硬又粗| 国产欧美一二三区| 国产精品无码AV| 久久久久久久久亚洲| 精品一区毛片| 欧美视频国产视频| 亚洲国产成人porn| 国产视频在线看| 91在线视频免费| 日韩视频不卡| 国产精品综合激情| 精品免费视频.| 深夜视频一区二区| 91制片厂免费观看| 91视视频在线直接观看在线看网页在线看 | 日本女优一区| 色哟哟免费视频| 欧美性生活大片免费观看网址| 日韩伦理在线电影| 国产精品大全| 性感少妇一区| 国产这里有精品| 亚洲品质视频自拍网| 日本精品视频| 亚洲欧美激情网| 亚洲综合色网站| www.亚洲资源| 好吊色欧美一区二区三区四区 | 国产永久av在线| www.久久久| 另类人妖一区二区av| 亚洲日本韩国在线|