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

Linux 內核網絡之 tcp 三次握手

系統 Linux
今天我們一起來了解一下Linux 內核網絡之 tcp 三次握手的相關流程。

三次握手流程如下圖:

服務器端監聽

在client端向server端進行連接前,server處于監聽狀態。流程如下:

int reqsk_queue_alloc(struct request_sock_queue *queue,
unsigned int nr_table_entries)
{
size_t lopt_size = sizeof(struct listen_sock);
struct listen_sock *lopt;
//計算半連接隊列的長度
nr_table_entries = min_t(u32, nr_table_entries, sysctl_max_syn_backlog);
nr_table_entries = max_t(u32, nr_table_entries, 8);
..
//為半連接隊列申請內存
lopt_size += nr_table_entries * sizeof(struct request_sock );
if (lopt_size > PAGE_SIZE)
/ 如果申請內存大于1頁,則申請虛擬地址連續的空間 /
lopt = __vmalloc(lopt_size,GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO,PAGE_KERNEL);
else
/ 申請內存在1頁內,則申請物理地址連續的空間 */
lopt = kzalloc(lopt_size, GFP_KERNEL);
//全連接隊列頭初始化
queue->rskq_accept_head = NULL;
// 半連接隊列的最大長度
lopt->nr_table_entries = nr_table_entries;
...
//半連接隊列設置
queue->listen_opt = lopt;
return 0;
}

服務器端在監聽時初始化半連接 hash 表,然后掛到接收隊列中,等待客戶端連接。

另外 queue->rskq_accept_head為全連接隊列,是一個以鏈表的形式進行管理全連接。

關于半連接和全連接的結構如下:

client 發送 SYN 報文

client 向 server 進行 connect 時,最終會調用 tcp_v4_connect 向server發送 SYN 報文。

int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
{
...
//設置 socket 狀態為 TCP_SYN_SENT
tcp_set_state(sk, TCP_SYN_SENT);
...
//函數用來根據 sk 中的信息,構建一個完成的 syn 報文,并將它發送出去。
err = tcp_connect(sk);
...
}
int tcp_connect(struct sock *sk)
{
struct tcp_sock *tp = tcp_sk(sk);
struct sk_buff *buff;
tcp_connect_init(sk);
//申請 skb 并構造為一個 SYN 包
buff = alloc_skb_fclone(MAX_TCP_HEADER + 15, sk->sk_allocation);
...
//添加到發送隊列 sk_write_queue 上
__skb_queue_tail(&sk->sk_write_queue, buff);
...
//發送syn報文
tcp_transmit_skb(sk, buff, 1, GFP_KERNEL);
...
/* Timer for repeating the SYN until an answer. */
//啟動重傳定時器
inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS,
inet_csk(sk)->icsk_rto, TCP_RTO_MAX);
return 0;
}

在 tcp_connect 中申請并構造一個SYN 包,然后將其發出。同時還啟動了一個重傳定時器,該定時器的作用就是等到一定時間后若收不到服務器的反饋時進行重傳。

server 端接收 SYN 并發送 SYN+ACK

所有到server端的tcp數據包都會經過網卡、軟中斷,最終到 tcp_v4_rcv。

在 tcp_v4_rcv 中根據報文報文頭中的信息,從監聽的hash 表 listening_hash 中找到對應監聽的 socket 結構。然后進入 tcp_v4_do_rcv

進行握手處理。

int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
{
...
//服務器收到第一步握手 SYN 或者第三步 ACK 都會走到這里
if (sk->sk_state == TCP_LISTEN) {
//從半連接表syn_table中取出節點
struct sock *nsk = tcp_v4_hnd_req(sk, skb);
...
}
}

由于當前 socket 是 listen 狀態,首先會到 tcp_v4_hnd_req 去查看半連接隊列。服務器第一次響應 SYN 的時候,半連接隊列里是空的,所以相當于什么也沒干就返回了。

