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

從Linux內核角度看TCP粘包

系統 Linux
今天我們來學習TCP粘包,TCP粘包是工作和面試中經常會碰到的問題。網上有一些資料也介紹過TCP粘包,但是這些資料更多的講述的是TCP粘包的解決方案,并沒有對問題的原因做詳細的介紹。

今天我們來學習TCP粘包,TCP粘包是工作和面試中經常會碰到的問題。網上有一些資料也介紹過TCP粘包,但是這些資料更多的講述的是TCP粘包的解決方案,并沒有對問題的原因做詳細的介紹。

本文從內核的角度出發,將TCP粘包原因和解決方案給大家講清楚。

1.快速了解TCP粘包

TCP粘包是指發送方多次發送的TCP數據在接收方被合并成一個數據包。這種現象會導致接收方無法準確區分每個數據包的邊界,從而影響數據的正確解析。

圖1    TCP粘包圖1 TCP粘包

如圖1所示,發送方執行了send操作,分別發送字符串“aaaaaaaaaa”、“bbbbbbbbbb”、“cccccccccc”。對于發送端而言,這三組數據都是獨立的消息,不能合并在一起。由于采用TCP協議傳輸數據,接收端可能只接收到一個數據包“aaaaaaaaaabbbbbbbbbbcccccccccc”,顯然這個數據包接收端是無法解析的。

TCP粘包的原因在于TCP協議是面向字節流的協議,TCP將數據視為連續的字節流,不保留消息邊界。TCP的這種特性會導致數據包粘在一起。

為什么UDP不會出現粘包現象?

UDP不會出現粘包現象,因為它是一種面向報文的協議,用戶消息會被封裝為獨立的UDP數據報進行傳輸。

圖2    UDP不粘包圖2 UDP不粘包

如圖2所示,UDP同樣執行三次sendto操作,每次發送都會生成一個UDP數據報。UDP接收端接收數據時,需要執行三次recvfrom操作才能接收所有UDP數據報。UDP不粘包的原因為:不管每次發送的數據的長度為多大,UDP都會將發送的數據當成一個UDP數據報來處理,發送和接收數據的基本單位為UDP數據報。

2.內核如何發送TCP數據包

初步了解了TCP粘包后,我們基于TCP粘包問題來深入理解內核是如何收發TCP數據包的。首先來了解發送過程,如圖3所示。

圖3    內核發送TCP數據包圖3 內核發送TCP數據包

我們可以把發送過程分為兩個部分:

  • 部分1:TCP數據從用戶緩沖區拷貝至套接字發送緩沖區。
  • 部分2:TCP數據從套接字發送緩沖區發送至網卡。

首先來看第1個部分,客戶端執行一次send操作,如發送字符串“aaaaaaaaaa”,數據傳輸至內核后,內核首先會找到TCP套接字,然后將數據存儲至其發送緩沖區。

TCP套接字發送緩沖區是一個由skb組成的雙向鏈表,每個skb的存儲空間通常為1-N倍MSS(MSS通常1460字節)長度。用戶程序每次發送的數據長度是不確定的。如果用戶數據長度小于skb剩余存儲空間時,一個skb就能夠存儲用戶數據;否則,需要多個skb才能存儲用戶數據。

用戶數據存儲完畢后,內核會嘗試將套接字發送緩沖區的數據發送至網卡。注意:嘗試發送說明并不是每次都會發送數據。內核輪詢套接字發送緩沖區鏈表,每次輪詢取出一個skb。取出來的skb并不會立即發送,內核需要判斷是否滿足發送條件才能發送,判斷條件有4個:流量控制、擁塞窗口、Nagle算法、小隊列。

  • 流量控制:TCP pacing(速率控制),TCP為了避免網絡突發流量導致網絡擁塞,需要對發送速率進行控制,在速率控制期間,內核不會發送skb。
  • 擁塞窗口:檢查當前擁塞窗口(cwnd)是否允許發送skb。
  • Nagle算法:算法核心通過限制小數據包的發送頻率,提高網絡效率。Nagle算法生效后,內核不會發送小的skb。想要詳細了解Nagle算法,可參考我的這篇文章:一文搞懂TCP Nagle算法
  • 小隊列:TCP Small Queues (TSQ)機制,控制qdisc/設備隊列中的數據包數量在2個數據包左右,或相當于約1ms的數據量。TSQ生效后,內核不會發送skb。

