日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

哈工大计算机网络Week2-网络应用数据交换

發布時間:2025/6/15 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈工大计算机网络Week2-网络应用数据交换 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 網絡應用數據交換
  • P2P應用:原理與文件分發
    • 純P2P架構
    • 文件分發:客戶機/服務器 vs. P2P
      • CS
      • 為什么是這樣的?不應該傳送和發出難道是并行的???
      • P2P
    • P2P文件分發典型例子:BitTorrent(bit激流)
    • 思考題
  • P2P應用:索引技術
    • P2P: 搜索信息
    • 集中式索引
    • 全分布非結構:洪泛式查詢(Query flooding)
      • 如何查詢?
    • 層次式覆蓋網絡
    • P2P案例應用:Skype(最成功的之一)
    • 課后作業
  • Socket編程API
    • 網絡程序設計接口主要類型
    • 理解應用編程接口API
    • 幾種典型的應用編程接口
  • Socket編程-Socket API概述
    • Socket API
      • 如何標識socket?
    • 對內的Socket抽象
    • socket地址結構
  • Socket編程-Socket API函數
    • Socket API函數(以WinSock為例)
      • WSAStartup
      • WSACleanup
      • socket
      • Socket面向TCP/IP的服務類型
      • closesocket(linux版為close)
      • bind(服務器)
      • listen(服務器)
      • connect(客戶端,tcp/udp差異)
      • accept(服務器,tcp)
      • send, sendto(服務器客戶機都用)
      • recv, recvfrom(服務器客戶機都用)
      • setsockopt, getsockopt(不具體講了)
    • Socket API函數小結
      • win獨占
      • 多平臺通用
    • 關于網絡字節順序
    • 網絡應用的Socket API(TCP)調用基本流程
  • Socket編程-客戶端軟件設計
    • 解析服務器IP地址
    • 解析服務器(熟知)端口號
    • 解析協議號
    • TCP客戶端軟件流程
    • UDP客戶端軟件流程
    • 客戶端軟件的實現- connectsock()
    • 客戶端軟件的實現-UDP客戶端
    • 客戶端軟件的實現-TCP客戶端
    • 客戶端軟件的實現-異常處理
    • 例1:訪問DAYTIME服務的客戶端(TCP)
    • 例2:訪問DAYTIME服務的客戶端(UDP)
  • Socket編程-服務器軟件設計
    • 4種類型基本服務器
    • 循環無連接服務器基本流程
      • 數據發送
      • 獲取客戶端點地址
    • 循環面向連接服務器基本流程
    • 并發無連接服務器基本流程
    • 并發面向連接服務器基本流程
    • 服務器的實現
    • 服務器的實現-passivesock()
    • 服務器的實現-passiveUDP()
    • 服務器的實現-passiveTCP()
    • 例1:無連接循環DAYTIME服務器
    • 例2:面向連接并發DAYTIME服務器

網絡應用數據交換

P2P應用:原理與文件分發

純P2P架構

Peer-to-peer
?沒有服務器
?任意端系統之間直接通信
?節點階段性接入Internet
?節點可能更換IP地址

文件分發:客戶機/服務器 vs. P2P

問題 : 從一個服務器向N個節點分發一個文件需要多長時間?

==以下速度計算全部是建立在假設:因特網核心速度無限制;服務器客戶端帶寬全部被運用到文件傳輸。而且全部是一個下限!==

us: 服務器上傳帶寬(upload)
ui: 節點i的上傳帶寬
di: 節點i的下載帶寬

CS

?服務器串行地發送N個副本
? 時間: NF/us
?客戶機i需要F/di時間下載

==對cs,可以看到時間在N大的時候是和N呈線性的!==

為什么是這樣的?不應該傳送和發出難道是并行的???

P2P

?服務器必須發送一個副本
? 時間: F/us
?客戶機i需要F/di時間下載
?總共需要下載NF比特
?最快的可能上傳速率:us + ?ui

==這解釋了p2p的自拓展性:對等方除了是bit的消費者還是重新分發者。==

P2P文件分發典型例子:BitTorrent(bit激流)

tracker: 跟蹤參與torrent的節點,每個torrent都有一個tracker

torrent: 交換同一個文件的文件塊的節點組

  • ?文件劃分為256KB的chunk(塊)
  • ?節點加入torrent
    • ? 沒有chunk,但是會逐漸積累
    • ? 向tracker注冊以獲得節點清單,與某些節點(“鄰居”)建立連接
  • ?下載的同時,節點需要向其他節點上傳chunk(從網絡下載的或者是節點自身有的)
  • ? 節點自由的加入或離開
  • ?一旦節點獲得完整的文件,它可能(自私地)離開或(無私地)留下
  • ? 獲取chunk
    • ? 給定任一時刻,不同的節點持有文件的不同chunk集合
    • ? 節點(Alice)定期查詢每個鄰居所持有的chunk列表
    • ? 請求原則(請求獲取缺失的chunk)
      • ? 稀缺優先的請求建立原則:先去拿自己沒有的chunk中最稀少的
  • ? 發(送原則)
    • tit-for-tat(以牙還牙)
      • ? Alice向4個鄰居發送chunk:正在向Alice發送Chunk的鄰居中速率最快的4個,每10秒重新評估top 4
        • 上傳速率高,則能夠找到更好的交易伙伴,從而更快地獲取文件。
      • ? 每30秒隨機選擇一個其他節點,向其發送chunk,則alice可能成為chunk的top4,從而建立新的連接。

思考題

BitTorrent技術對網絡性能有哪些潛在的危害?

這個欠考慮。

BT三大指控:高溫、重復讀寫、扇區斷塊。

Bittorrent下載是寬帶時代新興的P2P交換文件模式,各用戶之間共享資源,互相當種子和中繼站,俗稱BT下載。由于每個用戶的下載和上傳幾乎是同時進行,因此下載的速度非???。不過,開發BT的人因為缺乏對維護硬盤的考慮,使用了很差的HASH算法,它會將下載的數據直接寫進硬盤(不像FlashGet等下載工具可以調整緩存,到指定的數據量后才寫入硬盤),因此造成硬盤損害,提早結束硬盤的壽命。

此外,BT下載事先要申請硬盤空間,在下載較大的文件的時候,一般會有2~3分鐘時間整個系統優先權全部被申請空間的任務占用,其他任務反應極慢。有些人為了充分利用帶寬,還會同時進行幾個BT下載任務,此時就非常容易出現由于磁盤占用率過高而導致的死機故障。

因為BT對硬盤的重復讀寫動作會產生高溫,令硬盤的溫度升高,直接影響硬盤的壽命。而當下載人數愈多,同一時間讀取你的硬盤的人亦愈多,硬盤大量進行重復讀寫的動作,加速消耗?;趯τ脖P工作原理的分析可以知道,硬盤的磁頭壽命是有限的,頻繁的讀寫會加快磁頭臂及磁頭電機的磨損,頻繁的讀寫磁盤某個區域更會使該區溫度升高,將影響該區磁介質的穩定性還會導至讀寫錯誤,高溫還會使該區因熱膨漲而使磁頭和碟面更近了(正常情況下磁頭和碟面只有幾個微米,高溫膨脹會讓磁頭更靠近碟面),而且也會影響薄膜式磁頭的數據讀取靈敏度,會使晶體振蕩器的時鐘主頻發生改變,還會造成硬盤電路元件失靈。任務繁多也會導至ide硬盤過早損壞,由于ide硬盤自身的不足,過多任務請求是會使尋道失敗率上升導至磁頭頻繁復位(復位就是磁頭回復到 0磁道,以便重新尋道)加速磁頭臂及磁頭電機磨損。因此有些人形容,BT就像把單邊燃燒的柴枝折開兩、三段一起燃燒,大量的讀寫動作會大大加速硬盤的消耗,燃燒硬盤的生命。

其次,同時因為下載太多東西,使扇區的編排混亂,讀寫數據時要在不同扇區中讀取,增加讀寫次數,加速硬盤消耗。
2、對網絡帶寬的損害

當前,以BitTorrent(以下簡稱BT)為代表的P2P下載軟件流量占用了寬帶接入的大量帶寬,據統計已經超過了50%。這對于以太網接入等共享帶寬的寬帶接入方式提出了很大的挑戰,大量的使接入層交換機的端口長期工作在線速狀態,嚴重影響了用戶使用正常的Web、E-mail以及視頻點播等業務,并可能造成重要數據無法及時傳輸而給企業帶來損失。因此,運營商、企業用戶以及教育等行業的用戶都有對這類流量進行限制的要求。BT將會占用太多的網絡資源,從而有可能在接入網、傳輸網、骨干網等不同層面形成瓶頸,造成資源緊張,這似乎也是目前運營商包括網通、長寬等封掉BT端口的最大理由。

3、助長了病毒的傳播

2005年11月17日,公安部公共信息網絡安全監察處許劍卓處長在天津AVAR2005大會上做了《中國網絡犯罪現狀》的報告,報告指出,通過計算機病毒和木馬進行的黑客行為是計算機網絡犯罪的主要根源。調查情況表明,計算機病毒除了通過常規的電子郵件等途徑傳播外,目前網絡上盛行的P2P軟件成為計算機病毒和木馬傳播的主要途徑。這些病毒和木馬對企業的安全形成巨大的挑戰。
4、可能面臨著版權侵害的風險

