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

瀏覽器輸入一個網址發生了什么(二): TCP模塊封裝和傳輸機制

網絡 通信技術 瀏覽器
本節將介紹http報文在協議棧中如何進一步處理并發送到網絡中。這里說的協議棧是指TCP/IP協議棧。

本系列文章開始將圍繞著“往瀏覽器輸入網址后發生了什么”介紹計算機網絡的相關基礎知識。上節簡單的介紹了http報文封裝和dns請求獲取目標IP。

接上文:瀏覽器輸入一個網址發生了什么(一) 揭秘DNS請求和解析全流程

本節將介紹http報文在協議棧中如何進一步處理并發送到網絡中。這里說的協議棧是指TCP/IP協議棧。

對于TCP傳輸而言,請求的發送和接收需要通過連接進行;而UDP傳輸則不用;本節會先介紹TCP傳輸的過程再介紹UDP傳輸。

在此之前,需要先介紹一些相關概念。

一、協議棧

協議棧是由多個具有層級的協議模塊組合而成的一個軟件程序。每個協議模塊通常都要和上下層的兩個其他協議模塊通信。最低級的協議總是描述與物理硬件交互,為每個高級的層次增加更多的特性。

協議是計算機在網絡通信時需要遵循的規范和約定,而協議棧則是這種規范和約定的實現,也就是具體的代碼和函數以供上層調用。每一層協議模塊都是為上一層協議模塊服務,本層的協議模塊完成某個操作只需要調用下層模塊的方法而無需關注其具體怎么實現。

二、套接字與連接

對于TCP傳輸而言,請求的發送和接收需要通過連接進行。我們可以把連接看做是一條端到端之間的管道,這條管道的兩端都既可以是發送方也可以是接收方,數據在這條管道是雙向流動的。而建立這條管道的出入口我們稱之為套接字,分別在客戶端和服務端兩方,兩方需要先創建套接字才能建立連接。連接建立后,請求和響應會通過套接字發出并通過這個管道進行傳輸。

當然管道只是一個比喻,現實中是不存在這么一個管道。

對于UDP傳輸,雖然不需要建立連接,但是依舊要創建套接字,并通過套接字發送和接收包。

三、什么是套接字

套接字本質是存放諸如IP地址、端口號、通信操作狀態這樣的通信控制信息的內存空間里的數據。協議棧在執行操作時會用到這些控制信息,如封裝報文時需要知道通信對象的IP和端口,如協議棧需要知道數據發送后經過了多長時間仍未返回以便重發,如比對序號是否正確,如保存窗口大小從而將窗口大小帶到TCP頭部通知通信的另一方,這都要查詢套接字的控制信息得知。

協議棧是根據套接字中記錄的控制信息來工作的。

在windows下執行netstat可以顯示套接字內容。如下圖所示,每一行就是一個套接字:

  • 第一列:協議,通常為TCP或UDP,表示該套接字是為TCP傳輸還是UDP傳輸而創建的。
  • 第二列:本地端的ip和端口;如果安裝了多塊網卡則會顯示不同的IP;0.0.0.0表示不綁定IP地址。
  • 第三列:遠程端的IP和端口;0.0.0.0表示還未開始通信,沒有綁定IP和端口;此外,UDP協議中的套接字不綁定對方地址和端口因此顯示*:*。
  • 第四列:通信狀態;LISTENING 等待對方連接;ESTABLISHED 完成連接正在通信。
  • 第五列:使用該套接字程序的進程ID。

回到正題。

當客戶端程序(瀏覽器)拿到目標IP地址后,會經歷:創建套接字、連接、發送數據、接收數據、斷開連接、刪除套接字。如下圖所示

1.創建套接字

應用程序(瀏覽器)調用socket()方法,然后工作會切到操作系統的協議棧進行。協議棧會先分配一個用于存放套接字的內存空間,并向其寫入初始狀態,協議棧會返回一個代表套接字的描述符(一個整型)給瀏覽器。

之后當瀏覽器需要收發數據時(connect/read/write)就需要向協議棧提供這個描述符。協議棧會根據這個描述符找到對應的套接字進行操作。

2.建立連接

創建套接字后,應用程序(瀏覽器)會調用connect方法,工作會切換到操作系統的協議棧,由協議棧負責將本地的套接字和服務器的套接字進行連接。

連接的本質是通信雙方交換控制信息并記錄到雙方套接字中,之后的每一次數據收發時數據包都要帶上套接字中的控制信息。例如在本地套接字中記錄下服務器的ip和端口,并告知服務器請求方的ip和端口,讓服務端把客戶端的ip端口記錄到服務端套接字中,此外還有其他的控制信息。

另外,連接操作過程中,通信雙方還會分配一塊用于臨時存放收發數據的內存空間。