static struct sock *tcp_v4_hnd_req(struct sock *sk, struct sk_buff *skb)
{
// 從半連接隊里中查詢
struct request_sock *req = inet_csk_search_req(sk, &prev, th->source, iph->saddr, iph->daddr);
return sk;
}
struct request_sock *inet_csk_search_req(const struct sock *sk,
struct request_sock ***prevp,
const __be16 rport, const __be32 raddr,
const __be32 laddr)
{
for (prev = &lopt->syn_table[inet_synq_hash(raddr, rport, lopt->hash_rnd,
lopt->nr_table_entries)];
(req = *prev) != NULL;
prev = &req->dl_next) {
...
}
}
return req;
}

在 tcp_rcv_state_process 中根據各種狀態做不同的處理。

int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
struct tcphdr *th, unsigned len)
{
...
case TCP_LISTEN:
...
//判斷是否為 SYN 包
if(th->syn) {
//調用 tcp_v4_conn_request
if (icsk->icsk_af_ops->conn_request(sk, skb) < 0)
return 1;
...
}
goto discard;
case TCP_SYN_SENT:
...
return 0;
}

由于對方發來的 SYN 報文, 調用 tcp_v4_conn_request 進行處理。

int tcp_v4_conn_request(struct sock *sk, struct sk_buff *skb)
{
...
//查看半連接隊列是否已滿
if (inet_csk_reqsk_queue_is_full(sk) && !isn) {
#ifdef CONFIG_SYN_COOKIES
if (sysctl_tcp_syncookies) {
want_cookie = 1;
} else
#endif
goto drop;
}
//在全連接隊列滿的情況下,如果有 young_ack,那么直接丟
if (sk_acceptq_is_full(sk) && inet_csk_reqsk_queue_young(sk) > 1)
goto drop;
//分配 request_sock 內核對象,該request_sock->sk 此時還為空
req = reqsk_alloc(&tcp_request_sock_ops);
if (!req)
goto drop;
...
tcp_rsk(req)->snt_isn = isn;
// 發送 syn+ack 包
if (tcp_v4_send_synack(sk, req, dst))
goto drop_and_free;
if (want_cookie) {
reqsk_free(req);
} else {
//添加到半連接隊列,并開啟計時器,
inet_csk_reqsk_queue_hash_add(sk, req, TCP_TIMEOUT_INIT);
}
return 0;
}

inet_csk_reqsk_queue_is_full 如果返回 true 就表示半連接隊列滿了,另外 sysctl_tcp_syncookies 判斷是否打開了內核參數 tcp_syncookies,如果未打開則返回 false。

如果半連接隊列滿了,而且 ipv4.tcp_syncookies 參數設置為 0,那么來自客戶端的握手包將 goto drop,也就是數據包直接丟棄,此時客戶端感知不到報文被 server 丟棄,依靠重傳定時器重傳。

SYN Flood 攻擊就是通過消耗光服務器上的半連接隊列來使得正常的用戶連接請求無法被響應。不過在現在的 Linux 內核里只要打開 tcp_syncookies,半連接隊列滿了仍然也還可以保證正常握手的進行。

sk_acceptq_is_full 來判斷全連接隊列是否滿了, inet_csk_reqsk_queue_young 判斷的是有沒有 young_ack(未處理完的半連接請求)。

若全連接隊列滿的情況下,且同時有 young_ack ,那么內核同樣直接丟掉該 SYN 握手包。

young_ack 是半連接隊列里保持著的一個計數器。記錄的是剛有SYN到達,沒有被SYN_ACK重傳定時器重傳過 SYN_ACK,同時也沒有完成過三次握手的 sock 數量。

從上面可以看到,若隊列已滿,server 端直接丟棄報文,并不通知客戶端。這時候客戶端只能通過發送 SYN 包時開啟的重傳定時器超時進行重傳。

server 構造 synack 報文進行回應。

若啟用 syncookies,則是根據需要來判斷三次握手的,因此無需保存連接請求,直接將其釋放。

若未開啟 syncookies,則需將連接請求塊保存到其父傳輸控制塊中的半連接散列表中,并設置啟動連接定時器。計時器的作用是如果某個時間之內還收不到客戶端的第三次握手的話,服務器會重傳 synack 包。

request_sock 內核對象加入到半連接表中,如下圖

