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

解Bug之路-TCP使用不當引起的Bug

網絡 通信技術
筆者很熱衷于解決Bug,同時比較擅長(網絡/協議)部分,所以經常被喚去解決一些網絡IO方面的Bug。現在就挑一個案例出來,寫出分析思路,以饗讀者,希望讀者在以后的工作中能夠少踩點坑。

[[347677]]

 前言

筆者很熱衷于解決Bug,同時比較擅長(網絡/協議)部分,所以經常被喚去解決一些網絡IO方面的Bug。現在就挑一個案例出來,寫出分析思路,以饗讀者,希望讀者在以后的工作中能夠少踩點坑。

關于TCP流

TCP是流的概念,解釋如下

  • TCP窗口的大小取決于當前的網絡狀況、對端的緩沖大小等等因素,
  • TCP將這些都從底層屏蔽。開發者無法從應用層獲取這些信息。
  • 這就意味著,當你在接收TCP數據流的時候無法知道當前接收了
  • 有多少數據流,數據可能在任意一個比特位(seq)上。

Bug現場

出Bug的系統是做與外部系統進行對接之用。這兩者并不通過http協議進行交互,而是在通過TCP協議之上封裝一層自己的報文進行通訊。如下圖示:

通過監控還發現,此系統的業務量出現了不正常的飆升,大概有4倍的增長。而且在監控看來,這些業務還是成功的。

第一反應,當然是祭出重啟大法,第一時間重啟了機器。此后一切正常,交易量也回歸正常,仿佛剛才的Bug從來沒有發生過。在此之前,此系統已經穩定運行了好幾個月,從來沒出現過錯誤。

但是,這事不能就這么過去了,下次又出這種Bug怎么辦,繼續重啟么?由于筆者對分析這種網絡協議比較在行,于是Bug就拋到了筆者這。

錯誤日志

線上系統用的框架為Mina,不停的Dump出其一堆以16進制表示的二進制字節流。

,并拋出異常

首先定位異常拋出點

以下代碼僅為筆者描述Bug之用,和當時代碼有較大差別。

  1. private boolean handeMessage(IoBuffer in,ProtocolDecoderOutput out){ 
  2.  int lenDes = 4; 
  3.  byte[] data = new byte[lenDes]; 
  4.  in.mark(); 
  5.  in.get(data,0,lenDes); 
  6.  int messageLen = decodeLength(data); 
  7.  if(in.remaining() < messageLen){ 
  8.   logger.warn("未接收完畢"); 
  9.   in.reset(); 
  10.   return false
  11.  }else
  12.   ...... 
  13.  } 
  14.   

筆者本身經常寫這種拆包代碼,第一眼就發現有問題。讓我們再看一眼報文結構:

上面的代碼首先從報文前4個字節中獲取到報文長度,同時檢測在buffer中的存留數據是否夠報文長度。

  1. if(in.remaining() < messageLen) 

為何沒有在一開始檢測buffer中是否有足夠的4byte字節呢。此處有蹊蹺。直覺上就覺的是這導致了后來的種種現象。

事實上,在筆者解決各種Bug的過程中,經常通過猜想等手段定位出Bug的原因。但是從現場取證,通過證據去解釋發生的現象,通過演繹去說服同事,并對同事提出的種種問題做出合理的解釋才是最困難的。

猜想總歸是猜想,必須要有實錘,沒有證據也說服不了自己。

為何會拋出異常

這個異常由這句代碼拋出:

  1. int messageLen = decodeLength(data); 

從上面的Mina框架Dump出的數據來看,是解析前四個字節出了問題,前4個字節為30,31,2E,01(16進制)

最前面的包長度是通過字符串來表示的,翻譯成十進制就是48、49、46、1,再翻譯為字符串就是('0','1', 非數字, 非數字)

  1. 30, 31,    2E,   01  (16進制) 
  2. 48, 49,    46,   1   (10進制) 
  3. '0','1',非數字, 非數字 (字符串) 

很明顯,解析字符串的時候遇到前兩個byte,0和1可以解析出來,但是遇到后面兩個byte就報錯了。至于為什么是For input String,'01',而不是2E,是由于傳輸用的是小端序。

為何報文會出現非數字的字符串

鑒于上面的錯誤代碼,筆者立馬意識到,應該是TCP流處理不當了。這時候就應該去找發生Bug的最初時間點的日志,去分析為何那個時間會gg。

