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

從Chrome源碼看DNS解析過程

開發(fā) 開發(fā)工具
DNS解析的作用是把域名解析成相應(yīng)的IP地址,因?yàn)樵趶V域網(wǎng)上路由器需要知道IP地址才知道把報(bào)文發(fā)給誰。DNS是Domain Name System域名系統(tǒng)的縮寫,它是一個(gè)協(xié)議,在RFC 1035具體描述了這個(gè)協(xié)議。

[[219272]]

DNS解析的作用是把域名解析成相應(yīng)的IP地址,因?yàn)樵趶V域網(wǎng)上路由器需要知道IP地址才知道把報(bào)文發(fā)給誰。DNS是Domain Name System域名系統(tǒng)的縮寫,它是一個(gè)協(xié)議,在RFC 1035具體描述了這個(gè)協(xié)議。具體過程如下圖所示:

這個(gè)過程看似簡(jiǎn)單,但是有幾個(gè)問題:

(1)瀏覽器是怎么知道DNS解析服務(wù)器,如上圖的8.8.8.8這臺(tái)?

(2)一個(gè)域名可以解析成多個(gè)IP地址嗎,如果只有一個(gè)IP地址,在并發(fā)量很大的情況下,那臺(tái)服務(wù)器可能會(huì)爆?

(3)把域名綁了host之后,是不是就不用域名解析了直接用的本地host指定的IP地址?

(4)域名解析的有效時(shí)間為多長(zhǎng),即過了多久后同一個(gè)域名需要再次進(jìn)行解析?

(5)什么是域名解析的A記錄、AAAA記錄、CNAME記錄?

其實(shí)域名解析和Chrome沒有直接關(guān)系,即使是最簡(jiǎn)單的curl命令也需要進(jìn)行域名解析,但是我們可以通過Chrome源碼來看一下這個(gè)過程是怎么樣的,并且回答上面的問題。

首先***個(gè)問題,瀏覽器是怎么知道DNS解析服務(wù)器的,在本機(jī)的網(wǎng)絡(luò)設(shè)置里面可以看到當(dāng)前的DNS服務(wù)器IP,如我電腦的:

這兩個(gè)DNS Server是我家接的某正寬帶提供的:

一般寬帶服務(wù)商都會(huì)提供DNS服務(wù)器,谷歌還為公眾提供了兩個(gè)免費(fèi)的DNS服務(wù),分別為8.8.8.8和8.8.4.4,取這兩個(gè)IP地址是為了容易記住,當(dāng)你的DNS服務(wù)不好用的時(shí)候,可以嘗試改成這兩個(gè)。

入網(wǎng)的設(shè)備是怎么獲取到這些IP地址的呢?是通過動(dòng)態(tài)主機(jī)配置協(xié)議(DHCP),當(dāng)一臺(tái)設(shè)備連到路由器之后,路由器通過DHCP給它分配一個(gè)IP地址,并告訴它DNS服務(wù)器,如下路由器的DHCP設(shè)置:

通過wireshark抓包可以觀察到這個(gè)過程:

當(dāng)我的電腦連上wifi的時(shí)候,會(huì)發(fā)一個(gè)DHCP Request的廣播,路由器收到這個(gè)廣播后就會(huì)向我的電腦分配一個(gè)IP地址并告知DNS服務(wù)器。

這個(gè)時(shí)候系統(tǒng)就有DNS服務(wù)器了,Chrome是調(diào)res_ninit這個(gè)系統(tǒng)函數(shù)(Linux)去獲取系統(tǒng)的DNS服務(wù)器,這個(gè)函數(shù)是通過讀取/etc/resolver.conf這個(gè)文件獲取DNS:

  1. # Mac OS X Notice 
  2. # This file is not used by the host name and address resolution 
  3. or the DNS query routing mechanisms used by most processes on 
  4. # this Mac OS X system. 
  5. # This file is automatically generated. 
  6. search DHCP HOST 
  7. nameserver 59.108.61.61 
  8. nameserver 219.232.48.61 

search選項(xiàng)的作用是當(dāng)一個(gè)域名不可解析時(shí),就會(huì)嘗試在后面添加相應(yīng)的后綴,如ping hello,無法解析就會(huì)分別ping hello.DHCP/hello.HOST,結(jié)果***都無法解析。

