国产成人欧美一区二区三区vr_久久国产精品人人爽人人爽_国产精品永久免费播放_肉欲啪啪a∨无码精品一区二区_国产超短裙jk丝袜在线_亚洲AV片高清资源在线观看_国模无码一区二区三区久久_国产成年人未进视频_中文字幕无码精品夜_一区二区三区在线视频免费看_亚洲成AV人片在线观看网址_日本激情视频高清综合久久_亚洲午夜视频福利_国内大量揄拍人妻精品視_久久国产精品福利二区三区

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

Linux Socket編程:從底層通信原理到常見錯誤排查

Linux Socket編程:從底層通信原理到常見錯誤排查 我們直接聊Socket編程但聊的是寫第一行代碼之前你必須先搞明白的那些底層的、通信層面的東西。很多教程一上來就甩給你socket()、bind()、listen()的函數(shù)簽名然后讓你抄一個 echo server跑通了就以為會了。但一旦遇到高并發(fā)、連接超時、端口被占這類現(xiàn)實問題很多人就懵了原因就在于對“Socket到底是什么”、“建立連接的過程究竟發(fā)生了什么”這些預備知識沒有建立起像樣的框架。這篇文章不是函數(shù)手冊而是幫你把操作系統(tǒng)的網(wǎng)絡通信模型在心中補全。我會把Linux下Socket編程從硬件網(wǎng)卡到應用層的一整條鏈路拆開講清楚三次握手和accept()返回的關系、connect()為什么會被阻塞、bind()沖突是怎么產(chǎn)生的以及那堆熱詞里提到的常見報錯——比如bind: only one usage of each socket address、create socket connection failure——到底是在哪個環(huán)節(jié)出了什么問題。適合所有剛?cè)腴TLinux網(wǎng)絡編程的開發(fā)者也適合那些擼過不少代碼但總是被詭異問題卡住的人把這篇文章當一張排查地圖用。1. 整體設計與核心思路從一次HTTP請求反推通信全程以一次最常見的訪問網(wǎng)頁舉例。你在瀏覽器輸入地址回車頁面出來。這一過程里瀏覽器客戶端和Web服務器服務端之間發(fā)生了些什么每一步背后操作系統(tǒng)都做了什么數(shù)據(jù)從你的電腦發(fā)出到被服務器接收中間要經(jīng)歷應用層構造請求報文 - 通過Socket接口送進內(nèi)核 - 傳輸層加TCP/UDP頭 - 網(wǎng)絡層加IP頭并路由 - 鏈路層封裝成幀通過網(wǎng)卡發(fā)出。同樣接收端從網(wǎng)卡收包后要逆序拆掉封裝、找到對應的Socket、最終把數(shù)據(jù)交到應用緩沖區(qū)。這個過程里最容易被人忽略的關鍵點是應用進程自己無法直接控制數(shù)據(jù)包該發(fā)到哪張網(wǎng)卡、怎么拆分重傳、如何保證順序——這些全由內(nèi)核的網(wǎng)絡協(xié)議棧完成。程序員做的只是通過Socket這個“門衛(wèi)”把數(shù)據(jù)和元信息目標IP、目標端口交給內(nèi)核然后等待結(jié)果。所以我建議每個打算深入Socket編程的人先養(yǎng)成一個習慣把“連接”不理解為一條物理存在的隧道而是理解為通信雙方在內(nèi)核中建立的一組狀態(tài)。TCP沒有實體線路所謂連接就是兩端各維護一個TCB傳輸控制塊記錄著序號、確認號、窗口大小、擁塞狀態(tài)。理解了這一點后續(xù)理解超時重傳、半關閉、大量TIME_WAIT狀態(tài)都會輕松很多。1.1 Socket在通信模型中的定位應用與內(nèi)核之間的“文件接口”Socket在國內(nèi)教材里常被翻譯為“套接字”這個翻譯不算錯但容易讓人忽略它的本質(zhì)Socket首先是一種文件描述符。在Linux里萬物皆文件網(wǎng)絡連接也被抽象成了一個文件。你open()一個磁盤文件得到一個fd你socket()創(chuàng)建一個網(wǎng)絡端點也得到一個fd。后續(xù)的read()/write()/close()這些操作對一個普通文件和Socket文件幾乎是一模一樣的。這就引出了一個關鍵的設計思想Socket層是應用層與傳輸層之間的一層抽象接口它隱藏了IP地址、端口、協(xié)議棧處理等一系列細節(jié)。你只需要告訴內(nèi)核三件事協(xié)議族IPv4還是IPv6、類型流式還是數(shù)據(jù)報、具體協(xié)議TCP還是UDP通常傳0表示默認內(nèi)核就給你返回一個整數(shù)fd。之后你要連接或者監(jiān)聽都通過這個整數(shù)操作。從內(nèi)核實現(xiàn)看每個Socket在內(nèi)核中對應一個struct socket和更底層的struct sock里面有發(fā)送緩沖區(qū)、接收緩沖區(qū)、等待隊列等。用文件描述符來指代Socket有一個絕妙的好處程序員不需要學習一套全新的I/O API而是可以復用select()、poll()、epoll()這些成熟的事件驅(qū)動機制也可以和fork()配合實現(xiàn)經(jīng)典的多進程并發(fā)服務器。我見過很多人初學Socket時總是想問“TCP連接和文件句柄有什么關系”關系就是——在Linux內(nèi)核眼里它們都是可讀可寫的I/O對象沒有本質(zhì)區(qū)別。1.2 定位四元組與端口為什么bind()沖突如此常見給應用和連接建模時必須先搞清楚“一條TCP連接到底由什么唯一確定”。教科書答案是四元組(源IP, 源端口, 目的IP, 目的端口)。這個定義決定了你服務器能支持多少并發(fā)連接——它遠不限于65535因為連接是靠四元組區(qū)分的不是僅僅靠服務端端口。兩臺不同客戶端機器分別連到你服務器的80端口它們的源IP不同就屬于兩條完全不同的連接。理解了四元組很多疑難雜癥就能解釋。比如熱詞里那條error: listen tcp 127.0.0.1:11434: bind: only one usage of each socket address——這是你程序調(diào)用bind()時指定的IP和端口組合已經(jīng)被另一個Socket占用了。可能是上次程序退出后連接沒釋放干凈也可能是另一個進程真的在監(jiān)聽。這里要強調(diào)一個初學者特別容易犯的錯誤監(jiān)聽Socket和已連接Socket是兩種不同的fd。服務器監(jiān)聽時創(chuàng)建的fd只負責處理新連接請求每accept()一個客戶端內(nèi)核會創(chuàng)造出一個新的fd這個新fd才是和具體客戶端通信用的。老的監(jiān)聽fd始終守在那里等待下一個連接。所以千萬別一邊監(jiān)聽一邊拿著監(jiān)聽fd去read()數(shù)據(jù)那是搞錯了對象。端口沖突也常常因為這個混淆而出現(xiàn)——有的人以為監(jiān)聽Socket關了但連接Socket還在TIME_WAIT狀態(tài)占著那個端口。抓包或者ss -ant看連接狀態(tài)是最直接的排查手段而不是靠猜。2. 核心預備知識TCP三次握手與Socket API的映射關系開始寫代碼前最有價值的事是把TCP狀態(tài)機和API調(diào)用對應起來。書上說三次握手是SYN、SYN-ACK、ACK三趟看起來很抽象但其實每一次握手都對應到你代碼里一個函數(shù)調(diào)用的返回甚至對應到阻塞的解除。搞懂這個映射你去排查超時、半開連接、隊列溢出時就會非常有感覺。2.1 connect()、accept() 與握手過程的逐幀對應標準握手的流程是客戶端先發(fā)SYN包服務端收到后返回SYN-ACK客戶端再回復ACK然后雙方進入ESTABLISHED狀態(tài)。那么這幾步對應到函數(shù)調(diào)用上具體是怎樣的客戶端的connect(fd, addr, len)一旦發(fā)起內(nèi)核立刻把SYN包發(fā)出去然后客戶端進入SYN_SENT狀態(tài)。此時connect()不會立刻返回——它要等什么等第二個報文也就是服務端的SYN-ACK。收到后客戶端內(nèi)核發(fā)送ACK第三次握手然后connect()才返回成功。也就是說connect()返回成功的那一刻三次握手已經(jīng)完成了你的代碼可以馬上開始發(fā)送數(shù)據(jù)。服務端這邊有點繞。listen(fd, backlog)調(diào)用后內(nèi)核會維護兩個隊列半連接隊列SYN隊列存還未完成握手的連接和全連接隊列accept隊列存已經(jīng)完成握手、等待應用取走的連接。第三個ACK到達服務端內(nèi)核時連接從半連接隊列移動到全連接隊列。注意此刻accept()可能還沒被調(diào)用accept()只是從全連接隊列里取一個已完成的連接如果隊列為空accept()會阻塞默認阻塞模式下。這個映射關系特別重要由此你能推導出很多結(jié)論第一握手成功不代表應用層及時處理了連接中間隔著內(nèi)核隊列第二如果客戶端認為連接已經(jīng)建立并瘋狂發(fā)數(shù)據(jù)但服務端遲遲不accept()內(nèi)核緩沖區(qū)會逐漸積壓數(shù)據(jù)最終客戶端可能阻塞在發(fā)送上第三listen()的backlog參數(shù)決定全連接隊列的長度設得太小在高并發(fā)下會出現(xiàn)丟連接的現(xiàn)象但設得太大也可能掩蓋應用層處理能力不足的問題。2.2 狀態(tài)轉(zhuǎn)換與超時重傳心跳、半開連接與TCP Keep-AliveTCP是可靠傳輸可靠性建立在確認與重傳機制上。數(shù)據(jù)發(fā)出去后如果遲遲收不到ACK發(fā)送方會超時重傳。而且這個超時不是固定值Linux內(nèi)核會根據(jù)RTT往返時間動態(tài)調(diào)整——這就是RTO重傳超時時間。默認初始RTO通常是1秒重傳一次后翻倍呈指數(shù)退避到一定上限后停止。由超時重傳引出的一個常見故障是“半開連接”。比如客戶端拔了網(wǎng)線服務端并不知道因為TCP沒有持續(xù)的心跳報文。除非你發(fā)數(shù)據(jù)發(fā)現(xiàn)收不到ACK否則連接會一直掛在ESTABLISHED狀態(tài)占用著fd和內(nèi)存。生產(chǎn)環(huán)境里很多“連接數(shù)緩慢上漲不下降”的詭異現(xiàn)場都是半開連接干的。解決辦法之一是開啟TCP Keep-Alive。在Socket上設置SO_KEEPALIVE選項后如果連接在2小時內(nèi)沒有數(shù)據(jù)交互內(nèi)核會自動發(fā)探測報文若連續(xù)多次探測無響應就判定連接失效關閉這個fd。2小時這個默認值對多數(shù)應用太長所以實踐中常通過TCP_KEEPIDLE、TCP_KEEPINTVL、TCP_KEEPCNT三個參數(shù)把它縮短到分鐘級。但Keep-Alive只能發(fā)現(xiàn)連接失效不能保證你的應用邏輯是活的。如果你的服務有業(yè)務層心跳比如游戲服務器、長連接推送不要依賴TCP層的Keep-Alive而應該自己在應用層定時發(fā)Ping/Pong報文這樣能同時檢測對端進程是否卡死進程活著但無法及時響應應用邏輯。這兩層心跳的定位完全不同我在實際項目里見過有人以為開了Keep-Alive就萬事大吉結(jié)果業(yè)務線程死鎖了連接卻還顯示正常問題拖了很久才暴露。2.3 緩沖區(qū)語義為什么send()返回后數(shù)據(jù)還沒到對端幾乎所有初學Socket的人都踩過同一個坑調(diào)用send()成功了就以為數(shù)據(jù)已經(jīng)“發(fā)出去”了。實際上send()返回成功只代表數(shù)據(jù)被復制進了內(nèi)核的發(fā)送緩沖區(qū)不代表對端已經(jīng)收到更不代表對端應用已經(jīng)處理。你想象的鏈路是應用 - 網(wǎng)卡 - 對端網(wǎng)卡 - 對端應用。真實鏈路是應用 - 內(nèi)核發(fā)送緩沖區(qū) - 網(wǎng)卡 - 網(wǎng)絡 - 對端內(nèi)核接收緩沖區(qū) - 對端應用調(diào)用read()取走。每一層都有緩沖每一層都可能延后。send()返回的字節(jié)數(shù)是本次寫入內(nèi)核緩沖區(qū)的字節(jié)數(shù)如果緩沖區(qū)暫時滿了send()可能會部分寫入返回小于你要發(fā)的長度也可能會阻塞。最令人意外的場景對端接收窗口為0時你這邊send()照樣可能成功因為數(shù)據(jù)都堆積在本機內(nèi)核緩沖區(qū)里TCP流控機制暫時不發(fā)了而已。所以網(wǎng)絡編程進階第一課就是不要指望一次send()就把整包數(shù)據(jù)發(fā)完、更不要指望對端立刻收到。通常的做法是循環(huán)發(fā)送直到數(shù)據(jù)全部寫入這叫“寫完整包”接收端則需要循環(huán)讀取直到拿到完整的業(yè)務報文這叫“讀完整包”。要完整理解緩沖區(qū)還要知道SO_SNDBUF和SO_RCVBUF這兩個Socket選項它們各自控制內(nèi)核發(fā)送/接收緩沖區(qū)的上限。在高吞吐場景適當調(diào)大接收緩沖區(qū)能提升窗口大小進而提升吞吐但也不能無腦調(diào)大內(nèi)存占用會上升而且TCP的自動窗口調(diào)節(jié)可能因手工設置而被禁用反而適得其反。3. 實操要點與工具準備搭建可復現(xiàn)的實驗環(huán)境光聊理論不行Socket編程必須親手跑。我會用一臺Linux機器虛擬機上裝Ubuntu Server或者直接用WSL都行來做演示。建議不要一開始就在Windows上折騰Winsock雖然API大體類似但很多排查工具和行為細節(jié)不一樣。既然你搜的關鍵詞是Linux那就用Linux的手法來學。本機環(huán)境準備其實非常輕量一個Linux內(nèi)核的shell裝好gcc或者python3也行。在開始之前先看看你的系統(tǒng)是否支持需要的工具sssocket statistics用來查連接狀態(tài)tcpdump用來抓包ncnetcat用來快速模擬服務端或客戶端。如果缺用包管理器裝一下# Ubuntu / Debian sudo apt update sudo apt install -y net-tools tcpdump netcat-openbsd gcc # CentOS / RHEL / Fedora sudo yum install -y net-tools tcpdump nc gcc裝這些工具的目的不是裝飾而是給你一雙“透視眼”。后面排查任何問題第一反應都應該是用工具觀察現(xiàn)象而不是盯著代碼干瞪眼。3.1 用Python演示一個最簡TCP服務端從能跑到能排查這里我用Python演示而不一開始就用C是因為它可以讓我把注意力放在網(wǎng)絡行為上而不是被指針和返回值捆綁。代碼極其短幾行就能起一個監(jiān)聽服務import socket server socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind((0.0.0.0, 9999)) server.listen(5) print(listening on 9999) while True: conn, addr server.accept() print(new connection from, addr) data conn.recv(1024) print(received:, data) conn.send(bhello from server\n) conn.close()這段代碼知識點不少我一一解釋。socket.AF_INET是IPv4通信域socket.SOCK_STREAM表示TCP流式Socket。setsockopt(SO_REUSEADDR, 1)的目的是讓服務器在TIME_WAIT狀態(tài)下也能重新綁定端口否則你CtrlC退出后再重啟常常會報“Address already in use”這是新手最常撞到的一堵墻。bind((0.0.0.0, 9999))的0.0.0.0表示監(jiān)聽所有網(wǎng)卡地址如果只想本機訪問可以寫成127.0.0.1但要注意這兩者對外表現(xiàn)差異很大。listen(5)設的backlog就是前面說的全連接隊列長度。運行后在另一個終端用nc 127.0.0.1 9999連接并發(fā)送任意字符串服務端就能打印出來。跑通之后你可以在第三個終端敲ss -ant看連接狀態(tài)。你會看到有一條ESTAB的連接掛在那里如果客戶端還沒退出這比任何文字都直觀。3.2 tcpdump抓包實證親眼看三次握手與四次揮手只看到ESTABLISHED狀態(tài)還不夠建議拿tcpdump抓一次握手全過程。需要兩個終端一個跑tcpdump監(jiān)聽9999端口上的流量一個跑客戶端連接。抓包命令sudo tcpdump -i any port 9999 -n -S-i any監(jiān)聽所有網(wǎng)卡-n不做域名反解-S顯示絕對序號。然后啟動一個連接你會看到類似下面這樣的一串報文1 客戶端 - 服務器 SYN 2 服務器 - 客戶端 SYN, ACK 3 客戶端 - 服務器 ACK 4 客戶端 - 服務器 PSH, ACK (攜帶數(shù)據(jù)) 5 服務器 - 客戶端 ACK 6 客戶端 - 服務器 FIN, ACK 7 服務器 - 客戶端 ACK 8 服務器 - 客戶端 FIN, ACK 9 客戶端 - 服務器 ACK第1到第3就是教科書上的三次握手。第4和第5是數(shù)據(jù)發(fā)送和確認。第6到第9是四次揮手。親手抓到這一串報文之后你對TCP的“連接建立、數(shù)據(jù)傳輸、連接釋放”三階段會產(chǎn)生肌肉記憶以后看到任何狀態(tài)機圖都不會覺得抽象。有一個非常值得注意的細節(jié)如果是主動關閉的一方在發(fā)完最后一個ACK后會進入TIME_WAIT狀態(tài)并且要停留2MSL最大報文段生存時間通常60秒左右。抓包時你會發(fā)現(xiàn)第9個報文發(fā)完客戶端并沒有立刻消失而是在本地保留一段時間的連接記錄。這個狀態(tài)存在的意義是防止最后一個ACK丟失導致對端重發(fā)FIN。理解了TIME_WAIT你就能理解為什么高并發(fā)短連接的服務器上會出現(xiàn)大量TIME_WAIT連接堆積以及SO_REUSEADDR為什么能幫助服務端快速重啟或者更好地復用連接資源。3.3 nc、ss、lsof三連招一行命令快速定位“哪個進程占著端口”遇到“Address already in use”時光看報錯信息是不夠的你得找出是哪個進程占著端口。排查手法如下組合使用三個命令基本能解決90%的問題# 1. 查端口監(jiān)聽狀態(tài) ss -tlnp | grep 9999 # 2. 查某個連接的狀態(tài)詳情 ss -ant | grep 9999 # 3. 查進程打開的socket文件 lsof -i :9999ss -tlnp中的-t只看TCP-l只看監(jiān)聽中的Socket-n不做名稱解析-p顯示進程信息需要root。輸出里能看到監(jiān)聽地址、端口、隊列的當前值和最大值比如Send-Q和Recv-Q。對于監(jiān)聽SocketSend-Q顯示的是全連接隊列的最大長度就是backlogRecv-Q顯示的是當前等待被accept()的連接數(shù)。如果Recv-Q持續(xù)不為0說明你的程序accept()速度跟不上新連接到達的速度這是典型的過載信號。lsof則是從進程視角出發(fā)的工具能列出進程打開了哪些Socket文件配合-i過濾端口。它最大的用處是當你只知道端口號、不知道是哪個進程時直接反查。建議把ss -tlnp和lsof -i刻進DNA排查網(wǎng)絡問題時它們就是你的聽診器。4. 阻塞與非阻塞、同步與異步四象限里看懂事件驅(qū)動幾乎所有Socket教程都會遇到“阻塞/非阻塞”和“同步/異步”這兩組詞但很多資料把它們混為一談。實際編碼時這兩組概念交叉形成四個象限搞混了代碼寫不順排查問題也無從下手。先下定義。阻塞/非阻塞描述的是I/O系統(tǒng)調(diào)用accept、read、write和當前線程的關系阻塞時調(diào)用線程會一直在內(nèi)核里等待事件發(fā)生期間什么都干不了非阻塞時調(diào)用立即返回內(nèi)核告訴你“還沒好”然后你過會兒再來問。同步/異步描述的是數(shù)據(jù)拷貝由誰完成、什么時候完成同步I/O中應用自己負責從內(nèi)核緩沖區(qū)把數(shù)據(jù)拷到用戶緩沖區(qū)拷貝過程中線程需要等待異步I/O中你告訴內(nèi)核“把數(shù)據(jù)放好了叫我”內(nèi)核完成全部拷貝后通過信號或回調(diào)通知你。Socket默認是阻塞且同步的。accept()阻塞在那里直到有新連接進來才返回recv()阻塞在那里直到緩沖區(qū)有數(shù)據(jù)可讀且至少返回一個字節(jié)。這種方式邏輯清晰但線程在等待時完全浪費了CPU時間。解決辦法是兩類一類是搞多線程一個線程管一個連接阻塞也沒關系反正每個連接有專門的人伺候另一類是改成非阻塞配合select()/poll()/epoll()實現(xiàn)單線程管理成千上萬個連接也就是常說的Reactor模式。我見過不少新手剛學會epoll就把所有Socket一律設成非阻塞然后發(fā)現(xiàn)代碼突然變得難寫很多每次read()都可能返回EAGAIN每次send()都可能只發(fā)了一部分業(yè)務邏輯被打散成各種狀態(tài)。實際上epoll與阻塞Socket并不沖突你完全可以讓監(jiān)聽Socket保持阻塞每次epoll_wait()返回可讀事件時再調(diào)用accept()——這個函數(shù)不會阻塞太久因為事件通知已經(jīng)告訴你內(nèi)核里至少有一個連接在等待取用。同理只要epoll告訴你可讀你recv()一般也不會長時間阻塞。所以阻塞/非阻塞不是絕對的非黑即白關鍵是搞清楚你的程序在哪里可能被卡住。簡單總結(jié)我個人的踩坑心得如果是寫一個簡單的工具腳本直接用阻塞模型最省事如果是小規(guī)模的并發(fā)服務幾十上百連接多線程阻塞模型依然清晰真到了萬級連接才需要非阻塞加事件驅(qū)動。不要一上來就epoll那是把簡單問題復雜化。4.1 阻塞模型與多進程/多線程經(jīng)典服務端架構的取舍早期Unix網(wǎng)絡服務最經(jīng)典的做法是父進程阻塞在accept()上每來一個連接fork()一個子進程去處理。子進程繼承了已連接Socket的fd處理完就close()退出父進程繼續(xù)監(jiān)聽。這種模型的好處是進程隔離性好一個客戶端搞掛了子進程不會影響其他連接。但進程開銷也大頻繁創(chuàng)建銷毀進程的成本不容忽視。線程模型更輕量一些pthread_create比fork便宜但線程之間共享地址空間一個線程崩潰可能影響整個進程?,F(xiàn)在多數(shù)動態(tài)語言Python、Ruby還有GIL限制多線程網(wǎng)絡服務經(jīng)常被詬病難以利用多核這類場景下常見的選擇反而是多進程或者干脆用異步框架。有一種說法“服務器性能不好是因為線程不夠多”這個觀點值得商榷。線程切換本身就有開銷連接數(shù)一多大量CPU時間花在上下文切換上真正處理業(yè)務的時間反而變少。一個更合理的思路是線程池固定大小比如CPU核數(shù)的兩倍使用非阻塞IO加事件通知讓少量線程服務大量連接。這就是生產(chǎn)級網(wǎng)絡庫的通用做法。4.2 非阻塞加IO多路復用為什么用epoll而不用select非阻塞模型下應用怎么知道哪個fd可讀了select()是最早的多路復用接口但它有兩個硬傷一是fd數(shù)量上限很低通常是1024由FD_SETSIZE決定二是每次調(diào)用都要把全部的fd集合從用戶態(tài)拷貝到內(nèi)核態(tài)、再從內(nèi)核態(tài)拷貝回來還要線性掃描所有fd復雜度是O(n)連接數(shù)一多就很吃力。poll()取消了1024的上限但每次調(diào)用仍然要全量拷貝fd數(shù)組性能瓶頸沒消除。epoll是Linux專屬的高性能方案它解決了兩件事注冊過的fd留存在內(nèi)核的事件表里不需要每次重復傳入并且靠回調(diào)機制內(nèi)核只把“真正有事件發(fā)生”的fd通過就緒鏈表通知你你epoll_wait()的返回次數(shù)基本等于有事可做的fd數(shù)量效率不隨總連接數(shù)線性惡化。如果你寫的是跨平臺代碼select/poll的兼容性更好但如果確定在Linux上跑高并發(fā)服務直接用epoll沒有必要轉(zhuǎn)彎子。用epoll時的常見陷阱是忘記處理邊緣觸發(fā)模式下數(shù)據(jù)沒讀完的問題。水平觸發(fā)只要緩沖區(qū)有數(shù)據(jù)就會一直通知你沒讀完下次還能繼續(xù)邊緣觸發(fā)只在狀態(tài)變化的瞬間通知一次你如果一次沒讀完可能要等新的數(shù)據(jù)到達才會再次收到通知所以邊緣觸發(fā)模式下你必須用循環(huán)把數(shù)據(jù)全部讀干凈直到read()返回EAGAIN為止。我對初學者的建議是先用水平觸發(fā)邏輯簡單不容易出錯等真能吃透邊緣觸發(fā)再切換別在最開始就給自己的代碼增加調(diào)試難度。4.3 異步IO的面貌從io_uring看新一代方案傳統(tǒng)的epoll本質(zhì)上還是同步I/O只是它讓線程不用阻塞在某個fd上而是統(tǒng)一等待事件。真正的異步I/O在Linux上經(jīng)歷過幾輪波折直到io_uring出現(xiàn)才真正成熟起來。io_uring通過內(nèi)核與用戶態(tài)共享一組環(huán)形隊列應用可以批量提交讀寫請求內(nèi)核完成數(shù)據(jù)拷貝后通過完成隊列通知應用整個過程用戶線程不需要阻塞等待數(shù)據(jù)拷貝結(jié)束。io_uring的好處體現(xiàn)在高IOPS、低延遲和高吞吐場景比如數(shù)據(jù)庫引擎、代理服務、存儲中間件等。但它對編程模型的要求更高代碼復雜度也是直線上升。如果你只是做一個業(yè)務API服務大概率用不到io_uringepoll或者現(xiàn)成的異步框架已經(jīng)綽綽有余。但如果你是做基礎組件、中間件或者深入研究Linux存儲和網(wǎng)絡棧io_uring值得花時間了解。這算是一條比較超前的學習路徑不急先把epoll玩明白再說。5. 常見錯誤與排查經(jīng)驗速查給報錯找病根這一部分我把熱詞里出現(xiàn)的、以及我實際開發(fā)中踩過的典型網(wǎng)絡報錯整理成速查式說明。任何一個報錯出現(xiàn)時先判斷它屬于哪一大類。我把常見錯誤歸為四類創(chuàng)建失敗、連接失敗、綁定失敗和運行期異常每一類對應不同的排查方向。報錯信息示例問題環(huán)節(jié)常見原因排查命令/手段create socket connection failure (-70028)連接或創(chuàng)建失敗報文里這段報錯常見于數(shù)據(jù)庫客戶端如某些國產(chǎn)數(shù)據(jù)庫/中間件可能是網(wǎng)絡不通、端口未監(jiān)聽、或Socket資源耗盡ss -ant,ping,telnet IP 端口,ulimit -nbind: Address already in usebind階段端口已被占用或前一個進程未徹底釋放端口ss -tlnp,lsof -i :端口, 注意SO_REUSEADDRconnect: Connection refusedconnect階段目標端口沒有進程在監(jiān)聽或者防火墻拒絕了連接也可能是服務端隊列已滿但概率較低ss -tlnp,iptables -L -n,nc -vz IP 端口error 2002 (HY000): Cant connect to local MySQL server through socket /tmp/...local socket連接失敗MySQL服務未啟動、Socket文件路徑不對、權限不足、或服務監(jiān)聽在TCP但客戶端走Unix Socketsystemctl status mysql,mysql -h127.0.0.1 -P3306Connection timed outconnect超時數(shù)據(jù)包被丟棄防火墻、目標IP不可達、對端負載過高ping,traceroute, 檢查防火墻/安全組: Connection reset by peerread/write階段對端進程崩潰或主動關閉了連接也可由防火墻RST觸發(fā)抓包看RST標記檢查對端應用日志[08S01] create socket connection failure (-70028)連接建立失敗報錯代碼段里的特定錯誤先排查基礎網(wǎng)絡連通性再查目標服務狀態(tài)nc,ss,tcpdump逐步定位下面挑幾個最常出問題的場景手動拆一遍把排查思路走通。5.1 bind報錯Address already in use的完整排查路徑復現(xiàn)場景你在終端跑了一個服務端CtrlC終止馬上重新啟動結(jié)果拋出來bind: Address already in use。為什么因為默認情況下前一個進程雖然是退出了但它之前建立的某些連接或者監(jiān)聽Socket還處于TIME_WAIT狀態(tài)。TIME_WAIT狀態(tài)下該Socket的四元組還占著端口新進程想綁定同一個IP端口組合內(nèi)核會說“這個地址已經(jīng)被占用”。此時最直接的排查是ss -tlnp | grep 端口看輸出的State列。如果顯示TIME-WAIT就等它自然消失大約60秒或者設置SO_REUSEADDR選項繞過。注意SO_REUSEADDR之所以能生效是因為它允許新Socket綁定一個處于TIME_WAIT狀態(tài)的本地端口這是TCP規(guī)范允許的例外。但還有一種情況端口被另一個活躍進程占著比如另一個服務也在監(jiān)聽同樣的端口。ss輸出會顯示LISTEN狀態(tài)并帶著進程名和PID。這時候你不能輕易殺進程得先搞清楚為什么會撞端口。現(xiàn)實中很多沖突來自架構設計疏忽比如兩臺服務在同一臺機器上配了相同的端口或者是同一個進程fork了多個子進程子進程繼承了父進程監(jiān)聽的fd顯示起來像多個進程占用同一端口。處理這個問題的思路是能復用端口就用協(xié)議層的機制不能復用就改配置不要通過暴力kill的方式掩蓋問題。端口規(guī)劃在服務上線前就應該做好甚至可以考慮用固定端口段約束每個服務避免“誰的端口不夠了就隨處借”的亂象。5.2 connect失敗Connection refused 與 Connection timed out 的差異判斷Connection refused的語義其實是“對方明確拒絕了你”——最典型的情況是對端機器活著但指定端口上沒有任何進程在監(jiān)聽。內(nèi)核收到你的SYN報文后一看沒有對應Socket就直接回了一個RST你這邊connect()立刻失敗。這種錯誤通常是快速失敗的定位也相對簡單用ss -tlnp確認目標端口是否在監(jiān)聽如果沒監(jiān)聽就把服務拉起來如果有監(jiān)聽但你還是被拒絕那可能存在防火墻或者訪問控制需要繼續(xù)檢查iptables或云安全組。Connection timed out則完全是另一回事。你的SYN包像石沉大海沒有任何回應??赡艿脑蚴菍Χ薎P不可達比如路由不通、對端防火墻直接把你的SYN丟棄不發(fā)RST、或者目標服務器負載過高來不及處理新連接。排查手段是分層遞進先ping測主機通不通再traceroute看路徑上那一跳斷了最后抓包確認你的SYN有沒有發(fā)出去、有沒有收到任何回復。很多云環(huán)境的安全組策略默認丟棄而不是拒絕所以“ping通但端口連不上”是云上最常見的組合。還有一個容易被忽略的點服務端雖然進程活著但全連接隊列已經(jīng)滿了。此時系統(tǒng)會丟棄新來的SYN不回應客戶端就表現(xiàn)為超時。這種情況在ss -tlnp中能看到Recv-Q達到backlog上限所以看隊列長度非常重要。5.3 recv/send階段報錯Connection reset by peer 的兩種真面目Connection reset by peer大概是生產(chǎn)環(huán)境里最讓人頭疼的報錯之一。它發(fā)生在你讀寫數(shù)據(jù)的時候?qū)Ψ桨l(fā)來了RST報文內(nèi)核通知你“連接已經(jīng)被強制重置”。場景一對端進程崩潰。比如你正從一個服務讀取數(shù)據(jù)對方突然進程崩了操作系統(tǒng)在回收進程時會對所有未關閉的連接發(fā)送RST你這邊下一次讀/寫就會收到Connection reset by peer。這種屬于被動發(fā)現(xiàn)通常說明對端的穩(wěn)定性有問題。場景二對端應用層主動制造RST。比如你用SO_LINGER選項配合超時設置為0再調(diào)用close()內(nèi)核會發(fā)送RST而不是正常的FIN揮手。有些服務器在檢測到非法請求或者接收數(shù)據(jù)超限時也會用這種方式快速殺掉連接以此拒絕服務。這時候排查不能只看網(wǎng)絡要看對端應用日志分析它為什么主動斷開。我遇到過一次詭異的場景客戶端報錯Connection reset by peer服務端日志卻什么異常都沒有。后來抓包才發(fā)現(xiàn)問題出在連接空閑時間太長中間的網(wǎng)絡設備把連接狀態(tài)已經(jīng)清掉了而兩端應用都還認為活著一有數(shù)據(jù)流量中間設備直接發(fā)RST。處理方式就是在應用層設計合適的心跳機制讓連接不會靜默到被中間設備遺忘。5.4 Socket資源耗盡Too many open files 的隱含背景熱詞里的error: listen tcp 127.0.0.1:11434: bind: only one usage of each socket address雖然明面是bind錯誤但有些線上環(huán)境里當你反復創(chuàng)建連接不關閉、或者高并發(fā)場景下fd被耗盡時你會先撞上Too many open files。Linux對每個進程可打開的文件描述符數(shù)量有限制默認在ulimit -n查看很多系統(tǒng)默認是1024。如果你的服務需要管理大量并發(fā)連接就必須調(diào)高ulimit -n 1000000但ulimit只影響當前shell及其啟動的進程永久生效要改/etc/security/limits.conf或者systemd服務單元文件中的LimitNOFILE。要留意的是即使每個進程的限制調(diào)高了整個系統(tǒng)的fd總量也有上限通過sysctl fs.file-max查看和調(diào)整。fd泄漏是一個隱蔽的問題。有些服務代碼里處理完連接后忘掉close()短時間內(nèi)看不出問題但運行久了fd數(shù)量不斷上漲最終觸發(fā)Too many open files服務突然掛掉。排查辦法是監(jiān)控進程的fd數(shù)量ls /proc/PID/fd | wc -l統(tǒng)計某個進程打開的fd數(shù)量如果持續(xù)上漲且不回落幾乎可以斷定有泄漏。這種問題靠事后救火很被動更重要的是一開始就養(yǎng)成資源所有權思維誰打開誰負責關閉異常分支也要確保close()被執(zhí)行。5.5 backlog隊列溢出忽好忽壞的連接成功率有一套典型案例值得專門說服務器并發(fā)不高但客戶端連接時好時壞開始時能連上高峰時段新連接就超時??催^很多次問題出在listen(fd, backlog)的backlog設置太小全連接隊列一旦滿內(nèi)核直接丟棄新連接。Linux 2.2之后backlog參數(shù)控制的是全連接隊列長度再早的內(nèi)核版本中它會同時影響半連接隊列。應用層判斷是否溢出有兩個途徑第一ss -tlnp輸出中看Recv-Q那一列是否經(jīng)常等于Send-Q也就是backlog的最大值第二netstat -s看TCP統(tǒng)計信息中的listen queue overflow計數(shù)。如果計數(shù)很高說明你的服務端accept()速度跟不上連接建立速度此時調(diào)大backlog只是緩解真正要解決的是讓應用層更快地消費連接或者增加處理連接的線程。還有一個經(jīng)典坑某些框架或語言運行時內(nèi)部把backlog重新設成了固定值比如Go的net.Listen默認125你不一定能直接控制它。這時候判斷隊列溢出別只盯著代碼里的listen()參數(shù)要用內(nèi)核統(tǒng)計信息反推真實值。6. 通信細節(jié)進階端口、地址族與跨網(wǎng)絡邊界這一部分屬于進階掃盲。很多報錯看似代碼寫錯了實際是對地址族、網(wǎng)段邊界、或者Socket選項的理解不到位。把這幾塊補上排查問題的速度會再上一個臺階。6.1 地址族、端口與字節(jié)序為什么總是需要htonl和ntohlSocket編程里一個躲不掉的概念是字節(jié)序。不同CPU架構存放多字節(jié)數(shù)據(jù)的順序不同有大端、小端之分。網(wǎng)絡傳輸規(guī)定用大端序網(wǎng)絡字節(jié)序而x86機器存儲數(shù)字通常是小端序所以你在構造協(xié)議頭、填寫端口號時往往要把主機字節(jié)序轉(zhuǎn)換為網(wǎng)絡字節(jié)序。函數(shù)就是htons()和htonl()host to network short/long反向則是ntohs()和ntohl()。很多新手會問為什么bind()時端口要轉(zhuǎn)換字節(jié)序而0.0.0.0這種IP不需要因為inet_pton()這類函數(shù)返回的網(wǎng)絡地址已經(jīng)是網(wǎng)絡字節(jié)序了不需要你再手動倒騰。避免字節(jié)序錯誤的一個好習慣是凡是你肉眼看到的端口、IP字面值都讓庫函數(shù)去解析不要自己拿整數(shù)去拼。地址族方面IPv4用AF_INETIPv6用AF_INET6如果代碼里寫死AF_INET在純IPv6環(huán)境下創(chuàng)建Socket就可能失敗。解決兼容性的一般做法是用getaddrinfo()解析地址它可以根據(jù)主機名和端口返回合適的地址族和Socket類型。在寫新代碼時建議優(yōu)先考慮IPv6就緒的策略——雙棧支持可以讓同一個Socket同時接受IPv4和IPv6連接避免未來踩暗坑。6.2 本地環(huán)回、局域網(wǎng)與公網(wǎng)的連通性差異網(wǎng)絡編程調(diào)試時環(huán)境不同現(xiàn)象差別巨大。127.0.0.1是本地環(huán)回地址數(shù)據(jù)根本不走物理網(wǎng)卡內(nèi)核直接就在網(wǎng)絡棧內(nèi)部把包轉(zhuǎn)發(fā)回去了所以延遲極低、不受防火墻網(wǎng)卡配置影響也最容易把問題掩蓋。192.168.x.x是私網(wǎng)地址走真實網(wǎng)卡和交換機會受網(wǎng)卡配置、防火墻、VLAN隔離等影響。公網(wǎng)地址則還要經(jīng)過路由器NAT、運營商網(wǎng)絡、云安全組等復雜鏈路。一個典型的誤區(qū)本機測試沒問題用127.0.0.1連接部署到別的機器就連不上用局域網(wǎng)IP連接于是懷疑代碼有問題。其實大概率是防火墻攔截、監(jiān)聽地址寫成了127.0.0.1、或者目標服務只監(jiān)聽在某個特定網(wǎng)卡上??吹健氨緳C能通、別人不能通”這類現(xiàn)象時先用ss -tlnp確認監(jiān)聽地址到底是0.0.0.0還是127.0.0.1。如果是后者改成0.0.0.0就能解決。但這里有一層安全考量監(jiān)聽0.0.0.0意味著所有網(wǎng)卡上都響應如果機器有公網(wǎng)IP等于向公網(wǎng)暴露服務應該配合防火墻或安全組做限制而不是裸奔。6.3 Unix Domain Socket 的本質(zhì)與適用場景熱詞里有一條MySQL通過socket文件連接報錯的例子把Unix Domain Socket拉進了視野。Linux的Socket編程不只有TCP/UDP這類網(wǎng)絡Socket還有本地進程間通信用的Unix Domain Socket即IPC。它不需要IP和端口而是使用文件系統(tǒng)路徑作為地址標識。比如MySQL連接時localhost往往默認走Unix Socket文件通常在/tmp/mysql.sock或/var/run/mysqld/mysqld.sock。如果這個文件不存在或路徑不對就會出現(xiàn)Cant connect to local MySQL server through socket的報錯。Unxi Domain Socket的性能比TCP回環(huán)要高因為它不走網(wǎng)絡協(xié)議棧數(shù)據(jù)直接在內(nèi)核內(nèi)部傳遞省去了IP/TCP分組的開銷。所以數(shù)據(jù)庫、消息隊列、容器編排組件這些對性能敏感的場景本機通信都偏好用Unix Socket。它的一個特點是通信雙方必須在同一臺機器上這和“網(wǎng)絡Socket的連接可以跨機器”有本質(zhì)區(qū)別。從編程角度Unix Domain Socket依然可以用socket(AF_UNIX, SOCK_STREAM, 0)創(chuàng)建綁定地址時用sockaddr_un結(jié)構體里面填一個文件路徑。文件權限會影響其他進程能否連接這也是故障排查時的一個角度。如果遇到Permission denied先看Socket文件的權限和屬主再看進程運行的用戶身份是否一致。7. 學習路徑與工具鏈構建從預備到實戰(zhàn)的可持續(xù)路線最后一個部分聊怎么接著往下走。Socket編程是個接口不大、但背后牽扯極廣的領域。從看懂這篇文章到能獨立寫出高并發(fā)的網(wǎng)絡服務中間還有很長的路把路線規(guī)劃清楚能少走不少彎路。第一個階段是“能用”。能寫最簡單的TCP/UDP客戶端和服務端知道bind、listen、accept、connect幾個函數(shù)怎么配合會用ss和tcpdump看現(xiàn)象。這個階段不需要背函數(shù)重點是跑通實驗、看到連接狀態(tài)的變化。第二個階段是“懂原理”。能夠解釋三次握手和四次揮手每個時機對應的系統(tǒng)調(diào)用行為能夠說明窗口機制和緩沖區(qū)的意義能夠辨別阻塞、非阻塞和異步I/O的區(qū)別。到了這個階段再去看 《TCP/IP詳解》 這類書就不會覺得枯燥因為每個機制你都能在代碼里對應到真實場景。第三個階段是“會排查”。拿到一個生產(chǎn)環(huán)境報錯能根據(jù)錯誤類型快速定位問題層面——是端口占用、隊列溢出、防火墻攔截還是連接被重置。這篇文章的第五部分就是給你的排查起點。在此基礎上多積累自己的故障案例庫記下每個詭異問題的排查路徑比看一百篇教程都管用。學習過程中強烈建議保持一個“壞事復現(xiàn)”的習慣。別只跑沒問題的代碼故意制造問題把backlog設成1然后并發(fā)連10個連接試試把發(fā)送緩沖區(qū)調(diào)小看看部分寫如何發(fā)生用tcpdump觀察一個處于TIME_WAIT狀態(tài)的連接。只有親眼見過壞的網(wǎng)絡行為遇到生產(chǎn)事故時才不會慌。工具鏈方面必裝的有tcpdump抓包、ss/netstat看連接、lsof看文件、nc快速模擬、strace跟蹤系統(tǒng)調(diào)用。其中strace特別值得多說一句——它可以打印出一個進程發(fā)起的每一次系統(tǒng)調(diào)用當你的程序表現(xiàn)異常、但代碼邏輯又看不出毛病時strace -p PID能直接把卡在哪個調(diào)用上照出來。這種“內(nèi)核視角”的調(diào)試能力是經(jīng)驗豐富的網(wǎng)絡程序員和普通應用開發(fā)者最大的差距之一。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
成人综合网 欧美| 秋霞影音一区二区三区| 天天躁日日躁XXXXYY| 精品一区二区人妖| 偷拍 亚洲| 欧洲Au麻豆| 日本精品88888888| 99啪啪| 一区二区激情国产熟女| 欧洲精品人妻| av三级电影在线播放| 婷婷综合| 久久久久久久久九九久孕交| 青青久草| 搡老熟女老女人老熟妇免费视频| 久久精品国产精品亚洲艾通辽熟妇| 插老姨肥穴| 欧美日本视频一区| 亚洲精品人妻吞精av| 人妻熟女字幕一区二区| 97超碰欧美手机| 欧美人与性动交a美精品| 亚洲se91| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 丰满欧美放荡少妇在线| 国内毛片无遮挡国产| 水澄无码AV| 试看60秒| 啊啊啊好爽快点啊啊啊嗯嗯| 天天看夜夜看日日干| 偷拍亚洲高清图片| 91成人久久| 韩国女主播青草在线| 国产区性爱在线视频秋霞豆 | 国产精品久久久无码aV去| 久久婷婷五月综合| JuliaAnnXXX888| 婷婷丁香成人| 久久毛卡| 逼操网站| 九九九九热只有精品| 日韩精品中文字幕人妻| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 欧美大香蕉在线观看| 狠狠爱夜夜| www.欧精品| 黄色人人| 丰满人妻一区二区三区蜜桃视频| 操逼精品视频| 青青草一区二区三区四| 影音先锋国产精品| 亚洲电影中字一区二区| 97在线资源| 久久的网站啊啊啊啊啊| 激情六月婷婷| 久久综合九九| 久久久精品视频免费观看| 性猛交| 午夜久久一区二区无码中出| 久久98| 黑人精品XXX一区一二区| 久久久一区二区| 美女尤物福利视频| 精品一区二区三区蜜桃臀赵总 | 老司机福利青青草| 精品v1区| 啊啊啊啊啊操我视频| 天天艹天天日| 欧美熟女操屄| 91精品无码人妻系列| 岛国视频一二三区| 国产精品免费久久久久久久久久| 新怡红院| 欧美色性情| 成人午夜高潮av猛片| 91熟女在线| 国产嫩草精品A88AV| 后入式五六区| 伊人麻豆传媒| 91天堂色男人的天堂| 成人麻豆av电影网站| 国产精品亚洲天堂网址| 伊人五月天激情| 精品性爱无码在线播放| 人妻丝袜无 码视频专区| 久操大香蕉| 丁香五月性| 日韩美女久久一区二区三区| 国产乱码精品久久久久久| 天天摸天天舔天天操| 欧美日韩精品久久久久东北老熟妇| 国产精品69久久久久孕妇欧美| 精品久久久久成人码免| 水多多映视AV| 97人妻碰碰中文无码久热丝袜| 亚洲色吧网| 欧美性爱一区二区三区四区| 日本Suv精品一区二区| 校园春色 欧美| 91精品国产高清久久久久久,亚洲成人 | 亚洲欧洲综合| 亚洲第一狼人丝袜美女另类| 五十路熟女工口| 欧美色院| 无码色| 日本熟妇色熟妇在线视频播放| 91欧美www| 婷婷午夜成人色中色| 婷婷五月天av| 欧美骚少妇| 精品免费视频国产一区| 亚洲精品一区中文字幕乱码| 人妻喷水| 中日亚韩免费视频| 久操99| 亚洲情欲| 激情图片亚洲色图| 精品久久久久久无码| 九九激情网| 国产精品对白自产拍| 少妇一级婬片免费放一级a性色.| 日韩99神马视频片| 在线观看综合精品亚洲| 亚洲资源一区| 99久久com免费视频′| 亚洲黑人在线| 熟女丰满人妻一区| www.色吧5.com| 97欧美精品综合| 无码天堂| 色欧美在线| 天天日熟妇| 美女人妻色网站| 夜夜性| 色欧美天天| 秋霞Av理论一级在线| 亚洲精品丝袜| 免费一级欧美片片线观看| 超碰人妻久久| 涩亚洲欧洲| 欧美极品女人的天堂| 欧美视频一| 天天干夜夜肏| 日韩9999| 日韩97超碰中文字幕| 色在线综合| 不卡视频一区蜜桃视频| 国产一| 色呦呦、国产精品| 久久久久久国产精品| 99久久精品无码一区二区| 综合欧美日本三级| 国产精品高清2021在线| 欧洲亚洲人妻无码久久三区四区| 久久亚洲熟妇在线视频| 啊啊啊用力在线观看| 欧美性爱在线无码| 国产熟女完整版中字| 欧美乱伦专区| 亚洲综合91| 中国91AV| 欧美综合1性辶| 中文欧丝袜诱惑| 丝袜性亚洲| 骚货人妻偷情自拍在线视频| 国产亚洲综合欧美一区| 久久久爆乳翘臀一线天伦理视频| 国产视频一区二区免费| 日本三级R| 日本在线激情一区二区三区| 色婷网| 日韩午夜啪啪视频| 日韩一级片在线看| 亚洲高潮少妇| 亚洲美欧999| 国产美女激情| 欧美日韩人妻婷婷一区| 91N综合网| 老司机香蕉久久久久| 97干在线视频| 中文字幕五月婷婷免费| 亚洲性爱无码乱伦av| 太久视频| 夜夜高潮夜夜爽| 麻豆AV96熟妇人妻| 日本黄色天堂| 国产高清亚洲日韩一区| 亚洲精品第一| 黄色高清久久无码依人| 90后后入| 国产人伦a片信息免费片| 精品视频免费在线一区| 野狼激情网| 91天美传媒在线观看| 久久久久幕乱码| 人人操人人肉久久精品| 另类TS人妖一区二区三区| 人妻偷拍一区二区三区| 亚洲欧洲网站免费观看| 四虎国产成人精品免费一女五男| 91痴汉| 色黄污美女啪啪啪免费网站| 超碰免费在线| 亚洲素人综合| 日韩无码黄色片| 亚洲中文字幕乱码无码一区二区 | 久久久一区二区三区四曲免费听| 久久久久深夜无码| 浪人综合网| 亚洲综合小视频小说在线观看 | 色嗨嗨在线| 男人的天堂成人的社区| 97在线免费观看| 欧美性生活综合| 好屌色综合| 丰满人妻被猛烈进入中| 九九九午夜| 操一操摸一摸| 91在线限制级| 天堂中文资源在线bt| 色九月综合| 深夜福利黄片| 亚洲情色1区| 成 人 A V免费视频在线观看| 日本三级黄页| 国产在线播放成人免费| AV天堂男人的天堂| 在线一道啪| 亚洲偷91色| 日韩有码一区三区| 欧美亚洲色图另类国产| 97欧美久久久久久久| 美中日韩无码| 中文乱码字幕观看| 亚洲污污网站| 无码国产精品午夜不卡(| 91丨九色丨东北熟女| 久久粉色| 97视频www| 91超级碰| 欧美日本国产日韩激情视频| 超碰91在线| 后入式在线免费观看60秒| 国产在线视视频有精品| 91老熟女视频| 日日躁狠狠躁天天躁精品| 久久这里只精品99re66图| 日韩人妻丝袜中文字幕| 亚洲精品国产熟女久久久| 91视频国品一二三区| 免费黄色A片| 国产一区二区三区白丝| 精品九九九九九九| 欧美九九九| 色色综合97| 精品视频123区小说区| 岛国黄| 欧美组图日韩亚洲中文字幕| 麻豆精品.欧美精品.日韩精品.| 午夜精品久久久99| 超碰精品| 黄色高清久久无码依人| 精品无码一区二区| 在线天堂999| 一区二区三区色综合| 天美国产三级传媒| 亚洲自拍欧美色综合| 干b在线性社区| 夜夜操av亚洲一区二区| 人人乐大香蕉| 97se综合网| 日韩紧密久久| 综合网亚| 熟人人妻少妇精品久久| 日躁天天爽爽| 精品视频免费在线一区| 国产精品久久久久综合| 欧美日综合| 久久久久人妻| 成人精品欧洲亚洲| 九九操久久国产免费视频| 久久久久久久久999| 亚洲 欧美 日韩 国产一区二区| 天天日夜干| 免费岛国一级片| 中文字幕第9页萱萱影音先锋| 五月天激情网图片| 另类亚洲图色| 国产丸一视频| 麻豆国产精品午夜视频| 中文字幕jul-617人妻熟女| 97精品综合| 精品一区二区三区最新| 国产精选视频| 白丝被操91| 色婷视频| 国产91美女视频| 亚州综合在线| 操屄不卡视频| 婷婷九月国产| 日本熟女中文字幕一区| 亚洲乱色视频一区、二区在线| 男人的天堂久久狠| 无码一区免费在线不卡| 色性综合| 97色碰| 久久久精品成人国产| 91大神电影天堂| 极品人妻少妇综合| 五月丁香激情综合网| 男人天堂站| dy888午夜老子影视达达兔| 欧美v亚洲v日韩v最新在线二区| 久久AV无码1区2区3区| 亚洲Av诱惑| 久久久精品无码亚免费| 亚洲性少妇| 中文日本免费高清| 日本九九久久99播| 久久久久久亚洲Av无码| 亚州九九九精品视频| www.91理论| 在线观看午夜婷婷久久久久清性观看| 久久精品国产72国产精品福利 | 秋霞成人一级在线观看| 欧美日韩不卡传媒| 欧插网站| 免费看欧美美女黄色大片| 婷婷丁香人妻| 国产精品久久久久久久久久久久久久久久| 中文字幕成人理论在线| 国产成人欧美精品在线| 久久精品日韩专区免费观看| 五月婷在线| 淫荡少妇免费| 亚洲无码一区成人免费午夜| 中文久久一区| 久久久9品一区二区三区| 91大神精品长腿在线观看网站| 亚洲狼狼干综合1| 果冻国产精品麻豆成人av| 91 偷| 啊操爽品善一区二区三区| 亚洲最大无码中文字幕网站| 91精品人| 天天射天天色成人| 国产第11页| 大香蕉AV丝袜| 90后性网国产欧美| jk白丝没脱就开始啪啪| A一区片| 日韩精品人妻一区二区| 新91视频.cmp| 亚洲AV不卡在线观看| 夜夜嗨av午夜成人| 黄页大片在线观看| 免费观看的av| 国产精品色| 狠狠操综合| 熟女人妇一区二区三区| 国产精品黄色三级av| 中文字幕日韩专区精品系列| 精品无码久久久久久国产浪潮| 传媒在线观看一区二区三区| 3级毛片一二| 9ⅰ久久久天天| 狠狠操狠狠燥| 亚洲高清欧美总合| 亚洲国产成人精品女人久久久| 大逼色网站| 国产精品久久久亚洲第一牛牛_在线观看| 加勒比AV网| 蜜桃久久精品一区二区三区| 麻豆黄站| 麻豆精品.欧美精品.日韩精品.| 嗯嗯嗯啊啊在线观看| 国产又粗又长视频| 青娱乐福利99| 丁香五月影院| 黄总AV色图| 日韩精品高清资源在线| 久久久久久久综合,国产| 97国产中文| 色五月av| www.大香| 久久综合18p| 亚州人妻| 亚洲熟女人妻中文字幕一区二区| 国产肏逼网站| 麻豆 亚洲 97| 日韩成年人性爱视频| 色狠狠 - 百度| 久久极品一区二区| 呦女网站| 超碰无码加勒比| 91一区二区| 综合九九| 欧美日韩一区二区三区四区蜜桃| 嗯阿好爽好紧| 97色伦97色伦国产欧美| 成人资源中文字幕在线观看天天| 97伦乱| 成人无码在线超碰网| 婷婷丁香熟妇综合网| 男人天堂综合| 亚洲欧洲av影音| 久久五月份| 97少妇人妻中文字幕久久 | 天堂v无码免费视频| 精品国产肉丝袜在线拍国语| 好爽要喷了| 浪人综合网| 狠狠做深爱婷婷久久二区| 日韩免费看在线黄色片| 日本啊啊啊啊啊视频| 久久久久久久精| 亚洲五月天激情| 狠狠爱夜夜| 91粉嫩萝控精品福利网站_精品影音先锋国 | 在免费jIzzjIzz在线视频| 大乔未久88一区| 国产美女mm131爽爽爽爽| 精品久久艹| 国产色呦呦| 久久精品国产99久久,亚洲日韩久久日本一区一区三区 | 免費黃色視頻觀看一| 九九九久久久久| 亚洲蜜乳av| 久久久九九| 五月婷婷影院| 中文字幕人成乱码熟女香港| 超碰97综合网| 嗯嗯啊啊操死我| 久久欲| 久久久久久免费电影| 五月丁香六月激情综合| 99re热有精品视频国产| 久久97超碰香蕉| 成人看片网站| 国产不良强奸视频免费看| 天天天乱色综合全| 99成人| 操人人| av中亚| 久久久久久十| 日韩精品大香蕉伊人在线| 天天色播| 久久亚洲欧美中文字幕国语 | 13小男生GAY自慰脱裤子| 亚洲熟女少妇免费视频| 九九英色视频| 日本 欧美 亚中文字幕| 在线观看AV片| 99re公开精品免费视频| 美国精品国产精品| 国产精品九九九| 美女上床网站| 久久久少妇诱惑精品视频| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 男人的天堂久久| 久操视频免费观看| 91久久久老司机| 天天干天天日天天射黄色片| 精品人妻视频一区二区三区蜜桃视频| 亚洲情色电影网| 婷婷激情五月| 日韩欧洲操屄视频| 91肉片| 992这里有精品| 精品无码不卡视频| 9色国产精品一区粉嫩| 亚洲精品不卡一二三区| 欧美精品另类人妖xxxx| 欧美亚洲综合色| 在线观看综合精品亚洲| 精品国产丝袜一区二区三区乱码 | 激情干在线| 久久综合九色综合欧洲98| 亚洲女优有码无码高清| 久久精品国产精品| 美女毛片999| 中文字幕日韩精品一区二区三区| 日韩精品99999| 制服乱伦| 超碰免费人人| 日韩婷婷| 丁香六月婷婷综合| 99精品久久久久久久婷婷蜜桃| 黄色片,com| 日本一区二区三区午夜观看| 内射夫妻三片| 久久 国产 无码| 草草草视频在线免费看| 另类亚洲一区二区三区| 美女91网站| 火箭成精品视频884必出精品| 久久精品国产亚洲粉嫩| 99re6在线视频播放免费精品| 亚洲自拍青操视频| 久久久精品,3| 麻豆尤物视频网| julia国产在线| 春色综合网| 久久黄人人爽视频| 爱爱动态60秒| 日韩成人精品| 国产精品毛片?v一区二区三区| 韩国三级一线观看久| 日本高清免费一本视频在线观看| 日韩在线性爱免费视频| 为用户提供免费看黄网址在线观看| 欧洲综合无码| 自拍大香蕉乱插| 成视频在线观看免费看| 91狠婷| 蜜臀亚洲中文| 国产精品电| 夜夜夜爽www精品视频| 激情小说激情视频| 狠狠久久手机视频精品| 中文字幕人成乱码熟女香港| 人人做人人妻人人夜视频| 大屁股xxxxx| 丝袜美腿欧美| 欧美亚州色的图| 91天天爽| 91操操操操| 国产不卡免费在线视频| 天天综合网站| 婷婷伊人网| 久久精品亚洲东京热色播| 亚洲限制级| 欧美激情精品久久久久久| 天天射夜夜骑| 国产精品久久久久久久电影渣男| av凤凰久久久| 欧美五区| 欲香欲色综合天天伊人| a一区二区三区乱码在线| 人人做人人妻人人夜视频| 丝袜美腿诱惑亚洲欧美视频在线观看 | 97色妞| 0755午夜福利视频| 欧美不卡在线一区二区| 91狠狠综合久久| 老师充足的奶水小说| 超碰在线在公开超碰在线在公开| 狠狠操,使劲操| 欧美日韩国内不卡| 精品亚洲俞拍视频一区| 99热这里都是精品| 亚洲欧美综合区自拍另类| 97天天摸天天碰| 亚洲人久久久网| 久久久久九九九| 免费综合亚洲中文| 淫骚熟女一区二区三区| 麻豆成人影音在线| 99碰碰| 午夜后入| 高潮毛片无遮挡高清免费| 久久精品小视频| 中文字幕无码不卡啪啪| 中日亚韩免费视频| 久久久久久性爱片| 国产sv美女内射| 高跟丝袜AV专区国产| wwe 天天干.com| 国产成人久久精品蜜臀| 99热18| 欧洲精品欧洲精品| 国产精品美女在线一区| 亚洲一区二区三区麻豆传媒| 78精品| 99热| 国产精品久久久久久久久久久久久久| 欧美激情另类一区二区| 草b在线| 超碰在线一区二区三区| 五月丁香综合| 94色色电影网| 六月激情网| 超碰97国产欧美| 中日高清无码操逼视频| 中文字幕欧洲有码| 国产超碰| 亚洲欧美天| 日本片日本片祼观看网站在线看中文版网页在线看 | 成人免费毛片| 国产成人AV麻豆| 欧美一区二区三区互相| 亚欧美天堂在线| 国内偷拍精品一区二区| 久久婷婷在线观看视频| 欧美高清无码免费视频高清版| 色九月综合| 亚洲日韩av专区无码| 欧美日韩国产中文精品字幕自在自线, | 亚洲国产一区二区三区在线| 91内射| 欧美美女啪啪视频| 日韩中文字幕精品一区在线| 超碰中文字幕人妻草一区| 国产精品美女久久久久AⅤ国产馆| 99re95| 日韩人妻制服丝袜av| 亚洲精品久久一区二区三区蜜桃臀| 欧美性爱日韩性爱| 99热日| 日本精品高清一二区一本到| 精品人妻少妇| 夜夜操老骚逼视频网站| 国产极品精品美女视频| 久久超碰亚洲人| 亚洲系列第一页| 先锋音影AV| 国产97色在线| 中文字幕蜜乳av| 啊好爽快点-国产一区二区三区撒尿在线-成人AV| 中文字幕精品一区欧美| 色九九九综合| 一区二区三区机械有限公司| 91天天综合日韩欧美| 精产国品一区二三产品| 国产精品自在线发布| 操久久久久| 日韩精品99久久久久久中文字幕| 欧美不卡二区| 久久男人天堂| 免费亚洲国产精品久久一区| 久久久激情| 九九视频黄色片| 婷婷久久久精品| 欧美成不卡网| 男男H黄动漫啪啪无遮挡网站| 草草草草视频| Julia Annxxxxx| A V少妇特黄三级| 色黄色美女大长腿午夜视频| 清纯唯美综合| 精品二999| 熟女日韩| 亚洲欧美日韩综合在线尤物| 国产视频一区二区三区在线免费观看| 91男人综合| 色婷婷成人综合| 涩涩五月天| 久久美女国产| 我要去看2个日本美女.com曹逼| 少妇99| 欧美日韩资源在线| www.色婷婷| 久久三| 亚洲啪AⅤ永久无码| 麻豆91熟妇人妻中文字幕茄子| 亚州色图欧美| 99久久com免费视频′| 欧美性爱精品一区二区| 国产精品一区二区校花| 黑人娇小av在线播放| 天操天操夜操夜月月年年操操| 九九热超碰97亚洲最新香蕉 | 一级片视频啪啪| 9118禁| 啊啊啊 在线| 91女优在线观看| 日han少妇无码| 最新加勒比丝袜在线| 日本三级大片| 国产av美女被艹的乱叫| 色黄色美女大长腿午夜视频| 亚洲中文字母在线播放| 天天操妹子| 97视频免费在线| 五月天欧美色图| 啊操爽品善一区二区三区| 国产精品91一样| 看看小穴| 麻豆2区1区天美| 殴美牲| 91xingse| 精品久久99| 狠狠狠一区二区三区| 日韩成人精品中文字幕| 久热久| 99热这里只有精品9| 日韩另类| av天堂影视中文在字幕在线中文| 日韩国产乱子伦App| 手机在线人成免费视频| 加勒比在线视频一区二区三区 | 色噜噜人妻av中文字幕| 婷婷丁香人妻| 97亚洲中文| 欧色网址| 日韩兔费看黄片| 大JI巴好深好爽又大又粗视频| 亚洲欧美另类小说| 97亚洲欧美| 亚洲无码超碰免费| 影音先锋少妇| 日本操逼aaaaa| 国产精品ⅴ无码大片在线看.| 国产av强奸美女| 在线国产福利网址导航| 国内精品伊人久久久久影院会| 久久鲁干| 青青国产精品在线| 美女高潮视频91| 天天干天天舔| 日本性爱网址| 91丨九色丨国产打屁股| 九九精品美女高溯喷水| 国精综合一二三区影视| 九九九九一区| 亚洲另类春色| 国产后入| 美中日韩无码| 9九九九九视频在线观看| 麻豆天美制片厂网站视频| 中文字幕女同在线| 粉嫩av一区二区三区天美传媒| 久久久久久九| 欧美不卡二区| 五月丁香六月婷| 国产夜夜操| 女同性恋中文字幕| 欧美综合第一页| 少妇人妻好深太紧了vr91| 国产精品岛国片在线观看| 精品91摸| 色色青青久久| 青娱乐999| 国产区性爱在线视频秋霞豆| 日韩人妻 中文字幕| 91色碰| 试看60秒| 97超碰磁| 性爱综合网| 欧美日韩青操| 免费超碰97久久| 九九九九久久久久| 日韩不卡a级视频专区| 97久久久久久久精| 亚洲精品97p| 乱伦熟妇一区二区| 玖玖在线视频| 无码久| 一中国女人毛片水真多| 俺去俺来也在线www| av大香蕉网站| 99999亚洲| 日本Xx性爱| 10000部十八禁看电影| 97人人夜| 中文字幕精品资源在线| 中文字幕天天操| 欧美激情久操网| 国产乱伦性爱AV| 国产久久日| 久久亚洲AV无码白度| 婷婷五月天色色| 98超碰日本| 日韩少妇无码| 五月天色图影视| 蜜桃臀一区二区三区久久| 一区二区三区亚洲| 久九九九九九九热| 欧美色爱综合| 丰满人妻一区二区三区四区| 欧美天堂日韩三级国产传媒| 欧美日韩中文字幕人妻| 99精品在线| 亚洲日韩97| 久久透逼视频| 亚洲最大黄网| 国产精品国产精品国产| 超碰狠狠操| 偷拍亚洲视频一区二区三区四区| 日本高清有码网址视频| laoshunv91| 日本1区2区不卡视频| 白丝1区2区3区| 亚洲婷婷丁香在线| 美女超碰978| 欧美人妻少妇| 欧美综合站| 久草午夜| 欧洲综合视频| 欧美92| 五月天激情网图片| 这里只有精品97| 国产欧美日韩在线不卡第一页| 亚洲色图 综合| 色嗨嗨在线| 久久99深爱久久99精品| 免费看黄片现成| 9热9热综合网| 久热影视| 1204av韩国| 日韩无码黄色片| 亚洲天在线| 亚洲精品男人的天堂| 97这里只有精品| 欧美日韩免费专区在线| 色黄污美女啪啪啪免费网站| 人人妻人人色| 人妻熟女av国产网站| 后入日本1234| 91xingse| 在线观看AV片| 久久有码视频| 九九久久久九九| 欧洲亚洲国产综合在线| 亚洲情色一区二区三区| 成人性爱全视频观看| 国产精品丝袜在线| 亚洲 图片 综合91| 亚洲制服aⅴ中文字幕| 日日97| 亚洲色堂免费视频| 欧美一区二区三区另类精品| 97操综合| 九九热精品| 亚洲精品久久久久毛片A片拉屎 | 麻豆成人影音在线| 日韩懂色网| 亚洲一卡2卡3卡4卡乱码网站| 精精品人妻一区二区三区| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 色一区二区三区综合| 91麻豆天美国产欧美日| 日韩av免费一级电影| 素人伊尹大香蕉免费下载视频| 欧美国产日韩清纯唯美| av在线播放国产一区| 9997se| 青青国产精品在线| 国产精品干干干| 99热一区二区三区四区| 亚洲中文字幕有码视频一区二区三区| 夜夜天天噜狠狠爱2021| 成人青青草原伊人| 香港日本韩国人妇99www.wccm20| 天堂8在线新版官网| 国产日韩精品suv| 久久精品视频一区三区小泽玛利亚| 99re视频在线观看这里只有精品| 国产又色又粗又黄又爽| 欧美日韩欧美| 天天影视综合网欧美精品| 啪一啪免费视频| 亚洲欧美999| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 精品久久久久,69国产成人精| 国产精品日韩在线一区| 伊人97| 日韩综合97P| 素人美腿视频网站| 日本色婷婷| 日韩精品色呦呦| 麻豆AV一区二区天美传媒| 亚洲成人网站在线观看| 秋霞成人一级在线观看| 国产在线视频午夜精华在| 久热网| 97国伦国色| 欧洲亚洲综合| 美女啊啊啊啊啊啊| 青青草国产盗摄一二三区| 99操| 日韩不卡毛片Av免费高清| 日日操免费视频| 精品在线蜜臀| 欧美精品亚洲精品日韩传电影| 爱欲AV| 九九九久千久久激情蜜桃在线看 | 日语五十路和六十路亚洲国产精品| 0755午夜福利视频| 东北操逼| 吊色| 老熟妇一区二区三区啪啪| av操操不卡| 内射白嫩美女| 亚洲高潮少妇| 强奸xx国产| 操一区| 日本肉体xxxx裸交| 国产日本久久免费精品| 亚洲欧美第一页| 东京热天堂网| 日韩在线观看AV| 青青草一区二区三区四| 91美女高潮| 风月影院男女十八禁| 黑人精品久久97| 青青欧洲黑| 尤物视频网 刘玥| 欧美激情色婷婷花野真衣一区二区| 男人的天堂成人的社区| 九色 人妻 大香蕉| 天美传媒av 在线| 日韩在线视频1234| 欧洲综合视频| 99九九久久| 97一本大道亚洲一区| 亚洲一本色码中文字幕| 亚欧洲一区二区视频| 一区麻豆 高清中文字幕| 黄网站黄视频网站进入口 | 久久98| 校园春色制服丝袜中文字亚洲| 看日韩操逼| 92福利社视频| 91狠狠综合久久久久久| 国产夜夜艹| 精品十三区| 欧美激情久久久久| 成人草草视频| 亚洲另类春色| 亚洲男人综合| 免费看黄视频亚洲网站| 午夜寂寞欧美| 蜜臀av一区二区三区免费观看| 久久午夜伦| 歐美一級亂黃99在綫精品| 国产污视频麻豆传媒一区二区| 97视频观看| 色999人与兽| 97九色人妻| 日韩99999色| 亚洲熟女一区| 91综合天天看| 色五月AV| a片自拍直播视频| 国产无码精品久久久久久| 精品中文字幕一区二区| 最新日韩黄片| 嗯啊啊啊轻点视频 | 亚洲男人天堂手机版| 麻豆三极片| av在线一区二区三区| 亚洲日本成人动漫| 二级久久网| 国产精品9999| 色在线视频导航| 亚欧性爱ab| 亚洲成人av色网| 欧美日韩婷婷中文| 欧美色院| yellow网站免费观看日韩高清无码| 亚欧视频在线| 天综合中文| 超碰午夜| 啪啪啪男女亚洲中文字幕99| 色婷婷国产精品一区在线观看| 久久人人爽爽人人爽人人片αV| 午夜男人一级A片7777| 色综合中文字幕不卡| 视频黄站| 91亚洲色人| 美女诱惑爱爱| 超碰 欧美| 亚洲小电影免费涩涩成人在线高清 | 97在线亚洲| 91视频在线观看18| 岛国精品视频在线观看| 欧美精品第四五页中文字幕在线观看| 欧美成人精品一区二区男人蜜臀| 香蕉国产精品麻豆亚洲欧美日韩| 久草五月| 亚洲色图综合网| 大香蕉一级黄色片久久| 欧美日韩性爱视屏免费看了| 97色97好| 最新亚洲黄色免费电影| 狼狼色丁香久久婷婷综合五月| 91女人的网站| 78久久| 大香网伊人久久综合| 中文字幕免费看| 精品一级毛片在线观看| 五月天婷婷久久| 大屁股熟女一区二区三区| 黄片免费日韩| 偷拍欧美激情| 欧美日韩色| 色小视频蜜乳| 99爱久久视频频| 亚洲无线观看久久| 天天做天天爽| 蜜区区视频79 | 91亚州| www.狠狠| 夜夜黄| 欧美99热| 91精品在线播放| 国产女生在线| 黄色小说亚洲| 思思热国产高清| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 粉嫩av一区二区三区天美传媒| Sekablack无码一区| 99国内精品| 亚洲欧美综合| 综合色图亚洲欧美| 欧美日韩精品久久久久久久久东北老熟妇| 久久性爱城| 亚洲成人AB| 天天日天天色| 少妇高潮九九九九| 91大学精品激情戏| 婷婷涩嫩草鲁丝久久午夜精品| 婷婷五月影院| 东京热毛片177b2viP| 国内精品999| 欧美日韩小说| 人妻熟女一区在| 国产精品久久久久久久久久久久久久吹 | 射久久| 偷窥自拍亚洲色图| aa片毛片| 欧美在线啊啊啊| 亚洲熟女性高潮久久久| 中文字幕精品亚洲熟女| 亚洲精品99| 欧美极品| 狠狠躁天天躁日日躁| www.99中文字幕| 亚洲AV色图一区| 亚洲性爱高潮影院| 熟妇乱伦一区二区| 中文字幕久久精视频久久大全| 涩涩这里只有精品视频| 99热国产| 狠狠穞A片一區二區三區| 97免费视频在线| a人欧美综合天堂麻豆| 精品亚洲国产成人av网站| 97鸡把在线视频| 亚洲限制级在线| 久草国产在线视频| 亚洲熟女综合一区二区| 青青草密桃在线播放| 国内毛片无遮挡国产| 中文字幕日韩情色| 亚 欧 美 综合| 99久久久久久亚洲精品不卡| 国产精品69久久久久久久| 激情五月激情综合网| 深夜福利黄片| 蜜桃中文字日产乱幕4区| 人人操人人操人人操人人操人人操人人人11.CM | 欧美黄色大片在线观看 | 北野未奈加勒比av| 男人亚洲91首页在线| 人人操我人人干| 夜夜高潮夜夜爽夜夜爱爱一区| 亚洲熟女综合| 欧美日韩岛国大片在线观看| 国产精品久久aV| 97少妇人妻中文字幕久久 | 亚洲va有码在线天堂| 亚洲天天天| 青青草伊人久久| 桃色五月天| 国产亚洲精品久久久久小| 大香蕉性欧美| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 久久黄黄| 午夜爽爽爽在线观看永久入口姬片| 999综合网| 天天操天天日天天干| 亚洲图片 91| 亚洲国产一区二区三区四区国产| 淫淫综合网| 国产91丝袜在线播放蜜月| 台湾大香蕉99热| 日本Xx性爱| 国产成久久综合片| 色97干| 乱色老一区二区三区的观看方式| 青青草九九九九九| 欧美国产日韩高清在线| 中文字幕人成乱码熟女香港| 亚洲熟女人妻中文字幕一区二区 | 99精品无码| 天天天天天天天天天天干美女 | 精品二区三四区五电影 | 久久无码电影| 久久中久文96| 欧美精品91| 97网址www| av资源在线播放天堂| 99色热国产视频精品| 午夜视频久久久久一区| 日本综合色图| 91n处女在线观看| www.久久超碰| 嫩草黄页| 亚洲情色一区二区三区| 亚洲中文电影| 嗯阿好爽好紧| 亚洲免费精品一区| 婷婷丁香五月综合| 久久色情| 99热这里只有精| 天天天天天干夜夜夜夜夜操| 岛国视频免费在线观看| 91足交| 成人免费性爱视视| 搡老女人老91妇女老熟女| 97超碰色色| 91综合网站| 欧美在线天堂| 久久久久夜夜夜夜| 无码九九九九| 欧美 日韩 亚洲 春色| 欧美一区二区日韩三区| 人人操人人操人人人操| 美女裸体无遮挡永久免费观看网站| 97国产超碰| 久久久久久人体| 成人日本片久久久蜜桃| 综合欧美色图| 日韩特一级久久| 国产一区二区精品久久久不卡蜜臀| 曰本特级特黄特色黄色A级网站高清在线免费看 | 亚洲电影中字一区二区| 日本成a人v网站在线观看| 亚洲高清视频在线免费观看| 色综合一本| 日韩免费一级性爱视频| 一区二区三区亚洲| 亚洲色图日韩精品| 26uuu国产成人综合| 亚洲精品视频在线播放| 狠狠狠狠狠| 欧美 亚洲 综合 制服| 97久精品| 日本最新免费韩国1区2区视频播放| 日韩99神马视频片| 蜜臀久久久国产| 久久久久深夜无码| 亚洲少妇视频| 91看黄片| 特级毛片特黄久久免费看| 欧美日韩国产色图在线| 九九九九九九九精品视频| 欧美制服网站美腿丝袜| 日韩影片中文字幕一区二区三区| 久草男人天堂| 久久岛国| 99久久国产精品免费高潮| 狼狼色丁香久久婷婷综合五月| 麻豆这里只有精品| 又黑又大又粗| 欧美日动态视频| 97碰碰色| 免费看片黄|