日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

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

Linux套接字編程基礎:IP端口、字節(jié)序與TCP/UDP

Linux套接字編程基礎:IP端口、字節(jié)序與TCP/UDP 寫 Linux 網(wǎng)絡編程的代碼最先卡住人的往往不是多路復用也不是高性能模型而是 bind 返回失敗、連接超時、對端收到的數(shù)據(jù)是一串亂碼這三件小事。這三個現(xiàn)象背后分別對應著端口、地址和字節(jié)序——也就是Linux 網(wǎng)絡編程里**套接字socket**這套機制最基礎的那層預備知識。很多人一上手就抄一個 TCP 回顯服務器的模板代碼跑通了就以為會了等真正要改端口、要跨機器、要自己定協(xié)議的時候立刻原形畢露。這篇內容想做的事很明確把套接字這層抽象下面壓著的基本概念一個個翻出來講清楚包括 IP 與端口怎么組合成一個可尋址的通信端點、字節(jié)序為什么必須轉換、TCP 和 UDP 的取舍到底在取舍什么、sockaddr這一族結構體為什么要繞這么一圈。它適合剛接觸 Linux 系統(tǒng)編程的同學也適合寫了幾年業(yè)務代碼、但一直沒系統(tǒng)梳理過網(wǎng)絡基礎的人。文中會給出可直接編譯運行的示例、參數(shù)計算過程和我在實際調試中踩過的坑你可以當成一份動手前的檢查清單來用。1. 先把地圖畫清楚套接字在整個網(wǎng)絡通信里站在哪一層1.1 從一次文件傳輸說起網(wǎng)絡編程到底在折騰什么假設你在本機寫了一個程序要把一個文件的內容發(fā)給另一臺機器上的程序。最樸素的想法是我打開網(wǎng)卡、把字節(jié)一個個推出去。但這件事在用戶態(tài)根本做不了網(wǎng)卡是硬件訪問它要走驅動而驅動屬于內核。所以真實的路徑是你的進程調用一組系統(tǒng)調用把我要發(fā)這些字節(jié)給某個目標這個意圖告訴內核內核里的協(xié)議棧負責封裝、校驗、重傳、路由最后交給網(wǎng)卡。這組系統(tǒng)調用對外暴露的接口就是套接字。理解這一點非常重要因為它決定了套接字 API 的性格它不是一個函數(shù)調用就完成通信而是你去內核里登記一個通信端點然后對這個端點做讀寫。所以你會看到socket()創(chuàng)建一個東西、bind()給它掛地址、listen()讓它能接客、accept()從它身上取新連接這一串動作本質是在內核里維護一份數(shù)據(jù)結構而不是在用戶態(tài)算什么東西。判斷一個概念屬不屬于預備知識我的標準很簡單如果不搞清楚它你寫出來的代碼能跑但一改環(huán)境就崩。IP、端口、字節(jié)序、協(xié)議類型、地址結構體全部符合這個標準。1.2 套接字的本質一層被操作系統(tǒng)抽象出來的文件在 Linux 上socket()的返回值是一個int和open()返回的東西是同一類——文件描述符。這不是巧合而是有意為之的設計把網(wǎng)絡通信抽象成文件讀寫用戶態(tài)就能復用同一套 I/O 模型阻塞、非阻塞、select/poll/epoll、O_NONBLOCK等。于是你可以在 socket fd 上做read()/write()也可以用send()/recv()還能把它塞進epoll的監(jiān)聽集合里。但這層像文件的抽象并不完全幾個地方會露餡。文件有偏移量可以lseek到任意位置讀socket 不行它是流讀過就沒了文件有明確長度stat一下就知道多大socket 不知道對端還會發(fā)多少只能一直讀到對端關閉或按協(xié)議自己定邊界文件關閉通常沒有副作用socket 的close()會觸發(fā)四次揮手關閉時機不對會留下TIME_WAIT。這幾個差異點恰恰是后面所有坑的源頭。我個人的建議是初學時把 socket 當文件用完全沒問題能快速跑通但一旦開始調性能或者排查異常就必須切換到這是一個有狀態(tài)的雙向字節(jié)通道的心智模型。1.3 預備知識清單為什么這些概念繞不開把要講的東西列個清單后面的章節(jié)就按這個骨架展開通信端點怎么唯一標識IP 端口、數(shù)據(jù)在內存里怎么排字節(jié)序、通道提供什么保證TCP / UDP、內核用什么結構描述端點sockaddr家族、以及這些 API 之間靠什么約定串起來返回值、錯誤碼、阻塞語義。這份清單不是憑空列的。你回頭看那三個典型故障bind失敗八成是端口被占或者地址填錯落在清單第一項連接超時可能是 IP 不可達、防火墻攔了、也可能是監(jiān)聽端bind在127.0.0.1上只收了本機連接還是落在第一項數(shù)據(jù)亂碼幾乎必然是字節(jié)序或者結構體對齊落在第二項。換句話說套接字編程里絕大多數(shù)看起來詭異的問題都能在這份清單里找到歸屬。把清單吃透調試就從猜變成查。2. IP 與端口給通信雙方一個能寄到的地址2.1 IP 地址定位到哪臺機器IP 地址解決的是哪臺主機的問題。IPv4 是 32 位寫成點分十進制是為了人看比如192.168.1.10本質上就是四個字節(jié)。理解這一點很關鍵因為代碼里sin_addr.s_addr存的就是這 32 位整數(shù)不是字符串。你要么用inet_pton()把字符串轉成整數(shù)要么用htonl()把主機序的整數(shù)轉成網(wǎng)絡序絕不能直接把字符串memcpy進去。幾個必須分清的特殊地址0.0.0.0INADDR_ANY作為bind的參數(shù)時表示綁定本機所有網(wǎng)卡的所有 IP。服務端幾乎都用它因為一臺機器可能有回環(huán)、有線、無線多個地址寫死某一個會導致?lián)Q網(wǎng)就收不到連接。127.0.0.1回環(huán)地址只在本機內部有效數(shù)據(jù)不出網(wǎng)卡。作為bind參數(shù)時只有本機進程能連上作為connect目標時只能連本機的服務。255.255.255.255受限廣播地址只有開啟SO_BROADCAST才能發(fā)。私有地址段10/8、172.16/12、192.168/16內網(wǎng)使用跨網(wǎng)段需要轉換。這里有個經(jīng)典誤解很多人以為bind到0.0.0.0就等于對外開放。實際上它只決定監(jiān)聽哪個地址能不能被外部連上還取決于路由和鏈路上的訪問控制。反過來如果你在開發(fā)機上把服務bind到127.0.0.1然后用另一臺機器去連會一直超時——這不是代碼 bug是本就沒打算讓你連。2.2 端口號定位到哪個進程IP 只到機器機器上跑著幾十上百個進程數(shù)據(jù)到了該交給誰靠端口。端口是 16 位無符號整數(shù)范圍 0 到 65535和 IP 組合成IP:Port這個二元組才能唯一標識一個通信端點。不過嚴格來說標識一個 TCP 連接的完整四元組是源IP : 源端口 : 目的IP : 目的端口。這也是為什么同一臺服務器可以同時接受成千上萬個連接目的 IP 和目的端口相同但客戶端的源 IP 和源端口不同四元組依然唯一。理解這個四元組你就明白了為什么服務端只監(jiān)聽一個端口卻能服務大量客戶端這件事在邏輯上是成立的也就不容易被一個端口只能一個連接這種錯誤直覺誤導。端口在 Linux 上分三段用途和權限完全不同范圍名稱典型用途權限要求0 - 1023知名端口HTTP(80)、SSH(22)、DNS(53)傳統(tǒng)上需要特權Linux 可通過net.ipv4.ip_unprivileged_port_start放寬1024 - 49151注冊端口各類中間件、數(shù)據(jù)庫默認端口普通用戶可用49152 - 65535動態(tài)/臨時端口客戶端connect時內核自動分配普通用戶可用寫代碼時有一個細節(jié)容易被忽略bind的端口傳 0表示讓內核幫我挑一個空閑端口內核挑完后可以用getsockname()讀出來。這個技巧在寫測試用例、寫需要動態(tài)端口的服務時特別有用能徹底避免端口沖突導致測試隨機失敗這種情況。2.3 IP 與端口的組合方式以及結構體里為什么要留一個sin_zero在代碼層面IPv4 的地址信息裝在struct sockaddr_in里核心三個成員sin_family地址族填AF_INET、sin_port16 位端口網(wǎng)絡字節(jié)序、sin_addr32 位 IP網(wǎng)絡字節(jié)序。這三個字段的填法幾乎決定了bind和connect能不能成功。struct sockaddr_in里還有個sin_zero[8]很多人不知道它是干嘛的。原因是歷史上的struct sockaddr總長 16 字節(jié)而sockaddr_in的實質內容只占 8 字節(jié)剩 8 字節(jié)用它填充對齊保證兩者大小一致這樣bind(sockfd, (struct sockaddr *)addr, sizeof(addr))這種強制轉換才安全。這個字段必須清零標準做法是定義后立刻memset(addr, 0, sizeof(addr))否則殘留的棧上垃圾數(shù)據(jù)在某些實現(xiàn)上會引起地址比較異常。我見過有人省略 memset 之后在bind時偶發(fā)EINVAL排查了很久最后就是這 8 個字節(jié)沒清干凈。2.4 端口相關的三個高頻坑端口被占用EADDRINUSE。最常見的原因是上一個進程沒退干凈或者進程重啟太快、舊連接還處于TIME_WAIT。TIME_WAIT是主動關閉方才會進入的狀態(tài)持續(xù) 2MSLLinux 上約 60 秒目的是保證最后一個 ACK 能被對端收到、并讓舊連接的殘留報文在網(wǎng)絡中消散。服務端頻繁重啟時幾乎必然撞上解決辦法是給監(jiān)聽 socket 設置SO_REUSEADDRint on 1; setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, on, sizeof(on));注意SO_REUSEADDR解決的是地址處于 TIME_WAIT 時仍可綁定不是兩個進程同時綁同一個端口。后者在 Linux 上需要SO_REUSEPORT語義完全不同不要混用。綁定地址寫死。開發(fā)時圖省事寫inet_addr(127.0.0.1)上線后容器內其他服務連不上。這類問題在容器化環(huán)境里尤其常見因為容器的回環(huán)和其他容器的網(wǎng)絡命名空間是隔離的。用inet_addr()判斷錯誤。這個函數(shù)轉換失敗時返回INADDR_NONE而INADDR_NONE的值恰好是255.255.255.255也就是說你無法區(qū)分輸入非法和輸入就是廣播地址。新代碼一律用inet_pton()它的返回值語義清晰1 成功、0 格式不對、-1 地址族不支持。3. 字節(jié)序跨機器傳數(shù)據(jù)繞不過去的第一個坑3.1 大端與小端到底差在哪一個 32 位整數(shù)0x01020304在內存里占四個字節(jié)。如果低地址存01、高地址存04叫大端Big-Endian如果低地址存04、高地址存01叫小端Little-Endian。x86 和大部分 ARM 是小端部分嵌入式平臺和網(wǎng)絡協(xié)議規(guī)定的是大端。這件事在單機程序里毫無存在感因為讀取和寫入用的是同一套規(guī)則自己跟自己永遠對得上。但一旦跨機器發(fā)送方按小端把0x01020304鋪到內存里發(fā)出去接收方按大端解讀得到的就是0x04030201——數(shù)字完全變了。這也是收到的數(shù)據(jù)是亂碼最常見的成因之一而且它很陰險數(shù)據(jù)長度對得上、校驗也能過只是數(shù)值錯了排查時容易往業(yè)務邏輯上想??梢赃@樣驗證自己機器的字節(jié)序#include stdio.h #include stdint.h #include arpa/inet.h int main(void) { uint32_t host 0x01020304; uint32_t net htonl(host); unsigned char *p; p (unsigned char *)host; printf(host: %02x %02x %02x %02x\n, p[0], p[1], p[2], p[3]); p (unsigned char *)net; printf(net : %02x %02x %02x %02x\n, p[0], p[1], p[2], p[3]); return 0; }在小端機上輸出是host: 04 03 02 01和net: 01 02 03 04兩個結果不一樣說明轉換確實發(fā)生了在大端機上兩者相同。這段代碼我建議每個初學網(wǎng)絡編程的人都親手跑一遍比看十遍文字描述管用。3.2 為什么網(wǎng)絡字節(jié)序規(guī)定為大端協(xié)議在設計時需要一個統(tǒng)一約定否則每個實現(xiàn)都要在運行時協(xié)商成本太高。選大端有歷史和工程上的原因早期參與制定規(guī)范的主流機器多為大端架構而且大端在抓包和人工閱讀十六進制時更符合直覺——高位在前和書寫順序一致。這個選擇一旦定下來就成了硬約定后來無論本機是什么字節(jié)序網(wǎng)絡上傳輸?shù)臄?shù)值一律按大端解釋。落實到代碼就是四個函數(shù)htonshost to network short16 位、htonl32 位、ntohs、ntohl。規(guī)律很好記端口是 16 位用sIP 和大多數(shù)整型字段是 32 位用l。這些函數(shù)在同類字節(jié)序的機器上會被編譯成空操作所以不用擔心性能。3.3 轉換邊界在哪里只轉數(shù)值不轉字節(jié)流這是最容易被搞混的一點。字節(jié)序轉換只對多字節(jié)數(shù)值類型有意義對字節(jié)數(shù)組沒有意義。你發(fā)一個字符串hello它就是五個字節(jié)逐字節(jié)發(fā)送接收方逐字節(jié)接收順序天然一致不需要任何轉換。你發(fā)一個uint32_t長度字段就必須轉換。由此推出一條實操原則自定義協(xié)議時把所有多字節(jié)字段明確用固定寬度類型uint16_t、uint32_t、uint64_t聲明并在序列化時逐個轉換。不要圖省事把整個結構體memcpy進緩沖區(qū)發(fā)出去原因有兩個一是結構體里可能有字節(jié)序不同的字段二是編譯器會在成員之間插入對齊填充填充內容是不確定的接收方按同樣的結構體解析可能對得上換編譯器、換優(yōu)化等級、換平臺就可能錯位。htons/htonl只覆蓋 16 位和 32 位64 位沒有標準函數(shù)。跨平臺項目里常見的做法是自己寫一對#include stdint.h static uint64_t hton64(uint64_t v) { #if __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ return ((uint64_t)htonl((uint32_t)(v 0xFFFFFFFF)) 32) | htonl((uint32_t)(v 32)); #else return v; #endif }或者干脆在協(xié)議設計階段避開 64 位字段用兩個 32 位拼省掉這一層。我在實際項目里更傾向后者協(xié)議越簡單跨語言實現(xiàn)時出錯概率越低。3.4 浮點數(shù)和長時間戳的額外注意點浮點數(shù)不要直接發(fā)二進制。IEEE 754 的位模式雖然也是定長的但不同平臺的實現(xiàn)細節(jié)、NaN 表示、擴展精度都可能不同直接傳字節(jié)在不同編譯器之間不一定可靠。穩(wěn)妥做法是轉成定點整數(shù)比如金額用分為單位存int64_t或者轉成十進制字符串發(fā)送犧牲一點帶寬換確定性。時間戳同理。推薦統(tǒng)一用自紀元起的秒數(shù)或毫秒數(shù)作為int64_t轉換后傳輸避免傳struct timeval、struct timespec這類結構體——它們的成員寬度和布局在各平臺上并不一致。這一點在寫跨平臺通信協(xié)議時值得單獨列一條規(guī)范比事后調試省事得多。4. 協(xié)議的選擇TCP 和 UDP 的取舍不是在選技術是在選責任4.1 TCP面向連接、可靠、字節(jié)流SOCK_STREAM對應的就是 TCP。它提供的保證可以概括成四條連接是有狀態(tài)的三次握手建立、四次揮手關閉、數(shù)據(jù)不丟不重不亂序、有流量控制和擁塞控制、傳輸?shù)氖亲止?jié)流而非消息。字節(jié)流這三個字是理解 TCP 的關鍵也是后面所有粘包討論的根源。TCP 只保證你寫進去的字節(jié)會按順序到達不保證邊界。你在發(fā)送端write了兩次每次 100 字節(jié)接收端可能一次read到 200 字節(jié)也可能分三次讀到 60、60、80。這不是 bug是設計如此——TCP 把自己定位成一根可靠的水管水管不負責告訴你這一杯水到哪里結束。所以任何基于 TCP 的應用層協(xié)議都必須自己定義邊界常見三種做法方案做法適用場景缺點固定長度每條消息定長消息長度恒定的場景不靈活浪費帶寬長度前綴先發(fā) 4 字節(jié)長度再發(fā)內容通用二進制協(xié)議需要處理長度字段本身的字節(jié)序分隔符用\r\n或\0結束文本協(xié)議、命令行內容里出現(xiàn)分隔符需要轉義長度前綴是我最常用的方案簡單、高效、無歧義。實現(xiàn)上有兩個細節(jié)長度字段必須用htonl轉換讀取時必須循環(huán)讀滿因為read可能只返回部分數(shù)據(jù)。static int read_full(int fd, void *buf, size_t n) { size_t got 0; while (got n) { ssize_t r read(fd, (char *)buf got, n - got); if (r 0) return 0; /* 對端關閉 */ if (r 0) { if (errno EINTR) continue; /* 被信號打斷重試 */ return -1; } got (size_t)r; } return 1; }這段代碼短但包含了三個新手經(jīng)常漏掉的點處理短讀、處理EINTR、區(qū)分讀滿和對端關閉兩種情況。漏掉任何一個在高負載或者有信號的環(huán)境下就會出現(xiàn)隨機失敗而且極難復現(xiàn)。4.2 UDP無連接、不可靠、數(shù)據(jù)報SOCK_DGRAM對應 UDP。它沒有連接、不保證送達、不保證順序、可能重復但保留了消息邊界你發(fā)一個數(shù)據(jù)報接收方要么收到完整的一個要么收不到不會出現(xiàn)半截。這一點和 TCP 正好相反。UDP 的優(yōu)勢在于開銷小、延遲低、沒有隊頭阻塞。一個數(shù)據(jù)報丟了只影響它自己不會卡住后面的數(shù)據(jù)TCP 則因為要保證順序前面一個包丟了后面全得等重傳。所以在實時性優(yōu)先、能容忍少量丟包的場景里UDP 是更合理的選擇。另外 UDP 天然支持一對多廣播、組播TCP 做不到。需要注意的是UDP 的簡單只體現(xiàn)在協(xié)議層應用層的復雜度一點沒少要自己做超時重傳、自己做序號去重、自己做擁塞控制否則一旦網(wǎng)絡擁塞就是災難。很多人在 UDP 上重新實現(xiàn)了一遍 TCP 的可靠性機制結果比直接用 TCP 還差。這不是說不能做而是要有清醒判斷——如果你的需求是可靠傳輸先問問自己為什么不用 TCP。4.3 選型不是選技術是選你要承擔哪部分責任我判斷的方式是問三個問題丟一個包會怎樣如果業(yè)務上完全不能接受比如轉賬指令用 TCP讓協(xié)議棧幫你扛。延遲敏感嗎如果晚到不如不到比如實時語音、游戲位置同步UDP 更合適應用層做有限的補償。是不是一對多廣播、組播只能用 UDP。其余情況默認選 TCP把精力放在業(yè)務上。選 UDP 通常是經(jīng)過權衡后的主動決策而不是因為它快。4.4 粘包這個詞其實起錯了名字社區(qū)里常說TCP 粘包嚴格講這個說法不準確TCP 沒有粘它本來就是流從未承諾過邊界。真正的問題是應用層沒有定義消息邊界。所以解決粘包的正確姿勢不是去調什么 socket 參數(shù)而是在協(xié)議設計階段就把邊界規(guī)則寫清楚然后在接收端按規(guī)則切分。理解了這一點你就不會再去找關閉粘包的選項——那東西不存在。4.5 一個常被忽略的細節(jié)send返回值和發(fā)完了不是一回事send()返回的是成功拷貝進內核發(fā)送緩沖區(qū)的字節(jié)數(shù)不等于對端已經(jīng)收到。緩沖區(qū)滿了它會阻塞阻塞模式下或者返回EAGAIN非阻塞模式下。所以正確寫法同樣是循環(huán)直到全部寫完static int write_full(int fd, const void *buf, size_t n) { size_t sent 0; while (sent n) { ssize_t w send(fd, (const char *)buf sent, n - sent, 0); if (w 0) { if (errno EINTR) continue; if (errno EAGAIN || errno EWOULDBLOCK) { /* 非阻塞模式下應交給事件循環(huán)處理此處僅示意 */ continue; } return -1; } sent (size_t)w; } return 0; }在非阻塞模式下EAGAIN的處理不能靠死循環(huán)必須回到事件循環(huán)里等可寫事件。這段邏輯在寫高性能服務時是繞不開的但在預備知識階段先建立send 不代表送達這個認知就夠了。5. 地址結構體與 socket API 的整體輪廓5.1sockaddr家族的三個成員很多人第一次看 socket 代碼最困惑的就是為什么要在一堆結構體之間來回強轉struct sockaddr_in addr; bind(fd, (struct sockaddr *)addr, sizeof(addr));原因是設計上做了一層通用殼。struct sockaddr是抽象的地址表示只有一個 16 位的地址族字段和一段通用的地址數(shù)據(jù)struct sockaddr_in是 IPv4 的具體表示struct sockaddr_in6是 IPv6 的struct sockaddr_un是本地 Unix 域的。所有 API 的參數(shù)統(tǒng)一收struct sockaddr *這樣一套接口能同時支持多種地址族代價是調用方必須自己強轉并把真實大小通過第三個參數(shù)傳進去。這個設計的用意是擴展性代價是類型安全為零——強轉錯了編譯器不會報錯運行時bind直接返回EINVAL。所以我寫這類代碼時有個習慣結構體變量名統(tǒng)一加后綴addr4、addr6強轉的地方一眼能看出對應關系減少誤用。三層結構之間還有一個細節(jié)sin_addr的類型是struct in_addr里面只有一個s_addr成員。多套一層純粹是歷史原因實際用時直接操作sin_addr.s_addr就行。IPv6 那邊sin6_addr是 16 字節(jié)的聯(lián)合體轉換要用inet_pton(AF_INET6, ...)inet_ntop也需要傳AF_INET6用錯了會靜默失敗。5.2 一份能跑起來的最小骨架把前面所有概念串起來一個最小的服務器骨架長這樣#include stdio.h #include string.h #include unistd.h #include errno.h #include arpa/inet.h #include netinet/in.h #include sys/socket.h int main(void) { int lfd socket(AF_INET, SOCK_STREAM, 0); if (lfd 0) { perror(socket); return 1; } int on 1; setsockopt(lfd, SOL_SOCKET, SO_REUSEADDR, on, sizeof(on)); struct sockaddr_in addr; memset(addr, 0, sizeof(addr)); addr.sin_family AF_INET; addr.sin_port htons(8080); addr.sin_addr.s_addr htonl(INADDR_ANY); if (bind(lfd, (struct sockaddr *)addr, sizeof(addr)) 0) { perror(bind); return 1; } if (listen(lfd, 128) 0) { perror(listen); return 1; } for (;;) { struct sockaddr_in peer; socklen_t len sizeof(peer); int cfd accept(lfd, (struct sockaddr *)peer, len); if (cfd 0) { if (errno EINTR) continue; perror(accept); break; } char ip[INET_ADDRSTRLEN]; inet_ntop(AF_INET, peer.sin_addr, ip, sizeof(ip)); printf(client %s:%u\n, ip, ntohs(peer.sin_port)); char buf[1024]; ssize_t n read(cfd, buf, sizeof(buf)); if (n 0) write(cfd, buf, (size_t)n); close(cfd); } close(lfd); return 0; }三十來行但每一行都能對應上前面的概念socket的第一個參數(shù)是地址族第二個是套接字類型決定 TCP 還是 UDPSO_REUSEADDR解決TIME_WAITmemset清sin_zerohtons/htonl處理字節(jié)序INADDR_ANY監(jiān)聽所有地址listen的第二個參數(shù)是等待隊列長度accept返回的是新的fd和監(jiān)聽 fd 是兩個東西peer里的地址是網(wǎng)絡字節(jié)序打印前必須ntohs。編譯命令記一下gcc -Wall -Wextra -o srv srv.c然后另開一個終端用nc 127.0.0.1 8080連上去試試。這段代碼只處理一個連接就關閉不是完整的服務器但足夠用來驗證環(huán)境、驗證端口、驗證字節(jié)序轉換是否正確。5.3listen的 backlog 到底影響什么listen(fd, 128)里的 128 不是最大連接數(shù)而是未完成連接隊列 已完成連接隊列的上限參考值。未完成隊列放的是收到 SYN、還沒完成三次握手的連接已完成隊列放的是握手完成、等待accept取走的連接。如果服務端accept太慢已完成隊列滿了后續(xù)新連接的行為取決于tcp_abort_on_overflow的配置默認是靜默丟棄客戶端表現(xiàn)為連接超時或重試。實際取值不用太糾結Linux 上還會被net.core.somaxconn限制最終生效的是兩者較小值。我一般寫 128 或 512配合及時accept就夠了。真正的瓶頸幾乎從來不是這個數(shù)字而是accept之后每個連接的處理邏輯是不是阻塞的。5.4read/write與send/recvclose與shutdownsocketfd 可以用read/write也可以用send/recv。前者是通用文件接口后者多了個flags參數(shù)能指定MSG_NOSIGNAL避免對端關閉時觸發(fā) SIGPIPE 直接殺掉進程、MSG_PEEK窺探不取走、MSG_WAITALL盡量讀滿。生產代碼里我強烈建議用send并帶上MSG_NOSIGNAL或者干脆在啟動時signal(SIGPIPE, SIG_IGN)否則對端異常斷開就可能導致整個服務進程退出這類事故非常典型。close和shutdown的區(qū)別也值得單獨說。close減少引用計數(shù)減到 0 才真正關閉而且它是全雙工的——讀寫一起斷。shutdown(fd, SHUT_WR)只關閉寫方向對端會收到 EOF但仍然可以繼續(xù)發(fā)數(shù)據(jù)過來這在我發(fā)完了等你回復的場景里是必需的。用close替代shutdown會導致你再也讀不到對端的回復很多人調試時遇到發(fā)完就收不到響應原因就在這里。5.5 阻塞與非阻塞預備階段至少要建立的直覺默認創(chuàng)建的 socket 是阻塞的accept沒連接就卡住、read沒數(shù)據(jù)就卡住、write緩沖區(qū)滿就卡住。單連接場景沒問題一旦要同時處理多個連接就必須改。兩條路一是每連接一個線程簡單但線程開銷大、連接數(shù)上千就撐不住二是非阻塞 事件循環(huán)epoll一個線程管成千上萬個連接。預備知識階段不需要把epoll吃透但必須理解阻塞語義是怎么來的以及EAGAIN意味著什么。因為不管你后面用哪種模型這兩個概念都會反復出現(xiàn)。我的建議是先寫一個阻塞版本跑通邏輯再改成非阻塞觀察錯誤碼的變化這個對比過程比直接抄epoll模板有收獲得多。6. 常見問題與排查技巧實錄6.1 一份能直接對著查的速查表現(xiàn)象最可能原因排查動作bind返回EADDRINUSE端口被占或處于TIME_WAITss -lntp看占用加SO_REUSEADDRbind返回EINVAL結構體沒清零 / 地址族填錯 / 長度傳錯檢查memset、sin_family、第三個參數(shù)connect一直超時目標不可達、被防火墻攔、服務bind在回環(huán)ping、telnet ip port、檢查bind地址connect返回ECONNREFUSED目標端口沒有監(jiān)聽確認服務是否啟動、端口是否寫錯收到的數(shù)值不對字節(jié)序沒轉檢查htonl/htons/ntohl/ntohs收到的結構體錯位直接memcpy結構體含對齊填充改為逐字段序列化大流量下偶發(fā)讀不完整沒處理短讀包一層read_full循環(huán)進程莫名退出對端關閉觸發(fā)SIGPIPE用MSG_NOSIGNAL或忽略SIGPIPE端口傳 0 后不知道實際端口沒調getsockname綁定后用getsockname讀回重啟服務立刻報端口占用TIME_WAITSO_REUSEADDR或等待 2MSL這張表覆蓋了我實際調試中八成以上的情況遇到問題先對一遍能省掉大量瞎猜的時間。6.2 幾個只有踩過才知道的細節(jié)用ss而不是netstat。ss -lntp看監(jiān)聽、ss -antp看所有 TCP 連接、ss -s看匯總統(tǒng)計比netstat快得多字段也更清楚。排查連接狀態(tài)分布時ss輸出的State列能直接告訴你有多少連接卡在SYN-SENT、多少在TIME_WAIT。strace是定位 socket 調用的利器。strace -f -e tracenetwork ./srv能把所有網(wǎng)絡相關的系統(tǒng)調用和返回值打出來bind到底傳了什么地址、accept返回了哪個 fd、read返回了幾個字節(jié)一目了然。我第一次搞不清為什么bind失敗就是靠它看到sin_port傳的是主機序直接定位。地址打印一定要在轉換之后。printf(%s, inet_ntoa(addr.sin_addr))這種寫法在單線程里能用但inet_ntoa返回的是靜態(tài)緩沖區(qū)多線程下會互相覆蓋。老老實實用inet_ntop加自己的char buf[INET_ADDRSTRLEN]雖然多寫一行但省掉的是那種日志里 IP 隨機變化的詭異問題。測試用固定端口遲早出事。CI 環(huán)境里并發(fā)跑多個測試用例固定端口必然沖突。全部改成綁定端口 0 再getsockname拿實際端口這個改動很小收益很大。超時一定要設。connect默認超時可能長達一分鐘以上recv默認永不超時。生產代碼里SO_RCVTIMEO、SO_SNDTIMEO或者非阻塞 事件循環(huán)的超時機制至少要有一種。我見過因為缺超時導致工作線程被一個僵死連接永久占住最后整個服務雪崩的案例代價非常大??鐧C器自測要趁早。別總在127.0.0.1上測。兩個終端在本機互通會掩蓋掉地址綁定、防火墻、路由、MTU 等一系列問題。哪怕只是拿另一臺同網(wǎng)段的機器連一下也能提前暴露不少東西。6.3 我個人建議的學習路徑我的體會是套接字這層東西不適合先學完理論再動手也不適合抄完模板就完事比較舒服的節(jié)奏是三輪。第一輪跑通寫一個阻塞的 TCP 回顯服務用nc連通確認端口、地址、收發(fā)都正常。第二輪加約束自己定義一個帶長度前綴的協(xié)議收發(fā)結構體強制做字節(jié)序轉換用tcpdump或者strace驗證字節(jié)層面的樣子。第三輪改模型把阻塞改成非阻塞觀察EAGAIN然后引入epoll理解事件驅動下的收發(fā)循環(huán)。這三輪走下來再去看那些高性能框架的代碼會發(fā)現(xiàn)它們做的事情無非是把這三輪的細節(jié)做到極致緩沖區(qū)管理、零拷貝、批量收發(fā)、連接復用。基礎概念打牢了上層的東西就只是工程取舍不再是黑魔法。最后分享一個我常用的自查習慣寫完任何一段 socket 代碼我都會問自己四個問題——這個數(shù)值轉字節(jié)序了嗎這個read會不會短讀這個send失敗我能處理嗎對端關閉時我會不會崩四個問題全過代碼基本就能在真實環(huán)境里扛住了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
少妇精品久久久八区九区| 国产18精品亚洲精品| 亚洲春色一区二区三区| 人妻激情偷乱视三区频一区二区| 日本999精品视频| 精品综合久久久久久97| www.黄色在线| 国产青视频| 超碰95| 久久久草成人网站久久久草成人久久久草久久久 | 亚洲色吧网| 香蕉大久久久| 97人妻免费中文字幕| 蜜桃色色网站视频三区| 大香蕉中文在线| 亚洲欧美日韩精品久久久一区二区| 欧亚第一综合网| 少妇一级无码精品| 欧美性爱一内片一区二区三区| 亚洲中字慕不卡| 欧美日韩亚洲一区二区在线观看| 婷婷15月天青娱乐| 岛国片国产成人亚洲播放| 欧美无圣光在线| 天堂男人网| 婷婷色婷婷| 欧美精品一二三| AA丁香综合激情| 一二三四区电影| 久操精品网| 插插综合网天天影视网| 日韩九区| 精品无码一区二区三区色欲| 97香蕉人人乳| 免费福利视频中文字幕| 国产肏屁眼视频| 岛国在线国产| 亚洲色入欧美| 国产91乱伦| 91欧美性| 婷婷九月| 国产午夜精品理论片a大结局| 超碰超碰欧美| 亚川综合视频| 午夜精品久久久久久久| 麻豆2区1区天美| 啊啊啊草死我| 久久精品国产精品| 色色婷婷五月| 翔田千里A片一区二区| JULIA人妻风俗店中出电影| 亚洲成aⅴ人片不卡无码| 欧美性,亚州色| 18啪啪手机免费性爱| 亚洲九九爱| 久久性爱视频| 百度百度日本操逼| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 天天影视色香欲综合网小说| 绯色AV粉色AV蜜臀AV| 久久久久久国产成人| 夜夜 中文视频rt| 粉嫩av在线一区二区| 久久中文字幕人妻熟av女蜜柚| 狠狠操狠狠爱| 13小男生GAY自慰脱裤子| 亚洲射综合网| 亚洲色鬼| 中国大陆国产高清AⅤ毛片| 男人的天堂日韩| 中文字幕黄色片| 97超碰美女| 青青草视频在线观看一区二区| 制度丝袜99| 深喉吞精| 精品一区二区三区四区女| 精品国产肉丝袜在线拍国语| 插入逼91| 亚洲精品 欧美97色色| 98色网| 青娱乐999| 草b在线| 日韩激情中文字幕有码| 亚洲综合999| 老司机午夜福利视频一区二区| 五月丁香啪啪网| 伊人操| 亚州色阁| 日本少妇va7777| 色噜噜人妻丝袜a∨先锋影 | 五月婷亚洲精品天堂| 国产福利夜| 色综合久久888| 日韩性爱一级片| 亚州久久9| 91九色精品熟女内射| 欧美日韩在线视频网站| 久久9999 | 欧美情色男人的天堂| 蜜桃av综合网发布| 国产亚洲中文不卡二区| 亚洲无码成人精品| 日韩欧美加勒比| 亚洲骚男同com| 色麻豆AV| 久久精品亚洲东京热色播| 色色色热| 簧片免费看视频| 天天日天天操天天射河南省| 亚洲av资源| 蜜乳av一区二区三区四区不卡| 日韩三级网址| 高清不卡国产| AND人妻系列| 九九亚洲视频| 欧美一区二区三区入口| 看日韩黄片| 久9爱精品| 久久少妇人妻| 91国产丝袜美女| 啊啊啊啊啊啊好湿好爽视频| 素人美腿视频网站| 色狠狠色| 国产情侣自拍在线播放| 人人爱人人操人人性| 中文字幕一二区二三区人妻专区| 亚洲伊人久久综合97| 校园春色亚洲色图| 999综合网| 色九九九九| 欧中日成人免费影视| www.狠狠干.coom | 久久99午夜精品一区人妻| 国产成人无码a| 五月天亚洲色图| 国产这里只有精品| 熟女探花啪啪| 96精品久久久久久久久| 精品国产国产AV| 蜜臀99久久精品久久久懂爱| 91欧美高清| 色噜噜婷婷| 国产精品嫩草影院免费| 99re公开精品免费视频| 特级特黄一级毛片免费| 中国女人内射6XXXXX| 免费看黄视频亚洲网站| 在免费jIzzjIzz在线视频| 国产精品呦一区二区三区| 啪啪啪精品| 91色人妻| 国产成人手机视频激情| 欧洲一级性爱视频在线观看| 天天色,天天干,天天干| 玖玖玖玖精品国产剧情| 久99| 久操黄色视频| 亚洲在高跟鞋自慰久久在色线| 自拍二页| 大干人妻| 国产乱不卡| 日本性一区| 久肏视频字幕| 国产品精品自在在线午夜免费| 亚洲影院成人| 熟女色综合久久| 天天天天天干夜夜夜夜夜操| 色99色| 久久黄黄| 顶级丝袜熟女一区二区三区| 欧美在线天堂| 国产一区二区三区白丝| 无码一区二区精品视频久久久春药| 国产天美欧美| 91网站18+| 91网站视频在线观看| 久久亚洲天天做| 亚洲九九爱| 久久欧美激情| 99re在线| 日本性爰一道本| 国产精品无码AV网站| 天堂中文日本在线观看| 欧美精品999| 1956日韩精品| 吊色| 在线视频97| 亚洲天堂精品日韩电影| 日韩乱伦影音先锋| 97综合在线| 久热69九色熟妇97| 青青操视频在线| 91色夜| AV乱伦专区| 亚欧高清v| 嗯~啊~快点 死我视频| 97超色| 极品人妻少妇综合| 中文字幕日韩人妻视频一区二区三区 | 亚洲欧美骚| 日本人妻丰满熟妇久久久久久| 亚洲va有码在线天堂| 超碰91在线| 伊人网在线观看| 中韩中文字幕在线观看| 国产精品 久久久精品一牛| 牛黄色久午久| 青青草狠狠撸| 91精品无码久久久久久久| 国产小u女在线观看| 欧美激情总合网| 亚洲精品不卡一二三区| 国产美女在线精品免费看| 亚洲综合中文字幕有码 | 国产原创精品| 啊啊啊啊免费视频| 天天干天天狼在线视频| 操死我了嗯嗯嗯| 亚洲激情片| 亚洲色久| 俺也射| 国产精品网址| 久久av网| 囯产精品久久久久久久久久梁医生| 草莓精品视频| 国内成人圈中文字幕无码视频| 国产无马在线| 熟女丝袜视频| 麻豆美女丝袜人妻中文| 日本福利社| 在线观看啊啊啊啊啊| 日本无码1| 夜精品久无码| 精品毛片av一区二区| 久久水蜜臀亚洲AV无码精品| 探花视频免费观看国产专区| 91N欧美| 日本韩欧美在线播放a| 九九九九免费视频| 蜜乳AV色欲AVAV无码| 欧美,日韩,中文,另类| 少妇精品久久久八区九区| 国产强奸无码乱伦| 日本天天吊| 97碰久久| 日本天天吊| 日韩小电影| 人人操av| 丰满人妻-区二区三区| 操逼日韩无码| 蜜臀99久久国产| 五月丁香啪啪| 亚洲男人天堂网| 青娱乐av在线| 亚洲成人贴图| 1024亚洲中文字幕久在线看片你懂的| 久久精品一区二区一8| 一区二区三区 丝袜 高跟 美腿| 东京热男人的天堂| 亚洲国产剧情少妇激情| 成人无码在线视频网站| 激情视频一二三| 国内毛片国产专区二| 国产99999久久精品| 日本操大逼| 粉嫩久久久极品| 色狠狠色| 国产精品com| 精品无人区麻豆乱码久久久| 午夜偷拍久久熟女| 97欧美日韩精品| 嗯啊不要啊在线| 日本视频在线中文字幕| 亚洲综合夜色| 婷婷五月色| 蜜桃久久一区二区| 欧美97日韩| 亚洲成人日韩小说| 97网站在线观看| 青青草日韩无码| 国产精品人妻无码久久久老鸭窝| 躁躁日曰躁2020| 国产h片在线观看视频| 欧美特黄视频网站| 欧美组图日韩亚洲中文字幕| 欧美国产一区二区三区麻豆传媒| 操屄不卡视频| 9久精品| 久久婷婷亚洲欧| 人、人、摸,人、人、草| 国产嫩草精品A88AV| 中文字幕视频一区视频二区| 一线黄色免费性爱片| 男人天堂新| 日本97久久久精品| 日本污ww视频网站| 国产精品com| 久久网亚洲| 亚州精品一区二区三区香中文字幕在线| 99婷婷一区二区| 伊人991| 丁香五月综合| 久久久久久久国产视频| 国产成人久久精品蜜臀| 蜜臀久久精品久久久久视频| 78综合网| 亚洲综合另类| 国产一级操B视频| 亚洲影院成人| 欧色网址| 欧美综合传媒| 天美传媒在线一区| 久久久久久夜夜夜夜夜| 久色网| 青娱乐亚洲自拍| 97色网| 一本一道久久综合久久| 一区二区三区蜜桃成人撸久久东京热 | 乱人乱色一区二区三区免费| 欧美色图成人网一区二区 | 欧美日韩传媒| 嗯嗯啊啊好疼| 天天澡天天爽日日AV| 制度丝袜99| 色九九九| 夜夜嗨老熟女AV一区二区三区| 少妇厨房愉情理伦片bd在线观看| 欧美日韩国产传媒在线精品| 国产91美女视频| 午夜操逼不卡| 色欲天天综合久久久无码网中文| 精品99999| 波多野结衣先锋影音| 亚欧成人一级片在线播放| 丰满翘臀美女影院视频| 国产67194| 精品日韩人妻精品一二三区| 婷婷五月天福利| 校园春色综合| 欧美肥臀在线| 欧美综合自拍亚洲综合图| 蜜乳性色无码专日粉嫩骚逼AV| 国产无吗在线播放| 亚洲AV无码秘 蜜桃臀国精产品| 亚洲极品| 粉嫩AV一区夜夜嗨| 久热伊人99re| 亚洲精品亚洲人成人网| 插欧洲美女欧美精品| 人人操人人插 - 百度 - 百度| 欧美碰碰综合色| 久久久极品| 久热99999| 无码丰满熟妇一区二区浪潮AV| 久久9久| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 亚洲精品第一| 欧美久久婷婷| 一区二区不卡视| 久久国产免费激情视频| 色男人色天堂东京热| 日本黄大片在线观看视频| 女同亚洲欧美一二三区久久电影| 情趣丝袜无码操逼视频| 欧美国产精品| 久久激情综合| 超碰在线免费一区二区三区| 国产又长又大又粗的视频| 欧美 亚洲 综合 制服 另类| Aa东京男人的天堂| 亚洲欧美内射| 东京热AV男人的天堂| 亚洲av强奸乱伦| 在线亚洲丝袜视频网站| 五月婷丁香| 九久久九九久视频| 农村妇女精品一区二区| 麻豆蜜桃视频在线观看| 好爽视频在线观看视频| 免费农村成人少妇人妻Aa一区二区视频| 国产乱伦性爱区| 欧美亚洲激情一二三| 尤物黄色在线观看网站| 在线视频一区二区传媒| 亚洲精品久久久久毛片A片拉屎| 日本精品中文字幕视频| 猛交交| 久视频在线观看| 久久亚洲不卡一区二区三区| 亚洲图片第一页| 少妇毛片久久| 美女自卫慰黄网站免费| 久久国产精品m码| 久久黄片国产一区二区| 日本五区不卡| 啊啊啊在线观看| 国产精品白丝在线播放 | 囯产精品久久久久久久久久梁医生| 熟妇xxxxx性春色| 亚洲色图日韩精品| 国产欧美伊人| 国产白嫩精品久久| 精品超碰色| 午夜小电影在线插入淫高潮| 日美免费黄片| 99精品热| 97精品国产精品免费观看| 2019午夜福利视频| 97日韩| 亚洲欧美日韩二区视频| 日韩免费人妻色情网站| 天天综合网入口~91| 欧美热图99| 五码视频在线观看| 久久婷婷五月天| 少妇无码av专区线| 97视频在线播放| 小电影欧美91| 天天舔天天日天天射| 在线97在线| 老鸭窝亚洲毛片| 五月天婷婷基地| 日操粉逼逼| 97超碰在线资源网站| 久久青青草原免费视频| 午夜男女爽爽爽影院视频| 操逼操网| 国产精品久久久久久久久AV大片| 日本一区三级韩国| 在线观看国产黄色| 亚洲国产综合久久天堂| 国产熟女一区二区| caoni国产亚洲av| 久久久久中出| 97干在线视频| 91丨九色丨43老版熟女| 国产人妻精品一区二区三区秋霞 | 开心五月婷婷| 亚洲欧美啪啪| 国产精品无码av嫩草| 久久久久精| 亚州,欧美在线| 中国一级操逼视频| 欧美色图私拍91| 三四中文字幕| 国内三级自拍小视频在线观看| 国产白丝在线| 亚洲熟女精品| 日日夜夜青青草母狗| 久久久久久久97| 秋霞一级视频在线观看免费| 久久9精品网站| 中文字幕人成乱码熟女香港| 欧美天天谢综合网| 2023天天操夜夜操| 人妻天天爽夜夜爽2| 精品丰满熟妇人妻一区| 九九热九九| 91在线超高颜值国产| 日本三级A片网站com| 精品久久久av无码免费| 天天综合网一91网| 精品在线蜜臀| 人人乐大香蕉| 大香蕉视频啪啪啪啪| 人妻熟女av国产网站| 东京热大香焦| 操屄不卡视频| 欧美色图99| 90后性网国产欧美| 九九九九亚洲| 丁香六月天| 欧美劲爆第一页| 综合自拍| 东北女人高潮视频| 国产欧美精品日韩区二区麻豆天美| 91 天天综合| 久久人妻办公室视频| 97视频免费播放| 校园春色 男人天堂 | 九九九九九九免费视频| 99热只有这里有精品| 久久久性爱视频| 国产成人精品必看| 97在线无精品| 国产精品午夜高潮呻吟久久av| 欧洲性人爱视频| 久久精品国产72国产精品福利| 欧美,日韩,中文,另类| 色情五月丁香| 国产自偷| 禁片 高清 在线观看视频网站| 亚洲毛片基地专区| 久久久久久久一级黄色打同平台| 久久久久久99AV无码免费网站| 欧美狠狠操| 久久久久人妻二区精品叶可怜| AV色图| 欧美精品999| 欧美中文字幕精品人妻| 日韩精品人妻系列无码天堂| Blackedraw视频一区二区| 毛片99-全集电影手机免费观看完整-B029AV | 国产在线精品偷| 素人伊尹大香蕉免费下载视频| 狠狠干狠狠干| 免费自拍三级综合| 色天天野狼综合社区| 久久麻豆一区二区| 欧美日本天堂| 人人射人人操人人摸| 亚州性9| 99蜜桃臀久久久欧美精品网站| 91碰碰碰| 亚洲成人福利电影免费| 精品无码欧美三级| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 人人妻天天做天天爽| 人妻少妇av在线观看| 日韩超碰97| 成熟熟女国产精品一区二区| 丁香五月激情网| 欧美探花网| 中国熟妇| 久久m| 涩涩五月天| 懂色av色欲av蜜臀av| 粉嫩av一区二区三区四季| 免费看毛片操穴| 欧美成人一级麻豆| 欧美日韩亚洲少妇寂寞影院正在播放 | 很很操在线| 国产成人精品必看| 色好看av| 思思热在线视频精品| 天天操夜夜操狠很操| 一二三区精品视频| 久久久久久久久久久久欧美日| 婷婷香蕉欧美在线一区二区三区| 在线强奷到舒服的无码视频 | 国产综合色精品在线观看| 无卡一区=区| 中文字暮97| 嗯嗯啊啊视频在线看| 亚洲天天做日日做天天谢日日 | 欧美久久伊人| 国内伊人久久久久久网站视频| 插插综合网天天影视网| 日韩亚洲国产视频| 国产久9| 啊啊啊啊啊在线视频| 熟女精品一区二区三区| 亚欧高清在线| 黄片免费久久久久久久| 中文字幕一区二区三区高清| 大香蕉免费3| 超碰午夜| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 60秒不遮不挡| 国产嫩草精品A88AV| 久久机热| 2003天天干夜夜操| 精品久久久一本一道| 本道在线| 日韩欧美久久婷婷网站| 超碰97人人乐| 黄页网站成人免费| 国产白丝网站| 丰满人妻-区二区三区免费看| 国产精品一区在线播放| 欧美色97| 欧美日韩中文视频播放| 国产熟妇 码视频户外直播| 亚洲欧美另类小说| 五月亭亭六月丁香| 老司机深夜18禁污污网站| 翔田千里无码一区| 天天操人人操狠狠插| 国产家庭乱伦性爱视频| 中文字幕精品一区二区精| 久久直播国产| 亚洲砖码砖专无区2023| 日韩九区| 夜夜操天| 久久大线蕉一区| 操操逼视频| 日本成人A片网站| 亚洲无吗在线视频| 亚洲成av人片色午夜乱码| 色婷婷电影| 久久大香蕉手机高清视频| 中美日韩毛片| 亚州色阁| 亚洲欧美清纯| 亚洲AV成人精品网站在AV| 日本东京热加勒比久久| 中文字幕亚洲在线一区| 国产精品一区人妻精品阁在线| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 无码99| 人妻大相焦在线| 欧美日韩97在线| 60秒不遮不挡| 中文字幕精品一区欧美| 丁香五月天激情网站| 亚洲有码 欧美精品| 国产农村妇女精品1区二区| 激情黄色五月天| 久久9久久| 玖玖爱在线视频免费观看| 狠狠色狠狠色狠狠五月| 97五月天| 蜜桃久久久久久久久久久久| 96一区二区三区| 亚洲无码精品AV久久久| 国产97视频免费观看| 欧美日韩情色一区二区| 亚洲高清男人天堂| 欧美日韩中文视频播放| 2018天天干在线视频| 国产精品久久久久av| 色老汉色| 午夜传煤十二区精品| 欧洲亚洲国产综合在线| 丰满人妻一区二区三区| 先锋音影AV| 色与欲影视| 天堂无码精品国产久| 欧美日韩夜夜| 熟女久久| 在线观看成人性爱免费小视频| 99热综合| 丝袜色综合| 亚洲熟女乱色一区二区三区| 在线播放中文字幕| 亚洲 另类 丝袜 自拍 动漫| 97视频在线免费观看| 首页中文字幕中文字幕免费| 久久久久久久久九九久孕交| 777超碰| 黄色视频特级毛片| 九九亚洲精品| 亚洲综合999| 亚洲精品成人激情在线| 色超碰综合| 欧美91精品国产自产| 激情综合久久| 丰满丝袜少妇AV| 八戒无码国产午夜福利| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 国产一区二区三区导航| 白丝少妇一区二区| 亚洲无码 国产无码| 欧美色五月| 熟女熟妇伦久久影院毛片一区二区| 日韩高清黄片| 色老汉色| 无码一区免费在线不卡| 人妻熟女一区在| 九九热只有精品| 无码免费精品高清| 学生妹天天看| 十八禁的黄污污免费网站| 美女淫穴| 熟妇xxxxx性春色| 日日夜夜骚| 91av熟女人妻| av大香蕉网站| 乱抡国产91| 久草资源在线视频官方总站日韩丝袜美腿| 久久天堂| 高清不卡国产| 成人性爱免费播放| 天天摸夜夜摸| 一个人免费视频观看在线WWW | 久久久无码精品人妻二区 | 天天天乱色综合全| 1级黄色夫妻对换性交免费看| 97人人中文网| 男人的天堂午夜av| 9长久久精品| yellow网站免费观看日韩高清无码| 性爱欧美五月| 国产女人与拘做受视频免费| 白丝在线一区| 久久精品国产亚洲AV成人直播| 999熟女精品| 蜜乳AV色欲AVAV无码| 日韩 女同 综合| 韩国一级做A片免费的| 亚洲中文字幕av | 操久久久久久| av网站免费看| 亚洲免费97免费| 精品人妻av在线播放| 嗯嗯啊好大| 色欲无码人妻日韩欧美精品| 色婷婷综合久久久久中文一区二区| 国产成人超碰在线| 精品v1区| 天天躁日日躁xxxxx| 97免费视频在线观看视频| 国产一区二区啪啪视频| 91天堂| 91精品国产综合久久久蜜臀| 99人妻碰碰碰久久久久禁片| 欧美 熟女 日韩| 欧美成人一区二区三区在线播放| 风韵犹存大大大大香蕉| 色妹子A V| 亚洲欧美在线观看无码| 精品二区三四区五电影 | 美女主播色欲91抠b在线播放| 久久无码成人| 欧美天天影院| 久久久久久久少妇| 精品一区二区综合熟妇| 中文字幕一区二区三区人妻不卡| 小草精彩毛片| 国产精品久久久久中文字幕| 97欧美日韩综合| 97香蕉人人乳| 久久人人爽人人爽人人片Ⅴ| 91欧洲国产成人久久精品网站| 日韩美女高潮喷水视频| 超碰久热| 偷拍亚洲熟女视频播放| 日韩欧美三级| 久久精品一区| 综合久| 国产午夜福利电影免费在线观看 | 三级片大波波| 8050无码八戒| 操屄日韩| 91白嫩| 亚洲污污网站| 久久久久久久久久久久久久久性生活视频| 天堂无码精品国产久| 精品国产乱码久久久久久网站入口| 一区二区三区四区久久视1| 日本123区操B视频| 国产成人精品必看| 亚洲图片欧美色| 91老熟女91老女人| 不卡人妻少妇精品毛片一区23区视频| 免费黄色A片| 日韩在线地址一| 欲香欲色综合天天伊人| 91美女看B| 91美女视屏| 欧美色色色| 粉嫩av在线一区二区| 搡老熟女免费视频| 青青五月天| 久久成人午夜狠狠| 国产精品国产自产拍高清AV| 中文字幕成人| www.av在线视频| 日本精品中文字幕视频| 啊啊嗯嗯好爽| 91精品国产91久久久久久久久久久久| 久久国产对白激情浪潮 | WWW.加勒比人妻一区不卡.com| av中文在线| 精品v日韩欧美国产| 国产精品爱欲| 国产成人亚洲精品无码最新在线| 天天欧美| 99热在线只有精品| 中 文字幕一区二区三四 五 区日 日 骚| 操操AV电影| 四虎影院成年人片| 91精品无码人妻系列| 涩涩涩综合| 免费观看网黄| 中国一级αV| 色网色网色网色网色网色| 欧美色图电影| 人妻熟女一区二区三区视频| 久久精品女同亚洲女同13| 97超碰总站| 色老牛| 欧美男人亚洲天堂| 91天天爱| 人妻无码久久一区二区三区免费| 成人日韩中文字幕| 宅男91视频在线播放| 久久久艹艹艹| 伊人大香蕉在线| 午夜呻吟欧美| 久久夜色一区二区| 乱码熟妇人妻久久久| 五月天伊人| 麻豆天美制片厂网站视频| 亚洲熟妇无码一区二区三区| 九久久九精品视频| 嫩草 人人网精品| 九一综合精品视品av| 大香蕉十区| 久久神马影院| 九九九九九九九九九五码| 久久精品夜色国产亚洲AV| 91美女色视频亚洲| 欧美传媒一区| 亚洲性综合11| 唯美清纯 妖精视频| 国产精品一区二区三| 搡老女人老91二区| 色婷婷国产精品一区在线观看| 伊人影院日本| 另类TS人妖一区二区三区| 尤物黄色在线观看网站| 亚洲黄色网址视频| 激情专区综合| 91 手机在线播放 绯色| 国产视频一区二区在线| 激情亚洲天堂| 日产成人久久| 日本欧美不卡| 免费无码婬片AAAA片直播色戒| 一级性爱视频免费观看 | 乱伦图av| 久久久夜夜嗨免费视频| 五月天综合| 亚洲男人的天堂一区二区| 天天日天天射天天干| 亚洲色图自拍| 伊香蕉综合久久久久久久噜噜噜| 中文视频在线观看| 国产精品点击进入在线影院| 手机看av网站在线看| 中文字幕第页| 亚洲视频一二区| 久久久久幕乱码| 国产一区二区在线播放| 无码区蜜乳| 人人插人人搞人人操| 欧美亚州手机在线| 欧美亚洲AN| 国产综合久| 国内亚洲高清无码| 亚卅熟女乱色| 97一区二区蜜臀| 天天综合网合集91| 97久久精品| 秋霞免费AV| 欧美淫穴| 九九九精品色乱九九九| 91成人18| 国产亚洲精品美女久久久m| 玖玖综合.com| 91无码人妻| 操东北女人| 国产小黄片在线免费观看| 天美传媒一二三区永久网站| 欧美精品久久| 91日韩| 国产女性无套 免费观看| 啊啊啊啊啊在线观看网址 | 亚洲综合有码| av在线观看不卡网站| 99只有精品| 天天综合网~91综合网| 综合久久97| 亚欧高清在线| 国产青视频| 久久超碰97| 强奸乱伦αv片| 久久久久七视频| 亚州性9| 另类一区| 亚洲青色欧美| 国产精品人妻免费精品| 亚洲精品国产精品乱码不99| 国产不卡中文字幕免费avi| 91日韩国产欧美亚洲另类精盘州至城都| 一级特黄aaa大片在线观看成人一级片在线观看 | 97色97好| 欧美高清色| 在线性黄高清免费视频| 国产欧美日韩臀| 呦呦一区| 91丨九色丨大屁股| 天堂精品| 思思热免费在线视频| 爱欲AV| 亚洲色图欧美一区二区不卡| 欧美日韩91| 玖日综合网| 一区二区影院| 九九亚洲精品| 国产日韩精品suv| 粉嫩国产精品久久粉嫩| 欧美97免费| 熟女人妻一区二区三区| 日韩精品怡红院| 成年人网站在线免费观看| 久久久蜜桃一区二区三区| 在线啊啊啊| 2021久久国产综合精品青草| 91九九九小逼| 51国产午夜精品视频| 欧美图片偷拍| 天天干嫩逼网| 国产免费一区二区三区最新不卡| 999国产精品999久久久久久| 能直接看AV的网站| 丝袜天堂网| 国产强奸超碰AV| 91视频综合在线| 精品久久久久av影院| 91精品国久久久久久无码| 都市久久精品激情亚洲| 欧美亚洲第1页| 91被操| 91色噜噜狠狠| 日韩欧美午夜一区二区| 久久精品老司| 国产精品成人无码a v毛片| 中文字幕人妻色偷偷久久皮| 久久久久久久伊人精品| 中文幕97| 99精品视频在线观看免费| 亚洲综合九| 中日韩久久久| 人妻 欧美亚洲| 免费毛片在线播放| 91色欧美| 人人乐大香蕉| 一级黄色性爱裸体视频| 9 7超碰在线免费观看| 日日操免费视频| 久久久久久久久久久999| www.99中文字幕| 久久久久久久综合,国产| 日韩久久激情精品| 精品久久久久综合无码| 天综合网| 欧美性爱日韩高清| 天天射夜夜| aaa一级黄片| 夜夜爽夜夜操| 亚洲日韩青青草色月| 岛国网址国产| 亚洲天堂一二| 五月黑AⅤ| 国产精品免费1区2区视频| 久久一二三四五六七八九区区| 国产AV久久野战精品| 婷婷精品久久av影视| 欧美性天天影视| 亚洲天堂五月天国产| 伊人精品国产| 成人日韩欧美| 日本黄大片在线观看视频| 日韩欧美水蜜桃人妻| 毛片电影一区二区三区| 久久91| 亚洲精品美女操逼| 国产精品成人在线| 成人性爱免费播放| 欲色啪| 欧美亚洲日韩人妻在线观看| 99e久久国产精品| 超碰欧美97资源| 天天综合网国产| 日本操逼二区| 欧亚日韩中文在线| 中文字幕女同在线| 日日爽夜夜爽| 亚洲性爱电影| 精品久久97| 十八禁黄色成人网站观看| 在线视频日韩欧美国产| 国产强奸无码乱伦| 超碰一区二区| 亚洲男人的天堂一区二区| 亚洲欧综合另类无码一区| 97资源久久| 欧美91精彩| 九九久久九九久久| 永久免费发布性爱网| 东京热双插| 久久人妻少妇| 国产suv精品一区二区四| 国产亚洲精品玖玖玖在线观看| 91丝袜美女视频| 少妇内射视频| 久久一区,青青青青草视频在线播放| 黄色一级视| 久久av无码| 日韩有码专区| 狠狠干2020| 国产又大又粗又长视频在线| 中文字幕jul-617人妻熟女| 国产探花日韩援交| 国产剧情在线| 天天综合网视频91| 九九拍拍精品视频在线播放| 嗯啊不要在线| 亚洲AV无码国产精品久久久久 | 亚洲熟妇图片| 四色永久成人网站| 无码黑人精品一区二区三区三| 高清国产精品福利网站| 欧美性高潮| 日韩精品一区,二区 九九...老司机| 啊啊啊啊视频免费| 色噜噜狠狠色综无码久久合欧美| 黄色网址在线免费观看| 黄色片A级一区二区三区| 91爱啪| 中文字幕一区二区三区四五区| 亚洲网污污污污| 美女的肌被草喷水视频| 日本熟妇熟色97一本在线观看| 四色永久成人网站| 国产亚州高清国产拍精| 三级AV入口| 玖玖爱在线视频免费观看| 嗯嗯不要视频| 97亚洲综合在线| 后入式999| 国产AV人人夜夜澡人人爽麻豆| 欧天美中出| 国产成人主播| 六月丁操逼| 97欧美精品综合| 亚洲s在线观看| 久久本道| 91在线美女| 97超碰美国| 国内精品999| 天堂精品在线| 亚洲色吧网| 91在线欧色| 性欧美另类高清| 成人情色一区二区| 黑丝内射一区二区三区| 国产亚洲一黄| 超碰97起碰| 亚洲色图91欧美日韩| 日韩另类色图| 亚洲中文制服诱惑| 午夜久久一区二区无码中出| oumeisetu综合| 日韩中字av一区| 亚洲精品丝袜| 久操 高清| 午夜精品久久久久| 一二三四视频在线社区中文字幕| 国产第二页| 欧美精品,四区。五区| 二级毛片| 婷婷人妻激情| 亚洲高清综合网| 亚洲综合另类| 国产精品内射婷婷一级二| 无码直播久久久| 亚洲一级性爱视频免费看| caoni国产亚洲av| 亚洲少妇中文字幕网址| 柠檬AV导航| 色性综合| 欧美美女在线高潮999| 亚洲情色在线| 久久久精品一区二区| 亚州色图欧美色图| 伊人操| 精品一区二区国产日韩| 乱伦色图网址是多少| 亚欧无码在线| www.久久爱| 日本精品88888888| 久久超碰98| 97中文字幕一区| 亚洲天堂男人天堂网| 91看黄片| 欧美日本国产日韩激情视频| 99久久久久| 色一射色一射| 97视频900| 亚州高清AV| 超碰免费人妻在线| 中文色综合| 一级免费啪啪片| 久久久久久久一级黄色打同平台| 欧美中文字幕一区| Aa东京男人的天堂| 天天爱天天操| 免费国产电影一区二区| 日本一区二区不卡精品| 精品久久久久久亚洲| 97色诱| 96精品久久久| 尤物网站91| 嫩草影院在线观看精品| 久久一二三四五六七八九区区区| 天天夜夜久久| 亚洲久久天堂| 三男一女不戴套的A片| 婷婷中文网| 夜夜操91744565| 国产丝袜高跟美女av免费观看| 九九九九九九视频免费| 91社操逼| 欧美日韩性感| 亚洲日韩XXX| 亚州91| 亚洲午夜福利在线影院| 91人人看| 日韩成人人妻网站| 91视频精品| 六十路日本| 色诱avtt| 色香欲综合| 婷婷激情五月天小说网| 97精品国产97久久久| 吊色| 人妻色偷色噜| 超碰99在线观看| 99热 按摩 日韩| 亚洲欧美色图片| 搡老熟女老女人老熟妇免费视频| 美女高潮视频91| 中文字幕人妻丝袜乱一区三区| wwwxxx日本爽| 操逼网站地址| 九月丁香| 熟女AV一区| 东京热男人的天堂| 中日高清无码操逼视频| 北京美女一区二区| 超碰97欧美| 91色色色| 天天色踪合| 成人26uuu| 麻豆天美久久91| a啊啊啊啊啊啊啊啊一区二区| 岛国黄| 亚洲少妇诱惑| 九九九九热| 婷婷久久综合| 精品女同一区| 97在线视频观看网站| 欧美 中文字幕 一区| 欧美美女视频| 午夜一区| 欧美日韩97在线| 精品中文字幕第一页| 人妻在线臀日韩| 高清孕妇孕交 交| 婷婷视频网| 91激情国产| 午夜福利免费福利视频| 久久超碰大香蕉| 男插女青青影院| 丰满少妇一区二区三区专区| 香蕉视频精品亚洲一区二区三区在线播| 亚洲色图欧美视频|