Chrome在啟動(dòng)的時(shí)候根據(jù)不同的操作系統(tǒng)去獲取DNS服務(wù)器配置,然后把它放到DNSConfig的nameservers:

  1. // List of name server addresses. 
  2.   std::vector<IPEndPoint> nameservers; 

Chrome還會(huì)監(jiān)聽網(wǎng)絡(luò)變化同步改變配置。

然后用這個(gè)nameservers列表去初始化一個(gè)socket pool即套接字池,套接字是用來發(fā)請(qǐng)求的。在需要做域名解析的時(shí)候會(huì)從套接字池里面取出一個(gè)socket,并傳遞想要用的server_index,初始化的時(shí)候是0,即取***個(gè)DNS服務(wù)IP地址,一旦解析請(qǐng)求兩次都失敗了,則server_index + 1使用下一個(gè)DNS服務(wù)。

  1. unsigned server_index = 
  2.        (first_server_index_ + attempt_number) % config.nameservers.size(); 
  3.    // Skip over known failed servers. 
  4.    // ***attempts數(shù)為2,在構(gòu)造DnsConfig設(shè)定的 
  5.    server_index = session_->NextGoodServerIndex(server_index); 

如果所有的nameserver都失敗了,那么它會(huì)取最早失敗的nameserver.

Chrome在啟動(dòng)的時(shí)候除了會(huì)讀取DNS server之外,還會(huì)去取讀取和解析hosts文件,放到DNSConfig的hosts屬性里面,它是一個(gè)哈希map:

  1. // Parsed results of a Hosts file. 
  2. // 
  3. // Although Hosts files map IP address to a list of domain names, for name 
  4. // resolution the desired mapping direction is: domain name to IP address. 
  5. // When parsing Hosts, we apply the "first hit" rule as Windows and glibc do. 
  6. // With a Hosts file of
  7. // 300.300.300.300 localhost # bad ip 
  8. // 127.0.0.1 localhost 
  9. // 10.0.0.1 localhost 
  10. // The expected resolution of localhost is 127.0.0.1. 
  11. using DnsHosts = std::unordered_map<DnsHostsKey, IPAddress, DnsHostsKeyHash>; 

hosts文件在linux系統(tǒng)上是在/etc/hosts:

  1. const base::FilePath::CharType kFilePathHosts[] = 
  2.     FILE_PATH_LITERAL("/etc/hosts"); 

讀取這個(gè)文件沒有什么技巧,需要一行行地去處理,并做一些非法情況的判斷,如上面代碼的注釋。

這樣DNSConfig里面就有兩個(gè)配置了,一個(gè)是hosts,另一個(gè)是nameservers,DNSConfig是組合到DNSSession,它們的組合關(guān)系如下圖所示:

resolver是負(fù)責(zé)解析的驅(qū)動(dòng)類,它組合了一個(gè)client,client創(chuàng)建一個(gè)session,session層有一個(gè)很大的作用是用來管理server_index和socket pool如分配socket等,session初始化config,config用來讀取本地綁的hosts和nameservers兩個(gè)配置。這幾層各有各的職責(zé)。

resolver有一個(gè)重要的功能,它組合了一個(gè)job,用來創(chuàng)建任務(wù)隊(duì)列。resolver還組合了一個(gè)Hostcache,它是放解析結(jié)果的緩存,如果緩存緩存***的話,就不用去解析了,這個(gè)過程是這樣的,外部調(diào)rosolver提供的HostResolverImpl::Resolve接口,這個(gè)接口會(huì)先判斷在本地是否能處理:

  1. int net_error = ERR_UNEXPECTED; 
  2.   if (ServeFromCache(*key, info, &net_error, addresses, allow_stale, 
  3.                      stale_info)) { 
  4.     source_net_log.AddEvent(NetLogEventType::HOST_RESOLVER_IMPL_CACHE_HIT, 
  5.                             addresses->CreateNetLogCallback()); 
  6.     // |ServeFromCache()| will set |*stale_info| as needed. 
  7.     return net_error; 
  8.   } 
  9.   
  10.   // TODO(szym): Do not do this if nsswitch.conf instructs not to
  11.   // http://crbug.com/117655 
  12.   if (ServeFromHosts(*key, info, addresses)) { 
  13.     source_net_log.AddEvent(NetLogEventType::HOST_RESOLVER_IMPL_HOSTS_HIT, 
  14.                             addresses->CreateNetLogCallback()); 
  15.     MakeNotStale(stale_info); 
  16.     return OK; 
  17.   } 
  18.   
  19.   return ERR_DNS_CACHE_MISS; 