Fred Lawrence是一個美國普通老人,今年67歲,因為自己孫子的緣故惹來了美國電影協會(MPAA)的大麻煩。Lawrence的孫子通過iMesh P2P服務在家中的電腦下載并分享了4部電影,美國電影協會通過IP地址找到了他和他的電腦,并以侵犯版權為由要求老人為此在18個月中付出4000美元的罰金……;
現在國內外都在嚴厲打擊盜版,不排除版權作者或機構通過各種網絡跟蹤技術來找到非法進行P2P下載的用戶,并提起訴訟或者其他賠償要求;如果企業員工進行了這些行為,可能由此對企業的形象造成極大負面影響,并可能使得企業遭受其他損失。此外,員工可能通過BT等下載一些色情、反動、暴力的等違法的信息,這些信息可能被公安機關檢測到,由此可能給員工和企業帶來法律風險。

P2P應用:索引技術

P2P: 搜索信息

  • ?P2P系統的索引:信息到節點位置(IP地址+端口號)的映射
  • ?文件共享(電驢)
    • ? 利用索引動態跟蹤、存儲節點所共享的文件的位置
    • ? 節點需要告訴索引它擁有哪些文件
    • ? 節點搜索索引,從而獲知能夠得到哪些文件
  • ?即時消息(QQ)
    • ? 索引負責將用戶名映射到位置
    • ? 當用戶開啟IM應用時,需要通知索引它的位置
    • ? 節點檢索索引,確定用戶的IP地址

集中式索引

  • ?Napster最早采用這種設計
    • ? 1) 節點加入時,通知中央服務器:
      • ? IP地址
      • ? 內容
    • ? 2) Alice查找“Hey Jude”
    • ? 3) Alice從Bob處請求文件
  • 集中式索引的問題
    • ?單點失效問題
    • ?性能瓶頸
    • ?版權問題(集中目錄容易被發現版權問題)

全分布非結構:洪泛式查詢(Query flooding)

  • ?完全分布式架構
  • ?每個節點對它共享的文件進行索引,且只對它共享的文件進行索引

如何查詢?

由覆蓋網絡(overlay network): Graph來組織查詢和連接

  • ?節點X與Y之間如果有TCP連接,那么構成一個邊
  • ?所有的活動節點和邊構成覆蓋網絡
    • ?邊:虛擬鏈路
  • ?節==點一般鄰居數少于10個???==

在覆蓋網絡上進行廣播來完成查詢。

  • ?查詢消息通過已有的TCP連接發送
  • ?節點轉發查詢消息
  • ?如果查詢命中,則利用反向路徑發回查詢節點

  • 問題
    • 信息泛濫,帶寬壓力,無效的垃圾信息
    • 網絡形成之初,難以形成網絡,而成為各個獨立分支,造成信息缺失。需要特殊手段處理

層次式覆蓋網絡

  • ?介于集中式索引和洪泛查詢之間的方法
  • ?每個節點或者是一個超級節點,或者被分配一個超級節點
    • ? 節點和超級節點間維持TCP連接(集中式索引)
    • ? 某些超級節點對之間維持TCP連接(超級節點之間是洪泛式)
  • ?超級節點負責跟蹤子節點的內容

P2P案例應用:Skype(最成功的之一)

?通話時是P2P的:==用戶/節點對之間直接通信。但是索引階段是層次式覆蓋網絡架構==

?私有應用層協議

?采用層次式覆蓋網絡架構

?索引負責維護用戶名與IP地址間的映射

?索引分布在超級節點上

課后作業

查閱Skype應用的相關資料,就其架構、協議、算法等撰寫一篇調研報告,長度在5000字以上。

Socket編程API

網絡程序設計接口主要類型

開發網絡應用程序關聯的API類型。

按5層結構觀察,除物理層外,所有層次,包括應用層本身,都能提供網絡程序設計的api。

  • 直接面向網卡編程-大部分不需要也難以掌握。==網卡是數據鏈路層==
  • 網卡之上的,數據鏈路層的編程,屏蔽網卡細節,適用所有網卡。
  • 特定操作系統的開發api。
  • 基于庫的。
  • socket:應用層、傳輸層之間的。==屬于傳輸層==

理解應用編程接口API

  • 應用層協議組構應用進程之間的邏輯連接。
  • API通常是從傳輸層開始封裝。

幾種典型的應用編程接口

  • Berkeley UNIX 操作系統定義了一種 API,稱為套接字接口(socket interface),簡稱套接字(socket)。
  • 微軟公司在其操作系統中采用了套接字接口 API,形成了一個稍有不同的 API,并稱之為Windows Socket Interface,WINSOCK。
  • AT&T (美國電話電報公司)為其 UNIX 系統 V 定義了一種 API,簡寫為 TLI (Transport Layer Interface)。
    • UNIX,一種計算機操作系統,具有多任務、多用戶的特征。于1969年,在美國AT&T公司的貝爾實驗室開發類UNIX(UNIX-like)

Socket編程-Socket API概述

Socket API

抽象通信機制。是一種門面模式,為應用層封裝傳輸層協議,為應用層提供抽象鏈路。

  • 最初設計
    • 面向BSD UNIX-Berkley
    • 面向TCP/IP協議棧接口
  • 目前
    • Internet網絡應用最典型的API接口,事實上的工業標準
    • 絕大多數操作系統都支持
  • 通信模型
    • 面向客戶/服務器(C/S),==p2p也使用,p2p微觀上也是cs==
  • ==由進程或者操作系統創建==
    • 本質上是操作系統提供api,進程調用該api通知操作系統創建。

如何標識socket?

  • 對外
    • 標識通信端點:
      • IP地址+端口號(==16位整數端口號,0-65535,即16位二進制無符號數==)
  • 對內
    • 操作系統/進程如何管理套接字(對內)?
      • 套接字描述符(socket descriptor)
        • ==小整數==
        • 當應用程序要創建一個套接字時,操作系統就返回一個小整數作為描述符,應用程序則使用這個描述符來引用該套接字。

對內的Socket抽象

  • 類似于文件的抽象,像文件一樣管理socket
  • 當應用進程創建套接字時,操作系統分配一個數據結構存儲該套接字相關信息
  • 進程調用api通知操作系統創建套接字,該函數由操作系統返回套接字描述符給進程。
  • 都是通過該socket描述符來引用、訪問套接字。
  • 每一個進程都管理一個soket描述符表,管理其創建的socket,這個表類似一個結構體指針數組,每個指針指向一個socket數據結構。
  • ==由系統使用來提供api。==

socket地址結構

  • ==sin:socket internet==
  • IP地址、本地端口號這兩個必需。
  • socket提供多協議支持,不僅僅是TCP/IP
    • 地址族:表述所使用的傳輸層協議
    • AF_INEF:TCP/IP使用的地址族
      • 只需知道,windows下tcpip要用的地址族是AF_INEF就夠了
    • sin_zero是為了讓sockaddr與sockaddr_in兩個數據結構保持大小相同而保留的空字節。
  • 使用TCP/IP協議簇的網絡應用程序聲明端點地址變量時,使用結構sockaddr_in

sockaddr與sockaddr_in:

注釋中標明了屬性的含義及其字節大小,這兩個結構體一樣大,都是16個字節,而且都有family屬性,不同的是:

sockaddr用其余14個字節來表示sa_data,而sockaddr_in把14個字節拆分成sin_port, sin_addr和sin_zero

分別表示端口、ip地址。sin_zero用來填充字節使sockaddr_in和sockaddr保持一樣大小。

sockaddr和sockaddr_in包含的數據都是一樣的,但他們在使用上有區別:

程序員不應操作sockaddr,sockaddr是給操作系統用的

程序員應使用sockaddr_in來表示地址,sockaddr_in區分了地址和端口,使用更方便。

==思考:為何這里要維護地址長度?==

Socket編程-Socket API函數

Socket API函數(以WinSock為例)

winsock實現機制是動態連接庫,所以要初始化、釋放動態連接庫,使用api開始和結束要分別調用

  • WSAStartup(初始化Windows Sockets API)
  • WSACleanup(釋放所使用的WindowsSockets DLL)
  • ==wsa表示Windows Sockets API==

WSAStartup

使用Socket的應用程序在使用Socket之前必須首先調用WSAStartup函數

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
  • WORD wVersionRequested
    • 指明程序請求使用的WinSock版本,其中高位字節指明副版本、低位字節指明主版本
    • 十六進制整數,例如0x102表示2.1版(==WORD表示雙字節==
  • LPWSADATA lpWSAData
    • 返回實際的WinSock的版本信息,指向WSADATA結構的指針
  • 例:使用2.1版本的WinSock的程序代碼段
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); wVersionRequested = MAKEWORD( 2, 1 ); err = WSAStartup( wVersionRequested, &wsaData );

WSACleanup

應用程序在完成對請求的Socket庫的使用,最后要調用WSACleanup函數。

int WSACleanup (void);
  • 解除與Socket動態庫的綁定。
  • 釋放Socket庫所占用的系統資源。

下面的不帶wsa的api是多系統通用的,上面的wsa api是win專用的

socket

創建套接字