四、TCP控制信息(TCP頭部)

上面所說的控制信息會寫入到TCP報文的頭部發送到服務端,如下所示:

上面這些字段都是保存在套接字中,并且在需要構建頭部的時候從套接字中取出這些信息。再通信雙方的不斷通信的過程中會更新到套接字中(如窗口和序號)。

五、TCP傳輸的數據包

無論是連接、收發數據和斷開連接,通信雙方都需要通過發送數據包來進行。

對于連接和斷開連接而言,無需傳遞應用程序(瀏覽器)數據,因此數據包只用包含控制信息(也就是頭部信息)。而收發數據時的包會包含控制信息和數據塊內容。應用程序的數據可能會很大,因此協議棧會將數據切分為一個個數據塊,每個數據塊都添加上頭部控制信息做成包再發送。

如下所示:

下面我們正式介紹連接的過程:

  • 應用程序(瀏覽器)調用socket庫的connect(<套接字的描述符>, <服務端的IP和端口>, ...)
  • 工作切換到TCP/IP協議棧,協議棧構建包含諸多控制信息(通信雙方的端口,窗口,序號,ACK號等)的TCP頭部(TCP報文),并將頭部中的SYN比特位置為1,表示該報文是向服務端請求建立連接而建的。
  • TCP模塊將構建好的TCP報文(該報文只包含頭部信息,沒有數據內容)交給IP模塊,由IP模塊進一步封裝成包(添加IP頭部和MAC頭部),IP模塊再通過網卡將包轉為電信號,借由網線傳輸給服務端。(包是如何根據IP地址找到服務器,以及包在網絡中的傳輸過程會在后面介紹)。
  • 包到達服務端之后(通過網線、網卡到達服務端協議棧),根據報文中指定的端口找到服務端對應的套接字。服務端的套接字從監聽狀態變成正在連接的狀態,并且還會將報文中的控制信息寫入到套接字中保存。
  • 之后服務端的協議棧也會封裝響應報文,該過程和上述A/B/C步驟類似,并且報文中的TCP頭部的SYN和ACK位置為1,意味著服務端向發送方發起連接請求(SYN=1)和接收到發送方的包(ACK=1)。
  • 響應包到達發送方后,協議棧會把套接字的連接狀態改為已連接,并將服務端的IP和端口保存到套接字中。然后封裝一個ACK為1的包給服務端表示接受到服務端的連接請求包。
  • 服務端接收到客戶端的ACK為1的包后連接操作才算完成。

到此為止,客戶端和服務端的套接字都保存了對方的信息,控制流程從操作系統回到了應用程序,之后可以開始真正發送客戶端的http消息了。在執行close之前,連接會一直保持。

上述雙方交換3次數據包的過程也是大家熟悉的“三次握手”過程。

http消息封裝成網絡包發送

連接完成以后,應用程序(瀏覽器)會調用socket庫的write()方法將數據(封裝好的http消息)傳遞給協議棧,由協議棧發送給服務端。

在講數據收發流程之前,需要先介紹一些數據收發的細節和重點:

六、網絡包

包是網絡數據在網絡層(如IP包和以太網包)的稱呼。

包是由記錄了控制信息的頭部和包的內容組成。IP頭部和MAC頭部是在網絡層添加的,因此都能被稱為包:

TCP模塊負責將http消息加上TCP頭部控制信息,并將這些數據傳遞給下一層的IP模塊,由IP模塊封裝IP頭部和MAC頭部形成網絡包,其中TCP頭部記錄著通信雙方的端口號,IP頭部記錄著通信雙方的IP。無論是連接階段的數據還是數據收發的數據都會經過IP模塊的封裝和發送。

IP頭部:

PS:IP地址不是分配給計算機的而是分配給網卡的。因此如果計算機內包含多塊網卡就可以擁有多個IP地址。如果客戶端和服務端主機有多個IP地址,那么在IP頭部中填寫哪個IP地址取決于協議棧想讓哪塊網卡發送數據包,并把數據包發送到服務器的哪塊網卡上。

MAC頭部:

下章節再對IP頭部和MAC頭部進行介紹。這里我們只需要知道添加了這兩個頭部之后數據就變成網絡包,再經由IP模塊傳遞給網卡,傳遞給網卡的時候,網絡包才算正式離開了協議棧。

其他層的網絡數據稱呼:

  • 幀:數據在數據鏈路層的單位
  • 包:數據在網絡層的單位
  • 段:數據在傳輸層的單位
  • 消息:數據在應用層的單位

七、數據發送時機

協議棧不一定會在一收到數據就馬上發出去,也可能是先將數據存到內部的發送緩沖區,等到積累到一定程度后再發送。