由于最初那個錯誤日志Dump數來的數據過于長,在此就不貼出來了,以下示意圖是筆者當時人肉decode的結果:

拋出的異常為:

這個異常拋出點恰恰就在筆者懷疑的

  1. in.get(data,0,lenDes); 

這里。至此,筆者就幾乎已經確定是這個Bug導致的。

演繹

Mina框架在Buffer中解幀,前5幀正常。但是到第六幀的時候,只有兩個字節,無法組成報文的4byte長度頭,而代碼沒有針對此種情況做處理,于是報錯。為何會出現這種情況:

  • TCP窗口的大小取決于當前的網絡狀況、對端的緩沖大小等等因素,
  • TCP將這些都從底層屏蔽。開發者無法從應用層獲取這些信息。
  • 這就意味著,當你在接收TCP數據流的時候無法知道當前接收了
  • 有多少數據流,數據可能在任意一個比特位(seq)上。

第六幀的頭兩個字節是30,32正好和后面dump出來的30 31 2e 01中的30、31組成報文長度

  • 30,32,30,31 (16進制)
  • 48,50,48,49 (10進制)
  • 0, 2, 0, 1 (字符串)
  • 2, 0, 1, 0 (整理成大端序)

這四個字節組合起來才是正常的報文頭,再經過運算得到整個Body的長度。