sd = socket(protofamily,type,proto);
  • sd

    • 操作系統返回的套接字描述符,應用層使用該描述符操作、引用套接字。
  • protofamily協議族(說明面向哪個協議族)

    • protofamily = PF_INET(TCP/IP)
  • ==type套接字類型==(每種協議族不同,下面的例子是)

    • type = SOCK_STREAM,SOCK_DGRAM or SOCK_RAW(TCP/IP)
  • proto(協議號,訪問的是哪種協議):0表示缺省,可以使用對應數字表示所選協議族和套接字類型的支持的協議號

  • 例:創建一個流套接字的代碼段

    struct protoent *p; p=getprotobyname("tcp"); SOCKET sd=socket(PF_INET,SOCK_STREAM,p->p_proto);

==思考:為何這里擁PF——INEF?==

Socket面向TCP/IP的服務類型

stream(傳輸流,使用tcp):可靠、面向連接、字節流傳輸、點對點(一個連接只能連接兩點)

dgram(datagram數據報,使用udp):不可靠、無連接、數據報傳輸

raw(raw:生的,這里指不加傳輸層處理的原始套接字)

closesocket(linux版為close)

關閉一個描述符為sd的套接字。

int closesocket(SOCKET sd);
  • 如果多個程共享一個套接字,有計數。
    • 調用closesocket將把調用進程的描述符表中的引用刪除,然后該socket的數據結構的reference counting減1,減至0才釋放該socket數據結構空間。
  • 一個進程中的多程對一個套接字的使用無計數
    • 如果進程中的一個線程調用closesocket將一個套接字關閉,則該進程的描述符表中無該socket數據結構的引用,該進程中的其他線程也將不能訪問該套接字。
    • ==描述符表是一個進程一個,而不是一個線程一個!==
  • 返回值
    • 0:成功
    • SOCKET_ERROR:失敗

bind(服務器)

綁定(填寫)套接字的本地端點地址(IP地址+==16進制==端口號)

int bind(sd,localaddr,addrlen);
  • 參數:
    • 套接字描述符(sd)
    • 端點地址(localaddr)
      • 結構sockaddr_in
  • 客戶程序一般不必調用bind函數,因為這個工作一般是由操作系統來完成的。
  • 服務器端需要調用
    • 綁定設置熟知端口號:80 25 等等
    • IP地址?服務器運行主機的ip地址可以嗎?
    • 綁定問題:服務器應該綁定哪個地址?
    • 解決方案
      • 地址通配符:INADDR_ANY,把ip地址附成該值,表示主機上任意一個有效ip地址都是可以來訪問該socket。
      • 服務器應該綁定INADDR_ANY:端口號,而是saddrlen不具體IP:端口號
      • INADDR_ANY一般是0.0.0.0

==思考:為什么要加地址長度?localaddr里面已經包含長度==

listen(服務器)

置流套接字處于監聽狀態,listen只用于服務器端,僅面向tcp連接的流類型。

int listen(sd,queuesize);
  • 設置連接==請求緩存隊列==大小(queuesize)
  • 返回值:
    • 0:成功
    • SOCKET_ERROR:失敗

connect(客戶端,tcp/udp差異)

連接建立不等同數據請求發送,還需要send

connect(sd,saddr,saddrlen);
  • 客戶程序調用connect函數來使本地套接字(sd)與特定計算機的特定端口(saddr)的套接字(服務)進行連接
  • 僅用于客戶端
  • 可用于TCP客戶端也可以用于UDP客戶端
    • 用于TCP客戶端:建立TCP連接
    • 用于UDP客戶端:只是簡單的本地指定了服務器端點地址,在之后發送數據報和接受數據時使用該地址。

accept(服務器,tcp)

newsock = accept(sd,caddr,caddrlen);
  • 服務程序調用accept函數從處于監聽狀態的流套接字sd的客戶連接請求隊列中取出排在最前的一個客戶請求,并且創建一個新的套接字來與客戶套接字創建連接通道。
  • 注意這里接==受的是建立連接的請求,而不是對數據的請求==,后者由recv, recvfrom負責,數據由send, sendto發送。
  • ==僅用于TCP套接字==
  • ==僅用于服務器==
  • 利用新創建的套接字
  • 使用新套接字(newsock)與客戶通信,why?
    • tcp是點對點的,socket2socket的,單對單的,如果不這么做,就不能并發的提供服務。這里把接受服務和提供服務的socket區分開了。

send, sendto(服務器客戶機都用)

send(sd,*buf,len,flags); sendto(sd,*buf,len,flags,destaddr,addrlen);
  • send函數TCP套接字(客戶與服務器)或調用了connect函數的UDP客戶端套接字
  • sendto函數用于==UDP服務器==端套接字與==未調用connect函數的UDP客戶端==套接字

recv, recvfrom(服務器客戶機都用)

recv(sd,*buffer,len,flags); recvfrom(sd,*buf,len,flags,senderaddr,saddrlen);
  • recv函數從TCP連接的另一端接收數據,或者從調用了connect函數的UDP客戶端套接字接收服務器發來的數據。
  • recvfrom函數用于從==UDP服務器==端套接字與==未調用connect函數的UDP客戶端==套接字接收對端數據。

setsockopt, getsockopt(不具體講了)

int setsockopt(int sd, int level, int optname, *optval, int optlen); int getsockopt(int sd, int level, int optname,*optval, socklen_t *optlen);
  • setsockopt()函數用來設置套接字sd的選項參數
  • getsockopt()函數用于獲取任意類型、任意狀態套接口的選項當前值,并把結果存入optval

Socket API函數小結

win獨占

  • ? WSAStartup: 初始化socket庫(僅對WinSock)
  • ? WSACleanup: 清楚/終止socket庫的使用 (僅對WinSock)

多平臺通用