這樣做的原因是應用程序每次傳遞多少數據給協議棧是不定的,有些應用程序是逐字或逐行節傳遞給協議棧,有些是一次性傳遞整個請求的所有數據給協議棧,如果應用程序每次傳遞給協議棧的數據很少,且協議棧每接收到一次數據就馬上發送就會發送大量的小包導致網絡效率下降。

每次傳遞多少數據給協議棧是由應用程序決定的。

是否讓協議棧一接收到應用程序的數據就馬上發送也是由應用程序進行系統調用時的指定的一些選項決定的。

譬如對于瀏覽器這種會話型應用程序而言,它會指定讓協議棧馬上發送數據以避免延遲。

如果應用程序決定讓協議棧先緩存數據再發送的話,那么協議棧會根據兩個要素決定發送的時機:一個是網絡包能容納的最大數據長度,一個是應用程序傳遞數據的頻率(每次傳遞數據的時間間隔)

網絡包能容納的最大數據長度: 協議棧規定一個網絡包能容納的最大長度是MTU(在以太網中是1500字節),即IP頭部+TCP頭部+真實數據 <= 1500。除去頭部,真實數據的最大長度是MSS = 1500 - 20 - 20 = 1460。當協議棧收到的數據接近或超過MSS的長度時再發出去就可以避免發送大量小包的問題。

應用程序傳遞數據的時間間隔:

當應用程序傳遞消息的頻率不高的時候,如果每次都要等到長度接近MSS就會造成較大的發送延遲。協議棧中有一個計時器,當經過一定時間后即便緩沖區數據沒有達到MSS也會將其封裝為包發送出去。

八、大數據拆分

一般GET請求方式的HTTP消息不會很長,一個網絡包(這里的包是指IP模塊發出去的包)就能裝下。但如果要傳遞表單甚至上傳文件就可能超過一個包容納的數據量(MSS),此時發送緩沖區的數據量會大于MSS。這時協議棧的TCP模塊會將發送緩沖區中的數據(也就是http消息)以MSS為單位進行拆分為多個數據塊,每個塊被單獨添加TCP頭部,單獨封裝為網絡包傳輸。

在拆分數據時,TCP模塊會計算好每一塊數據的第一個字節是整體數據的第幾個字節,以此作為每塊數據的TCP頭部中的序號(序號是應用程序的數據序號而不是網絡包的長度序號)。

接收方可以根據接收到每個網絡包的長度減去頭部長度得到每個數據塊的長度。然后通過當前最新序號+數據塊長度得知下一個接收到的包的序號應該是多少。接收方返回的應答包的ACK號應該是當前最新序號+數據塊長度+1,下一次發送方應該發送的序號也應該是接收方上一次回包的ACK號。

例如:當前序號為A,包的長度是1460。那么響應包ACK號應該是A+1460+1 。接收方應該接收到的下一個包的序號應該是A+1460+1 = A + 1461。如果接收方收到的下個包的序號比A+1461大,就說明中間有包遺漏。

序號告訴接收方當前發送方已經發送了多少字節的數據,ACK告訴發送方當前接收方接收了多少字節的數據(所以同理,發送方能通過ACK號判斷接收方的回包是否有丟包)。

每次發送方發出的網絡包都會得到接收方包含ACK號的回包,這種機制成為確認應答機制。

實際通信中,序號不是從1開始,而是用隨機數計算出來的一個初始值。在連接階段,雙方設置SYN為1的時候,初始的序號也會被設置好并由通信雙方互相發送給對方(同理初始ACK號也在連接階段通知給對方)。

也就是說,通信的時候序號是有兩個,一個是客戶端生成的序號,一個是服務端生成的序號,因為TCP數據的收發是雙向的(例如服務端會接收到客戶端的包時回包,服務端也會在返回響應數據時主動發送包[這里不是指ACK包,而是返回http響應消息的網絡包],所以客戶端不只是發送方,服務端不只是接收方,應該是客戶端和服務端都既能是發送方也能是接收方)。同理ACK號也有兩個。

如下:

序號和ACK號的出現是為了告訴通信雙方每次發包發送了多少數據和接收了多少數據從而判斷是否有丟包。丟包會引發TCP的重傳機制,重傳是TCP模塊獨有的錯誤補償機制,網卡、路由器、集線器一旦檢測到錯誤會直接丟棄包而不會重傳。

九、重傳機制之ACK號等待時間

當發送方發送包后會等待接收方返回帶有ACK號的回包(在這個等待過程中發送方不會什么都不做,這里涉及到后面要介紹的滑動窗口,這里先不提),這段等待的時間叫做ACK號的等待時間,如果超過了這段時間都沒有接收到回包,發送方會認為這個包在網絡中丟失,因而重新發送這個包。