注意,以上4個條件都是TCP粘包的原因,所以并不只有Nagle算法會導致TCP粘包。當有一個條件沒有滿足時,內核會退出輪詢,結束skb發送。由于本次存儲在套接字發送緩沖區的數據未發送出去,還停留套接字發送緩沖區。用戶程序第二次發送的數據“bbbbbbbbbb”將會和第一次發送的數據粘在一起。第二次發送如果滿足發送skb的4個條件,內核會嘗試將套接字發送緩沖區的數據發送至網卡(每發送一個skb都需要再次判斷4個條件);否則,第二次發送的數據也會停留在套接字發送緩沖區。后續發送操作依此類推。

接下來,我們來介紹第2部分:TCP數據從套接字發送緩沖區發送至網卡。4個條件判斷完后,內核發送一個skb包。skb包存儲的數據長度是不確定的(1~N*MSS字節)。如果用戶數據小于MSS,用戶數據將封裝成TCP數據段(完整段)直接向下交付;否則,用戶數據需要進行分段,內核會通過GSO技術對用戶數據進行分段。所謂TCP分段,就是將用戶數據以MSS(1460字節)為單位分為若干小的TCP數據段,這樣可以避免后續IP分片,提高傳輸效率。

TCP數據段(TCP完整段和TCP分段)將繼續向下交付。如果IP數據包(IP頭加TCP數據段)長度小于MTU(通常為1500字節),直接向下交付;否則,IP數據包需要進行IP分片(以MTU為單位,將一個大的IP數據包切分為多個IP分片)。

最后,內核會將IP數據包和IP分片包從網卡發送出去。

3.內核如何接收TCP數據包

內核接收TCP數據包的流程相對來說比較簡單,如圖4所示。

圖4    內核接收TCP數據包圖4 內核接收TCP數據包

  內核接收TCP數據包過程同樣分為兩個部分: 

  • 部分1:內核將數據包從網卡接收至套接字接收緩沖區。
  • 部分2:用戶程序拷貝套接字接收緩沖區數據至用戶緩沖區。

網卡中的以太網幀會以DMA方式拷貝至網卡驅動環形緩沖區。拷貝完成后,網卡觸發硬中斷,硬中斷會觸發軟中斷,再由軟中斷函數(如igb_poll函數)處理TCP數據包。 

igb_poll函數會輪詢網卡驅動環形緩沖區,然后將網卡驅動環形緩沖區中的TCP數據轉儲至skb。如果skb滿足GRO條件,內核會嘗試將新skb和GRO鏈表中的skb進行GRO合并。 

GRO是一種軟件實現的網絡優化技術,它允許網絡接口卡(NIC)驅動程序在將數據包傳遞給操作系統內核協議棧之前,對多個小數據包進行合并,形成一個較大的數據包。 

新skb的五元組(源IP、目的IP、源端口、目的端口、協議)必須和GRO鏈表中的skb相同,才能進行合并。合并完成后,會生成一個大的skb(大的TCP段)并向上交付。 

如果skb是一個IP分片包,則不會進行GRO合并,而是直接向上交付給網絡層,由網絡層進程IP分片重組。IP分片重組后,同樣會生成一個大的TCP段,TCP段最終會像水流一個匯入TCP套接字接收緩沖區。 

用戶程序調用recv函數接收數據時,需要指定此次接收的數據長度。由于TCP是面向字節流,如果套接字接收緩沖區中有足夠的數據,內核會將數據全部拷貝至用戶緩沖區。   