上面代碼先調(diào)serveFromCache去cache里面看有沒有,如果cache***的話則返回,否則看hosts是否***,如果都不***則返回CACHE_MISS的標(biāo)志位。如果返回值不等于CACHE_MISS,則直接返回:

  1. if (rv != ERR_DNS_CACHE_MISS) { 
  2.    LogFinishRequest(source_net_log, info, rv); 
  3.    RecordTotalTime(info.is_speculative(), true, base::TimeDelta()); 
  4.    return rv; 
  5.  } 

否則創(chuàng)建一個(gè)job,并看是否能立刻執(zhí)行,如果job隊(duì)列太多了,則添加到j(luò)ob隊(duì)列后面,并傳遞一個(gè)成功的回調(diào)處理函數(shù)。

所以這里和我們的認(rèn)知基本上是一樣的,先看下cache有沒有,然后再看hosts有沒有,如果沒有的話再進(jìn)行查詢。在cache查詢的時(shí)候如果這個(gè)cache已經(jīng)過時(shí)了即staled,也會(huì)返回null,而判斷是否stale的標(biāo)準(zhǔn)如下:

  1. bool is_stale() const { 
  2.       return network_changes > 0 || expired_by >= base::TimeDelta(); 
  3.     } 

即網(wǎng)絡(luò)發(fā)生了變化,或者expired_by大于0,則認(rèn)為是過時(shí)的cache。這個(gè)時(shí)間差是用當(dāng)前時(shí)間減掉當(dāng)前cache的過期時(shí)間:

  1. stale.expired_by = now - expires_; 

而過期時(shí)間是在初始化的時(shí)候使用now + ttl的值,而這個(gè)ttl是使用上一次請(qǐng)求解析的時(shí)候返回的ttl:

  1. uint32_t ttl_sec = std::numeric_limits<uint32_t>::max(); 
  2. ttl_sec = std::min(ttl_sec, record.ttl); 
  3. *ttl = base::TimeDelta::FromSeconds(ttl_sec); 

上面代碼做了一個(gè)防溢出處理。在wireshark的dns response可以直觀地看到這個(gè)ttl:

當(dāng)前域名的TTL值為600s即10分鐘。這個(gè)可以在買域名的提供商進(jìn)行設(shè)置:

另外可以看到這個(gè)記錄類型是A的,什么是A呢,如下圖所示:

在添加解析的時(shí)候可以看到,A就是把域名解析到一個(gè)IPv4地址,而AAAA是解析到IPv6地址,CNAME是解析到另外一個(gè)域名。使用CNAME的好處是當(dāng)很多其它域名指向一個(gè)CNAME時(shí),當(dāng)需要改變IP地址時(shí),只要改變這個(gè)CNAME的地址,那么其它的也跟著生效了,但是得做二次解析。