發送方丟包 或者 發送方的包到達接收方后接收方的回包丟包 或者 接收方的回包因為網絡擁塞而返回緩慢都可能造成接收方等待超過ACK號的超時時間而引起重傳。

TCP模塊怎么設置一個合適的ACK等待時間?

由于不同服務器的距離不同,或者不同網絡環境下網絡擁塞的情況不同(如局域網內可能幾毫秒能返回ACK號,而在互聯網中遇到擁塞可能幾百毫秒才能返回),ACK等待時間不是一個固定的時間,而是動態變化的時間。TCP模塊會持續測量多次ACK號的返回時間,如果前幾次ACK號返回變慢就會延長等待時間,如果前幾次ACK號能馬上返回則縮短等待時間。

每次因為超過等待時間導致的重傳會延長這個超時時間,如果多次重傳后仍未收到確認包則會斷開連接。

十、重傳機制之快速重傳

快速重傳是比超時重傳更有效率的重傳方式,當接收方接收到亂序的報文(如 1-3-2,或者1-3-4)時,會立刻不延遲的返回重復ACK的回包給發送方,發送方重復接收到3次相同的ACK號之后就會重發丟失的包。如下所示:

圖中發送方第一個包到達,接收方返回ACK號為ACK2的回包;但發送方的第二個報文丟失,之后第3~5個包到達接收方,接收方通過確認包的序號得知第二個包沒有發送過來,因此對第3~5的包返回重復的ACK號(ACK2)。

接收方接收到多次重復的ACK號為ACK2的響應包之后得知第2個包沒有發送到接收方,就會重新發送第2個包(序號為ACK2的包),并且重發第3~5個包(因為發送方得到的最新ACK號是ACK2,因此會重發序號為ACK2以后的所有包)。接收方接收到第2~5個包后,統一回復了一個ACK號為ACK6的包。

如果使用了SACK選項,發送方只會重發第2個包,而不會重發3~5。

十一、簡述滑動窗口

如果TCP模塊發送一個包并等待回包的過程中什么都不做會顯得十分浪費。為了減少這樣的浪費,TCP模塊使用滑動窗口的方式發送包,也就是說它不會非得等到一個包回包之后才發下一個包,而是連續發送多個包并連續接收多個回包。如下所示:

接收方在接收到包會先存放到接收緩沖區,TCP模塊會從緩沖區中獲取包并計算包的ACK號,將多個包的數據塊組裝起來還原為原本的數據并傳遞給接收方的應用程序。

如果包到達的速度要比數據處理并傳遞給應用程序的速度快,那么緩沖區中數據就會越積越多最后溢出,溢出之后,接收方就無法接受后面的包。

如下圖所示,當接收方收到包之后,會馬上從接收緩沖區中取出包并處理,緩沖區的空間會得到釋放,然后在返回包的TCP頭部注明接收緩沖區的剩余空間(也是窗口大小),這樣發送方收到回包后就知道下次發送的數據量不要超過這個窗口的大小的數據量。

在接收方不斷發送數據的過程中,它會自動計算自己用掉了多少窗口大小,當計算到窗口大小為0時會暫停發送包。在這個過程中如果接收方回包,發送方會根據回包中的TCP頭部窗口大小來更新自己套接字內的窗口大小(自動計算過程為4380->2920->1460,此時接收方返回ACK包并告知窗口大小剩余2920,發送方會更新當前窗口大小為2920,再從2920繼續自動計算,2920->1460->0,此時暫停,直到接收方的ACK包又到達發送方,發送方再更新窗口大小,又開始繼續發包)。這就是滑動窗口的基本思路。

這張圖是為了講解方便,故意體現一種接收方來不及處理收到的包,導致緩沖區被填滿的情況。實際上,接收方在收到數據之后馬上就會開始進行處理,如果接收方的性能高,處理速度比包的到達速率還快,緩沖區馬上就會被清空,并通過窗口字段告知發送方。

還有,圖中只顯示了從右往左發送數據的操作,實際上和序號、ACK號一樣,發送操作也是雙向進行的。

另外需要注意的是:接收方不會對發送方的每個包都發送回包,因為接收方發送回包其實是為了通知發送方ACK號和窗口大小(也就是告訴發送方我收到了多少包以及我還能接收你多少包),所以接收方在一段時間內連續收到發送方多個包后可能只會發送一個回包里面記錄著當前最新的ACK號(即最后一個來包對應的ACK號)和最新的窗口大小,中間的ACK號會省略,這樣減少了包的數量提升了網絡通信的效率。

當服務端接收完客戶端某個HTTP消息的所有包并還原為http消息時,服務端的應用程序就對這個http請求進行處理,再響應數據封裝為http響應消息,經過協議棧封裝成一個個包返回給客戶端。這時服務端變成了發送方,而客戶端變成接收方。