注意,用戶程序接收數據的過程也會產生TCP粘包。如果用戶程序沒有及時接收數據,那么會有源源不斷的數據匯入套接字接收緩沖區。這些數據都會粘在一起。

4.TCP粘包幾種解決方案 

了解了內核收發TCP數據包流程后,我們會發現TCP粘包并不是真正的問題,只是流式傳輸的一個特性。用戶程序需要設計解決方案來規避TCP粘包。    常見的解決方案有:固定長度法、消息分割法、消息長度字段法。

4.1 固定長度法   

如圖5所示,固定長度法規定每條消息都是固定長度(如1300字節),發送方需按照固定長度發送數據(不足固定長度的部分用特殊字符(如空格、\0)填充),接收方按固定長度接收數據,每次接收都是一條完整消息。

固定長度法實現簡單,解析效率高,但是很浪費帶寬,不夠靈活。適用于數據長度固定的場景。

圖5    固定長度法圖5 固定長度法

固定長度法示例代碼如下:

/******客戶端******/
#define BUF_LEN 1500
#define FIXED_LEN 1300

int fill_fixed_buf(char *buf, int len, char c) {
    memset(buf, 0, BUF_LEN);
    memset(buf, c, len);
    return len;
}

int main(int argc, char *argv[]) {
    ......
    char sbuf[BUF_LEN] = {0};
    int slen = 0;
    int i = 0;
    while(1) {
        //填充固定長度緩沖區
        slen = fill_fixed_buf(sbuf, FIXED_LEN, 'a' + i);
        //發送固定長度數據
        ret = send(sockfd, sbuf, slen, 0);
        if (ret <= 0) {
            perror("send");
            break;
        }

        i++;
        usleep(200 * 1000);
    }
    return0;
}

/******服務端******/
#define BUF_LEN 1500
#define FIXED_LEN 1300

int main(int argc, char *argv[]) {
    ......
    char rbuf[BUF_LEN] = {0};
    int len = FIXED_LEN;
    while(1) {
        memset(rbuf, 0, BUF_LEN);
        //接收固定長度數據
        recv(new_sockfd, rbuf, len, 0);
        printf("ret:%d, rbuf:%s\n", ret, rbuf);
        sleep(1);
    }
    return0;
}

4.2 消息分隔符法

如圖6所示,消息分隔符法是指在每條消息后添加特殊標識符作為分隔符(如'\n'、''\r\n''或自定義符號)。接收方根據分隔符來判斷每條消息的結束位置。

消息分隔符法簡單直觀,適合文本協議,但消息內容不能包含分隔符(需轉義處理)。適用于文本協議(如HTTP、SMTP、FTP等)。

圖6    消息分隔符法圖6 消息分隔符法

示例代碼如下:

/******客戶端******/
#define BUF_LEN 1500

int fill_delim_buf(char *buf, int len, char c, char *delim) {
    memset(buf, 0, BUF_LEN);
    memset(buf, c, len);
    memcpy(buf + len, delim, strlen(delim));
    return len+strlen(delim);
}

int main(int argc, char *argv[]) {
    ......
    char sbuf[BUF_LEN] = {0};
    int slen = 0;
    int i = 0;
    while(1) {
        //填充緩沖區并在尾部添加‘\n’分隔符
        slen = fill_delim_buf(sbuf, FIXED_LEN+i, 'a'+i, "\n");
        printf("slen:%d\n", slen);
        //發送帶‘\n’分隔符數據
        ret = send(sockfd, sbuf, slen, 0);
        if (ret <= 0) {
            perror("send");
            break;
        }

        i++;
        usleep(200 * 1000);
    }
    return0; 
}

/******服務端******/
#define BUF_LEN 1500

int main(int argc, char *argv[]) {
    ......
    char rbuf[BUF_LEN] = {0};
    int len = 0;
    while(1) {
        len = 1500;
        memset(rbuf, 0, BUF_LEN);
        //接收數據
        recv(new_sockfd, rbuf, len, 0);
        //通過‘\n’分隔符解析數據
        char *msg = strtok(rbuf, "\n");
        while (msg != NULL) {
            printf("msg len:%lu, msg:%s\n", strlen(msg), msg);
            msg = strtok(NULL, "\n");
        }
        sleep(1);
    }
    return0;
}