==按照服務器、客戶機、tcp、udp去理解==

  • ? socket: 創建套接字
  • ? connect:“連接”遠端服務器 (僅用于客戶端)
  • ? closesocket: 釋放/關閉套接字
  • ? bind: 綁定套接字的本地IP地址和端口號(通??蛻舳瞬恍枰?#xff09;
  • ? listen: 置服務器端TCP套接字為監聽模式,并設置隊列大小 (僅用于服務器端TCP套接字)
  • ? accept: 接受/提取一個連接請求,創建新套接字,通過新套接 (僅用于服務器端的TCP套接字)
  • ? recv: 接收數據(用于TCP套接字或連接模式的客戶端UDP套接字)
  • ? recvfrom: 接收數據報(用于非連接模式的UDP套接字)
  • ? send: 發送數據(用于TCP套接字或連接模式的客戶端UDP套接字)
  • ? sendto:發送數據報(用于非連接模式的UDP套接字)
  • ? setsockopt: 設置套接字選項參數(用的時候查)
  • ? getsockopt: 獲取套接字選項參數(用的時候查)

關于網絡字節順序

osi7層模型才有表示層來兼容字節順序,5層中是沒有的,需要協議輔助完成該功能。

  • ?TCP/IP定義了標準的用于協議頭中的二進制整數表示:網絡字節順序(network byte order)
  • ?某些Socket API函數的參數需要存儲為網絡字節順序而不是本地字節順序(如IP地址、端口號等)。
  • ?==可以實現本地字節順序與網絡字節順序間轉換的函數==
    • ? htons: 本地字節順序→網絡字節順序(16bits)(host2net s)
    • ? ntohs: 網絡字節順序→本地字節順序(16bits)
    • ? htonl: 本地字節順序→網絡字節順序(32bits)
    • ? ntohl: 網絡字節順序→本地字節順序(32bits)

網絡應用的Socket API(TCP)調用基本流程

注意,這張圖并不完整,注意區分tcp udp

listen并不阻塞,listen只是開啟listen狀態。

recv、accept是真正對連接的反饋需要循環開啟,也是后續的操作的前提,所以要阻塞accept、recv。

阻塞過程,表示當函數未成功則一直等待。

左右兩邊都有2個阻塞函數。

==ns:newsocket==

注意兩邊close的區別,服務器只是關閉了ns。

Socket編程-客戶端軟件設計

socket服務器按上述流程要:選擇服務器ip、端口號,網絡字節轉化,選擇協議。

具體實現上要求:4位ip/域名:服務名轉化為32位ip:端口號,協議名轉化為服務號

解析服務器IP地址

  • ? 客戶端可能使用域名(如:study.163.com)或IP地址(如:123.58.180.121)標識服務器
  • ? IP協議需要使用32位二進制IP地址
  • ? 需要將域名或IP地址轉換為32位IP地址
    • ? 函數inet_addr( ) 實現點分十進制IP地址到32位IP地址轉換
      • 如果正確執行將返回一個無符號長整數型數。如果傳入的字符串不是一個合法的IP地址,將返回INADDR_NONE。
      • 已經是網絡字節順序
    • ? 函數gethostbyname( ) 實現域名到32位IP地址轉換
      • 返回一個指向結構hostent 的指針,該結構中包含32位ip地址
      • 已經是網絡字節順序

解析服務器(熟知)端口號

  • ? 客戶端可能不使用端口號而是使用服務名(如HTTP)標識服務器端口
  • ? 需要將服務名轉換為標準的熟知端口號
  • ? 函數getservbyname( )
    • ? 返回一個指向結構servent的指針,該結構包含端口號

解析協議號

  • socket使用協議號來標識協議
  • 客戶端可能使用協議名(如:TCP)指定協議,需要將協議名轉換為協議號(如:6)
  • 函數getprotobyname ( ) 實現協議名到協議號的轉換
    • 返回一個指向結構protoent的指針

TCP客戶端軟件流程

  • 確定服務器IP地址與端口號
  • 創建套接字
  • 分配本地端點地址(IP地址+端口號)(==顯示的創建socket的同時,系統自動完成本地端點地址分配==)
  • 連接服務器(套接字)
  • 遵循應用層協議進行通信
  • 關閉/釋放連接
  • UDP客戶端軟件流程

  • 確定服務器IP地址與端口號
  • 創建套接字
  • 分配本地端點地址(IP地址+端口號)
  • 指定服務器端點地址,構造UDP數據報并發送(注意,這里并沒有通知服務器,而是直接發送)
  • 遵循應用層協議進行通信
  • 關閉/釋放套接字
  • 客戶端軟件的實現- connectsock()

    設計一個connectsock過程封裝底層代碼,這部分代碼在udp和tcp中都可能用到。

    /* consock.cpp - connectsock */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <winsock.h> #ifndef INADDR_NONE #define INADDR_NONE 0xffffffff #endif /* INADDR_NONE */ void errexit(const char *, ...); /*------------------------------------------------------- * connectsock - allocate & connect a socket using TCP or UDP *------------------------------------------------------ *///transport指的是所用協議名稱 SOCKET connectsock(const char *host, const char *service, const char *transport ) { struct hostent *phe; /* pointer to host information entry */ struct servent *pse; /* pointer to service information entry */ struct protoent *ppe; /* pointer to protocol information entry */ struct sockaddr_in sin;/* an Internet endpoint address */ int s, type; /* socket descriptor and socket type */ memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; /* Map service name to port number */ if ( pse = getservbyname(service, transport) ) sin.sin_port = pse->s_port; else if ( (sin.sin_port = htons((u_short)atoi(service))) == 0 ) errexit("can't get \"%s\" service entry\n", service);/* Map host name to IP address, allowing for dotted decimal */ if ( phe = gethostbyname(host) ) memcpy(&sin.sin_addr, phe->h_addr, phe->h_length); else if ( (sin.sin_addr.s_addr = inet_addr(host))==INADDR_NONE) errexit("can't get \"%s\" host entry\n", host);/* Map protocol name to protocol number */ if ( (ppe = getprotobyname(transport)) == 0) errexit("can't get \"%s\" protocol entry\n", transport); /* Use protocol to choose a socket type */ if (strcmp(transport, "udp") == 0) type = SOCK_DGRAM; else type = SOCK_STREAM;/* Allocate a socket */ s = socket(PF_INET, type, ppe->p_proto); if (s == INVALID_SOCKET) errexit("can't create socket: %d\n", GetLastError());/* Connect the socket */ if (connect(s, (struct sockaddr *)&sin, sizeof(sin))==SOCKET_ERROR) errexit("can't connect to %s.%s: %d\n", host, service, GetLastError()); return s; }

    客戶端軟件的實現-UDP客戶端

    設計connectUDP過程用于創建連接模式客戶端UDP套接字

    /* conUDP.cpp - connectUDP */ #include <winsock.h> SOCKET connectsock(const char *, const char *, const char *); /*-------------------------------------------------------* connectUDP - connect to a specified UDP service* on a specified host*----------------------------------------------------- */ SOCKET connectUDP(const char *host, const char *service ) { return connectsock(host, service, "udp"); }

    客戶端軟件的實現-TCP客戶端

    設計connectTCP過程,用于創建客戶端TCP套接字

    /* conTCP.cpp - connectTCP */ #include <winsock.h> SOCKET connectsock(const char *, const char *, const char *); /*----------------------------------------------------* connectTCP - connect to a specified TCP service* on a specified host*---------------------------------------------------*/ SOCKET connectTCP(const char *host, const char *service ) { return connectsock( host, service, "tcp"); }

    客戶端軟件的實現-異常處理

    /* errexit.cpp - errexit */ #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <winsock.h> /*---------------------------------------------------------- * errexit - print an error message and exit *---------------------------------------------------------- */ /*VARARGS1*/ void errexit(const char *format, ...) { va_list args; va_start(args, format); vfprintf(stderr, format, args); va_end(args); WSACleanup(); exit(1);}

    例1:訪問DAYTIME服務的客戶端(TCP)

    ?DAYTIME服務
    ? 獲取日期和時間
    ? 雙協議服務(TCP、 UDP),端口號13
    ? TCP版利用TCP連接請求觸發服務(==不需要發送任何數據,只需要發送連接建立請求==
    ? UDP版需要==客戶端發送一個數據報==

    /* TCPdtc.cpp - main, TCPdaytime */ #include <stdlib.h> #include <stdio.h> #include <winsock.h> void TCPdaytime(const char *, const char *); void errexit(const char *, ...); SOCKET connectTCP(const char *, const char *); #define LINELEN 128 #define WSVERS MAKEWORD(2, 0) /*-------------------------------------------------------- * main - TCP client for DAYTIME service *-------------------------------------------------------- */ int main(int argc, char *argv[]) { char *host = "localhost"; /* host to use if none supplied */ char *service = "daytime"; /* default service port */ WSADATA wsadata; switch (argc) { case 1: host = "localhost"; break; case 3: service = argv[2]; /* FALL THROUGH */ case 2: host = argv[1]; break; default: fprintf(stderr, "usage: TCPdaytime [host [port]]\n"); exit(1); } if (WSAStartup(WSVERS, &wsadata) != 0) errexit("WSAStartup failed\n"); TCPdaytime(host, service); WSACleanup(); return 0; /* exit */ } /*----------------------------------------------------- * TCPdaytime - invoke Daytime on specified host and print results *----------------------------------------------------- */ void TCPdaytime(const char *host, const char *service) { char buf[LINELEN+1]; /* buffer for one line of text */ SOCKET s; /* socket descriptor */ int cc; /* recv character count */s = connectTCP(host, service); cc = recv(s, buf, LINELEN, 0); while( cc != SOCKET_ERROR && cc > 0) { buf[cc] = '\0'; /* ensure null-termination */ (void) fputs(buf, stdout); cc = recv(s, buf, LINELEN, 0); } closesocket(s); }

    例2:訪問DAYTIME服務的客戶端(UDP)

    /* UDPdtc.cpp - main, UDPdaytime */ #include <stdlib.h> #include <stdio.h> #include <winsock.h> void UDPdaytime(const char *, const char *); void errexit(const char *, ...); SOCKET connectUDP(const char *, const char *); #define LINELEN 128 #define WSVERS MAKEWORD(2, 0) #define MSG “what daytime is it?\n" /*-------------------------------------------------------- * main - UDP client for DAYTIME service *-------------------------------------------------------- */ int main(int argc, char *argv[]) { char *host = "localhost"; /* host to use if none supplied */ char *service = "daytime"; /* default service port */ WSADATA wsadata; switch (argc) { case 1: host = "localhost"; break; case 3: service = argv[2]; /* FALL THROUGH */ case 2: host = argv[1]; break; default: fprintf(stderr, "usage: UDPdaytime [host [port]]\n"); exit(1); } if (WSAStartup(WSVERS, &wsadata) != 0) errexit("WSAStartup failed\n"); UDPdaytime(host, service); WSACleanup(); return 0; /* exit */ } /*----------------------------------------------------- * UDPdaytime - invoke Daytime on specified host and print results *----------------------------------------------------- */ void UDPdaytime(const char *host, const char *service) { char buf[LINELEN+1]; /* buffer for one line of text */ SOCKET s; /* socket descriptor */ int n; /* recv character count */ s = connectUDP(host, service); (void) send(s, MSG, strlen(MSG), 0); /* Read the daytime */ n = recv(s, buf, LINELEN, 0); if (n == SOCKET_ERROR) errexit("recv failed: recv() error %d\n", GetLastError()); else { buf[cc] = '\0'; /* ensure null-termination */ (void) fputs(buf, stdout); } closesocket(s); return 0; /* exit */ }

    Socket編程-服務器軟件設計

    4種類型基本服務器

    循環:同時處理一個用戶的請求

    并發:同時處理多個用戶請求

    無連接:基于udp

    面向連接:基于tcp

  • 循環無連接(Iterative connectionless)服務器
  • 循環面向連接(Iterative connection-oriented)服務器
  • 并發無連接(Concurrent connectionless)服務器
  • 并發面向連接(Concurrent connection-oriented)服務器
  • 循環無連接服務器基本流程

  • 創建套接字
  • 綁定端點地址(==INADDR_ANY+端口號==
  • 反復接收來自客戶端的請求
  • 遵循應用層協議,構造響應報文,發送給客戶
  • 數據發送

    ?服務器端不能使用connect()函數,connect()是客戶端專用
    ?無連接服務器使用sendto()函數發送數據報

    獲取客戶端點地址

    ?調用recvfrom()函數接收數據時,自動提取客戶進程端點地址

    循環面向連接服務器基本流程

  • 創建(主)套接字,并綁定熟知端口號;
  • 設置(主)套接字為被動監聽模式,準備用于服務器;
  • 調用accept()函數接收下一個連接請求(通過主套接字),創建新套接字用于與該客戶建立連接;(==主套接字要用與接受連接申請==
  • 遵循應用層協議,反復接收客戶請求,構造并發送響應(通過新套接字);
  • 完成為特定客戶服務后,關閉與該客戶之間的連接,返回步驟3.
  • 并發無連接服務器基本流程

    這里123指的是第一步第二步

    主線程1: 創建套接字,并綁定熟知端口號;
    主線程2: 反復調用recvfrom()函數,接收下一個客戶請求并創建==新線程處理(為了并發)==該客戶響應;
    子線程1: 接收一個特定請求;
    子線程2: 依據應用層協議構造響應報文,并調用sendto()發送;
    子線程3: 退出(一個子線程處理一個請求后即終止)。

    并發面向連接服務器基本流程

    這里123指的是第一步第二步

    主線程1: 創建(主)套接字,并綁定熟知端口號;

    主線程2: 設置(主)套接字為被動監聽模式,準備用于服務器;

    主線程3: 反復調用accept()函數接收下一個連接請求(通過主套接字),并創建一個新子線程處理該客戶響應;

    子線程1: 接收一個客戶的服務請求(通過新創建的套接字);

    子線程2: 遵循應用層協議與特定客戶進行交互;

    子線程3: 關閉/釋放連接并退出(線程終止).

    服務器的實現

    實現的一種設計,可以不這么設計。

    ?設計一個底層過程隱藏底層代碼:passivesock()
    ?兩個高層過程分別用于創建服務器端UDP套接字和TCP套接字(調用passivesock()函數):
    ? passiveUDP()
    ? passiveTCP()

    服務器的實現-passivesock()

    /* passsock.cpp - passivesock */ #include <stdlib.h> #include <string.h> #include <winsock.h> void errexit(const char *, ...); /*----------------------------------------------------------------------- * passivesock - allocate & bind a server socket using TCP or UDP *------------------------------------------------------------------------ */ SOCKET passivesock(const char *service, const char *transport, int qlen) { struct servent *pse; /* pointer to service information entry */ struct protoent *ppe; /* pointer to protocol information entry */ struct sockaddr_in sin;/* an Internet endpoint address */ SOCKET s; /* socket descriptor */ int type; /* socket type (SOCK_STREAM, SOCK_DGRAM)*/ memset(&sin, 0, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY;/* Map service name to port number */ if ( pse = getservbyname(service, transport) ) sin.sin_port = (u_short)pse->s_port; else if ( (sin.sin_port = htons((u_short)atoi(service))) == 0 ) errexit("can't get \"%s\" service entry\n", service); /* Map protocol name to protocol number */ if ( (ppe = getprotobyname(transport)) == 0) errexit("can't get \"%s\" protocol entry\n", transport);/* Use protocol to choose a socket type */ if (strcmp(transport, "udp") == 0) type = SOCK_DGRAM; else type = SOCK_STREAM;/* Allocate a socket */ s = socket(PF_INET, type, ppe->p_proto); if (s == INVALID_SOCKET) errexit("can't create socket: %d\n", GetLastError());/* Bind the socket */ if (bind(s, (struct sockaddr *)&sin, sizeof(sin)) == SOCKET_ERROR) errexit("can't bind to %s port: %d\n", service, GetLastError()); if (type == SOCK_STREAM && listen(s, qlen) == SOCKET_ERROR) errexit("can't listen on %s port: %d\n", service, GetLastError()); return s;}

    服務器的實現-passiveUDP()

    /* passUDP.cpp - passiveUDP */ #include <winsock.h> SOCKET passivesock(const char *, const char *, int); /*------------------------------------------------------------------------------------- * passiveUDP - create a passive socket for use in a UDP server *------------------------------------------------------------------------------------- */ SOCKET passiveUDP(const char *service) { return passivesock(service, "udp", 0); }

    服務器的實現-passiveTCP()

    /* passTCP.cpp - passiveTCP */ #include <winsock.h> SOCKET passivesock(const char *, const char *, int); /*------------------------------------------------------------------------------------ * passiveTCP - create a passive socket for use in a TCP server *------------------------------------------------------------------------------------ */ SOCKET passiveTCP(const char *service, int qlen) { return passivesock(service, "tcp", qlen);

    例1:無連接循環DAYTIME服務器

    /* UDPdtd.cpp - main, UDPdaytimed */ #include <stdlib.h> #include <winsock.h> #include <time.h> void errexit(const char *, ...); SOCKET passiveUDP(const char *); #define WSVERS MAKEWORD(2, 0) /*------------------------------------------------------------------------ * main - Iterative UDP server for DAYTIME service *------------------------------------------------------------------------ */ void main(int argc, char *argv[]) { struct sockaddr_in fsin; /* the from address of a client */ char *service = "daytime"; /* service name or port number */ SOCKET sock; /* socket */ int alen; /* from-address length */ char * pts; /* pointer to time string */ time_t now; /* current time */ WSADATA wsadata; switch (argc) {case 1: break;case 2: service = argv[1]; break;default: errexit("usage: UDPdaytimed [port]\n"); } if (WSAStartup(WSVERS, &wsadata) != 0) errexit("WSAStartup failed\n"); sock = passiveUDP(service); while (1) { alen = sizeof(struct sockaddr); if (recvfrom(sock, buf, sizeof(buf), 0,(struct sockaddr *)&fsin, &alen) == SOCKET_ERROR) errexit("recvfrom: error %d\n", GetLastError()); (void) time(&now); pts = ctime(&now); (void) sendto(sock, pts, strlen(pts), 0, (struct sockaddr *)&fsin, sizeof(fsin)); } return 1; /* not reached */ }

    例2:面向連接并發DAYTIME服務器

    /* TCPdtd.cpp - main, TCPdaytimed */ #include <stdlib.h> #include <winsock.h> #include <process.h> #include <time.h> void errexit(const char *, ...); void TCPdaytimed(SOCKET); SOCKET passiveTCP(const char *, int); #define QLEN 5 #define WSVERS MAKEWORD(2, 0) /*------------------------------------------------------------------------ * main - Concurrent TCP server for DAYTIME service *------------------------------------------------------------------------ */ void main(int argc, char *argv[]) { struct sockaddr_in fsin; /* the from address of a client */ char *service = "daytime"; /* service name or port number*/ SOCKET msock, ssock; /* master & slave sockets */ int alen; /* from-address length */ WSADATA wsadata; switch (argc) { case1: break; case2: service = argv[1]; break; default: errexit("usage: TCPdaytimed [port]\n"); } if (WSAStartup(WSVERS, &wsadata) != 0) errexit("WSAStartup failed\n"); msock = passiveTCP(service, QLEN); while (1) { alen = sizeof(struct sockaddr); ssock = accept(msock, (struct sockaddr *)&fsin, &alen); if (ssock == INVALID_SOCKET) errexit("accept failed: error number %d\n", GetLastError()); if (_beginthread((void (*)(void *)) TCPdaytimed, 0,(void *)ssock) < 0) { errexit("_beginthread: %s\n", strerror(errno)); } } return 1; /* not reached */ } /*---------------------------------------------------------------------- * TCPdaytimed - do TCP DAYTIME protocol *----------------------------------------------------------------------- */ void TCPdaytimed(SOCKET fd) { char * pts; /* pointer to time string */ time_t now; /* current time */ (void) time(&now); pts = ctime(&now); (void) send(fd, pts, strlen(pts), 0); (void) closesocket(fd); }

    Markdown文本:https://github.com/ArrogantL/BlogData/tree/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9Cspoc/W2
    本文作者: ArrogantL (arrogant262@gmail.com)
    版權聲明: 本博客所有文章除特別聲明外,均采用 CC BY-NC-SA 4.0 許可協議。轉載請注明出處!

    轉載于:https://www.cnblogs.com/gjl-blog/p/9665048.html

    總結

    以上是生活随笔為你收集整理的哈工大计算机网络Week2-网络应用数据交换的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    日本在线观看视频一区 | 黄色不卡av| 国产免费叼嘿网站免费 | 久久伊人八月婷婷综合激情 | 一级黄色在线视频 | 人人爽人人射 | 日韩欧美xxx | 久av电影| 亚洲伦理电影在线 | 91大神电影 | 久久久精品99 | 豆豆色资源网xfplay | 欧美亚洲精品在线观看 | 在线不卡a | 久久久久久久影视 | 久久中文网 | 国产在线国偷精品产拍免费yy | 免费在线成人 | 亚洲精区二区三区四区麻豆 | 91在线观 | 成人av在线播放网站 | 国产婷婷在线观看 | 黄色在线免费观看网站 | 中文字幕一区二区三区四区久久 | 国产午夜精品一区二区三区 | 国产91精品欧美 | 欧美一级在线观看视频 | 午夜视频在线观看一区二区三区 | 久久视频国产精品免费视频在线 | 亚洲一级片在线观看 | 国产精品久久网站 | 91大神视频网站 | 国产亚洲综合性久久久影院 | 国产精品久久久久久久久久不蜜月 | 国产精品美女久久久久久免费 | 亚洲 欧洲av | 四虎影视www | 国产日韩精品一区二区在线观看播放 | 九九爱免费视频在线观看 | 欧美日韩在线观看一区二区 | 波多野结衣在线播放一区 | 久久久久二区 | 一级一片免费视频 | 亚洲观看黄色网 | 婷香五月 | 国内毛片毛片 | 正在播放一区二区 | 国产伦精品一区二区三区… | 国产99久久九九精品免费 | 亚洲精选久久 | 夜夜夜夜爽 | 国内精品久久久精品电影院 | www.夜夜操.com| 欧美一级性生活 | 午夜精品久久久久久久久久久 | 久久免费视频国产 | 国产粉嫩在线观看 | 日本韩国在线不卡 | 久久在线免费观看视频 | 国产免费片 | 国产视频 亚洲精品 | 国产 日韩 欧美 中文 在线播放 | 美女视频一区 | 99视频免费看 | 欧美精品999 | 久久综合久久八八 | 国产成人一区二区三区免费看 | 国产最新在线观看 | 日韩网站在线看片你懂的 | 日本在线观看视频一区 | 久久亚洲综合国产精品99麻豆的功能介绍 | 四虎在线视频 | 午夜国产福利在线观看 | 日韩69视频 | 国产在线观看网站 | 黄色三级在线看 | 成人欧美一区二区三区黑人麻豆 | 色999五月色 | 在线观看成人福利 | 在线观看黄网站 | 999成人| 91精品999 | 国产福利免费在线观看 | 黄色的网站免费看 | 亚洲免费av观看 | 日日草天天干 | 日韩专区在线观看 | 激情五月婷婷激情 | 欧美成人黄色片 | 久久久国产精品麻豆 | 欧美精品一区二区性色 | 天天操天天干天天操天天干 | 高清不卡一区二区三区 | 亚洲久久视频 | 在线观看激情av | 顶级bbw搡bbbb搡bbbb | 欧美一二三区在线观看 | 久操97 | 欧美日韩高清不卡 | 欧美精品一级视频 | 亚洲精选视频免费看 | 91天天视频 | 99精彩视频在线观看免费 | 在线日韩一区 | 亚洲综合色站 | 91入口在线观看 | aaaaaa毛片| 久色 网 | 国产午夜精品久久 | 欧美午夜精品久久久久久浪潮 | a久久久久久 | 97在线观视频免费观看 | 精品视频在线视频 | 又黄又刺激视频 | 九九电影在线 | 最近日本中文字幕a | 欧美日韩精| 婷婷久草| 女人久久久久 | wwwww.国产| 黄a在线观看 | 成人av久久 | 91av视频播放 | 久久精品国产精品亚洲精品 | 日韩欧美xx | av中文字幕在线电影 | 亚洲不卡在线 | www99精品 | 免费看国产a | av综合在线观看 | 久久亚洲欧美 | 日日婷婷夜日日天干 | 国产亚洲情侣一区二区无 | 欧美一区在线观看视频 | 久久99爱视频 | 粉嫩av一区二区三区四区 | 超碰97.com | 中文字幕一区二区三区在线播放 | 国产精品色在线 | 色视频网站免费观看 | 亚洲色综合 | 日韩二三区 | 国内精品在线观看视频 | 亚洲一一在线 | 久久综合色影院 | 久久婷婷开心 | 中文字幕字幕中文 | 色综合久久66 | 国产精品久久av | 久久在现视频 | 久久爱综合 | 五月天婷婷狠狠 | 成人毛片久久 | 中文字幕日韩精品有码视频 | 日韩免费观看高清 | 男女男视频 | av一区二区在线观看中文字幕 | 亚洲伊人网在线观看 | 亚洲,播放 | 99久久精品久久亚洲精品 | 国内外成人在线视频 | 99精品在线直播 | 麻豆久久 | 激情丁香| 九九免费精品视频在线观看 | 99久久精品久久久久久清纯 | 亚洲国产视频在线 | 97色视频在线 | 啪啪免费视频网站 | 成人久久久久久久久久 | 天堂成人在线 | 日韩资源在线观看 | 福利电影一区二区 | 三级动态视频在线观看 | 操操综合| av丝袜美腿 | 蜜桃av人人夜夜澡人人爽 | 在线播放日韩 | 久久久亚洲精品 | 色爽网站| 久草在线免费资源站 | 狠狠成人| 成人黄性视频 | 91福利免费 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 五月色综合 | 99这里都是精品 | 亚洲精品免费在线播放 | 久久视频网址 | 狠狠色丁香久久婷婷综 | 美女免费视频观看网站 | 国产精品2区 | 干亚洲少妇 | 精品国产视频在线观看 | 日韩免费电影一区二区三区 | 日韩精品三区四区 | 最近中文字幕免费av | 91在线精品一区二区 | 黄色三级网站在线观看 | 久久永久免费视频 | 亚洲天天综合 | 成人av资源网| 日韩精品aaa| 免费黄色小网站 | 在线天堂视频 | 精品国产一区二区三区男人吃奶 | 欧美激情综合五月色丁香 | 久久免费在线 | 免费三级av | 色网站在线看 | 欧美激情操 | 亚洲影视九九影院在线观看 | 国产在线视频一区 | 伊人狠狠 | 草久在线观看视频 | 最近中文字幕mv免费高清在线 | 日韩免费在线观看视频 | 黄色www| 日韩av视屏| 亚洲成人av在线播放 | 四虎永久网站 | 久久久久久麻豆 | 91av视频免费在线观看 | 天天操天天操天天操天天操 | 热99在线视频| 欧美日韩高清不卡 | 91手机电视 | 人人干在线观看 | 天天操天天色天天 | 91av官网 | 亚洲精品黄色在线观看 | 久久在线观看 | 久草在线高清视频 | .国产精品成人自产拍在线观看6 | 日韩在线观看的 | 日韩成人免费在线观看 | 在线天堂亚洲 | 国产美女在线观看 | 久久免费av电影 | 日韩深夜在线观看 | 一本一道波多野毛片中文在线 | 精品国模一区二区 | 久久这里有精品 | 91精品国产电影 | 日韩特黄一级欧美毛片特黄 | av一级片网站 | 五月婷婷激情综合 | 欧美一级视频免费看 | 99精品成人| 成人av网站在线播放 | 久久网站最新地址 | 91精品免费看 | 天天躁天天躁天天躁婷 | 最近中文字幕视频完整版 | 超碰.com| 久久国产美女 | 最新日韩精品 | 九九热免费在线视频 | 福利av影院 | 在线视频观看亚洲 | 欧美久久久久久久久久 | 色橹橹欧美在线观看视频高清 | 久久精品观看 | 免费在线一区二区三区 | 又粗又长又大又爽又黄少妇毛片 | 欧美a级片网站 | 91麻豆精品国产91久久久久久 | 日韩专区视频 | 日韩色一区二区三区 | 日韩亚洲在线观看 | 韩日精品中文字幕 | 久久这里只有精品首页 | 国产日韩精品在线观看 | 国产精品99久久久久久久久 | 24小时日本在线www免费的 | 91污在线 | 天堂av免费 | 欧美激情第八页 | a√国产免费a| 国产你懂的在线 | 免费福利片2019潦草影视午夜 | 亚洲精品乱码久久久久久 | 在线成人免费电影 | av免费电影网站 | 天天草天天色 | 久久久精品国产一区二区三区 | 2019中文字幕第一页 | 色视频成人在线观看免 | 久久午夜电影网 | 日韩精品免费专区 | 久久这里有精品 | 日本最新一区二区三区 | 亚洲 欧美 国产 va在线影院 | 97色婷婷人人爽人人 | 日韩一级成人av | 久久久一本精品99久久精品66 | 激情综合五月婷婷 | 日韩高清黄色 | 成年人在线观看免费视频 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 麻豆果冻剧传媒在线播放 | 综合天天 | 欧美亚洲国产精品久久高清浪潮 | 欧美日韩在线视频一区 | 在线看成人 | 久精品视频在线观看 | 国产在线传媒 | 精品国产伦一区二区三区免费 | 中文字幕你懂的 | 亚洲精品一区二区三区高潮 | 中文av在线免费观看 | 国产一区免费观看 | 精品999久久久 | 亚洲精品免费播放 | 韩国精品视频在线观看 | 亚洲精品国产精品国自产在线 | 日韩电影在线观看一区 | 伊人丁香 | 十八岁以下禁止观看的1000个网站 | 操综合| 国产日产高清dvd碟片 | 天天插天天色 | 操操操com| 国产看片免费 | av在线影片 | 91九色视频在线 | 黄色在线视频网址 | 三上悠亚在线免费 | 久久经典国产视频 | 欧美少妇xxx | 欧美一级电影在线观看 | 久久久久久久久黄色 | 99热.com| 在线免费看片 | 国产亚洲激情视频在线 | 中文日韩在线视频 | 92国产精品久久久久首页 | 久久影院中文字幕 | 99理论片 | 日韩精品中字 | 亚洲无吗视频在线 | 黄色大全免费网站 | 91精品在线观看视频 | 97成人在线观看视频 | 免费91麻豆精品国产自产在线观看 | 九九免费在线观看视频 | 青草视频在线免费 | 97超级碰 | 综合久久影院 | 香蕉视频91| 天天操夜夜看 | 91亚洲精品久久久蜜桃 | 91污污视频在线观看 | 丁香在线观看完整电影视频 | 国产一区二区精品91 | 国内成人精品视频 | 99久久99热这里只有精品 | 久久a v视频 | 亚洲国产精品推荐 | 嫩模bbw搡bbbb搡bbbb | 91日韩精品| 国产一区在线免费 | 亚洲精品国内 | 成人一级免费视频 | 亚洲精品中文字幕在线 | 亚洲欧美日韩国产 | 婷婷av综合 | 免费精品国产va自在自线 | 成人在线播放免费观看 | 国产高清在线观看av | 精品国产aⅴ麻豆 | 久久久久久高清 | 超碰av免费 | 久久无码av一区二区三区电影网 | 99热手机在线 | 国产在线精品国自产拍影院 | 在线久草视频 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 欧美激情xxxx性bbbb | 一级a毛片高清视频 | 色综合激情网 | 精品视频97| 久久这里只有精品1 | 国产一级在线视频 | 精品一区二区在线免费观看 | 久草在线视频中文 | 精品视频免费 | 亚洲精品美女久久 | 免费av免费观看 | 欧美成年网站 | 亚洲成人av影片 | 国产二区免费视频 | 韩日精品视频 | 中字幕视频在线永久在线观看免费 | 精品一区二区三区电影 | 在线成人观看 | 久久视频精品在线 | 欧美日韩免费观看一区=区三区 | 久草在线费播放视频 | 欧美视频国产视频 | 久久久国产精品一区二区三区 | 成年人在线观看网站 | 热久在线| 综合久久久久久 | 麻豆网站免费观看 | 国产精品资源在线观看 | 天堂va欧美va亚洲va老司机 | 国产精品国产三级国产 | 色a网| 久久久精品欧美一区二区免费 | 亚洲国产片色 | 国产资源站 | 久久成人国产精品一区二区 | 日韩av电影中文字幕 | 日韩一区二区三区不卡 | 国产一区二区高清不卡 | 九九精品视频在线看 | 四虎永久免费网站 | 久久99精品久久久久久久久久久久 | 91精品国产高清 | 欧美亚洲免费在线一区 | 久久草草热国产精品直播 | 日韩免费一区 | 97在线观看免费 | 国产精品成人久久久 | 欧美成人亚洲成人 | 国产一区二区视频在线 | 久久艹人人| 天天做天天爽 | 日韩中文字幕第一页 | 成人av av在线| 久久久片| 国产剧情久久 | 丁香五月亚洲综合在线 | 亚洲春色奇米影视 | 91精品国产乱码在线观看 | 国产手机在线 | 午夜色婷婷 | 国产久视频| 久久国产福利 | 天天夜夜操| 亚洲日韩精品欧美一区二区 | 午夜成人免费电影 | 成人久久视频 | 免费亚洲电影 | 特级西西人体444是什么意思 | 久草在线手机观看 | 精品国产一区二区三区久久影院 | 欧美另类重口 | 日韩一区二区三免费高清在线观看 | 国产1级视频 | 日韩精品一区二区三区不卡 | www在线观看国产 | 日韩欧美国产免费播放 | 一区二区三区四区精品 | 久久精品日产第一区二区三区乱码 | 九九九热精品免费视频观看网站 | 日韩欧美电影在线 | a久久久久 | www.成人久久 | 天天摸天天操天天舔 | h视频在线看 | 日色在线视频 | 日日夜夜骑| 国产 精品 资源 | 97超级碰碰 | 成年人网站免费在线观看 | 热久久影视 | 伊人婷婷久久 | 96国产精品视频 | 国产真实精品久久二三区 | 一二三区高清 | av性网站| 91av免费在线观看 | 九九交易行官网 | 久久免费的视频 | 久久精品一区二区国产 | 一区二区三区四区五区在线 | 激情五月网站 | 日日成人网| 亚洲男男gaygay无套 | 射射射av | 国产精品96久久久久久吹潮 | 成人午夜在线电影 | 欧美做受高潮1 | 国产大片黄色 | 久久精品亚洲精品国产欧美 | 国产精品 久久 | 久久看视频 | 五月婷婷在线播放 | 91成人网在线观看 | 国产精品久久久久久久久久久免费 | 一区二区视频在线看 | 亚洲视频免费在线观看 | 日韩精品一区二区在线视频 | 又大又硬又黄又爽视频在线观看 | 黄色影院在线免费观看 | 在线观看国产一区 | 久久综合中文色婷婷 | 色婷婷狠狠五月综合天色拍 | 热久久视久久精品18亚洲精品 | 免费视频 三区 | 成人丁香花 | 午夜在线国产 | 精品二区视频 | 麻豆91在线观看 | 久久久精品国产免费观看一区二区 | 青青草国产在线 | 欧美xxxx性xxxxx高清 | 亚洲每日更新 | 欧美色道 | 亚洲成人免费在线观看 | 黄色影院在线免费观看 | 天天色天天色 | av先锋影音少妇 | 日韩视频免费看 | 一级黄色免费 | 97理论电影 | 777xxx欧美 | 国内精品久久久久影院优 | 免费色视频在线 | 亚洲精品免费在线观看视频 | 色婷婷综合久久久久中文字幕1 | 国产精品手机在线播放 | 狠狠网站 | 欧美精品你懂的 | 黄色免费网站下载 | 91chinese在线| 午夜久久网站 | 香蕉视频啪啪 | 青草视频免费观看 | 国际精品网 | 人人爽人人乐 | 人人看人人艹 | 福利一区二区 | 国产精品美女久久久网av | 视频在线一区二区三区 | 久久久免费看 | 久久久在线视频 | 奇米网777| 亚洲精品国产麻豆 | 日韩激情在线 | 亚洲精品乱码久久久久久蜜桃不爽 | 久久久久久久久毛片精品 | 日韩| 精品国产1区2区 | www免费在线观看 | 96久久| 久久久国产精品一区二区三区 | 一级一片免费看 | 国产香蕉视频在线观看 | 亚洲精品综合久久 | 久久婷婷综合激情 | 久久精品视频在线播放 | 黄色www | 日韩成人精品一区二区 | 国产中文视频 | 91精品久久久久 | 黄色免费网战 | 色偷偷88888欧美精品久久久 | 免费av成人在线 | 欧美激情另类 | 成人在线免费看 | 国外成人在线视频网站 | 婷婷久久精品 | 亚洲成熟女人毛片在线 | 国产色婷婷在线 | 国产精品久久久久久久久久尿 | 在线看国产一区 | 天天干天天做 | 亚洲综合色激情五月 | 在线视频 影院 | 免费观看全黄做爰大片国产 | 91视频在线免费 | 国产无遮挡又黄又爽在线观看 | 91在线视频精品 | 久久免费中文视频 | 一区二区电影在线观看 | 欧美一级日韩免费不卡 | 婷婷精品国产一区二区三区日韩 | 色在线国产 | 色婷婷视频在线 | 97精品在线观看 | 国产日韩欧美中文 | 久久99精品久久久久久秒播蜜臀 | 日韩高清无线码2023 | 国产精品99在线播放 | 久久综合成人网 | 麻豆传媒在线免费看 | 日本久久中文字幕 | 亚洲欧美日韩一级 | 黄色片毛片 | 四虎影视精品永久在线观看 | 婷婷久久五月 | 国产剧情一区二区在线观看 | 99在线精品视频 | 精品国产区 | 日韩av黄| 97超在线| 亚洲国产精品免费 | 日韩色视频在线观看 | www.亚洲精品 | 97在线影视 | 狠狠色丁香婷婷综合基地 | 欧美一级欧美一级 | 波多野结衣电影一区 | 18av在线视频 | 久久精品波多野结衣 | 久久99热精品这里久久精品 | 夜夜婷婷 | 青青河边草免费直播 | 日韩在线观看一区二区 | 玖玖在线资源 | 在线观看视频亚洲 | 国产尤物一区二区三区 | 欧美极品裸体 | 欧美怡红院 | 99中文视频在线 | 精品v亚洲v欧美v高清v | 丁香av| 成人免费视频播放 | 在线视频中文字幕一区 | 天天鲁一鲁摸一摸爽一爽 | 国产一区欧美在线 | 国产三级香港三韩国三级 | 免费看久久久 | 免费欧美高清视频 | 韩日在线一区 | 亚洲欧美日本一区二区三区 | 精品福利网 | 一级欧美黄 | 激情丁香综合五月 | 日本午夜在线观看 | 日韩a级黄色 | 国产福利在线 | 国产精品18毛片一区二区 | 久久久黄色免费网站 | 国产精品美女久久久久久网站 | 天天综合婷婷 | 久久99亚洲精品久久久久 | 日本精品久久久久久 | 亚洲免费av观看 | www,黄视频 | 免费福利片 | 国产做aⅴ在线视频播放 | 天天爱天天射 | 亚洲天堂免费视频 | 国产精品丝袜久久久久久久不卡 | 99久久一区 | 日日精品 | 欧美激情精品久久久久 | 久久午夜电影院 | 依人成人综合网 | 亚洲国产视频在线 | 亚洲黄色免费观看 | 手机在线免费av | 久久在线免费观看视频 | 国产精品免费小视频 | 免费看黄20分钟 | 久久亚洲综合国产精品99麻豆的功能介绍 | 成年人天堂com | 玖玖国产精品视频 | 999超碰 | 日韩免费观看视频 | 爱爱一区 | 色视频网站在线 | 色综合色综合久久综合频道88 | 伊人官网 | 免费黄色a网站 | 97国产大学生情侣白嫩酒店 | 91av蜜桃 | 天堂成人在线 | 999精品在线 | 国产日韩精品一区二区三区 | 激情av网址 | 中文字幕在线成人 | 亚洲视频www | 欧美日韩国产一区二区在线观看 | 国产破处视频在线播放 | 波多野结衣一区 | 久久er99热精品一区二区三区 | 国产黄a三级三级三级三级三级 | 精品久久1 | 国产在线自 | 国产成人在线综合 | 免费观看的黄色 | 日韩av看片 | 亚洲综合色网站 | 天堂av观看 | 国产a高清 | 国产精品69久久久久 | 免费碰碰| 国产视频在线观看一区 | 五月婷婷狠狠 | 91在线永久 | 麻豆系列在线观看 | 亚洲精品xx | 久久精品亚洲精品国产欧美 | 2024av| www.五月天婷婷 | 欧美乱码精品一区 | 国产小视频在线观看 | 999在线精品| 亚洲国产精品成人va在线观看 | 久久久久久亚洲精品 | 中文字幕一区二区三区视频 | 中文字幕有码在线 | 午夜久久久精品 | 国产91全国探花系列在线播放 | 日日日天天天 | 免费在线观看日韩视频 | 精品久久一 | 欧美日韩1区 | 精品欧美小视频在线观看 | 在线观看a视频 | 天天射天天操天天干 | 在线日本看片免费人成视久网 | 欧美一级小视频 | 一区二区不卡在线观看 | 欧美在线你懂的 | 九九热久久免费视频 | 久久69av| 欧美国产一区二区 | 九九九电影免费看 | 亚洲日韩中文字幕 | 日韩视频中文 | 国产成人在线免费观看 | 久久国产综合视频 | 久久久久久视频 | 免费观看丰满少妇做爰 | 久久久99国产精品免费 | 国产在线精品一区二区三区 | 96超碰在线 | 欧美精品亚州精品 | 久久91网 | 91系列在线观看 | 亚洲精品久久久久中文字幕二区 | 久久精品99国产精品 | 亚洲成人精品影院 | 国产国产人免费人成免费视频 | 亚洲精品国产品国语在线 | 国产精品久久久久久久久久久久午夜 | 国产精品久久在线 | 999亚洲国产996395 | 中文字幕一区二区三区久久 | 日韩电影中文字幕在线 | 色偷偷人人澡久久超碰69 | 激情婷婷久久 | 日韩精品久久久久久中文字幕8 | 射久久久| 日韩在线观看网址 | 久久精品看 | 久久精品aaa | 少妇bbb搡bbbb搡bbbb | 国产在线视频在线观看 | 亚洲国内精品 | 四虎成人av| 五月天国产精品 | 九色激情网 | se婷婷 | 日本黄色大片免费看 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 色在线视频网 | 日韩高清不卡在线 | 免费av在线网| 二区三区av | 亚洲视频www | 丁香综合 | 91精品国产自产在线观看永久 | 毛片一级免费一级 | 亚洲欧美综合精品久久成人 | 成人试看120秒 | 香蕉视频网站在线观看 | 欧美做受xxx | 日韩理论电影在线观看 | 久久久久免费精品视频 | 精品一区 在线 | 久久精品91视频 | 精品黄色片 | 亚洲成人999 | 18久久久久久 | 欧美日韩精品二区第二页 | 超碰人人舔 | www.午夜视频 | 91精品伦理 | 高清av免费一区中文字幕 | 精品国产一区二区三区不卡 | 久久精品伊人 | 日韩在线观看三区 | 日韩免费 | 波多野结衣视频网址 | 99av在线视频 | 人人看97| 国产亚洲一区二区三区 | 国产精品理论片在线播放 | 精品国产视频一区 | 91亚洲精品国偷拍自产在线观看 | 国产一区视频在线 | 久久综合网色—综合色88 | av资源免费在线观看 | 国产视频99 | 国产精品成人自产拍在线观看 | 日韩r级在线 | 人人插人人草 | 在线观看黄色 | 亚洲妇女av | 国产精品美乳一区二区免费 | 中文av在线播放 | 色资源网在线观看 | 91亚·色| 91亚洲精品视频 | 欧美日本啪啪无遮挡网站 | 国产91免费在线 | 日韩欧美综合 | 国产一线二线三线性视频 | 99视频网站 | 一区 二区电影免费在线观看 | 中文字幕视频免费观看 | 精品在线观看一区二区 | 国产高清精品在线观看 | 欧美夫妻生活视频 | 久久精品福利视频 | 亚洲色五月| 韩日在线一区 | 日本三级不卡视频 | 日韩电影一区二区三区 | 国产破处精品 | 五月婷婷中文网 | 欧美在线一二 | 久久精品99精品国产香蕉 | 免费看的黄色录像 | 婷婷在线观看视频 | 日本中文字幕在线电影 | 成人中文字幕在线 | 香蕉视频国产在线观看 | 果冻av在线 | 涩涩网站在线看 | 日本久久视频 | 欧美成人xxxxx | 国产一级在线 | 天天射网站 | 中文字幕日韩有码 | 国产免费又爽又刺激在线观看 | 成人黄色资源 | 亚洲精品一区二区精华 | 欧美了一区在线观看 | 国产精品12 | 日韩av进入 | 狠狠狠狠狠狠狠 | 久久国产精品二国产精品中国洋人 | 成人一区不卡 | 成人福利在线 | av中文字幕不卡 | 在线观看久久 | 亚洲人成人在线 | h网站免费在线观看 | 国产精品一区二区久久精品 | 九九久久久久久久久激情 | 激情五月婷婷丁香 | 一区二区中文字幕在线观看 | 欧美有色| 美女网站色 | 六月丁香激情综合色啪小说 | 国产一级片免费视频 | 视频一区二区精品 | 久久免费视频在线观看30 | 西西444www大胆无视频 | 亚洲码国产日韩欧美高潮在线播放 | 99久久毛片 | 久久狠狠婷婷 | 深夜激情影院 | 亚州国产精品视频 | 国产免费视频一区二区裸体 | 成人av资源网站 | 一区二区三区四区影院 | 国产伦精品一区二区三区无广告 | 91免费观看国产 | 成人一级影视 | 久久国产精品久久w女人spa | 黄色毛片在线 | 久久成人国产精品一区二区 | 国产原创中文在线 | 欧美一级艳片视频免费观看 | 91精品天码美女少妇 | 成年人黄色在线观看 | 日本在线观看一区二区三区 | 在线免费三级 | 日韩精品一区二区在线观看 | 国产精品成人久久久 | 91九色综合 | 久久久久免费精品 | 国产一二三在线视频 | 久久人人爽爽人人爽人人片av | 国产免费不卡 | 国产一区二区在线免费播放 | 人人看黄色 | 四虎国产精品免费观看视频优播 | 午夜精品一区二区三区在线 | 日本特黄特色aaa大片免费 | 久久久综合香蕉尹人综合网 | 国产精品色在线 | 亚洲午夜精品一区二区三区电影院 | 久久精品在线 | 日韩视频中文 | 摸bbb搡bbb搡bbbb | 九九在线国产视频 | 中文字幕av最新更新 | 手机在线永久免费观看av片 | 久久久精品一区二区三区 | 久久婷亚洲五月一区天天躁 | 丁香午夜婷婷 | 激情开心站 | 黄色免费大片 | 在线免费国产 | 亚洲精品伦理在线 | 91九色视频观看 | 国产午夜视频在线观看 | 在线观看国产高清视频 | 99r精品视频在线观看 | 麻豆视频免费入口 | 日韩一区二区免费视频 | 天天性天天草 | 国产精品毛片久久久久久久 | 国产视频一区二区在线 | 精品影院一区二区久久久 | 午夜精品一区二区三区免费 | 91麻豆精品久久久久久 | 国产精品女同一区二区三区久久夜 | 久久久久久久99精品免费观看 | 国产自偷自拍 | av片中文字幕 | 亚洲精品欧美视频 | 欧美日韩国产精品久久 | 日本爱爱片 | 欧美最新大片在线看 | 免费看污在线观看 | 久久免费成人精品视频 | 狠狠操精品| 热久精品 | 亚州天堂 | 午夜国产成人 | 国产亚洲资源 | 丁香六月久久综合狠狠色 | 亚洲精品成人av在线 | 国产精品一区二区吃奶在线观看 | 国产特级毛片 | 天天躁天天操 | 婷婷激情综合五月天 | 免费视频久久久久久久 | 中文国产在线观看 | 久久av影视 | 日韩 在线观看 | 精品国产aⅴ一区二区三区 在线直播av | 天天天在线综合网 | 97超碰在线久草超碰在线观看 | 狠狠操欧美 | 九色自拍视频 | 久久成人亚洲欧美电影 | 国产一区二区视频在线播放 | 丝袜一区在线 | 久热久草| 久久99国产精品免费网站 | 国产一区精品在线观看 | 毛片无卡免费无播放器 | 99re中文字幕 | 国产精品毛片一区 | 91人人澡人人爽人人精品 | 91久久久久久国产精品 | 久久精品一区二区 | 永久免费视频国产 | 国产精品女同一区二区三区久久夜 | 国产精品激情 | 久久精品www人人爽人人 | 国产小视频在线看 | 国产aa免费视频 | 久久国产免费视频 | 91资源在线| 亚洲成人网在线 | 国产 亚洲 欧美 在线 | 日韩中文在线视频 | 丝袜精品视频 | 免费日韩| 波多野结衣在线视频一区 | 国产综合精品一区二区三区 | 欧美日韩精品免费观看视频 | 日韩免费区 | 91在线免费观看国产 | av大全在线观看 | 国产一区二区三区午夜 | 天海翼一区二区三区免费 | 日韩高清不卡一区二区三区 | 美女av电影 | 99久久www免费 | 国产成人在线播放 | 91av短视频 | 天天色天天射综合网 | 成人黄色在线看 | 毛片1000部免费看 |