1.接收http響應消息

當協議棧將http消息以多個包的形式發送完畢之后,工作流程回到應用程序(瀏覽器),應用程序會調用read()接收響應消息。工作流程再次轉移到協議棧。

響應消息到達客戶端主機后會先暫存在接收緩沖區,協議棧會嘗試從緩沖區獲取數據,如果緩沖區中沒有數據,則協議棧會暫停接收工作去做其他事情。直到消息到達才會將數據傳遞給應用程序,即把數據復制到應用程序指定的內存地址(數據量大的情況下不會一次性全傳遞給應用程序,而是會分多次傳遞)。

在這一步中,還略過了很多的細節,如協議棧會檢查收到的數據塊和TCP頭部,判斷是否有數據丟失;向服務器方更新窗口大小;將多塊數據按照序號拼接為原始的數據,等等。這些過程和客戶端發送發送方時的過程類似。

2.服務器斷開連接并刪除套接字

發送完數據的一方會主動發起斷開連接的操作。在Web通信中,服務器一方是最后發送數據的一方因此會主動關閉連接。

  • 服務器會應用程序會調用Socket庫的close函數,工作流程轉到協議棧,協議棧會生成FIN比特位為1的TCP頭部,委托IP模塊發送給客戶端。此時服務器會進入關閉等待狀態并記錄到套接字中。
  • 客戶端收到服務端關閉連接的包后,會進入關閉等待的狀態并記錄到套接字中。并且發送一個ACK包給服務端表示已經收到了關閉連接的請求。
  • 客戶端不會馬上關閉連接,而是等應用程序將接收緩沖區中所有數據接收完畢(等待read()過程結束)。
  • 當操作系統中接收緩沖區的數據接收完畢后,工作流程回到應用程序,應用程序調用Socket庫的close函數,工作流程轉到協議棧,客戶端的協議棧也會生成一個FIN比特位為1的TCP包通過IP模塊發送給服務端,告訴服務端可以關閉連接了。
  • 服務端收到FIN比特位為1的TCP包后會回一個ACK包。客戶端接收到ACK包后會關閉連接(關閉連接的實質是刪除套接字),而服務端會不會馬上關閉連接(即不會馬上刪除套接字),而是進入到time-wait的等待狀態(將socket的狀態標記為time-wait),time-wait狀態結束后服務器才會真正關閉連接和刪除套接字。

以上過程就是大家熟知的“四次揮手”過程。

服務端不馬上不關閉連接而是進入time-wait狀態是為了防止誤操作。例如當客戶端是主動發起斷開連接的一端(假定客戶端的套接字是綁定54305這個端口),那么最后發送ACK包的會是客戶端,如果這個ACK包丟包,服務端等待一段時間沒有收到這個ACK包會重新發FIN包給客戶端。

假如客戶端沒有time-wait狀態而是在發送ACK包后直接關閉連接(即刪除套接字,釋放54305這個端口),那么客戶端可能會為其他連接生成一個新的套接字綁定54305這個端口。服務端重發的FIN包到達客戶端后,客戶端根據包頭部的接收方端口找到了新的套接字上就會導致該新套接字上的連接關閉。

time-wait狀態一般會持續幾分鐘。

附:使用UDP協議收發包

相比于TCP協議,使用UDP協議發送包無需建立連接(通信雙方服務交換控制消息),因此數據的收發相比于TCP減小了開銷和發送延遲更加高效。但是UDP協議沒有TCP協議的安全傳輸機制如確認應答機制,重傳和窗口等。

UDP頭部的控制信息:

UDP適用于以下場景:

a. 短數據

如果可以僅用一個包就將所有數據發送給對端,那么就無需建立連接以保存雙方的IP和端口以及其他信息到套接字中。而且數據少意味著傳輸的包數量少,丟包的可能性就會減小,也就無需像TCP那樣對包的送達狀態進行監控。如果丟包,協議棧收不到對方的回復是不會自行重發數據包的,應用程序可以自行組織重發數據(需要開發應用程序的人編寫重試邏輯)。

b.視頻和音頻數據

音頻和視頻數據必須在規定的時間內送達,一旦送達晚了,就會錯過播放時機,導致聲音和圖像卡頓。如果像TCP一樣通過接收確認應答來檢查錯誤并重發,重發的過程需要消耗一定的時間,因此重發的數據很可能已經錯過了播放的時機。

此外,音頻和視頻數據中缺少了某些包并不會產生嚴重的問題,只是會產生一些失真或者卡頓而已,一般都是可以接受的。使用UDP發送數據的效率會更高。