第一次Mina解析的時候,后面的兩個30,31尚未放到buffer中,于是出錯:

  1. public ByteBuffer get(byte[] dst, int offset, int length) { 
  2.     checkBounds(offset, length, dst.length); 
  3.     // 此處拋出異常 
  4.     if (length > remaining()) 
  5.         throw new BufferUnderflowException(); 
  6.     int end = offset + length; 
  7.     for (int i = offset; i < end; i++) 
  8.         dst[i] = get(); 
  9.     return this; 

為何流量會飆升

解釋這個問題前,我們先看一段Mina源碼:

  1. // if there is any data left that cannot be decoded, we store 
  2.         // it in a buffer in the session and next time this decoder is 
  3.         // invoked the session buffer gets appended to 
  4.         if (buf.hasRemaining()) { 
  5.             if (usingSessionBuffer && buf.isAutoExpand()) { 
  6.                 buf.compact(); 
  7.             } else { 
  8.                 storeRemainingInSession(buf, session); 
  9.             } 
  10.         } else { 
  11.             if (usingSessionBuffer) { 
  12.                 removeSessionBuffer(session); 
  13.             } 
  14.         } 

Mina框架為了解決這種問題,會將這種尚未接收完全的包放到sessionBuffer里面,待解析完畢后把這份Buffer刪除。

如果代碼正確,對報文頭做了校驗,那么前5個報文的buffer將經由這幾句代碼刪除,只留下最后兩個沒有被decode的兩字節。

  1. if (usingSessionBuffer && buf.isAutoExpand()) { 
  2.     buf.compact(); 
  3. else { 
  4.     storeRemainingInSession(buf, session); 

但是,由于decode的時候拋出了異常,沒有走到這段邏輯,所以前5個包還留在sessionBuffer中,下一次解包的時候,又會把這5個包給解析出來,發送給后面的系統。

這也很好的解釋了為什么業務量激增,因為系統不停的發相同的5幀給后面系統,導致監控認為業務量飆升。后查詢另一個系統的日志,發現一直同樣的5個序列號坐實了這個猜想。

完結了么?

NO,整個演繹還有第二段日志的推演

就是系統后來不停dump出的日志,再貼一次:

這個buffer應該是Mina繼續接收外部系統的數據到buffer中導致,

Mina框架不停的接收數據,直到buffer區滿,然后整個框架不停的解析出前5幀,到第6幀的時候,出錯,然后dump出其尚未被解幀的數據。這就是第二段日志。

最后的高潮

到現在推理似乎很完美了,但是我突然覺得不對(另一位同事也提出了相同的疑問):

如果說Mina接收到新的數據放到buffer中的話,第6幀的前兩個字節和后來發過來的若干字節不是又拼成了完整的一幀了么,那么后來為什么會一直出錯了呢。如下圖所示:

丟失的兩字節

按照前面的推理,幀6的前兩個字節30、32肯定是丟了,那么怎么丟的呢?推理又陷入了困境,怎么辦?日志已經幫不了筆者了,畢竟日志的表現都已解釋清楚。翻源碼吧:

Bug的源頭:

如果有問題,肯定出在將數據放在Buffer中的環節,于是筆者找到了這段代碼:

  1. if (appended) { 
  2.     buf.flip(); 
  3. else { 
  4.     // Reallocate the buffer if append operation failed due to 
  5.     // derivation or disabled auto-expansion. 
  6.     buf.flip(); 
  7.     ...... 

問題出在buf.flip()上面,這段代碼最后調用的代碼是Java的Nio的Buffer的flip,代碼如下:

  1. public final Buffer flip() { 
  2.   // 下面這一句導致了最終的Bug現象 
  3.     limit = position; 
  4.     position = 0; 
  5.     mark = -1; 
  6.     return this; 

為什么呢?首先我們需要了解一下Nio Buffer的一些特點:

同時當Mina框架將數據(數據本身也是一個buffer)放到sessionBuffer的時候,也是將position到limit的數據放到新buffer中,

下面我們演繹一下第一次拋異常時候的flip前和flip后:

這樣就清楚了,在buf.flip()后,由于limit變成了原position的位置,這樣最后的兩個字節30,32就被無情的丟棄了。這樣整個sessionBuffer就變成:

為什么position在flip前沒有指向limit的位置,是由于在每次讀取前有一個checkBound的動作,在檢查buffer數據不夠后,不會推進position的位置,直接拋出異常:

  1. static void checkBounds(int offint len, int size) { // package-private 
  2.     if ((off | len | (off + len) | (size - (off + len))) < 0) 
  3.         throw new IndexOutOfBoundsException(); 
  4. 這樣所有的都 

這樣所有的都說的通了,也完美了解釋了所有的現象。

正確代碼

  1. private boolean handeMessage(IoBuffer in,ProtocolDecoderOutput out){ 
  2.  int lenDes = 4; 
  3.  byte[] data = new byte[lenDes]; 
  4.  in.mark(); 
  5.     // 前4字節校驗代碼 
  6.  if(in.remaining() < lenDes){ 
  7.   // 由于未消費字節,無需reset 
  8.   return false
  9.  } 
  10.  in.get(data,0,lenDes); 
  11.  int messageLen = decodeLength(data); 
  12.  if(in.remaining() < messageLen){ 
  13.   logger.warn("未接收完畢"); 
  14.   in.reset(); 
  15.   return false
  16.  }else
  17.   ...... 
  18.  } 
  19.   

為什么線上一直穩定

隨著網絡不斷發展的今天,一些短小的幀很難出現中間斷開的現象。而在一個好幾百字節的包中,前4個字節正好出錯的概率那更是微乎其微。這樣就導致Bug難復現,很難抓住。即使猜到是這里,也沒有足夠的證據來證明。

總結

Mina/Netty等各種網絡框架給我們處理TCP流問題提供了非常好的解決方案。但是我們寫代碼的時候也不能掉以輕心,必須時刻以當前可能讀不夠字節的心態去讀取buffer中的數據,不然就可能遭重。

在此感謝給力的各位同事們,是你們的各種反駁讓我能夠找到最終的源頭,也讓我對網絡框架有了更加深刻的理解。

本文轉載自微信公眾號「解Bug之路」,可以通過以下二維碼關注。轉載本文請聯系解Bug之路公眾號。

 

責任編輯:武曉燕 來源: 解Bug之路
相關推薦

2021-09-11 19:00:54

Intro元素MemoryCache

2021-05-20 10:02:50

系統Redis技巧

2019-10-10 15:40:17

redisbug數據庫

2021-06-10 06:59:34

Redis應用API

2009-12-17 14:53:52

VS2008程序

2021-08-26 14:26:25

Java代碼集合

2024-02-04 08:26:38

線程池參數內存

2025-07-28 06:38:07

2025-07-16 07:20:00

開發代碼并發

2024-06-28 10:01:04

2021-07-11 09:34:45

ArrayListLinkedList

2022-10-25 18:00:00

Redis事務生產事故

2022-06-21 11:24:05

多線程運維

2011-08-18 13:49:32

筆記本技巧

2021-09-08 23:07:41

緩存java內存

2020-02-06 11:30:08

代碼JavaScript&&

2024-09-05 08:07:55

2020-07-09 10:15:55

空值Bug語言

2021-05-31 10:08:44

工具腳本主機

2013-11-07 10:24:31

Windows 8.1Bug
點贊
收藏

51CTO技術棧公眾號

亚洲精品成a人在线观看| 美女毛片在线观看| 日本天堂网在线| 色狠狠一区二区三区| 欧美三级在线| 在线视频欧美精品| 国产一区二区不卡视频| 日本美女bbw| 国模套图日韩精品一区二区| 成人国产一区二区三区精品| 久久国产精彩视频| 91看片在线免费观看| 日韩欧美亚洲系列| 97久久综合精品久久久综合| 最新热久久免费视频| 国产精品久久久久久久午夜 | 在线观看国产精品一区| 久久99亚洲网美利坚合众国| 国产在线精品不卡| 精品国产网站地址| 在线观看日本一区二区| 成人激情电影在线看| 久热综合在线亚洲精品| 亚洲美女av黄| 亚洲乱码国产一区三区| 免费看男男www网站入口在线| 一区二区国产精品| 亚洲精品久久久久久久久久久久 | 国产成人精品一区二三区在线观看| 成人黄色国产精品网站大全在线免费观看 | 乱人伦精品视频在线观看| 精品卡一卡二卡三卡四在线| 精品久久久久久无码中文野结衣| 精品美女www爽爽爽视频| 伊人免费在线观看高清版| 久草资源在线视频| 人人精品亚洲| 在线中文字幕一区| 久久成人福利视频| 最近中文字幕免费mv2018在线| 久草这里只有精品视频| 久久夜色精品亚洲噜噜国产mv| 久久久久久久久久久久久久久国产| 日本在线www| 国产一区二区视频在线播放| 国产精品久久久久久久久久久新郎| 国产破处视频在线观看| 精品国产第一国产综合精品| 一区二区三区四区精品在线视频| 成人综合色站| 成年人免费高清视频| 国产精品一区高清| 88在线观看91蜜桃国自产| a天堂资源在线观看| 亚洲欧美日本在线观看| 日韩精品电影在线观看| 中文综合在线观看| 韩国av中国字幕| 欧美成人精品一区二区男人小说| 中文字幕+乱码+中文字幕一区| 成人做爰www免费看视频网站| 国产精品成人久久| 欧美一区二区麻豆红桃视频| 69p69国产精品| 无尽裸体动漫2d在线观看| 国产亚av手机在线观看| 国产女人18毛片水真多成人如厕 | 久久久久999| 精品伦一区二区三区| 日本在线啊啊| 中文字幕日本乱码精品影院| 亚洲一区二区精品在线观看| 女人18毛片水真多18精品| 日本欧美一区二区| 欧美国产日韩一区二区| 蜜桃久久精品成人无码av| 欧美视频二区欧美影视| 日韩网站在线看片你懂的| 日韩一级免费在线观看| 第四色日韩影片| 亚洲成人免费视频| 亚洲天堂av免费在线观看| 男人天堂网在线视频| 99精品久久久久久| 91免费国产视频| 性猛交xxxx乱大交孕妇印度| av激情亚洲男人天堂| 成人午夜高潮视频| 无码视频在线观看| 亚洲三级毛片| 欧美国产精品va在线观看| 国产一级特黄毛片| 蜜桃伊人久久| 91精品综合视频| 免费观看a视频| 国产日产欧美一区二区三区| 久久爱av电影| 日本人妻丰满熟妇久久久久久| 91美女在线视频| 国内外成人免费视频| 国产理论电影在线观看| 91蜜桃免费观看视频| 在线成人性视频| 在线a人片免费观看视频| 亚洲欧美另类在线| 少妇特黄a一区二区三区| 日本高清中文字幕二区在线| 中文文精品字幕一区二区| 大西瓜av在线| 日韩毛片免费看| 日韩成人在线观看| 久久久久久久无码| 日韩第一区第二区| 日韩一区二区三区四区| 欧美做受xxxxxⅹ性视频| 伊人成综合网伊人222| 精品无人区太爽高潮在线播放 | www.好吊色| 国产日产精品一区| 欧美一级视频免费看| 九色91在线| 欧美日本一区二区在线观看| 中文字幕中文在线| 久久91麻豆精品一区| 亚洲区在线播放| 久久精品成人av| 激情久久久久久久| 2023亚洲男人天堂| 69亚洲精品久久久蜜桃小说 | 亚洲精品在线二区| 91精品国产综合久久久久久丝袜| 精品国产免费无码久久久| 国产日本一区二区| 久久久999视频| 桃子视频成人app| 欧美色涩在线第一页| 久久久久久久久久久久久久久国产| 蜜桃一区二区三区| 性色av一区二区三区在线观看| 狠狠人妻久久久久久| 蜜芽一区二区三区| 7777精品久久久大香线蕉小说| 激情综合闲人网| 亚洲色图20p| 久久久久久www| 伊人精品久久| 亚洲色图18p| 日韩不卡在线播放| 91在线码无精品| 国产一级爱c视频| 给我免费播放日韩视频| 亚洲色图欧美制服丝袜另类第一页| 国产精品23p| 99精品在线免费| 六月丁香激情网| 涩涩涩久久久成人精品| 伊人久久大香线蕉av一区二区| 亚洲不卡在线播放| 国产欧美精品久久| 国产在线高清精品| 亚洲av电影一区| 欧美性xxxx在线播放| 污污的网站免费| 国产精品毛片一区二区在线看| 欧美激情精品久久久| 精品人妻一区二区三区麻豆91| 亚洲欧美日韩在线播放| 日韩成人av免费| 欧美日韩18| 国产一级精品aaaaa看| 九色porny丨入口在线| 亚洲欧美中文字幕| 中文字幕一区二区三区四区免费看 | 欧美aaaaaa午夜精品| 在线观看成人一级片| 欧美午夜在线播放| 97av在线影院| 国产又粗又猛又爽| 久久嫩草精品久久久久| 屁屁影院ccyy国产第一页| 99re91这里只有精品| 51午夜精品视频| 成全电影播放在线观看国语| 7777女厕盗摄久久久| 五月天综合在线| 国产精品羞羞答答xxdd| 亚洲视频电影| 日韩高清二区| 国产91露脸中文字幕在线| 风流少妇一区二区三区91| 中文字幕亚洲欧美在线不卡| 777米奇影视第四色| 国产图片一区| 国产精品久久久久999| 91国内在线| 亚洲精品丝袜日韩| 国产ts人妖调教重口男| 中文字幕一区av| 亚洲午夜久久久久久久久| 中文乱码免费一区二区三区下载| 国产精品久久久久久超碰| 菠萝蜜视频国产在线播放| 欧美日韩另类国产亚洲欧美一级| 欧美日韩亚洲国产另类| 黄页网站大全一区二区| 在线精品日韩| 亚洲三级性片| 99视频日韩| 国产蜜臀在线| 中文日韩在线视频| 香港三日本三级少妇66| 3751色影院一区二区三区| 日本一区二区免费电影| 亚洲精品视频在线| 男人的天堂官网| av一二三不卡影片| 三级黄色片免费看| 亚洲网站在线| 国产一区二区三区色淫影院| 日韩成人综合网站| 国产91色在线播放| 草草在线视频| 亚洲欧美一区二区三区四区 | 在线观看国产精品淫| 秋霞欧美在线观看| 欧美一区二区日韩| 男女免费视频网站| 国产精品另类一区| 人妻体体内射精一区二区| 欧美日韩国产高清| 亚洲午夜精品福利| 精品精品99| 成人免费网站在线观看| 国产精品专区免费| 欧美亚洲国产日本| av在线资源| 中文字幕av一区二区| 免费观看成年在线视频网站| 亚洲精品一区二区三区蜜桃下载 | 欧美视频中文字幕| 天天操夜夜操av| 国产精品一区二区男女羞羞无遮挡| 五月婷婷激情久久| 视频一区二区中文字幕| 少妇高清精品毛片在线视频 | 日本毛片在线观看| 亚洲福利在线看| 伊人久久久久久久久久久久 | www国产无套内射com| 欧美男男freegayvideosroom| 91久久极品少妇xxxxⅹ软件| 精品一区二区三区视频在线播放| 成人免费高清完整版在线观看| 欧美激情福利| 97人人模人人爽人人喊中文字| 91麻豆一二三四在线| 九九精品视频在线观看| 黄色在线小视频| 亚洲伦理中文字幕| 国产永久免费高清在线观看视频| 亚洲人午夜色婷婷| av大全在线免费看| 亚洲成人黄色在线观看| 蜜桃久久一区二区三区| 亚洲精品国产精品久久清纯直播| 五月婷在线视频| 亚洲人成欧美中文字幕| 毛片在线看网站| 日韩精品在线视频美女| 久草在线青青草| 中文字幕日韩在线播放| 国产激情小视频在线| 欧美激情一区二区久久久| av在线播放网站| www.亚洲天堂| 久久香蕉一区| 青青青国产精品一区二区| 羞羞的视频在线看| 深夜福利一区二区| 视频在线观看你懂的| 精品日韩成人av| 亚洲av成人无码久久精品老人 | 婷婷丁香综合网| 亚洲精品美腿丝袜| 国产www在线| 欧美丰满少妇xxxxx高潮对白| 久久精品视频5| 欧美日韩国产经典色站一区二区三区| 国产www免费观看| 精品中文视频在线| 国产激情在线观看| 欧美在线www| 久久国际精品| 欧美日韩系列| 九九视频免费观看视频精品 | 久久国产福利| 久久久久久综合网| 久久综合久色欧美综合狠狠| 一区二区三区影视| 色综合久久久网| 加勒比海盗1在线观看免费国语版| 九九九免费视频| 亚洲一区二区偷拍精品| 国产精品三区在线观看| 国产精品久久久久7777按摩| 国产在线视频二区| 欧美日韩一二区| 香蕉久久一区二区三区| 精品国产一区二区三区久久久狼| 涩涩视频在线播放| 91久久爱成人| 久久伦理在线| 久久精品国产精品亚洲精品色| 一本色道久久综合亚洲精品不| av在线免费看片| 国产欧美精品在线观看| 91国产丝袜播放在线| 欧美日韩亚洲丝袜制服| 欧美精品a∨在线观看不卡| 欧美激情亚洲一区| 粉嫩一区二区三区在线观看| av成人在线电影| 日韩在线视频精品| 免费观看亚洲视频| 美腿丝袜亚洲一区| 三级网站在线免费观看| 亚洲大型综合色站| 性中国古装videossex| 亚洲二区在线播放视频| 国产在线激情| 97在线观看视频| 国产一区二区三区亚洲综合 | 91精品一区二区三区综合在线爱| 亚洲欧洲一区二区在线观看| 68国产成人综合久久精品| 狠狠热免费视频| 国产一区二区在线观看免费| 国产黄色录像视频| 欧美亚洲国产一卡| 国产人成在线观看| 日本一区二区三区在线播放 | 一区二区三区四区视频在线观看| 老司机午夜精品视频| 18禁裸乳无遮挡啪啪无码免费| 中文字幕乱码久久午夜不卡| 亚洲av中文无码乱人伦在线视色| 亚洲精品国产精品乱码不99按摩| 擼擼色在线看观看免费| 精品亚洲欧美日韩| 色狮一区二区三区四区视频| 亚洲一二三区av| 国产性色一区二区| 国产黄色免费视频| 亚洲天堂av网| www.久久| 国产欧美一区二区在线播放| 激情欧美一区二区三区| 美女露出粉嫩尿囗让男人桶| 亚洲成av人片www| 91久久精品无码一区二区| 亚洲国产成人久久综合一区| 不卡专区在线| 欧美亚洲一级二级| 日韩在线理论| 欧洲在线免费视频| 久久久精品日韩欧美| 精品爆乳一区二区三区无码av| 精品国产乱码久久久久久久| 欧美日韩在线观看首页| 欧美xxxx黑人又粗又长密月 | 成年人午夜免费视频| 91在线精品一区二区三区| www五月天com| 久久精品福利视频| 国产福利一区二区精品秒拍| 干日本少妇首页| 国产精品毛片久久久久久久| 精品国产免费无码久久久| 亚洲国产精品影院| 国产又黄又猛又粗| 国产精品青草久久| 亚洲第一天堂在线观看| 91爱视频在线| 久久亚洲精品中文字幕蜜潮电影| 久久久久中文字幕亚洲精品| 欧美性生交大片免费| 欧美被日视频| 国产精品一区二区不卡视频| 色喇叭免费久久综合网| 国产人妻精品午夜福利免费| 日韩欧美亚洲一二三区| 麻豆av在线导航| 精品免费一区二区三区蜜桃| 麻豆91精品视频| 国产性猛交xx乱| 精品福利一二区| 日本久久久久| 337p粉嫩大胆噜噜噜鲁| 中文字幕视频一区| 理论在线观看|