4.3 消息長度字段法 

如圖7所示,消息長度字段法是指在消息頭部添加固定字節表示消息體的長度(如4字節int)。接收方先讀取長度字段,再根據長度字段讀取相應長度的數據。

    消息長度字段法高效、靈活,是最常用的方案。

圖7    消息長度字段法圖7 消息長度字段法

消息長度字段法示例代碼如下:

/******客戶端******/
#define BUF_LEN 1500

int fill_len_buf(char *buf, int len, char c) {
    memset(buf, 0, BUF_LEN);
    memcpy(buf, &len, sizeof(len));//填充數據長度(4字節)
    memset(buf + sizeof(len), c, len); //填充數據
    returnsizeof(len) + len;
}

int main(int argc, char *argv[]) {
    ......
    char sbuf[BUF_LEN] = {0};
    int slen = 0;
    int i = 0; 
    while(1) {
        slen = fill_len_buf(sbuf, 64 + i, 'a' + i);
        ret = send(sockfd, sbuf, slen, 0);
        if (ret <= 0) {
            perror("send");
            break;
        }

        i++;
        usleep(200 * 1000);
    }

    return0;
}

/******服務端******/
#define BUF_LEN 1500

int main(int argc, char *argv[]) {
    ......
    int len = 0;
    while(1) {
        //先接收數據長度
        recv(new_sockfd, &len, sizeof(len), 0);
        printf("len:%d\n", len);
        //已知數據長度,指定數據長度接收數據
        memset(rbuf, 0, BUF_LEN);
        recv(new_sockfd, rbuf, len, 0);
        printf("rbuf:%s\n", rbuf);
        sleep(1);
    }
    return0;
}

總結

TCP粘包是面向字節流協議的特性,并不是軟件問題。用戶程序需要自行去規避TCP粘包問題。了解了內核如何收發TCP數據包,我們會對TCP粘包有更全面的了解。

責任編輯:武曉燕 來源: 物聯網心球
相關推薦

2016-09-20 15:21:35

LinuxInnoDBMysql

2024-12-19 11:00:00

TCP網絡通信粘包

2022-03-03 08:01:41

阻塞與非阻塞同步與異步Netty

2019-04-28 16:10:50

設計Redux前端

2020-02-04 09:53:05

數據安全數據泄漏信息安全

2020-10-10 07:00:16

LinuxSocketTCP

2021-06-10 09:52:33

LinuxTCPAccept

2019-10-17 11:06:32

TCP粘包通信協議

2024-10-12 18:16:27

2020-03-10 08:27:24

TCP粘包網絡協議

2020-01-06 11:22:06

TCPLinux內核

2019-09-18 08:53:55

2021-07-15 10:35:16

NettyTCPJava

2021-03-09 22:30:47

TCP拆包協議

2022-07-15 13:01:13

Kotlin編程語言Java

2015-05-05 11:04:31

CoreOS自動化運維

2019-10-24 07:35:13

TCP粘包Netty

2022-04-28 08:38:09

TCP協議解碼器

2021-06-26 07:04:24

Epoll服務器機制

2017-09-06 15:54:14

點贊
收藏

51CTO技術棧公眾號