客戶端響應 SYNACK

client 收到 synack 包后,最終會走到 tcp_rcv_state_process中,此時socket的狀態為 TCP_SYN_SENT

int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
struct tcphdr *th, unsigned len)
{
...
switch (sk->sk_state) {
case TCP_CLOSE:
goto discard;
case TCP_LISTEN:
...
case TCP_SYN_SENT:
//處理 synack 包,返回值大于0表示需給對方發送RST段,該TCP段的釋放由tcp_rcv_state_process調用者處理
queued = tcp_rcv_synsent_state_process(sk, skb, th, len);
if (queued >= 0)
return queued;
/* Do step6 onward by hand. */
//在處理完接收的段后,還需要處理緊急數據,然后釋放該段,最后檢測是否有數據需要發送。
tcp_urg(sk, skb, th);
__kfree_skb(skb);
tcp_data_snd_check(sk, tp);
return 0;
}
...
return 0;
}

關于 synack 包的處理邏輯為 tcp_rcv_synsent_state_process。

static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb,
struct tcphdr *th, unsigned len)
{
...
if (th->ack) {
...
//若收到ack+rst段,則調用tcp_reset設置ECONNREFUSED錯誤碼,同時通知等待該套接口的進程,然后關閉套接口
if (th->rst) {
tcp_reset(sk);
goto discard;
}
//在SYS_SENT狀態下接收的段必須存在SYN標志,否則說明接收到的段無效,然后跳到discard_and_undo丟棄該段
if (!th->syn)
goto discard_and_undo;
TCP_ECN_rcv_synack(tp, th);
// 初始化與窗口有關的成員變量
tp->snd_wl1 = TCP_SKB_CB(skb)->seq;
tcp_ack(sk, skb, FLAG_SLOWPATH);// 刪除發送隊列和重傳定時器
/* Ok.. it's good. Set up sequence numbers and
? move to established.
*/
tp->rcv_nxt = TCP_SKB_CB(skb)->seq + 1;
tp->rcv_wup = TCP_SKB_CB(skb)->seq + 1;
...
//設置已完成連接狀態
tcp_set_state(sk, TCP_ESTABLISHED);
...
//初始化擁塞控制
tcp_init_congestion_control(sk);
...
//若啟用了連接保活,則啟用連接?;疃〞r器
if (sock_flag(sk, SOCK_KEEPOPEN))
inet_csk_reset_keepalive_timer(sk, keepalive_time_when(tp));
if (!tp->rx_opt.snd_wscale)
__tcp_fast_path_on(tp, tp->snd_wnd);
else
tp->pred_flags = 0;
//若不處于SOCK_DEAD,則喚醒等待該套接口的進程,同時向套接口的異步等待隊列上的進程發送信號,通知他們該套接口可以輸出數據了
if (!sock_flag(sk, SOCK_DEAD)) {
/* 指向sock_def_wakeup,會喚醒調用connect()的進程,完成連接的建立 /
sk->sk_state_change(sk);
/ 如果使用了異步通知,則發送SIGIO通知進程可寫 */
sk_wake_async(sk, 0, POLL_OUT);
}
...
discard:
__kfree_skb(skb);
return 0;
} else {
// 發送ack段,同時更新窗口。
tcp_send_ack(sk);
}
return -1;
}
...
}

處理 TCP 段中存在 ACK 標志的情況。

啟動連接?;疃〞r器。

喚醒調用connect阻塞的進程,然后發送 ACK 報文。

void tcp_send_ack(struct sock sk)
{
/ If we have been reset, we may not send again. */
//發送ack時,tcp必須不在TCP_CLOSE狀態
if (sk->sk_state != TCP_CLOSE) {
...
//為ack分配一個SKB,若分配失敗則在啟動延時確認定時器后返回
buff = alloc_skb(MAX_TCP_HEADER, GFP_ATOMIC);
...
/* Send it off, this clears delayed acks for us. */
//設置序號和發送時間,調用tcp_transmit_skb將ack段發送出去
TCP_SKB_CB(buff)->seq = TCP_SKB_CB(buff)->end_seq = tcp_acceptable_seq(sk, tp);
TCP_SKB_CB(buff)->when = tcp_time_stamp;
tcp_transmit_skb(sk, buff, 0, GFP_ATOMIC);
}
}