上面的操作都是圍繞著傳輸層TCP模塊介紹數據的收發。其實TCP報文還需要在網絡層的IP模塊中經過添加IP頭部和MAC頭部封裝成包再委托給網卡發送出去。

下節預告:瀏覽器輸入一個網址發生了什么(三) IP模塊封裝、ARP協議、IP協議和網卡

責任編輯:趙寧寧 來源: 程序員阿沛
相關推薦

2024-11-04 10:00:00

瀏覽器網絡

2024-11-04 08:10:00

2024-11-22 16:20:28

2024-05-06 10:53:22

瀏覽器TCPHTTPS

2023-01-14 16:11:27

瀏覽器URL回車

2018-01-03 15:17:26

2020-09-01 11:40:01

HTTPJavaTCP

2022-03-04 08:56:58

HTTPDNS 服務器瀏覽器

2020-10-09 08:59:55

輸入網址解密

2024-04-11 08:33:25

2021-04-14 10:47:56

瀏覽器網址TCP

2025-06-30 09:26:47

2022-09-15 07:54:59

awaitPromise

2017-12-14 15:45:02

2009-05-27 08:54:15

瀏覽器平臺Chrome

2022-05-26 23:36:36

SQLMySQL數據

2021-06-02 06:14:50

Nyxt瀏覽器

2012-09-03 10:24:16

果粉瀏覽器

2017-04-26 14:15:35

瀏覽器緩存機制

2015-07-03 09:27:43

網絡閏秒
點贊
收藏

51CTO技術棧公眾號