亚洲国产精品久久久久久6q| 中字幕一区二区三区乱码| 成年人视频免费在线播放| 国产精品亚洲一区二区三区在线 | 成人在线播放| 日本aⅴ亚洲精品中文乱码| 在线观看成人黄色| 精品乱人伦一区二区三区| 国产精品久久久久久av下载红粉| 调教驯服丰满美艳麻麻在线视频| 91视频亚洲| 亚洲成av人影院在线观看网| 日韩高清av电影| 精品人妻aV中文字幕乱码色欲| 亚洲日韩成人| 色婷婷综合久久久久中文字幕1| 欧美xxxx日本和非洲| free欧美| 亚洲综合色在线| 日韩高清av| 午夜影院免费体验区| 精品一区二区三区欧美| 欧美一区二区三区免费视| 国产不卡在线观看视频| 久久动漫网址| 69堂成人精品免费视频| 欧美色图另类小说| 婷婷av在线| 国产精品理伦片| 久中文字幕一区| 国产丰满美女做爰| 九九**精品视频免费播放| 7777精品视频| 久久久久成人网站| 97精品视频| 亚洲天天在线日亚洲洲精| 日本久久久久久久久久| 亚洲福利影视| 在线观看视频一区二区| 2018国产在线| 午夜影院免费在线| 综合电影一区二区三区 | 久久久在线免费观看| jizzjizz日本少妇| 国模精品一区| 国产午夜精品麻豆| 性久久久久久久久久久| 亚洲一区二区三区四区电影| 69久久夜色精品国产69蝌蚪网 | 国产精品中文字幕欧美| 国产精品综合不卡av| 亚洲黄网在线观看| 99国产精品| 久久久久久久久国产精品| 日韩高清dvd碟片| 99久久www免费| 久久激情视频久久| 日本女人性生活视频| 不卡在线一区| 中文字幕欧美视频在线| 人成在线免费网站| 国产精品av久久久久久麻豆网| 亚洲免费电影在线观看| 少妇饥渴放荡91麻豆| 成人av综合网| 日韩一区二区免费高清| 欧洲在线免费视频| 95精品视频| 91精品欧美综合在线观看最新 | 91人妻一区二区三区蜜臀| 久久国产综合| 日韩视频一区在线| 国产亚洲精品久久久| 成人黄色一区二区| 日韩一区精品| 欧美久久久久免费| 午夜男人的天堂| 超碰超碰在线| 最新久久zyz资源站| 亚洲精品欧洲精品| 色开心亚洲综合| 最新欧美精品一区二区三区| 国产精品无码乱伦| 污污视频在线看| 亚洲成人午夜影院| 熟女性饥渴一区二区三区| 伊人久久精品一区二区三区| 日本乱人伦一区| 日韩中文字幕a| 日韩在线成人| 日韩国产在线播放| 中文字幕欧美激情极品| 亚洲男女av一区二区| 欧美日韩国产成人| av大片在线免费观看| 秋霞午夜av一区二区三区| 91九色视频导航| 欧美 日韩 国产 在线| 久久无码av三级| 亚洲欧洲国产日韩精品| 色呦呦在线免费观看| 精品福利在线视频| 亚欧激情乱码久久久久久久久| 精品国产亚洲一区二区三区在线| 亚洲国产精品久久久久久| 大又大又粗又硬又爽少妇毛片| 日韩欧美视频| 91精品国产91久久久久福利| 中文字幕免费视频观看| 国产精品一区二区果冻传媒| 久久久免费看| 理论片午午伦夜理片在线播放| 亚洲二区在线视频| 中文字幕永久有效| 日韩人体视频| 欧美精品在线网站| 国产亚洲欧美日韩高清| 国产成人亚洲综合a∨婷婷 | 中文字幕永久免费视频| 成人视屏免费看| 一区二区欧美日韩| 成人爱爱网址| 精品国产免费视频| 三级黄色片在线观看| 在线综合亚洲| 99国内精品久久久久久久软件| 经典三级在线| 性欧美疯狂xxxxbbbb| 午夜久久福利视频| 精品国产91久久久久久浪潮蜜月| 久久久久国产精品www| 国产一区二区自拍视频| 久久久精品国产免费观看同学| a天堂资源在线观看| 国产精品一区二区三区av| 国产一区二区三区高清在线观看| 日韩av一区二区在线播放| 国产一区二区剧情av在线| 日韩.欧美.亚洲| 国产高潮在线| 精品国产乱码久久久久久影片| 亚洲女人久久久| 日韩国产精品久久久| 精品无人乱码一区二区三区的优势| a视频在线观看免费| 欧美区一区二区三区| 永久免费av无码网站性色av| 国产亚洲网站| 久久精品人成| 男人久久天堂| 日韩经典第一页| 毛片视频网站在线观看| 99久久精品费精品国产一区二区| 欧美大黑帍在线播放| 亚洲一区二区三区四区电影| 久久777国产线看观看精品| 国产情侣av在线| 亚洲色图.com| 成人在线短视频| 欧美黄在线观看| 99中文字幕| 青春草视频在线观看| 日韩欧美另类在线| 青青草激情视频| 国产99久久久精品| 成人黄色av片| 在线一级成人| 国产精品视频播放| 午夜免费视频在线国产| 欧美疯狂性受xxxxx喷水图片| 免费91在线观看| 国内精品视频一区二区三区八戒| 中文字幕日韩一区二区三区不卡| 亚洲精品一区二区在线播放∴| 日韩一级裸体免费视频| 国产三区在线播放| 亚洲一二三专区| 超碰97在线资源站| 日日摸夜夜添夜夜添国产精品 | 亚洲精品成人无限看| 91在线精品观看| 日本在线影院| 在线日韩第一页| 国产视频手机在线| 亚洲第一久久影院| 亚洲av成人无码久久精品| 久久草av在线| 丰满的少妇愉情hd高清果冻传媒| 蜜臀av一区| 国产精品日韩一区| 色呦呦在线播放| 亚洲三级av在线| 国产伦理吴梦梦伦理| 亚洲成人动漫在线观看| 天天躁夜夜躁狠狠是什么心态| 久久国产乱子精品免费女| 91嫩草国产丨精品入口麻豆| 精品三级av| 国产精品免费小视频| 色呦呦在线看| 国产一区二区日韩精品欧美精品| 午夜精品久久久久久久91蜜桃| 欧美日韩一区二区三区| 亚洲怡红院在线观看| 99久久免费视频.com| 污网站免费在线| 激情久久久久| 亚洲欧洲国产日韩精品| 欧美久久香蕉| 91青草视频久久| 男人皇宫亚洲男人2020| 久久综合伊人77777| 免费在线观看污视频| 日韩欧美中文字幕精品| 天美一区二区三区| 手机在线免费看毛片| 亚洲精品三级| 亚洲一区二区不卡视频| 卡通动漫国产精品| 91视频88av| 欧美香蕉视频| 欧美激情第三页| 天堂аⅴ在线地址8| 精品中文视频在线| 亚洲国产精品久久人人爱潘金莲| 欧美天堂一区二区三区| 成人免费看片98欧美| 亚洲精品视频一区二区| 亚洲一区 欧美| 91一区一区三区| 337p日本欧洲亚洲大胆张筱雨| 男女性色大片免费观看一区二区| 欧美三级在线观看视频| 亚洲欧美文学| 综合国产精品久久久| 成人激情视频| 日韩不卡av| 怕怕欧美视频免费大全| 久久久久久久久久久久久久一区| 9l视频自拍蝌蚪9l视频成人| 亚洲xxxxx性| 亚洲影视资源| 成人免费网站在线观看| 亚洲一区av| 成人女保姆的销魂服务| 黄色成人小视频| 国产精自产拍久久久久久蜜| 最新日韩三级| 国产成人精品在线观看| 欧美特大特白屁股xxxx| 日本不卡视频在线播放| 狠狠操一区二区三区| 97国产精品视频| 爱搞国产精品| 91sa在线看| 在线女人免费视频| 欧美最近摘花xxxx摘花| 日韩欧美看国产| 国产精品av免费在线观看| 国产经典一区| 国产啪精品视频网站| 四虎国产精品免费久久| 91免费国产网站| 涩爱av色老久久精品偷偷鲁 | www.国产在线播放| 精品91在线| 国产午夜福利视频在线观看| 中文在线一区| 久久久久免费精品| 精品在线你懂的| 极品白嫩少妇无套内谢| 成人av免费在线| 久久国产精品影院| 中文文精品字幕一区二区| 国产免费久久久久| 亚洲国产美国国产综合一区二区| 日韩美女视频网站| 91精品1区2区| 国产偷拍一区二区| 亚洲黄色片网站| 成人在线视频成人| 欧美日韩高清区| 免费观看亚洲| 成人女保姆的销魂服务| 精品国产影院| 亚洲欧洲一区二区| 欧美视频二区| 成年人在线看片| 国产美女精品在线| 给我免费观看片在线电影的| 国产日韩欧美一区二区三区乱码 | 亚洲国产三级网| 色综合成人av| 在线播放国产一区中文字幕剧情欧美| 麻豆网站视频在线观看| 久久久国产一区二区三区| 国内在线免费视频| 日韩av成人在线| 日日夜夜亚洲| 欧美激情第六页| 91精品国产调教在线观看| 国产又粗又长又爽视频| 久久午夜精品一区二区| 国产永久免费网站| 成人网在线播放| 在线观看日本黄色| 亚洲制服丝袜在线| 青青草视频在线观看免费| 日韩午夜av电影| 精品视频一二三| 菠萝蜜影院一区二区免费| 国产v日韩v欧美v| 国产女人18毛片水18精品| 欧美久久亚洲| 欧美日本亚洲| 欧美日韩四区| 国产又黄又猛又粗又爽的视频| 岛国精品在线观看| 国产成人精品视频免费| 亚洲自拍偷拍综合| 91精品国产乱码久久| 日韩精品丝袜在线| 黑人精品视频| 国产日韩欧美在线播放| 亚洲日产av中文字幕| 日本香蕉视频在线观看| 久久er99热精品一区二区| xxxx黄色片| 亚洲午夜三级在线| 97成人在线观看| 亚洲跨种族黑人xxx| 色综合999| 成人国产精品久久久| av伊人久久| 久久网站免费视频| 国产精品一二三| 久久精品亚洲a| 欧美色国产精品| 波多野结衣一区二区| 性欧美xxxx视频在线观看| 久久99成人| 三上悠亚免费在线观看| 蜜桃一区二区三区在线观看| 国产精品久久久久久久无码| 亚洲6080在线| 狠狠躁日日躁夜夜躁av| 久久免费视频观看| 免费看日产一区二区三区| 欧美日韩国产不卡在线看| 欧美资源在线| a级在线观看视频| 色婷婷av一区二区| 水中色av综合| 欧美韩国理论所午夜片917电影| 精品国产乱码一区二区三区| 中文字幕av导航| 久久国产精品99久久久久久老狼| 成人片黄网站色大片免费毛片| 亚洲免费观看在线视频| 97国产精品久久久| 久久精品99久久久香蕉| 久久99精品久久久野外观看| 久久天天东北熟女毛茸茸| 国产成人精品aa毛片| 久久艹精品视频| 精品久久久久久久久久久久久久久久久| 日韩伦理电影网站| 国产精品12| 模特精品在线| 亚洲AV无码成人精品区明星换面 | 国产免费黄色录像| 久久亚洲精品小早川怜子66| 欧美高清免费| 女人色极品影院| 成人av第一页| 国产女优在线播放| 北条麻妃久久精品| 视频欧美一区| 国产男女免费视频| 91麻豆免费视频| 一区二区日韩视频| 美女福利视频一区| 欧美国产极品| 久久婷婷国产91天堂综合精品| 久久久久久久久免费| 国产又粗又大又黄| 欧美黄色片在线观看| 美女毛片一区二区三区四区| 天堂社区在线视频| 国产精品久久久久久久久快鸭 | 国产一区二区三区在线视频观看| 精品人伦一区二区色婷婷| 黄在线观看免费网站ktv| 久久久久se| 秋霞成人午夜伦在线观看| 亚洲最大的黄色网址| 亚洲女人天堂色在线7777| 日本久久一区| 黑森林福利视频导航| 国产精品久久久一区麻豆最新章节|