client 收到對端發送的 synack 包后,清除了 connect 時設置的重傳定時器,把 socket 狀態設置為 TCP_ESTABLISHED,同時喚醒調用 connect 而阻塞的進程,開啟保活定時器并發送第三次握手的 ack 確認包。

server 端處理 ACK 包

關于 server 處理 ack 報文的過程如下:

|-> tcp_v4_do_rcv

. |-> tcp_v4_hnd_req

. . |-> inet_csk_search_req // 從半連接中取出連接請求塊request_sock

. . |-> tcp_check_req

. . . |-> syn_recv_sock => tcp_v4_syn_recv_sock

. . . . |-> tcp_create_openreq_child

. . . . . |-> inet_csk_clone // 生成一個sock結構,設置 TCP_SYN_RECV 狀態

. . . |->

inet_csk_reqsk_queue_unlink // 把連接請求塊request_sock從半連接隊列中刪除

. . . |-> inet_csk_reqsk_queue_add //把request_sock和生成的sock進行關聯,并掛到icsk_accept_queue 全連接隊列中

. |-> tcp_child_process

. . |-> tcp_rcv_state_process //設置狀態 TCP_ESTABLISHED

. . |-> sk_data_ready => sock_def_readable //喚醒阻塞在accept上的進程

int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
{
...
//服務器收到第一步握手 SYN 或者第三步 ACK 都會走到這里
if (sk->sk_state == TCP_LISTEN) {
//從半連接表syn_table中取出連接請求塊request_sock,同時生成一個新的sock結構
struct sock *nsk = tcp_v4_hnd_req(sk, skb);
if (!nsk)
goto discard;
// 新生成的sock和監聽的不一樣
if (nsk != sk) {
//設置狀態 TCP_ESTABLISHED并喚醒阻塞在accept上的進程
if (tcp_child_process(sk, nsk, skb)) {
rsk = nsk;
goto reset;
}
return 0;
}
}
...
}
static struct sock *tcp_v4_hnd_req(struct sock *sk, struct sk_buff *skb)
{
...
// 從半連接hash表中獲取連接請求塊request_sock
struct request_sock *req = inet_csk_search_req(sk, &prev, th->source,
iph->saddr, iph->daddr);
if (req)
return tcp_check_req(sk, skb, req, prev);
...
}
inet_csk_search_req

在半連接隊列里進行查找并返回一個半連接 request_sock 對象。然后進入到 tcp_check_req 中

struct sock *tcp_check_req(struct sock *sk,struct sk_buff *skb,
struct request_sock *req,
struct request_sock **prev)
{
...
//創建子 socket ,調用 tcp_v4_syn_recv_sock
child = inet_csk(sk)->icsk_af_ops->syn_recv_sock(sk, skb,
req, NULL); //tcp_v4_syn_recv_sock
//清理半連接隊列
inet_csk_reqsk_queue_unlink(sk, req, prev);
inet_csk_reqsk_queue_removed(sk, req);
//把request_sock和生成的sock進行關聯,并把request_sock添加到全連接隊列
inet_csk_reqsk_queue_add(sk, req, child);
return child;
...
}

創建子 socket 并初始化,然后把新生成newsk 加入到 ehash hash 表中, 以后當有報文到來時,從該 hash 表中找對應的sock結構,也就找到了對應的進程。

struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
struct request_sock *req,
struct dst_entry *dst)
{
...
//判斷接收隊列是不是滿了,若滿,丟棄
if (sk_acceptq_is_full(sk))
goto exit_overflow;
...
//創建 sock && 初始化
newsk = tcp_create_openreq_child(sk, req, skb);
...
// 把 newsk 加入到 已完成鏈接的ehash hash表中
__inet_hash(&tcp_hashinfo, newsk, 0);
__inet_inherit_port(&tcp_hashinfo, sk, newsk);
...
}

設置 TCP_ESTABLISHED 狀態