如果域名在本地不能解析的話,Chrome就會(huì)去發(fā)請(qǐng)求了。操作系統(tǒng)提供了一個(gè)叫g(shù)etaddrinfo的系統(tǒng)函數(shù)用來做域名解析,但是Chrome并沒有使用,而是自己實(shí)現(xiàn)了一個(gè)DNS客戶端,包括封裝DNS request報(bào)文以及解析DNS response報(bào)文。這樣可能是因?yàn)殪`活度會(huì)更大一點(diǎn),例如Chrome可以自行決定怎么用nameservers,順序以及失敗嘗試的次數(shù)等。

在resolver的startJob里面啟動(dòng)解析。取到下一個(gè)queryId,然后構(gòu)建一個(gè)query,再構(gòu)建一個(gè)DnsUDPAttempt,再執(zhí)行它的start,因?yàn)镈NS客戶端查詢使用的是UDP報(bào)文(輔域名服務(wù)器向主域名服務(wù)器查詢是用的TCP):

  1. uint16_t id = session_->NextQueryId(); 
  2. std::unique_ptr<DnsQuery> query; 
  3. query.reset(new DnsQuery(id, qnames_.front(), qtype_, opt_rdata_)); 
  4.   
  5. DnsUDPAttempt* attempt = 
  6.     new DnsUDPAttempt(server_index, std::move(lease), std::move(query)); 
  7. int rv = attempt->Start( 
  8.     base::Bind(&DnsTransactionImpl::OnUdpAttemptComplete, 
  9.                base::Unretained(this), attempt_number, 
  10.                base::TimeTicks::Now())); 

具體解析的過程拆成了幾步,這個(gè)代碼組織是這樣的,通過一個(gè)state決定執(zhí)行順序:

  1. int rv = result; 
  2. do { 
  3.   // 最開始的state為STATE_SEND_QUERY 
  4.   State state = next_state_; 
  5.   next_state_ = STATE_NONE; 
  6.   switch (state) { 
  7.     case STATE_SEND_QUERY: 
  8.       rv = DoSendQuery(); 
  9.       break; 
  10.     case STATE_SEND_QUERY_COMPLETE: 
  11.       rv = DoSendQueryComplete(rv); 
  12.       break; 
  13.     case STATE_READ_RESPONSE: 
  14.       rv = DoReadResponse(); 
  15.       break; 
  16.     case STATE_READ_RESPONSE_COMPLETE: 
  17.       rv = DoReadResponseComplete(rv); 
  18.       break; 
  19.     default
  20.       NOTREACHED(); 
  21.       break; 
  22.   } 
  23. } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); 

state從***個(gè)case執(zhí)行完之后變成第二個(gè)case的state,在第二個(gè)case的執(zhí)行函數(shù)里面又把它改成第三個(gè),這樣依次下來,直到變成while循環(huán)里面的STATE_DONE,或者是ERR狀態(tài)結(jié)束當(dāng)前transaction事務(wù)。所以這個(gè)代碼組織還是比較有趣的。

***解析成功之后,會(huì)把結(jié)果放到cache里面:

  1. if (did_complete) { 
  2.      resolver_->CacheResult(key_, entry, ttl); 
  3.      RecordJobHistograms(entry.error()); 
  4.    } 

然后生成一個(gè)addressList,傳遞給相應(yīng)的callback,因?yàn)镈NS解析可能會(huì)返回多個(gè)結(jié)果,如下面這個(gè):

這里我們沒用Chrome打印結(jié)果了,都是直接看的wireshark的輸出,因?yàn)樘砑哟蛴『瘮?shù)比較麻煩,直接看wireshark的輸出比較直觀,節(jié)省時(shí)間。

本文簡(jiǎn)單地介紹了DNS解析的過程以及DNS的一些相關(guān)概念,相信到這里,應(yīng)該可以回答上面提出的幾個(gè)問題了。總地來說,客戶端向域名解析服務(wù)器發(fā)起查詢,然后服務(wù)器返回響應(yīng)。DNS服務(wù)器nameservers是在設(shè)備接入網(wǎng)絡(luò)的時(shí)候路由器通過DHCP發(fā)給設(shè)備的,chrome會(huì)按照nameservers的順序發(fā)起查詢,并將結(jié)果緩存,有效時(shí)間根據(jù)ttl,有效期內(nèi)兩次查詢直接使用cache。DNS解析的結(jié)果有幾種類型,最常見的是A記錄和CNAME記錄,A記錄表示結(jié)果是一個(gè)IP地址,CNAME表示結(jié)果是另外一個(gè)域名。

本文沒有很深入詳細(xì)地介紹,但是核心的概念和邏輯過程應(yīng)該是都有涉及了。

【本文是51CTO專欄作者“人人網(wǎng)FED”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過51CTO聯(lián)系原作者獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來源: 51CTO專欄
相關(guān)推薦

2017-04-05 20:00:32

ChromeObjectJS代碼

2017-02-09 15:15:54

Chrome瀏覽器

2017-02-28 10:05:56

Chrome源碼

2017-11-21 14:56:59

2017-02-07 09:44:12

Chrome源碼DOM樹

2021-07-14 09:48:15

Linux源碼Epoll

2018-05-23 10:59:14

DNS原理解析

2010-01-28 10:29:44

2021-03-10 08:20:54

設(shè)計(jì)模式OkHttp

2014-01-02 13:31:43

Chrome Web Chrome生態(tài)系統(tǒng)平臺(tái)化進(jìn)程

2009-11-13 13:48:58

網(wǎng)絡(luò)配置DNS

2009-11-13 10:48:47

網(wǎng)絡(luò)配置DNS

2021-07-15 14:27:47

LinuxSocketClose

2023-11-27 22:55:17

DNS域名解析

2020-10-10 07:00:16

LinuxSocketTCP

2021-06-10 09:52:33

LinuxTCPAccept

2020-09-23 12:32:18

網(wǎng)絡(luò)IOMySQL

2009-11-25 10:31:33

2025-09-26 02:00:55

JDKCPU內(nèi)存

2022-05-05 10:10:28

DNS網(wǎng)絡(luò)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

欧美成人免费在线视频| 欧美午夜精品一区二区三区| 国产在线欧美日韩| 国产精品欧美综合| 一区二区三区网站| 精品调教chinesegay| 中日韩av在线播放| 草草在线视频| 国产精品高潮久久久久无| 粉嫩av四季av绯色av第一区| 男人天堂av在线播放| 亚欧美无遮挡hd高清在线视频| 久久亚洲一区二区三区四区| 国产91露脸中文字幕在线| 婷婷丁香综合网| 欧美大片网址| 宅男在线国产精品| 免费日韩中文字幕| 欧美videosex性极品hd| 国产精品三级视频| 久久综合久久久| 性少妇videosexfreexxx片| 久久婷婷av| 久久久久亚洲精品| 紧身裙女教师波多野结衣| 自拍欧美一区| 亚洲第一av网站| 一级网站在线观看| 国产成人福利夜色影视| 欧美午夜精品久久久久久浪潮 | 秋霞在线一区| 欧美一区二区三区播放老司机| 一本久道综合色婷婷五月| av资源在线| 亚洲综合免费观看高清完整版在线| 亚洲黄色一区二区三区| 天堂网www中文在线| 成人黄色网址在线观看| www久久99| 999免费视频| 精品一区二区综合| 国产精品日韩久久久久| 五月天婷婷导航| 亚洲一区二区免费看| 久久免费精品视频| 国产在线观看免费视频今夜| 亚洲综合激情在线| 美女性感视频久久久| 刘亦菲国产毛片bd| 色综合咪咪久久网| 日韩在线中文字幕| 黄色片网站在线播放| 色琪琪久久se色| 色噜噜狠狠狠综合曰曰曰| 免费看日本黄色片| 欧美老女人另类| 这里只有精品久久| 美女100%露胸无遮挡| 欧美限制电影| 最近更新的2019中文字幕| 九一在线免费观看| 97精品视频| 欧美乱大交xxxxx| 久久这里只有精品国产| 伊人久久大香线蕉av超碰演员| 色综合导航网站| 日韩免费不卡视频| 国产农村妇女精品一二区| 欧美亚洲成人网| 天天爱天天做天天爽| 日韩成人一级片| 成人精品网站在线观看| 99久久精品免费看国产交换| 国产成人av一区二区三区在线| 俄罗斯精品一区二区| 神马精品久久| 中文欧美字幕免费| 午夜探花在线观看| 极品视频在线| 欧美日韩中文另类| 免费欧美一级片| 日韩精品免费一区二区夜夜嗨| 亚洲精品视频二区| 我要看一级黄色录像| 欧美日韩第一区| 欧美中文在线字幕| 一级二级三级视频| 成人白浆超碰人人人人| 亚洲aⅴ天堂av在线电影软件| 麻豆免费在线视频| 亚洲a一区二区| 不卡的av中文字幕| 丁香五月缴情综合网| 亚洲天堂男人天堂女人天堂| 欧美一级特黄高清视频| 亚洲清纯自拍| 成人黄色免费网站在线观看| 欧美一区二区三区成人片在线| 国产日韩精品一区二区三区 | 欧美日韩一区成人| 亚洲欧美高清在线| 日韩欧美一区二区三区免费看| 久久99亚洲精品| 最新在线中文字幕| 成人av网站免费观看| 亚洲精品一区国产精品| 97久久人人超碰caoprom| 欧美午夜电影一区| 欲求不满的岳中文字幕| 欧美一区不卡| 国产精品久久久久久久久久三级| 亚洲精品人妻无码| 中文字幕中文字幕中文字幕亚洲无线| 老太脱裤子让老头玩xxxxx| 亚洲一区二区三区久久久| 日韩高清免费在线| 欧美极品aaaaabbbbb| 男女男精品视频网| 久久久久久国产精品一区 | 亚洲人被黑人高潮完整版| 日韩欧美精品在线观看视频| 一本一道久久a久久| 日韩亚洲欧美成人| 五月婷婷激情五月| 久久综合色综合88| 日韩av新片网| 亚洲日本va| 欧美久久精品午夜青青大伊人| 亚洲大片免费观看| www久久久久| 国产欧美日韩网站| 国产66精品| 色综合久久久久久中文网| 一道本在线视频| 国产精品久久久久影院亚瑟| 青青在线视频免费| 亚洲自拍电影| 欧亚精品中文字幕| 亚洲三区在线播放| 精品欧美国产一区二区三区| 日韩成人av影院| 欧美日韩网站| 成人久久18免费网站漫画| 在线观看小视频| 日韩午夜在线影院| 校园春色 亚洲| 国产精品影视天天线| 穿情趣内衣被c到高潮视频| 性欧美video另类hd尤物| 中文字幕亚洲综合| ,一级淫片a看免费| 中文字幕亚洲精品在线观看| 超碰超碰在线观看| 四季av一区二区凹凸精品| 国产欧美韩国高清| 黄色网页在线看| 欧美一区二区黄| 久久免费视频99| 99视频精品在线| 茄子视频成人免费观看| 蜜桃精品wwwmitaows| 国产91在线播放九色快色| 国产精品一区在线看| 欧美日韩久久一区二区| 亚洲人做受高潮| 国产精品一二二区| 免费看欧美黑人毛片| 亚洲婷婷丁香| 国产日韩在线视频| 午夜激情在线| 亚洲精品久久久久久久久久久久久| 国产成人无码精品久久久久| 2020日本不卡一区二区视频| 亚洲成人福利在线观看| 91国语精品自产拍| 国产一区二区三区免费不卡| 日韩高清成人| 美乳少妇欧美精品| 五月天婷婷社区| 欧美日本一区二区| 国产在线观看免费av| 国产日韩欧美精品一区| 亚洲热在线视频| 日韩亚洲国产精品| 一本色道久久综合亚洲精品婷婷| 成人免费观看49www在线观看| 欧美夫妻性生活视频| 日本福利午夜视频在线| 欧美麻豆精品久久久久久| 午夜偷拍福利视频| 国产欧美日韩在线看| 亚洲一二三不卡| 国产日韩欧美一区在线 | 亚洲欧美日本日韩| 亚洲三区四区| 女人抽搐喷水高潮国产精品| 日韩av理论片| 狂野欧美激情性xxxx欧美| 亚洲人成在线免费观看| 国产福利资源在线| 91高清视频免费看| 国产乱码久久久久久| 国产人成亚洲第一网站在线播放| 成人三级做爰av| 日韩高清在线一区| 久久综合久久网| 婷婷亚洲最大| 欧洲亚洲一区| 免费福利视频一区| 亚洲一区二区久久久久久| 日本综合字幕| 97免费中文视频在线观看| 欧美jizzhd69巨大| 亚洲天堂一区二区三区| 欧美一级性视频| 日韩欧美中文字幕公布| 中文字幕日韩经典| 日韩欧美国产激情| 日本熟伦人妇xxxx| 一区二区三区四区五区视频在线观看 | 日韩免费小视频| 欧美一级片在线播放| 日本伦理一区二区| 久久中文精品视频| 日韩在线观看www| 中文字幕国产亚洲| 国产一二三区在线| 亚洲欧洲日本专区| 日本私人网站在线观看| 日韩免费观看高清完整版| 91麻豆国产视频| 欧美午夜精品一区二区三区| 91视频久久久| 色婷婷一区二区| 黄色一级片免费在线观看| 五月天精品一区二区三区| 免费中文字幕在线观看| 亚洲一区二区欧美激情| 亚洲综合网在线| 亚洲欧美日韩系列| 久久国产精品国语对白| 亚洲日本丝袜连裤袜办公室| 97精品在线播放| 亚洲女女做受ⅹxx高潮| 国产精品99久久久久久成人| 亚洲欧洲在线观看av| jizzjizz日本少妇| 国产精品久久久久久亚洲毛片 | 第一页在线观看| 这里只有精品在线观看| 超碰在线国产| 神马国产精品影院av| 免费av在线| 欧美另类极品videosbestfree| av免费在线免费| 久久久久久中文| 色网在线免费观看| 欧洲精品在线视频| xxxxx.日韩| 91精品一区二区| 97视频一区| 免费精品视频一区| 欧美偷拍综合| av久久久久久| 99视频精品| 国产一级不卡毛片| 激情欧美日韩一区二区| 自拍一级黄色片| 97精品视频在线观看自产线路二| 色一情一交一乱一区二区三区| 欧美国产日韩a欧美在线观看 | 嫩草研究院在线观看| 一区二区亚洲欧洲国产日韩| 麻豆传媒视频在线| 久久久久久久久久久人体| 亚洲美女久久精品| 国产视频观看一区| 91成人入口| 日本视频精品一区| 自由日本语亚洲人高潮| 大陆极品少妇内射aaaaa| 日韩va欧美va亚洲va久久| 99视频在线观看视频| 北岛玲一区二区三区四区| 中文字幕成人动漫| 亚洲激情中文1区| 99精品在线播放| 91精品国产色综合久久ai换脸| 免费国产黄色片| 中文字幕av一区中文字幕天堂| 天堂av在线电影| 国产成人一区二区三区| 日本一区二区乱| 日本亚洲自拍| 欧美精品激情| 91看片在线免费观看| 波波电影院一区二区三区| 国产黄色录像视频| 亚洲国产精品一区二区久久恐怖片| 日本视频免费观看| 精品久久久久久亚洲综合网| av女优在线| 欧美一级淫片播放口| 日本成人精品| 新呦u视频一区二区| 亚洲精品视频啊美女在线直播| 污色网站在线观看| 91视视频在线观看入口直接观看www | 国产伦精品一区二区三区视频痴汉| 日韩av一区在线| 欧美xxxx视频| 亚洲japanese制服美女| 北条麻妃国产九九九精品小说 | 僵尸再翻生在线观看| 91免费看国产| 成人精品影视| 精品一卡二卡三卡| 99久久免费国产| 青青青在线视频| 91麻豆精品国产自产在线观看一区| 激情小说 在线视频| 国产91精品不卡视频| 哺乳挤奶一区二区三区免费看 | 中文字幕免费高清| 午夜电影一区二区三区| 精品人妻av一区二区三区| 日韩一区在线视频| 91九色综合| 日韩三级电影网站| 久久久噜噜噜久久狠狠50岁| 毛茸茸free性熟hd| 亚洲午夜精品在线| 亚洲第九十九页| 欧美激情2020午夜免费观看| 香蕉久久久久久| 四虎免费在线观看视频| 精品一区精品二区高清| 精品女人久久久| 欧美日韩一级二级| 日本免费在线观看| 国产一区二区在线免费| 欧美电影免费播放| 亚洲欧美自拍另类日韩| 国产精品无圣光一区二区| 国产主播第一页| 色妞色视频一区二区三区四区| 亚洲电影有码| 亚洲精品视频一区二区三区| 六月婷婷色综合| 中国毛片直接看| 日韩欧美一区在线| xxxx另类黑人| 精品国产免费久久久久久尖叫 | 国产中文一区| 性欧美18—19sex性高清| 精品日本美女福利在线观看| 欧美一区二不卡视频| 8x拔播拔播x8国产精品| 台湾亚洲精品一区二区tv| 亚洲自偷自拍熟女另类| 国产日韩欧美精品一区| 国产又粗又猛又黄| 欧美日韩不卡合集视频| 国产精品巨作av| 久久久久狠狠高潮亚洲精品| 国产精品短视频| 午夜久久久久久噜噜噜噜| 91精品国产高清| 欧美日韩中文一区二区| 在线免费看v片| 亚洲黄色av一区| 日本v片在线免费观看| 国产精品视频yy9099| 欧美激情aⅴ一区二区三区| av无码一区二区三区| 在线精品视频一区二区| 国内精品久久久久久野外| 国产亚洲福利社区| 日韩高清在线不卡| 青春草免费视频| 亚洲九九九在线观看| jizz久久久久久| 日本成人在线不卡| 久久免费看少妇高潮| 91麻豆视频在线观看| 午夜精品99久久免费| 成人精品影院| 黑人无套内谢中国美女| 色国产精品一区在线观看| 黄a在线观看| 久热国产精品视频一区二区三区| 美女网站在线免费欧美精品| 国产精选第一页| 色偷偷av一区二区三区| 久久久精品国产**网站| 天堂在线中文在线| 欧美视频精品一区| 污视频网站在线免费| 日韩av大全| 北条麻妃一区二区三区|