亚洲色图在线观看| 91成人在线精品| 国产亚洲福利社区| 福利网址在线观看| 先锋资源久久| 日韩av网址在线| 黄色手机在线视频| 欧美人与动牲性行为| 国产精品一线| 色婷婷狠狠综合| 黄频视频在线观看| 亚洲av成人无码网天堂| 蜜臀99久久精品久久久久久软件| 欧美激情精品久久久久久变态| 久久久久久久久免费看无码| 欧美高清影院| 国产色一区二区| 亚洲在线观看视频网站| 亚洲GV成人无码久久精品| 图片区亚洲欧美小说区| 国产视频久久久| 老司机av网站| 日韩毛片免费看| 日韩欧美中文在线| 丁香色欲久久久久久综合网| 国产精品一二三区视频| 成人av在线一区二区三区| 国产在线播放91| 特级做a爱片免费69| 欧美日本久久| zzijzzij亚洲日本成熟少妇| 国产极品一区二区| 日韩精品中文字幕一区二区| 欧美三级资源在线| 成人午夜视频免费在线观看| heyzo高清中文字幕在线| 亚洲色图视频网| 日韩中文字幕av在线| 日韩a在线观看| 成人黄色大片在线观看 | 精品亚洲自拍| 欧美成人乱码一区二区三区| 亚洲欧美手机在线| 麻豆久久久久| 欧美日韩国产美| 中文字幕国产传媒| 丝袜美腿诱惑一区二区三区| 欧美日韩亚洲一区二区三区| 日韩黄色片在线| 这里只有精品999| 亚洲一区中文| 欧美亚洲日本网站| 国产一级做a爱片久久毛片a| 欧美二区视频| 最近更新的2019中文字幕| 欧洲一区在线电影| av动漫在线播放| 毛片在线播放a| 国产免费成人在线视频| 欧美在线视频二区| 久久视频www| 国产欧美日韩中文久久| 亚洲成人第一| 黄网站在线播放| 亚洲欧美aⅴ...| 性生活免费观看视频| fc2ppv国产精品久久| 亚洲乱码国产乱码精品精98午夜| 久久天天东北熟女毛茸茸| 美媛馆国产精品一区二区| 亚洲国产一区二区精品视频| 天天操天天干天天操| 不卡一区二区三区四区| 好吊色欧美一区二区三区视频| 黄色一级大片在线免费看国产一| 国产sm精品调教视频网站| 91在线免费观看网站| 精品久久久久成人码免费动漫| 亚洲精品网址| 欧美日本在线视频中文字字幕| 国产精品成人免费观看| 国内久久视频| 成人中文字幕合集| 奇门遁甲1982国语版免费观看高清| 国产午夜精品一区二区理论影院| 黑人一区二区三区四区五区| 欧美成人午夜激情视频| 日韩精品一区三区| 视频一区二区三区中文字幕| 国产欧美一区二区三区久久人妖 | 亚洲线精品一区二区三区| 青青青青草视频| 国产乱码午夜在线视频| 在线观看视频一区二区欧美日韩| 在线看免费毛片| 视频免费一区二区| 日韩激情视频在线播放| 亚洲女优在线观看| 欧美日本三区| 国产精品爱啪在线线免费观看| 一级黄色片视频| 成人高清视频免费观看| 日韩中文一区| 日本大片在线播放| 色婷婷综合视频在线观看| 国产欧美激情视频| 欧洲亚洲视频| 久久婷婷国产麻豆91天堂| 免费在线不卡视频| 精品一区二区免费在线观看| 激情视频一区二区| 黄网站app在线观看| 日韩欧美在线视频观看| 999在线精品视频| 免费一区二区| 久久久久久久久久av| 中文字幕+乱码+中文乱码91| 成人不卡免费av| 中文字幕久精品免| 欧美粗大gay| 精品久久一二三区| 男人的天堂av网| 在线成人亚洲| 国产这里只有精品| 日本波多野结衣在线| 国产精品久久久久精k8| 玩弄中年熟妇正在播放| 亚洲国产欧美国产第一区| 国产香蕉97碰碰久久人人| 久久高清免费视频| 国产精品一区二区91| 亚洲砖区区免费| 中文天堂在线播放| 成人午夜碰碰视频| 欧美另类videosbestsex日本| 成人久久网站| 国产亚洲免费的视频看| 久久青青草原亚洲av无码麻豆| 国产高清无密码一区二区三区| 亚洲自拍三区| 谁有免费的黄色网址| 18国产免费视频| 蜜桃av一区二区| 精品亚洲第一| 国产91足控脚交在线观看| 久久久久久久久久久久久夜| 日本免费a视频| 麻豆精品在线| 久久婷婷国产麻豆91天堂| 一级片aaaa| 亚洲欧洲日韩av| 天天摸天天舔天天操| 欧美激情777| 成人高清视频观看www| 国产裸舞福利在线视频合集| 色老综合老女人久久久| 在线小视频你懂的| 日本v片在线高清不卡在线观看| 青青草成人激情在线| 校园春色亚洲色图| 在线看日韩欧美| 在线观看免费黄色小视频| 国产精品久久久久久久久免费丝袜| 青青青在线视频免费观看| 成人aaaa| 成人免费直播live| 影院在线观看全集免费观看| 日韩精品一区二区三区在线| 精品一区二区三区人妻| 99免费精品视频| 天天爽天天狠久久久| 男人最爱成人网| 这里精品视频免费| 97在线播放免费观看| 伊人开心综合网| 国产熟女高潮一区二区三区| 久久精品动漫| 一区二区精品在线观看| 深夜福利一区| 日本成熟性欧美| jizz在线观看| 日韩精品自拍偷拍| 亚洲欧美一区二区三区在线观看| 国产欧美综合在线观看第十页 | 毛片电影在线| 亚洲午夜女主播在线直播| 国产精品毛片一区二区在线看舒淇| 一区二区三区不卡在线观看| 日本japanese极品少妇| 免费成人在线视频观看| 欧美成人精品免费| 国产一区网站| 91九色蝌蚪嫩草| 激情开心成人网| 欧美大片免费观看| 毛片免费在线播放| 日韩欧美电影一区| 日韩精品成人免费观看视频| 亚洲精品免费播放| 国产av自拍一区| 国产精品456露脸| 精品久久久久久久无码| 欧美日韩一区二区国产| 日韩福利一区二区三区| 国产人妖ts一区二区| 国产精品一区二区电影| 乱馆动漫1~6集在线观看| 久久久97精品| 国产爆初菊在线观看免费视频网站| 日韩一区二区三区视频在线| 国产又粗又猛又爽又| 午夜a成v人精品| 午夜少妇久久久久久久久| 国产女同互慰高潮91漫画| 亚洲 欧美 日韩在线| 精品一区二区三区免费视频| 成年人黄色片视频| 99精品福利视频| 成人免费看片视频在线观看| 欧美精品系列| 免费看国产精品一二区视频| jizz性欧美23| 亚洲mm色国产网站| 欧美成人一二区| 国产精品久久久亚洲| 麻豆蜜桃在线观看| 欧美精品激情在线观看| 亚洲国产精品精华素| 中文字幕亚洲一区二区三区五十路 | 亚洲一区二区成人| 很污的网站在线观看| 午夜日韩在线| 成人性做爰片免费视频| 91欧美大片| 亚洲精品久久区二区三区蜜桃臀 | 国产99久久久国产精品潘金 | 国产精品免费aⅴ片在线观看| 久久一区二区电影| 波多野结衣中文字幕一区二区三区| www.成年人| 国产真实精品久久二三区| 在线观看免费不卡av| 久久精品国产免费| www.日本一区| 男女性色大片免费观看一区二区| 国产一级不卡毛片| 日日夜夜精品免费视频| 玩弄japan白嫩少妇hd| 麻豆久久精品| 任你操这里只有精品| 丝袜脚交一区二区| 国产一级不卡毛片| 免费观看一级特黄欧美大片| 手机在线免费观看毛片| 另类中文字幕网| 97人人爽人人| 国产精品亚洲人在线观看| 无码国产精品一区二区高潮| 国产福利一区二区三区视频| 逼特逼视频在线观看| 99在线精品一区二区三区| 精品黑人一区二区三区观看时间| 2024国产精品| 91视频免费看片| 亚洲人成精品久久久久久| 久久久久久国产精品免费播放| 亚洲va国产va欧美va观看| 久热这里只有精品6| 在线中文字幕不卡| 97视频免费在线| 精品久久久久久亚洲综合网| 午夜视频福利在线| 国产小视频91| a天堂中文在线官网在线| 午夜精品一区二区三区在线| 亚洲精品日产| 国产美女扒开尿口久久久| 麻豆视频久久| 欧美裸体网站| 欧美影院一区| 天天摸天天碰天天添| 久草精品在线观看| bl动漫在线观看| 中文乱码免费一区二区| 深夜福利影院在线观看| 欧美性高潮床叫视频| 国产精品国产av| 亚洲加勒比久久88色综合| 在线免费观看的av网站| 久久久久久中文| 日韩一级二级| 国产精品乱码视频| 操欧美老女人| 国产主播自拍av| 美女网站一区二区| 日本一卡二卡在线| 中文字幕一区二区三区不卡在线| 国产一级久久久| 欧美性猛交一区二区三区精品| 性欧美8khd高清极品| 中文字幕日韩精品在线观看| bl视频在线免费观看| 成人观看高清在线观看免费| 日本在线中文字幕一区| 男女h黄动漫啪啪无遮挡软件| 国产精品主播| 性xxxxxxxxx| 国产精品网站在线| 国产一级片毛片| 精品国产91久久久久久久妲己 | 国产精品主播在线观看| 一本一生久久a久久精品综合蜜| 亚洲欧美久久| 日本精品一二三区| 亚洲欧美乱综合| 一区二区视频网站| 精品一区二区电影| 波多野结衣中文字幕久久| 国产日韩欧美视频| 国产videos久久| 久久国产亚洲精品无码| 成人免费视频视频| 91人妻一区二区三区蜜臀| 欧美亚洲一区二区三区四区| 青青草超碰在线| 91福利视频网| 风间由美性色一区二区三区四区| a级黄色片网站| 另类小说综合欧美亚洲| 少妇精品无码一区二区免费视频| 亚洲444eee在线观看| 亚洲国产日韩在线观看| 欧美高清性hdvideosex| 亚洲欧洲视频在线观看| 久久久久久中文字幕| 免费观看亚洲视频大全| 一道本在线观看视频| 麻豆精品精品国产自在97香蕉| 国产精品20p| 欧美性色黄大片| h网站在线免费观看| 国产精品日韩在线一区| 欧洲三级视频| 国产免费又粗又猛又爽| 国产午夜三级一区二区三| 日韩中文字幕在线观看视频| 精品亚洲一区二区三区四区五区| bbw在线视频| 精品一区在线播放| 中文精品在线| 亚洲精品成人无码熟妇在线| 日韩欧美在线国产| 岛国最新视频免费在线观看| 国产成人久久久精品一区| 禁果av一区二区三区| 久久久国产欧美| 中文字幕一区二区三区四区| 国产农村老头老太视频| 色综合久久悠悠| 国产精品毛片视频| 免费欧美一级视频| 国产色爱av资源综合区| 成人黄色片在线观看| 精品国偷自产在线视频| 欧美久久亚洲| 国产二级片在线观看| 91天堂素人约啪| 中文字幕乱码人妻二区三区| 久久久精品在线| 老司机成人在线| 国产成人亚洲精品无码h在线| 国产女同互慰高潮91漫画| 国产免费一区二区三区最新不卡 | 欧美激情啪啪| 青青草综合在线| 2020国产精品久久精品美国| 伊人免费在线观看| 欧美激情精品久久久久久变态 | 国产精品白丝jk黑袜喷水| 久久精品国产亚洲av高清色欲 | 一本加勒比波多野结衣| 在线观看一区日韩| 国产区在线看| 久久精品五月婷婷| 亚洲一级毛片| 日韩无码精品一区二区| 在线亚洲精品福利网址导航| a在线免费观看| 久久精品日产第一区二区三区| 美女脱光内衣内裤视频久久影院| 久操免费在线视频| 亚洲天堂色网站| 亚洲一区二区三区四区电影| 国产在线青青草| 亚洲欧美电影院| 国产美女视频一区二区三区 | 婷婷亚洲精品| 日韩精品aaa| 色哦色哦哦色天天综合| 先锋成人av|