int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb, struct tcphdr *th, unsigned len)
{
...
if (th->ack) {
...
switch(sk->sk_state) {
case TCP_SYN_RECV:
//設置狀態 TCP_ESTABLISHED
tcp_set_state(sk, TCP_ESTABLISHED);
...
}

第三次握手的主要功能就是從半連接 hash表中摘除連接請求塊 request_sock,然后生成一個 sock 與之進行關聯,然后再把 request_sock 添加到全連接隊列。

server 從 accept 中被喚醒

server 調用 accept 時由于 icsk_accept_queue 隊列沒有為空,進程被阻塞等待。

struct sock *inet_csk_accept(struct sock *sk, int flags, int *err)
{
...
if (sk->sk_state != TCP_LISTEN) /* socket必須處于監聽狀態 *
goto out_err;
/* Find already established connection /
// 發現沒有ESTABLISHED狀態的連接請求塊
if (reqsk_queue_empty(&icsk->icsk_accept_queue)) {
/ 等待超時時間,如果是非阻塞則為0 */
long timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
/* If this is a non blocking socket don't sleep /
error = -EAGAIN;
if (!timeo) / 如果是非阻塞的,則直接退出 /
goto out_err;
/ 阻塞等待,直到有全連接。如果用戶有設置等待超時時間,超時后會退出 /
error = inet_csk_wait_for_connect(sk, timeo);
if (error)
goto out_err;
}
/ 獲取新連接的sock,釋放連接控制塊 */
newsk = reqsk_queue_get_child(&icsk->icsk_accept_queue, sk);
BUG_TRAP(newsk->sk_state != TCP_SYN_RECV);
out:
release_sock(sk);
return newsk;
out_err:
newsk = NULL;
*err = error;
goto out;
}

上三次握手完成后,server 被喚醒,此時全連接隊列 icsk_accept_queue 不空,server 調用 reqsk_queue_get_child() 從全連接隊列中獲取一個新的sock。

static inline struct sock *reqsk_queue_get_child(struct request_sock_queue *queue,
struct sock parent)
{
/ 從全連接隊列中,取出第一個ESTABLISHED狀態的連接請求塊 */
struct request_sock *req = reqsk_queue_remove(queue);
struct sock child = req->sk; / 一個已建立的連接 */
BUG_TRAP(child != NULL);
/* 當前backlog隊列的全連接數減一 */
sk_acceptq_removed(parent);
__reqsk_free(req);
return child;
}

accept 的作用就是從已經建立好的全連接隊列中取出一個返回已完成連接的 sock 返回給用戶進程。

責任編輯:華軒 來源: 今日頭條
相關推薦

2021-03-08 18:08:08

TCP Connect 協議

2024-10-09 20:54:16

2023-09-07 16:46:54

TCP數據傳遞

2023-10-24 15:22:09

TCPUDP

2022-10-10 07:34:36

TCP三次握手區塊鏈

2020-12-08 06:34:16

TCP握手SYN 報文

2019-06-12 11:26:37

TCP三次握手四次揮手

2015-10-13 09:42:52

TCP網絡協議

2024-01-12 08:23:11

TCPACK服務器

2022-07-25 07:07:35

TCP客戶端服務器

2022-07-07 09:00:17

TCP 連接HTTP 協議

2018-10-15 08:06:33

TCP握手原理

2018-07-05 14:25:01

TCP握手原理

2020-08-27 07:41:28

TCP協議數據

2019-12-12 10:36:43

TCPSYNIP

2023-09-02 21:57:52

網絡TCP協議

2021-07-03 17:47:25

TCP控制協議

2021-01-29 06:11:08

TCP通信三次握手

2019-02-01 09:38:16

2021-05-18 12:27:40

TCP控制協議
點贊
收藏

51CTO技術棧公眾號

日本大片在线观看| 青青操免费在线视频| 最新亚洲国产| 亚洲综合成人在线视频| 精品国产91亚洲一区二区三区www| 日韩人妻无码一区二区三区99 | 欧美午夜精品一区二区三区| 异国色恋浪漫潭| 日韩一级片免费| 日本aⅴ精品一区二区三区 | 亚洲激情免费观看| 五月天婷婷亚洲| 高清精品在线| ...xxx性欧美| 欧美中日韩免费视频| 99久久精品日本一区二区免费| 尤物在线精品| 另类天堂视频在线观看| 色哟哟精品观看| 超碰一区二区三区| 欧美精品乱码久久久久久按摩| 国产人妻777人伦精品hd| 秋霞影院午夜丰满少妇在线视频| 不卡欧美aaaaa| 97碰碰视频| 中国一区二区视频| 99热这里只有成人精品国产| 久久久999精品视频| 国产一二三四区在线| 国产精品白浆| 精品日韩一区二区| 在线免费黄色网| 四虎4545www精品视频| 亚洲va韩国va欧美va精品| 中文字幕中文字幕在线中心一区| 免费理论片在线观看播放老| 国产一区二区三区久久悠悠色av | 欧美啪啪小视频| 亚洲精品1234| 欧美精品久久久久久久| 亚洲欧美小视频| 久久一区91| 中文字幕日韩精品在线观看| 永久免费看mv网站入口78| 久久精品色综合| 精品嫩草影院久久| 午夜性福利视频| 视频精品一区二区三区| 宅男在线国产精品| 中文字幕55页| 蜜桃精品视频| 日韩欧美一区在线| 韩国三级在线看| 99re6热只有精品免费观看| 日韩一区二区免费电影| 国内自拍第二页| 国产剧情一区二区在线观看| 欧美日本精品一区二区三区| 91亚洲免费视频| 色狠狠一区二区三区| 欧美日韩精品综合在线| 亚洲免费999| 欧美激情精品| 精品国产污网站| 国产极品一区二区| 窝窝社区一区二区| 国产一区二区日韩| 成人黄色短视频| 欧美一区二区| 国产做受高潮69| 色av性av丰满av| 日本伊人色综合网| 91精品国产自产在线| 精品国产乱码一区二区三| 国产成人午夜视频| 极品尤物一区二区三区| 九色视频在线观看免费播放| 中文字幕成人在线观看| 四虎4hu永久免费入口| heyzo在线播放| 欧美性xxxx极品高清hd直播 | av在线日韩| 欧美日韩久久久一区| 日本少妇xxx| 蜜桃成人av| 日韩在线不卡视频| 国产精品23p| 日韩精品亚洲专区| 91九色在线观看| 久热av在线| 亚洲色图视频网站| av天堂永久资源网| 91成人在线网站| 亚洲国产日韩欧美在线99| 欧美人妻一区二区三区| 伊人色**天天综合婷婷| 欧美在线免费看| 97人妻精品一区二区三区软件| 国产福利一区在线观看| 欧美乱偷一区二区三区在线| 九七久久人人| 色综合天天综合| 手机看片国产精品| av亚洲免费| 午夜精品免费视频| 99久久国产免费| 国产日韩三级在线| 日韩a级在线观看| 欧美日韩免费电影| 亚洲精品一区中文| 免费在线视频一区二区| 免费不卡在线观看| 精品免费一区二区三区蜜桃| 免费av在线网址| 色婷婷综合视频在线观看| 制服.丝袜.亚洲.中文.综合懂| 免费精品国产| 亚洲 日韩 国产第一| 91免费视频播放| 国产婷婷色一区二区三区四区 | 久久精品第九区免费观看| 永久免费av在线| 色呦呦国产精品| 黄色在线免费播放| 一区二区三区午夜探花| 国产女同一区二区| av黄色在线观看| 色婷婷精品大在线视频| 精品影片一区二区入口| 欧美成人有码| 亚洲一区二区三区成人在线视频精品 | 天天免费亚洲黑人免费| 亚洲精品电影网在线观看| 欧美精品一级片| 国产精品综合av一区二区国产馆| 色999日韩自偷自拍美女| 涩涩视频在线免费看| 日韩欧美高清dvd碟片| 182在线观看视频| 久久国产人妖系列| 亚洲一卡二卡三卡| 青娱乐极品盛宴一区二区| 在线性视频日韩欧美| 中文字幕免费观看| 久久精品在线免费观看| 国产精品50p| 首页亚洲中字| 日本亚洲欧美三级| 加勒比一区二区三区在线| 色综合色综合色综合| 黄色国产在线观看| 欧美亚洲专区| 日韩精品无码一区二区三区| 日韩高清中文字幕一区二区| 亚洲人成毛片在线播放| 神马久久久久久久 | 日韩成人毛片视频| 国产精品自拍一区| 久久亚洲国产成人精品无码区| 日韩成人视屏| 高清一区二区三区四区五区| 性xxxx视频播放免费| 懂色av一区二区三区| 久久久久久久久久久久久久久| 日韩不卡一二三区| 亚洲欧美精品在线观看| 日本一本草久在线中文| 国产精品18在线| 成人看片网页| 国产性色av一区二区| 国产真人无遮挡作爱免费视频| 久久精品欧美一区二区三区麻豆| 十八禁视频网站在线观看| 欧美日韩一区二区三区视频播放| 国产伦精品免费视频| 羞羞视频在线观看不卡| 亚洲高清免费观看高清完整版| 黄色大片网站在线观看| 日本一区二区免费在线观看视频 | 日韩视频免费在线| www天堂在线| 一本到不卡精品视频在线观看| 蜜桃av乱码一区二区三区| 久久99国产精品成人| 国产一二三在线视频| 久操国产精品| 97久久精品午夜一区二区| 制服丝袜专区在线| 久久视频国产精品免费视频在线| 风流少妇一区二区三区91| 欧美性少妇18aaaa视频| 日本一级片免费| 久久综合中文字幕| 精品国产鲁一鲁一区二区三区| 91久久综合| 99热都是精品| 少妇精品久久久| 99热在线国产| 国产精品亚洲成在人线| 97在线视频一区| 里番在线观看网站| 亚洲电影在线看| 国产精品探花视频| 色综合久久综合网97色综合 | 欧美日韩免费看| 三级全黄做爰视频| 国产欧美日韩在线观看| 欧美xxxx×黑人性爽| 麻豆视频观看网址久久| 国产精品50p| 欧美婷婷在线| 樱空桃在线播放| 精品一区电影| 蜜桃久久影院| 久久电影在线| 不卡日韩av| 免费观看在线一区二区三区| 国产精品普通话| 成人美女黄网站| 久久久久日韩精品久久久男男 | 欧美极度另类性三渗透| 尤物在线视频| 尤物yw午夜国产精品视频| 五月天久久久久久| 日韩视频免费观看高清完整版在线观看 | 成人激情在线观看| 日本另类视频| 国产福利视频一区| 中文字幕在线中文字幕在线中三区 | 亚洲国产天堂av| 91碰在线视频| 久久人人妻人人人人妻性色av| 丁香天五香天堂综合| 少妇愉情理伦片bd| 韩国v欧美v日本v亚洲v| 日本人69视频| 久久99国产精品久久| 日本肉体xxxx裸体xxx免费| 久久欧美肥婆一二区| 日本在线观看a| 香蕉精品999视频一区二区| 秋霞无码一区二区| 影音先锋亚洲一区| 国产伦精品一区二区三区四区视频_ | 一级片免费在线播放| 精品欧美一区二区三区| 日韩精品视频播放| 婷婷亚洲久悠悠色悠在线播放| 69精品久久久| 欧美日韩国产一区二区三区| 国产成人愉拍精品久久| 欧美日韩国产综合新一区| 日韩黄色一级大片| 日韩欧美中文免费| 99久久久久久久久| 欧美视频在线一区| 亚洲无码精品在线观看| 91精品国产综合久久香蕉的特点 | 日本一本草久p| 欧美在线播放| 久久精品国产sm调教网站演员| 国产一区二区三区久久| 亚洲国产精品毛片av不卡在线| 手机精品视频在线观看| 狠狠躁狠狠躁视频专区| 精品写真视频在线观看| 欧美一级大片免费看| 成人av在线电影| 人妻少妇一区二区| 国产精品欧美一级免费| 91麻豆精品成人一区二区| 一区二区三区.www| 麻豆久久久久久久久久| 欧美一a一片一级一片| 国产日本精品视频| 日韩av网站导航| seseavlu视频在线| 欧美大片在线影院| 欧美1级2级| 亚洲综合日韩在线| 亚洲va久久久噜噜噜久久| 亚洲欧美电影在线观看| 狠狠干成人综合网| 91av俱乐部| 国产高清在线精品| 人妻大战黑人白浆狂泄| 亚洲丝袜制服诱惑| 青青草免费观看视频| 欧美剧情电影在线观看完整版免费励志电影| 国产女人18毛片水18精| 日韩精品高清在线观看| 男人影院在线观看| 69视频在线播放| 91麻豆精品| 裸模一区二区三区免费| 久久久久亚洲| 农村妇女精品一二区| 国产乱码字幕精品高清av| 人人妻人人澡人人爽人人精品 | 免费观看国产视频在线| 国产欧美日韩亚洲一区二区三区| av污在线观看| 99re66热这里只有精品3直播 | 欧美/亚洲一区| av无码精品一区二区三区| 国产精品影视天天线| 级毛片内射视频| 婷婷夜色潮精品综合在线| 国产一区二区波多野结衣 | 国产精品三区www17con| 日韩欧美在线中字| 免费观看日韩毛片| 国产精品一品二品| 国产福利在线导航| 日本高清免费不卡视频| 日本人妻丰满熟妇久久久久久| 久久午夜a级毛片| 97人人做人人爽香蕉精品| 精品国产日本| 午夜精品久久99蜜桃的功能介绍| 孩娇小videos精品| 久久这里只精品最新地址| 亚洲国产精品成人无久久精品 | 亚洲av片一区二区三区| 色综合久久天天综线观看| 亚洲免费看片| 色噜噜色狠狠狠狠狠综合色一| 99国内精品| 日本人添下边视频免费| 尤物在线观看一区| 国产免费福利视频| 大胆欧美人体视频| av一级久久| 日本高清xxxx| 国产一区二区三区蝌蚪| 亚洲综合久久av一区二区三区| 欧美亚洲日本国产| av在线收看| 国产精品入口尤物| 成人免费电影网址| 最新中文字幕免费视频| 国产清纯白嫩初高生在线观看91 | 国产91精品精华液一区二区三区 | 妖精视频成人观看www| 成年人小视频在线观看| 亚洲国产三级在线| 欧美一级片免费| 欧美亚洲第一页| 精品国产乱码久久久久久1区2匹 | 国产美女精品在线| 1024手机在线视频| 亚洲精品一线二线三线| 美女av在线免费看| 欧美日韩一区在线视频| 青青草成人在线观看| 女教师淫辱の教室蜜臀av软件| 欧美精品一卡两卡| 1769免费视频在线观看| caoporn国产精品免费公开| 国产精品www994| 午夜视频在线观看国产| 色哟哟亚洲精品| 99免在线观看免费视频高清| 91色中文字幕| 在线日本成人| www在线观看免费视频| 欧美日韩在线亚洲一区蜜芽| 拍真实国产伦偷精品| 97伦理在线四区| 麻豆成人在线| 最新av电影网站| 欧美成人r级一区二区三区| 日韩伦理在线| 亚洲欧洲精品在线| 国产精品18久久久久| 自拍偷拍欧美亚洲| 最近2019年好看中文字幕视频| 人人爱人人干婷婷丁香亚洲| 人人干视频在线| 欧美韩国日本综合| 精品毛片在线观看| 日韩免费观看视频| 亚洲成人最新网站| 亚洲一区二区三区四区五区六区| 欧美网站一区二区| 免费不卡av| 午夜精品区一区二区三| 国产+成+人+亚洲欧洲自线| 视频一区二区三区四区五区| www.日韩视频| 亚洲国产最新| 国产毛片久久久久久| 日韩欧美高清视频| 尤物视频在线看| 亚洲成色最大综合在线| 国产成人av电影免费在线观看| 无码人妻精品一区二区三区9厂| 欧美精品在线视频观看| 久久av中文| 黄色录像a级片|