精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧日韩不卡在线视频| 精品999久久久| 女同性恋一区二区| 少妇人妻精品一区二区三区| 蜜乳av另类精品一区二区| 这里只有视频精品| 在线观看成人动漫| av成人免费| 亚洲国产精品一区二区尤物区| 免费精品视频一区| 国产成人精品无码高潮| 久久国产精品久久w女人spa| 久久精品最新地址| 日韩乱码人妻无码中文字幕久久| www.欧美| 日韩欧美在线国产| 国产乱人伦精品一区二区三区| 日韩偷拍自拍| 国产精品一二三区在线| 国产成人亚洲精品| 日韩av一二三区| 亚洲精品一二三区区别| 亚洲视频精品在线| 亚洲最大的黄色网| 国产区一区二| 精品视频资源站| 日本a级片免费观看| 在线看女人毛片| 国产精品美女久久久久aⅴ| 国产视频不卡| 亚洲精华国产精华精华液网站| 秋霞电影网一区二区| 91成人精品网站| 久久婷婷一区二区| 综合激情网站| 精品国偷自产在线视频99| 国产三级av在线播放| 欧美毛片免费观看| 精品成人一区二区| 日本少妇一级片| 国产精品视频一区视频二区| 欧美日韩大陆一区二区| 国产免费视频传媒| 日本欧美日韩| 一本色道久久综合精品竹菊| 国产中文字幕视频在线观看| 福利写真视频网站在线| 樱桃国产成人精品视频| 中文字幕在线亚洲三区| 免费a级毛片在线播放| 国产精品午夜电影| 亚洲韩国在线| 尤物视频在线免费观看| 中文字幕成人在线观看| 亚洲国产精品久久久久婷婷老年| 激情小说 在线视频| 久久久不卡网国产精品一区| 欧美不卡1区2区3区| 欧美美乳在线| 国产欧美日韩视频在线观看| 天天综合狠狠精品| 午夜伦理在线| 亚洲色图都市小说| 国产精品igao激情视频| 欧美大片黄色| 午夜精品一区二区三区三上悠亚| 国产原创中文在线观看 | 色综合伊人色综合网| 国产又大又粗又爽的毛片| 精品久久精品| 久久黄色av网站| 久久97人妻无码一区二区三区| 黄色成人在线网站| 日本精品久久电影| 97人妻精品视频一区| 精品一区二区在线看| 1卡2卡3卡精品视频| 丰满熟女一区二区三区| 91视频91自| 日韩精品久久久毛片一区二区| av中文在线| 亚洲精品你懂的| 精品国偷自产一区二区三区| 中文字幕这里只有精品| 欧美日韩精品三区| 成人啪啪18免费游戏链接| 欧美一区二区三区红桃小说| 国产亚洲一区精品| 成年人一级黄色片| 国产女优一区| 国产有码一区二区| 欧美 日韩 国产 成人 在线| 久久综合九色综合欧美就去吻| 深夜福利成人| 黄色在线观看视频网站| 色欧美88888久久久久久影院| www.com黄色片| 国产精品三p一区二区| 国产亚洲综合久久| 日韩xxx高潮hd| 九九九久久久精品| 欧美日韩最好看的视频| av片在线观看| 91久久精品网| 少妇极品熟妇人妻无码| 成人女性视频| 97视频免费在线看| 国产毛片毛片毛片毛片毛片| 久久美女高清视频| 成人免费视频91| 欧美videos粗暴| 日韩精品中文字| 成人观看免费视频| 免费精品视频在线| 欧美三日本三级少妇三99| 成年人视频免费在线播放| 欧美日韩免费视频| caopeng视频| 国产欧美大片| 国产高清精品一区二区三区| 日本在线播放| 欧洲国产伦久久久久久久| av av在线| 国内成人在线| 91色视频在线导航| 日韩毛片久久久| 色狠狠综合天天综合综合| 亚洲一区二区在线免费| 欧美大片一区| 92福利视频午夜1000合集在线观看| 黄色片免费在线| 福利微拍一区二区| 好吊色视频一区二区三区| 亚洲欧美伊人| 亚洲一区亚洲二区| 国产色在线观看| 欧美绝品在线观看成人午夜影视| 人人人妻人人澡人人爽欧美一区| 一区二区黄色| 国语精品中文字幕| 99爱在线观看| 日韩国产欧美精品在线| 国产精品日日夜夜| 成人免费观看av| 91午夜在线观看| 97久久精品| 97久久久免费福利网址| 人妻中文字幕一区| 亚洲成人精品一区二区| 波多野结衣一二三区| 亚洲免费高清| 欧美激情第六页| 欧美自拍电影| 在线观看视频亚洲| 中文字幕黄色av| 国产精品不卡一区二区三区| 手机免费av片| 欧美一区精品| 国产精品12| 美女av在线免费看| 亚洲人成啪啪网站| 亚洲无码精品在线观看| 亚洲欧洲av另类| 亚洲精品一二三四| 尤物精品在线| 欧美区高清在线| 777午夜精品电影免费看| 日韩在线免费高清视频| 国产裸体无遮挡| 亚洲一区av在线| 亚洲欧美视频在线播放| 视频一区视频二区中文| 一区不卡视频| 99精品在免费线中文字幕网站一区 | av手机免费在线观看| 亚洲国产精品va在线| 亚洲欧美偷拍一区| 国产精品卡一卡二| 丰满熟女人妻一区二区三区| 另类亚洲自拍| 一区二区视频在线播放| 综合伊人久久| 国产精品99一区| 国产一二三区在线观看| 亚洲福利在线看| 在线观看中文字幕网站| 亚洲一区二区三区视频在线| 国产精品无码永久免费不卡| 美腿丝袜在线亚洲一区| 亚洲 欧美 综合 另类 中字| 亚洲人挤奶视频| 99九九视频| 欧美一区久久久| 欧美激情一区二区三级高清视频| 欧洲一区av| 3atv在线一区二区三区| av黄色在线播放| 亚洲另类色综合网站| 国产在线观看h| 国产成人久久精品77777最新版本| 国产日产欧美视频| 中文字幕一区二区三区乱码图片 | 成人看片在线| 99热播精品免费| 51精品在线观看| 99在线视频观看| 中文字幕亚洲无线码a| 人妻一区二区三区免费| 欧美久久久久久久久久| 狠狠人妻久久久久久| 一区二区在线观看视频| 国产在线综合视频| 99re亚洲国产精品| 日批视频在线看| 蜜桃视频在线观看一区二区| 日韩avxxx| 黄色av成人| 女同性恋一区二区| 国产精品久久久久9999赢消| 欧美成人dvd在线视频| 99久久香蕉| 亚洲free性xxxx护士hd| 久久不卡日韩美女| 日韩美女免费视频| 蜜桃视频www网站在线观看| 欧美日韩国产二区| 成人日日夜夜| 久久视频在线视频| 欧美精品电影| 中文字幕日本欧美| 国产免费永久在线观看| 亚洲色图35p| 嫩草研究院在线| 亚洲精品一区二区三区婷婷月| 好吊色视频一区二区| 欧美不卡一区二区三区| 精品国产va久久久久久久| 欧美电影在线免费观看| 中文字幕+乱码+中文| 欧美影院精品一区| 影音先锋黄色网址| 欧美视频自拍偷拍| 中文有码在线播放| 欧美特级限制片免费在线观看| 欧美日韩 一区二区三区| 一本一道波多野结衣一区二区| 综合激情网五月| 一本色道**综合亚洲精品蜜桃冫 | 91精品一区二区三区久久久久久 | 久久久精品视频免费| 午夜精品久久久久久久| 国产精品美女久久久久av爽| 欧美日韩日本国产| 欧美激情黑白配| 91福利小视频| 自拍偷拍精品视频| 欧美精品日韩一本| 亚洲成人av综合| 亚洲国产天堂网精品网站| 天天色综合久久| 亚洲人成电影网站色…| av在线1区2区| 欧美插天视频在线播放| 国产丝袜精品丝袜| 国产成人涩涩涩视频在线观看| 成人午夜毛片| 亚洲自拍偷拍色片视频| 国产精品18hdxxxⅹ在线| 欧美精品免费观看二区| 欧美日韩伦理| 黄色a级在线观看| 亚洲激情女人| 999精品视频在线| 国产乱码精品一区二区三区av| 日韩黄色一区二区| 国产调教视频一区| 杨钰莹一级淫片aaaaaa播放| 午夜精品爽啪视频| 中文字幕第三页| 精品国产污网站| 国产在线一二| 欧美激情亚洲视频| 婷婷午夜社区一区| 91手机在线播放| 国产一区二区欧美| 免费的av在线| 男女精品视频| 免费观看黄网站| 久久精品欧美日韩| 欧美日韩国产精品一区二区三区| 色综合久久综合网97色综合| 国产又粗又大又爽视频| 亚洲精品国产精品乱码不99按摩| 岛国最新视频免费在线观看| 欧美人在线视频| 日韩在线免费| 国产精品免费在线| 99久久夜色精品国产亚洲狼| 欧美 日韩 激情| 国产另类ts人妖一区二区| 亚洲国产无码精品| 亚洲国产一区二区视频| 中文字幕人妻色偷偷久久| 欧美精品一区二区三区高清aⅴ| yourporn在线观看视频| 97精品久久久| 精品一区二区三区在线观看视频| 日本公妇乱淫免费视频一区三区| 欧美1区免费| 网站一区二区三区| 95精品视频在线| 国产在线观看成人| 777亚洲妇女| h网站在线免费观看| 91精品国产九九九久久久亚洲| 经典三级久久| 亚洲免费精品视频| 日产国产高清一区二区三区| 国产 中文 字幕 日韩 在线| 夜夜夜精品看看| 国产又黄又大又爽| 中文字幕日韩欧美精品在线观看| 一区一区三区| 精品国产免费久久久久久尖叫| 女人色偷偷aa久久天堂| 中文字幕亚洲欧洲| 国产亚洲欧美色| 91精品国产高清一区二区三密臀| 亚洲国产日韩精品在线| 成人影音在线| 国产乱码一区| 亚洲福利免费| 亚洲美女精品视频| 亚洲一区二区三区中文字幕在线| 国产婷婷一区二区三区久久| 久久精品视频在线播放| 四虎影视成人精品国库在线观看 | 欧美日韩中文另类| www.在线播放| 国产精品高潮呻吟久久av黑人| 国产真实有声精品录音| 欧美精品成人网| 国产亚洲一区二区在线观看| jizz国产在线观看| 国产亚洲a∨片在线观看| 久久99久久99精品免观看软件| 欧美aaaaa喷水| 免费视频一区二区| 登山的目的在线| 91精品国产综合久久精品| 中文国产字幕在线观看| 国产精品传媒毛片三区| 日韩午夜在线电影| mm131丰满少妇人体欣赏图| 在线视频你懂得一区二区三区| 成人免费高清在线播放| 国产一区视频在线| 午夜性色一区二区三区免费视频 | 国产普通话bbwbbwbbw| 欧美老少做受xxxx高潮| 福利电影一区| 国产a级一级片| 国产精品久久久久久一区二区三区| 一级全黄少妇性色生活片| 免费av一区二区| 韩国精品福利一区二区三区| 久久久久久久久久久久久国产精品 | 亚洲福利精品在线| 综合久久2023| 中文字幕久久综合| 成人精品视频一区二区三区尤物| 国产无遮挡aaa片爽爽| 亚洲欧美福利视频| 欧美电影在线观看网站| 麻豆一区二区三区在线观看| 99久久综合狠狠综合久久| 超碰在线免费97| 欧美大荫蒂xxx| 九九精品在线| 亚洲三级在线视频| 欧美性jizz18性欧美| 天堂中文а√在线| 国产精品美女黄网| 日本伊人精品一区二区三区观看方式| 丝袜 亚洲 另类 欧美 重口 | 免费观看久久久久| 国产精品香蕉视屏| 蜜桃91丨九色丨蝌蚪91桃色| 国产亚洲精品av| 少妇久久久久久| 欧美五码在线| 下面一进一出好爽视频| 一本久久a久久免费精品不卡| 成人福利在线观看视频| 欧美伦理一区二区| 国产白丝网站精品污在线入口| www.国产毛片| 久久久久久亚洲精品不卡| 欧美国产美女| 久久久亚洲av波多野结衣|