久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

Netty源碼解析:Connect與Bind兩大操作的核心差異與NIO事件鏈路

Netty源碼解析:Connect與Bind兩大操作的核心差異與NIO事件鏈路 做Netty源碼分析繞不開兩個(gè)最基礎(chǔ)也最容易被混為一談的操作客戶端的Connect服務(wù)端的Bind。我最初啃源碼時(shí)也有個(gè)錯(cuò)覺這兩個(gè)操作不都是“把channel往某個(gè)地址上一掛”么一個(gè)連遠(yuǎn)程一個(gè)綁本地好像只是參數(shù)不同。真把調(diào)用鏈一路追下去才發(fā)現(xiàn)從入口到NIO底層的興趣事件處理它們完完全全是兩套邏輯只是中段共用了一段注冊代碼導(dǎo)致表面看著很像。這篇Connect與Bind對比總結(jié)就把這兩條鏈路從入口到NIO事件循環(huán)徹底拆開講順便把backlog、connectTimeoutMillis、OP_ACCEPT和OP_CONNECT這幾個(gè)大家經(jīng)常面試被問、排查時(shí)又搞不清的細(xì)節(jié)一并說透。無論你是在準(zhǔn)備Netty相關(guān)面試還是排查線上連接不上、端口占用這類問題這篇都能當(dāng)一份源碼級的速查手冊用。1. 先說結(jié)論Connect與Bind招式像內(nèi)功完全兩套1.1 從一段最常見的使用代碼說起先用最典型的兩段代碼把場景立住。服務(wù)端是這么寫的ServerBootstrap serverBootstrap new ServerBootstrap(); serverBootstrap.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .option(ChannelOption.SO_BACKLOG, 1024) .childHandler(new ChannelInitializerSocketChannel() { Override protected void initChannel(SocketChannel ch) { ch.pipeline().addLast(new ServerHandler()); } }); serverBootstrap.bind(8080).sync();客戶端是這么寫的Bootstrap bootstrap new Bootstrap(); bootstrap.group(group) .channel(NioSocketChannel.class) .handler(new ChannelInitializerSocketChannel() { Override protected void initChannel(SocketChannel ch) { ch.pipeline().addLast(new ClientHandler()); } }); bootstrap.connect(127.0.0.1, 8080).sync();從使用者的角度兩個(gè)操作都返回ChannelFuture都可以.sync()阻塞等待失敗都能拿到.cause()寫起來體感高度一致。但它們背后的channel類型都不同一個(gè)是NioServerSocketChannel一個(gè)是NioSocketChannel這已經(jīng)暗示了后續(xù)走向完全不同。接下來從入口開始一追到底。1.2 兩條鏈路的“形似”與“神離”我把兩條調(diào)用鏈從入口到最終落到底層NIO的路徑壓縮成一句話bind鏈路ServerBootstrap.bind()→AbstractBootstrap.doBind()→initAndRegister()→doBind0()→channel.bind()→pipeline.fireChannelBind()→NioServerSocketChannel.doBind()→ServerSocketChannel.bind(port, backlog)connect鏈路Bootstrap.connect()→doResolveAndConnect()→initAndRegister()→channel.connect()→pipeline.fireChannelConnect()→NioSocketChannel.doConnect()→SocketChannel.connect(remoteAddress)兩條鏈都在initAndRegister()這里匯合完成channel創(chuàng)建和注冊到NioEventLoop的selector之后立刻分道揚(yáng)鑣。后面會看到真正的格局差異在NioEventLoop處理就緒事件時(shí)才暴露出來bind之后注冊O(shè)P_ACCEPT等新連接connect之后先注冊O(shè)P_CONNECT等連接完成完成之后再轉(zhuǎn)向OP_READ讀寫數(shù)據(jù)。1.3 這篇總結(jié)適合誰讀完能帶走什么這篇總結(jié)適合這么幾類人正準(zhǔn)備Netty源碼面試需要把啟動流程講清楚的人線上遇到“偶爾連不上”、“大量TIME_WAIT”、“端口明明沒占用卻bind失敗”這類問題想從原理層面找切入點(diǎn)的開發(fā)以及剛開始看Netty源碼被doBind0、initAndRegister這些方法名繞暈的自學(xué)者。讀完你至少能帶走四樣?xùn)|西第一Connect和Bind在傳播路徑上的真正分水嶺第二OP_ACCEPT與OP_CONNECT在NioEventLoop里是怎么被區(qū)別處理的第三backlog、connectTimeoutMillis這些參數(shù)到底作用在哪一層第四遇到bind失敗、connect超時(shí)這些常見錯(cuò)誤時(shí)一套可復(fù)用的排查思路。2. 入口分叉Bootstrap.connect與ServerBootstrap.bind在AbstractBootstrap里怎么走2.1 bind()的調(diào)用鏈從validate到doBind0ServerBootstrap本身沒有重寫bind方法它直接繼承了AbstractBootstrap的bind(SocketAddress localAddress)。我們跟進(jìn)去看核心的doBindprivate ChannelFuture doBind(final SocketAddress localAddress) { final ChannelFuture regFuture initAndRegister(); final Channel channel regFuture.channel(); if (regFuture.cause() ! null) { return regFuture; } if (regFuture.isDone()) { ChannelPromise promise channel.newPromise(); doBind0(regFuture, channel, localAddress, promise); return promise; } else { final PendingRegistrationPromise promise new PendingRegistrationPromise(channel); regFuture.addListener(new ChannelFutureListener() { Override public void operationComplete(ChannelFuture future) throws Exception { Throwable cause future.cause(); if (cause ! null) { promise.setFailure(cause); } else { promise.registered(); doBind0(regFuture, channel, localAddress, promise); } } }); return promise; } }這段代碼的關(guān)鍵邏輯在于initAndRegister()是異步的channel注冊到EventLoop上不一定已經(jīng)完成所以這里分兩種情況處理——注冊已完成就直接doBind0未完成就掛一個(gè)監(jiān)聽器等注冊完成后再執(zhí)行doBind0。這是Netty異步編程的一個(gè)典型設(shè)計(jì)后續(xù)動作不一定立刻執(zhí)行但它一定會在正確的時(shí)間點(diǎn)被觸發(fā)。繼續(xù)看doBind0這里有個(gè)值得一提的小細(xì)節(jié)private static void doBind0( final ChannelFuture regFuture, final Channel channel, final SocketAddress localAddress, final ChannelPromise promise) { channel.eventLoop().execute(new Runnable() { Override public void run() { if (regFuture.isSuccess()) { channel.bind(localAddress, promise).addListener(ChannelFutureListener.CLOSE_ON_FAILURE); } else { promise.setFailure(regFuture.cause()); } } }); }注意兩個(gè)點(diǎn)。第一channel.bind()被放進(jìn)了eventLoop().execute()里執(zhí)行保證了channel操作一定在它所屬的IO線程上串行發(fā)生從根源上避免了多線程并發(fā)寫channel的問題。第二這里加了一個(gè)CLOSE_ON_FAILURE監(jiān)聽器bind一旦失敗channel會被自動關(guān)閉這是個(gè)很容易被忽略的兜底機(jī)制——所以線上bind失敗后即使你不手動close這個(gè)channel也不會泄漏。2.2 connect()的調(diào)用鏈doResolveAndConnect先把地址解析交給線程池Bootstrap重寫了connect但真正的實(shí)現(xiàn)不在connect里而是轉(zhuǎn)到了doResolveAndConnectprivate ChannelFuture doResolveAndConnect( final SocketAddress remoteAddress, final SocketAddress localAddress) { final ChannelFuture regFuture initAndRegister(); final Channel channel regFuture.channel(); if (regFuture.isDone()) { if (!regFuture.isSuccess()) { return regFuture; } return doResolveAndConnect0(channel, remoteAddress, localAddress, channel.newPromise()); } else { final PendingRegistrationPromise promise new PendingRegistrationPromise(channel); regFuture.addListener(new ChannelFutureListener() { Override public void operationComplete(ChannelFuture future) throws Exception { Throwable cause future.cause(); if (cause ! null) { promise.setFailure(cause); } else { promise.registered(); doResolveAndConnect0(channel, remoteAddress, localAddress, promise); } } }); return promise; } }結(jié)構(gòu)與doBind幾乎一致也都是等注冊完成后再發(fā)起真正的連接動作。接下來看doResolveAndConnect0這里就出現(xiàn)了和bind的第一個(gè)顯著差異private ChannelFuture doResolveAndConnect0( final Channel channel, SocketAddress remoteAddress, final SocketAddress localAddress, final ChannelPromise promise) { try { EventLoop eventLoop channel.eventLoop(); AddressResolverSocketAddress resolver this.resolver.getResolver(eventLoop); if (!resolver.isSupported(remoteAddress) || resolver.isResolved(remoteAddress)) { channel.connect(remoteAddress, localAddress, promise); return promise; } FutureSocketAddress resolveFuture resolver.resolve(remoteAddress); ... } }如果遠(yuǎn)程目標(biāo)是域名而不是IPNetty會先用AddressResolver異步解析DNS解析完成后再真正發(fā)起channel.connect()。DNS解析默認(rèn)走的是DefaultAddressResolverGroup底層用Netty自己封裝的一套異步DNS客戶端實(shí)現(xiàn)。2.3 為什么connect要異步解析地址bind卻不用這個(gè)問題我當(dāng)初也想過bind拿到的是本地地址本機(jī)網(wǎng)卡信息是確定性的不存在“需要查DNS”的場景所以bind鏈路不需要resolver這一層。connect則完全相反你寫connect(some-service.example.com, 8080)時(shí)底層需要先把域名解析成IP而DNS查詢在網(wǎng)絡(luò)環(huán)境里可能耗時(shí)幾十毫秒甚至數(shù)秒如果阻塞在IO線程上整個(gè)EventLoop上的其他channel都會被拖累。Netty把這一步也異步化了讓DNS解析發(fā)生在獨(dú)立的Resolver線程組里解析完成后由回調(diào)把結(jié)果帶回EventLoop再執(zhí)行真正的connect。這一點(diǎn)對比能幫我們在源碼層面理解一個(gè)宏觀設(shè)計(jì)原則任何可能阻塞IO線程的操作Netty都會想方設(shè)法移出去或者以異步回調(diào)的方式回來。bind是純本地系統(tǒng)調(diào)用最快路徑就是直接在EventLoop里同步執(zhí)行connect涉及域名解析就要額外走一層。3. 源碼逐行看bind與connect在Channel層真正做了什么3.1 bind從pipeline一路摸到NioServerSocketChannel.doBindchannel.bind(localAddress, promise)會從DefaultChannelPipeline進(jìn)入。Netty的pipeline傳播規(guī)則是出站事件從Tail開始往前找直到某個(gè)ChannelOutboundHandler處理它入站事件從Head開始往后傳播。bind是典型的出站事件所以它會倒著走pipelineTailContext - 用戶OutboundHandler - ... - HeadContextHeadContext本身就實(shí)現(xiàn)了ChannelOutboundHandler它的bind方法最終調(diào)用了unsafe.bind。unsafe是Netty對JDK底層channel操作的封裝層全名叫Channel.Unsafe名字聽著危險(xiǎn)其實(shí)是完成真正臟活累活的地方。再往下就到了AbstractChannel.bindOverride public final void bind(final SocketAddress localAddress, final ChannelPromise promise) { ... boolean wasActive isActive(); doBind(localAddress); if (!wasActive isActive()) { pipeline.fireChannelActive(); } promise.setSuccess(); }這里有兩個(gè)關(guān)鍵判斷bind之前channel處于inactive狀態(tài)bind成功之后channel變成active于是觸發(fā)fireChannelActive()。這個(gè)事件很重要——服務(wù)端會在doBeginRead里根據(jù)isActive狀態(tài)注冊O(shè)P_ACCEPT。真正落到NIO層的是NioServerSocketChannel.doBindOverride protected void doBind(SocketAddress localAddress) throws Exception { if (PlatformDependent.javaVersion() 7) { javaChannel().bind(localAddress, config.getBacklog()); } else { javaChannel().socket().bind(localAddress, config.getBacklog()); } active true; }這里直接調(diào)用了JDK NIO的ServerSocketChannel.bind(localAddress, backlog)。注意第二個(gè)參數(shù)config.getBacklog()這個(gè)值就是從ChannelOption.SO_BACKLOG讀出來的傳給操作系統(tǒng)控制連接隊(duì)列深度的關(guān)鍵參數(shù)。如果這個(gè)端口已經(jīng)被別的進(jìn)程占用這一行會拋出SocketException(Address already in use)一路向上傳播最終體現(xiàn)在你bind().sync()拿到的異常里。3.2 connect從pipeline一路摸到NioSocketChannel.doConnectconnect同樣是出站事件同樣從Tail倒著走到HeadContext.connect然后進(jìn)入unsafe.connect最終到達(dá)NioSocketChannel.doConnectOverride protected boolean doConnect( SocketAddress remoteAddress, SocketAddress localAddress) throws Exception { if (localAddress ! null) { javaChannel().socket().bind(localAddress); } boolean success false; try { boolean connected javaChannel().connect(remoteAddress); if (!connected) { selectionKey().interestOps(SelectionKey.OP_CONNECT); } success true; return connected; } finally { if (!success) { doClose(); } } }這段代碼是理解非阻塞connect的關(guān)鍵。JDK NIO的SocketChannel.connect在非阻塞模式下并不會阻塞到連接建立完成而是立即返回一個(gè)布爾值如果返回true說明連接已經(jīng)立刻建立比如連本機(jī)回環(huán)地址如果返回false說明連接還在進(jìn)行中。此時(shí)Netty立刻把興趣事件設(shè)置為OP_CONNECT把“等待連接完成”這件事交給了Selector——相當(dāng)于告訴操作系統(tǒng)這個(gè)socket正在連接中等它連好了你通知我。finally塊里的doClose()是一個(gè)很嚴(yán)謹(jǐn)?shù)亩档兹绻谠O(shè)置興趣事件之前出了任何異常說明連接沒正常發(fā)起必須關(guān)閉channel避免半初始化狀態(tài)的socket泄漏。當(dāng)操作系統(tǒng)通知連接完成時(shí)NioSocketChannel.doFinishConnect會被調(diào)用Override protected void doFinishConnect() throws Exception { if (!javaChannel().finishConnect()) { throw new ConnectException(finishConnect() returned false); } }finishConnect()會確認(rèn)連接狀態(tài)如果連接已經(jīng)建立返回true這條鏈路就通了如果連接失敗比如對端拒絕這里會直接拋出ConnectException——這就是你在客戶端sync()時(shí)拿到Connection refused異常的最底層來源。3.3 NioEventLoop里OP_ACCEPT與OP_CONNECT的分叉處理服務(wù)端和客戶端的命運(yùn)在NioEventLoop的processSelectedKey里真正分道揚(yáng)鑣。看這段核心代碼if ((readyOps (SelectionKey.OP_READ | SelectionKey.OP_ACCEPT)) ! 0 || readyOps 0) { unsafe.read(); } if ((readyOps SelectionKey.OP_WRITE) ! 0) { ch.unsafe().forceFlush(); } if ((readyOps SelectionKey.OP_CONNECT) ! 0) { int ops k.interestOps(); ops ~SelectionKey.OP_CONNECT; k.interestOps(ops); unsafe.finishConnect(); }OP_ACCEPT被歸到和OP_READ同一個(gè)分支走的是unsafe.read()。但這時(shí)的“讀”不是讀數(shù)據(jù)而是讀新連接。NioMessageUnsafe.read()內(nèi)部會調(diào)用doReadMessages把已經(jīng)完成三次握手的連接逐個(gè)accept()出來封裝成NioSocketChannel然后觸發(fā)pipeline.fireChannelRead。服務(wù)端的pipeline里有一個(gè)關(guān)鍵handler叫ServerBootstrapAcceptor它會在channelRead里把新accept出來的channel注冊到workerGroup上完成從boss線程到worker線程的交接。OP_CONNECT則是獨(dú)立的第三個(gè)分支處理邏輯更簡單先清理掉OP_CONNECT興趣位然后調(diào)用finishConnect確認(rèn)連接結(jié)果。確認(rèn)成功之后客戶端channel進(jìn)入active狀態(tài)觸發(fā)fireChannelActive隨后開始注冊O(shè)P_READ進(jìn)入正常的讀寫工作狀態(tài)。這里可以梳理成一張對比表對比維度Bind鏈路Connect鏈路入口方法ServerBootstrap.bindBootstrap.connect監(jiān)聽事件OP_ACCEPT等待新連接OP_CONNECT先等連接完成就緒事件分支與OP_READ同分支走unsafe.read獨(dú)立分支走unsafe.finishConnect完成后動作accept出NioSocketChannel交給workerchannelActive后轉(zhuǎn)OP_READ底層NIO操作ServerSocketChannel.bindSocketChannel.connect/finishConnect失敗典型異常Address already in useConnection refused / connect timed out4. 參數(shù)、超時(shí)與狀態(tài)機(jī)三個(gè)容易忽略但決定成敗的細(xì)節(jié)4.1 backlog如何影響bind本地地址與臨時(shí)端口問題backlog這個(gè)參數(shù)在面試?yán)锍霈F(xiàn)頻率很高但很多人只知道“設(shè)大一點(diǎn)可以提高并發(fā)”說不清它到底管什么。在TCP協(xié)議里服務(wù)端socket的listen隊(duì)列由兩部分組成未完成三次握手的半連接隊(duì)列SYN Queue和已完成握手的全連接隊(duì)列Accept Queue。backlog主要控制全連接隊(duì)列的長度。當(dāng)并發(fā)連接瞬間涌入accept處理速度跟不上連接建立速度時(shí)隊(duì)列就是緩沖區(qū)。隊(duì)列滿了新的連接請求會被內(nèi)核直接丟棄或拒絕。Netty的NioServerSocketChannelConfig在設(shè)置默認(rèn)backlog時(shí)有個(gè)細(xì)節(jié)優(yōu)先讀操作系統(tǒng)的net.core.somaxconn配置讀不到才用默認(rèn)值1024。也就是說你ServerBootstrap里不顯式設(shè)置SO_BACKLOG時(shí)實(shí)際生效值不一定是你以為的默認(rèn)值。我在實(shí)測中遇到過sysctl net.core.somaxconn為128的服務(wù)器不設(shè)置SO_BACKLOG時(shí)并發(fā)一大就出現(xiàn)大量連接被重置最后顯式設(shè)置SO_BACKLOG為1024才解決——這種問題從現(xiàn)象上很難想到根因在這里。再提一個(gè)connect鏈路上的端口細(xì)節(jié)connect方法還有一個(gè)重載可以傳localAddress但絕大多數(shù)場景不需要。如果你不指定操作系統(tǒng)會從臨時(shí)端口范圍內(nèi)自動選擇一個(gè)作為客戶端端口如果指定了底層NioSocketChannel.doConnect里會先對本地地址做一次bind。指定本地端口時(shí)要注意端口沖突概率很高尤其是當(dāng)你部署多個(gè)客戶端實(shí)例在同一臺機(jī)器上時(shí)指定固定本地端口容易遇到Address already in use。4.2 connectTimeoutMillis背后的定時(shí)任務(wù)邏輯ChannelOption.CONNECT_TIMEOUT_MILLIS是客戶端連接超時(shí)配置默認(rèn)值是30秒。這個(gè)超時(shí)時(shí)間的實(shí)現(xiàn)也值得講一下它不是在doConnect里同步等待而是通過EventLoop的schedule注冊了一個(gè)延遲任務(wù)在指定時(shí)間后檢查連接是否還在進(jìn)行中如果是則關(guān)閉channel并讓promise失敗。有一個(gè)容易被誤解的點(diǎn)這個(gè)超時(shí)是從調(diào)用connect到連接事件就緒的總超時(shí)。如果系統(tǒng)內(nèi)核在更早的時(shí)候返回了ECONNREFUSED那你拿到的會是ConnectException而不是超時(shí)異常兩者產(chǎn)生原因完全不同排查方向也不同。我在實(shí)際調(diào)線上接口時(shí)發(fā)現(xiàn)很多“莫名其妙連接超時(shí)”其實(shí)是因?yàn)槟繕?biāo)端口被防火墻默默丟棄了請求包內(nèi)核收不到任何響應(yīng)才硬生生等到超時(shí)。這種情況從源碼角度很好理解connect發(fā)出了但沒有任何ACK或RST回來NIO事件一直不觸發(fā)只能靠定時(shí)任務(wù)兜底。4.3 從狀態(tài)機(jī)再看兩件事的區(qū)別Netty的channel狀態(tài)遷移是理解兩個(gè)操作底層差異的一個(gè)很好的視角。在bind鏈路上NioServerSocketChannel創(chuàng)建時(shí)是inactivebind成功后變active于是注冊O(shè)P_ACCEPT之后一直穩(wěn)定在“接受新連接”的狀態(tài)不再有大的狀態(tài)遷移。在connect鏈路上NioSocketChannel創(chuàng)建時(shí)同樣是inactiveconnect發(fā)起后進(jìn)入“連接中”的中間態(tài)finishConnect成功后才active然后注冊O(shè)P_READ開始讀寫。這里藏著一個(gè)經(jīng)常被忽視的點(diǎn)客戶端channel在register階段并不會注冊任何IO興趣事件。它得等connect完成之后通過fireChannelActive事件觸發(fā)doBeginRead才注冊O(shè)P_READ。如果你在handlerAdded里就嘗試讀數(shù)據(jù)會發(fā)現(xiàn)讀不到任何東西——不是沒數(shù)據(jù)而是事件還沒注冊上。這個(gè)時(shí)序問題導(dǎo)致很多新手在寫客戶端ChannelInitializer時(shí)把“連接建立后主動發(fā)請求”的邏輯放錯(cuò)了地方正確做法是放到channelActive回調(diào)里。5. 實(shí)戰(zhàn)排查遇到連接類問題怎么用源碼思維定位5.1 先分清是bind還是connect階段出錯(cuò)排查連接問題第一步永遠(yuǎn)是定位錯(cuò)誤發(fā)生在bind階段還是connect階段這兩個(gè)階段的異常類完全不一樣但現(xiàn)象可能很接近。bind階段最常見的錯(cuò)誤是Address already in use也就是端口占用。但要注意這個(gè)異常不一定只出現(xiàn)在bind那一刻有些時(shí)候出現(xiàn)在ServerBootstrapAcceptor處理新連接時(shí)——如果你把childGroup的線程數(shù)配得太小新連接accept出來之后沒法及時(shí)注冊到worker也可能出現(xiàn)資源相關(guān)的異常但這就不是bind本身的問題了。判斷方法很簡單服務(wù)端啟動時(shí)bind().sync()拋出的異常基本就是bind階段問題啟動成功后運(yùn)行期間報(bào)的異?;径家鵤ccept和worker線程方向去查。connect階段的錯(cuò)誤類型更豐富異?;颥F(xiàn)象可能原因排查方向Connection refused目標(biāo)端口未監(jiān)聽或連接被RSTss -lnt看端口狀態(tài)Connection timed out防火墻丟包、目標(biāo)IP不可達(dá)檢查路由、防火墻策略、安全組Address already in use客戶端本地端口被占用檢查是否顯式指定了localAddress大量TIME_WAIT導(dǎo)致端口耗盡短連接過多連接未復(fù)用考慮連接池、調(diào)整端口范圍No buffer space available本地端口或文件句柄耗盡sysctl查看端口范圍、ulimit5.2 常見連接失敗問題速查表結(jié)合我自己踩過的坑整理一份更貼近現(xiàn)場的速查表服務(wù)端端口看著沒被占用但bind一直失敗先查netstat -tlnp確認(rèn)是TCP端口而不是UDP端口占用沖突再查是否設(shè)置了SO_REUSEADDR。Linux下端口處于TIME_WAIT狀態(tài)時(shí)如果沒開SO_REUSEADDRbind同樣會失敗Netty默認(rèn)SO_REUSEADDR是false所以高并發(fā)短連接場景下服務(wù)端重啟很容易遇到這個(gè)問題建議在option里顯式打開??蛻舳诉B接拒絕但服務(wù)端確實(shí)在監(jiān)聽確認(rèn)你連的不是回環(huán)地址。如果服務(wù)端監(jiān)聽在127.0.0.1你拿內(nèi)網(wǎng)IP去連是連不上的反過來監(jiān)聽在0.0.0.0或具體內(nèi)網(wǎng)IP用127.0.0.1連也可能失敗取決于防火墻規(guī)則。連接超時(shí)但三五秒后又恢復(fù)先懷疑半連接隊(duì)列溢出??磗s -s里SynCookies相關(guān)的統(tǒng)計(jì)或netstat -s里的listen queue overflow計(jì)數(shù)如果一直在增長說明backlog不夠或者accept處理不過來。connect失敗但服務(wù)端沒收到任何信息基本可以確定流量根本沒到服務(wù)端從防火墻、安全組、網(wǎng)絡(luò)策略方向排查不要繼續(xù)在應(yīng)用代碼里浪費(fèi)時(shí)間。5.3 我常用的斷點(diǎn)調(diào)試與日志技巧源碼分析不能只看不調(diào)我自己的經(jīng)驗(yàn)是準(zhǔn)備一個(gè)最小復(fù)現(xiàn)工程一個(gè)只打印channelActive的客戶端ChannelInitializer一個(gè)帶LoggingHandler的服務(wù)端ChannelInitializer。然后打兩組斷點(diǎn)——第一組在NioSocketChannel.doConnect和NioServerSocketChannel.doBind確認(rèn)底層NIO調(diào)用參數(shù)第二組在NioEventLoop.processSelectedKey確認(rèn)事件就緒后走的是哪個(gè)分支。日志方面Netty自帶的LoggingHandler能打印出pipeline上每個(gè)事件的傳播過程包括REGISTERED、ACTIVE、READ等這些日志可以把時(shí)序問題可視化比你在業(yè)務(wù)handler里打日志全面得多。我排查一個(gè)客戶端偶發(fā)連接失敗問題時(shí)就是靠LoggingHandler發(fā)現(xiàn)channelActive和channelRead之間出現(xiàn)了接近兩秒的間隔才定位到DNS解析耗時(shí)的根因——不是連接慢是域名解析慢。connectTimeoutMillis這個(gè)參數(shù)也要在測試環(huán)境里刻意壓出超時(shí)場景來驗(yàn)證行為把超時(shí)設(shè)為1毫秒連一個(gè)不存在且被防火墻靜默丟棄的IP觀察channel的關(guān)閉時(shí)機(jī)和異常類型。這樣你能準(zhǔn)確區(qū)分“內(nèi)核立即告訴我們連不上”和“等超時(shí)任務(wù)把我們踢下線”兩種模式線上遇到問題時(shí)的第一反應(yīng)就會完全不一樣。6. 一點(diǎn)個(gè)人體會源碼拆到這一步我自己最大的收獲不是記住了哪幾個(gè)方法名而是形成了一個(gè)判斷網(wǎng)絡(luò)問題的“分層反射”先看錯(cuò)誤發(fā)生在bind還是connect再看是內(nèi)核直接反饋還是靠超時(shí)兜底最后才鉆進(jìn)業(yè)務(wù)代碼找原因。Netty把Connect和Bind設(shè)計(jì)成這樣兩張各有節(jié)奏的流程圖本質(zhì)上是為了在同一套非阻塞模型下同時(shí)安頓好“等待連接建立”和“等待新連接到來”這兩種完全不同性質(zhì)的等待。理解了這一層再看Netty源碼分析里其他和連接生命線相關(guān)的代碼比如重連、斷線檢測、優(yōu)雅停機(jī)都會順暢很多。最后再分享一個(gè)小技巧把這兩條鏈路的源碼各讀三遍之后試著關(guān)掉IDE自己在紙上畫出從Bootstrap.connect到內(nèi)核connect()的每一跳再畫出從ServerBootstrap.bind到OP_ACCEPT就緒的每一跳。畫得出來的這部分源碼你就真的吃透了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
日本一级二级三级网站| 1000午夜黄色| 国产中文大片资源中文字幕| www.久久超碰| 北京美女一区二区| 亚州宗合另类| 欧美性生活综合| A级片日韩欧美国产欧美视频精选观看| 4141514逼喷水三级片| 色综合久久88色综合久久天天| 蜜臀久久99精品久久久久久酒店| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师 | 日韩一级二级三级免费看完整版| 骚女高跟AV在线| 久久啊哟| 狼人综合婷婷激情四射| 五月久久HDAV| 偷拍 精品 另类 四区| 中文字幕一区二区免费在线| 欧洲特黄毛片免费看欧洲毛片| 热热色AV| 蜜桃天美传媒AV一区二区三区| 自拍二页| 校园春色综合色| 亚洲不卡AV在线| 一区二区三区欧美激情| 操逼逼中文字幕| 91亚洲色人| 探花精品 一区二区| 九九热精品| 97操碰| 91久久国产精品| 精久久久| 亚洲日本大香蕉1| 91欧美性| 97chaopenrihan| 97射欧美| 人妻熟女一区二区在线视频| 久久香蕉国产线看观看亚洲女人 | 天天躁日日躁AAAXX| 激情综合二| 日本成人电影资源网| 在线免费观看日韩一区| 嗯啊不要啊在线 | 歐美一級亂黃99在綫精品| 激情婷婷五月天| 成人国产精品三级A片| 不卡一区二区日本视频| 天天操夜夜操| av绯色| 台湾佬中文娱乐自偷自拍| 免费A V在线播放| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 好色综合| 亚洲高清无毛一区二区| 亚洲色欲天天天堂色欲网女| 国产av强奸美女| 久久久亚洲欧美综合| 亚洲国产一区二区入口| 久久性爱视频| 亚洲天堂自拍| 亚洲色图欧美色18直播在线| 国产强奸无码乱伦| 超碰人妻天天干| 色欲蜜臀AV| 九九碰九九爱97| 亚 欧 美 综合| 欧美性后入| 色情亚洲日本成人| 精品高清牛人盗摄一区二区三区中文字幕A片免费在线观看 | 日韩一级欧美一级国产一级台湾| 精品欧美А∨无码黑人大荫蒂| 亚洲成人一区二区精品| 激情第四色| 国产黄色动态精品| 欧美激情 亚洲色图| 久操免费观看| 国产绿奴视频在线观看| 黄污污污污| 96AV久久久| 91女优在线观看| 999热这里只有精品| 国产精品点击进入在线影院高清| 97人人操人人摸人人爱| 国产白嫩精品久久| 久久久久女教师免费一区| 26UUU欧美日本| 亚洲欧美在线观看2021| 97超碰超欧美。| 97综合激情| 免费人成在线观看网站品爱网| 国产精品自产拍在线观看社区| 亚洲精品819| 极品久久久久久久久久久久久久| 久久久91| 国产亲戚伦亲在线| 久久、1234| 好属操| 日本高清_区二区三区 | 自怕偷自怕亚洲精品| 色色婷婷五月天| 天堂伊人久久| 精品日韩人妻视频| 91在线页| 欧美热图99| 蜜桃视频成a人v在线| 91在线视频免费中出| 伊人网在线点播| 7777奇米影视久久| 神马久久69| 欧美性第一页| 荡小穴在线观看| 国色综合天| 婷婷99狠狠| 欧美96交| 狠狠躁AV| 人妻81p| 熟女天天干| 偷拍亚洲| 97中文字幕色| 小视频玖玖| 加勒比海成人视频网| 超碰免费人妻人人| 熟妇国产免费一区| 51一区二区三区| 日日妻色网| 日本免费专区| 啊啊啊啊啊啊啊啊要喷了| 亚洲?V无码专区在线电影| 欧美精品 - 91爱爱| 97色碰| 女色视频社区| 国产精品午夜福利亚洲综合网| 艳美熟妇先锋一二三区| 国产精品嫩草影院午夜两性| 色臀aV| 日韩欧美午夜视频在线| 性欧美91| 啊啊啊好湿久久| 中文字幕国产| 天天日天天干天天摸天天操| 91九九| 中出欧美| 99精品热| www99热| 久久中出| 欧美日韩亚洲高清不卡一区二区三区| 久久精品 六十路 熟女 欧美| 熟女自慰久久久| 成人小说视频在线精品欧美| 熟妇熟女一区二区三区| 佐山爱中文字幕| 欧美少妇性爱网站| 久久久久久九| 亚州久久9| 成人性爱全视频观看| 99超碰网| 国产美女激情| 亚洲高潮少妇| 亚洲三区视频| 91狠狠| 色天堂在线观看| 免费AV播放| 欧美一二三级精品在线| 91亚洲狠狠色| 97免费视频网| www老逼91| 久久九九国产精品| 日韩国产精品人妻无码久久久| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 五月综合久久| 欧美性爱五月天| 精品无码一区二区三区色欲| 人妻熟妇一区二区三区| oumeizonghese,www| 婷婷亚洲色| ji熟女.com| 成年人黄色| 色九九综合AV| 91l欧美在线| 色婷婷六月| 欧美色性爱| 99无码狠狠久久| 超碰97首页| 乱老女人一区二区视频| 日本东京热加勒比久久| 国产福利合集| 超碰97中文| 欧美日韩国产色五月综合在线| 亚洲熟妇丝袜在线观看| 性色一线| 七久久久| 色欲日韩欧美在线一区| 明星性猛交ⅹxxx乱大交| 麻豆天天躁天天揉揉AV| 超碰久草| 人妻人妻天天碰| 超碰午夜在线| 美女人妻色网站| www.色婷婷| 天天躁日日躁AAA片李宗瑞| 欧 美 自 拍 偷 拍| 国产精品福利视频| 久久一区二区蜜桃| 97免费在线观看| 天天综合网视频91| 啊啊啊好舒服视频| 78精品| 91爱剪切久久| A片大香蕉在线| A级国产欧美激情在线| 久草资源在线| 丰满人妻一区二区三区| 91精品人| 亚洲精品无码成人久久久99| 日韩av乱伦| 色官网在线| 国产免费永久精品无码| 久久天天摸| WWW4虎| 色婷婷在线视频精品导航| 久草精品一区| 久久一区二区加油站| 天天插天天操天天摸天天射天天看| 中文字幕AV片| 丰满欧美放荡少妇在线| 亚洲黄片免费在线播放| 一区二区三区免费岛国片| 国产 日韩 另类 视频一区爱| 人妻乱仑一区二区三区| 欧美操逼一二三区| 日韩精品熟妇| 91综合无码| 久久精品国产亚洲5555| 萌白酱自拍视频| 久久无码电影| 天天综合网国产| 亚洲黄日韩无码专区| 色偷偷色偷偷欧美日韩| 久久精品国产亚洲粉嫩| 日本操逼视频不卡直接放| www.大香| 97亚洲一区| 91久久堂| 久久啊啊| 日韩久久激情精品| 蜜臀在线免费观看在线免费观看| 美日韩在线不卡人妻| 少好三P| 在线亚洲欧美| 久99热| 91成人在线| 精品9999| 极品欧美一区二区三区| 亚洲图片 91| 久日综合网| 日韩无码一区二区三区| 久久鲁干| 99热精品国产| 九九九九精| 色色福利| 330dv亚洲成年视频网| 亚洲小说视频| 久久久久久AV无码免费网站| 97久久超碰国产网站| 欧美日韩97在线| 亚洲97综| 91狠狠综合久久| 欧洲精品在线播放| aa片毛片| 混色激情av| 国产在线精品电影观看| 日本成熟少妇A∨网站| www.婷婷五月天| 人妻天天爽| a亚洲欧美色欲| 九九伊人网| 超碰国产精品无码| 日韩女优在线| 色波多| 校园春色制服丝袜中文字亚洲 | 一级毛片久久久久久久女人18| 天天摸,夜夜摸| 国产精品粉嫩福利在线| 涩涩涩综合| 天美av在线观看| 大白逼三四级| 色噜噜人妻丝袜a∨先锋影| 久久精品夜色国产亚洲AV| 91黑人狂躁丰满熟妇| 色婷婷丁香五月天| 午夜啊啊| 开心激情站| 就去色综合| 天天日天天干天天整| 热热色色综合| 日韩一级片在线看| 欧美色交| 99久久这里只有精品| 夜夜嗨一区二区三区直播内容| 18禁超污无遮挡无码免费网| 中文字幕日韩情色| 日本午夜福利影院| 丝袜加勒比| 婷婷AV一区二区三区| 嗯~啊~快点 死我视频免费看网站| 久久性爱精品一区| 超碰97欧美日韩| 欧亚性爱视频免费看| 久久久久久少妇| 亚洲日韩美国人妻| 日日干日日摸| 青青草精玖玖69精品| 国产又黄又粗的视频| 男生女生啊啊啊啊| 久久久久国产精品片区无码直播| 视频在线观看青青99国产| 欧美在线观看综合国产| 日本精品999| 黄色二级片网站| 强奸乱伦Av网| 东京热综合久久一区二区| 欧美亚洲日韩人妻在线观看| 精品日韩人妻视频| 日韩97视频| 自偷自拍的亚洲视频| 97超碰色色| 欧美大战久久久伊人| 亚州AV无码国产精品| 亚洲交性| 激情欧美日韩女同久久| 91Chinese在线| 加勒比综合网| 日韩淫色网| 日本三级日本三级99| 欧美激情激情xxxx欧美专区| 日韩人妻丝袜美腿中文| 91 手机在线播放 绯色| 青青草丝袜在线视频| 国产毛片毛片4p懂色| 人妻少妇三级| 日韩无码嘿咻黑热久| 午夜福利一区二区影院| 亚洲色图欧美色18直播在线| 东京热av男人的天堂| 成人免费在线网站| 免费成人在线观看91| 日韩无码服务区| 国产精品。| 综合激情五月丁香| 久久av成人无码免费| 欧美综合网在线| 亚洲的天堂网| 亚洲欧洲无码97久久精品| 99综合网| 久久男女激情视频网站| 亚洲天堂中文字| 亚洲综合20p| 欧美综合传媒| 天天躁狠狠躁av| 日韩伦理久 久久 清纯| 日本 欧美 亚中文字幕| 日韩少妇一区二区三区| 国产精品久久久久无码A√| 亚洲欧美综合| 夜夜欢天天干| 91精品导航| 91黄射| 在线观看 99热| 91 丝袜在线| 亚州操操穴网| 国产夫妻一区二区| 99国产天美| 色爽爽文学| 日韩啪啪啪啪啪| 综合色色婷婷| 91狠狠综合久久久久久| 国产精品久久久鸭无码的功能| 国产一区免费午夜视频| gogogo免费高清看中国国语| 岛国在线免费视频| av强奸乱轮| 日日操免费视频| 人人操欧美风骚| 97干在线视频| 欧美后入| 婷婷av在线中文字幕| 91色拍| 亚洲熟妇一,二,三期| 丁香九月婷婷| 肏逼视频日本| 国产专区第一页| 日韩A优精品在线观看| 欧美亚洲尤物久久| 久久久久亚洲Aⅴ无码| 亚洲国产精品成人无码久久久 | 欲色啪| 亚洲国产蜜臀系列在线观看| 热G综合热G中文| 欧美淫乱视频| 日韩欧美加勒比| 丁香六月天| 激情五月天色播| 亚洲宅男天堂| 国产熟妇一区二区| 国产精品在线一区二区| 欧美日韩色| 亚洲国产综合图区中文字幕 | 成人电影一区| 99精品丰满人妻无| 69久久久久久久久久久久久| 超碰伊人在线| 91综合网在线| 亚洲日本激情| www色婷婷| 97欧美精品综合| 精品一区二区久久| 91综合在线| 国产精品嫩草影院免费| 69精品少妇一区二区三区蜜桃| 特级大荫道BBwBBwBBW| 亚洲91大片| 欧美激情区| 日韩欧美成人午夜福利| 色婷婷小说| 国产精品亚洲免费| 亚洲精品国产熟女久久久| 精品人妻1237| 天天干夜夜肏| 国产精品96| 国产乱色国产精品免费视| 99热在线观看| 色诱avtt| 男人的天堂va| 成人三一级一片aaa| 国产精品青草综合久久| 免費人妻夜夜爽天天爽爽一区| 日本淫穴在线| 色图综合网| 婷婷涩嫩草鲁丝久久午夜精品| 国产一级舔足在线观看| 日本免费亚洲欧美| 嗯,啊。舔我逼| 国产久久久| 国产女人操逼视频| 丰满搜索结果 -第18页- 久久高清无码| 久久久久极品| 秋霞影音一区二区三区| 精品国产72| 国产一区二区在线播放| 免费久久精品麻豆一区二区av| 骚乳在线| 亚洲加勒比久久日本道| 屌逼传媒| 5252色欧美在线男人的天堂| 在线A日本| 日日夜夜骚| 啊啊啊免费视频| 不卡免费av在线播放| 亚洲情色一区二区三区| 99re免费视频精品全部| 亚洲天堂东京热| 中文字幕一区二区三区人妻不卡| 唐山老熟妇露脸啪啪叫| 超碰97欧美日韩| 亚洲乱色熟女一区| 精品国产99| 久久精品国产亚洲5555| 白丝1区2区3区| 久久久久久九九九九| 五月色综合| 亚洲日韩狠狠撸视频| 国产亚州高清国产拍精| 超碰 国产熟女精品一区| 欧美黑人精品在线播放| 欧美在线视频播放| 宗合情欲网| 久久精品店| 久久欧美按摩999| 成·人免费午夜在线观看| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 综合亚洲网| 久久综合婷婷| 亚洲超碰97| 嗯……啊…嗯嗯…啊…好舒服| 成人免费性爱视视| 啊啊啊啊啊好舒服视频| 蜜乳AV色欲AVAV无码| 日本二区不卡| 人妻天天爽夜夜爽精品2| 色在线综合| 成人精品视频| 99综合视频一体| 秋霞怕怕片| 综合天天网| 天天操天天舔| 综合久久97| 粉嫩少妇自慰在线| 久久东京国产精品视频| 91天天| WWW.加勒比人妻一区不卡.com| 岛国视频免费在线观看| 97超碰香蕉| 97天天综合网| 日本中文字幕在线视频 | 日韩成人网址| 人人操人人93| 亚州欧美一区| 久久草草欧美精品| 精品人妻一区二区视频| 国产在线激情| 97久久久精品| 人妻AV在线| 久久超碰国产一区二区三区| 精品二区三四区五电影 | 狠狠色噜噜狠狠狠狠2018| 欧美日本不卡| 欧美日韩淫加| www.99视频| 在线色导航| 999精品久久久久久久| 久日91在线| 男人天堂久久精品| 精品在线观看视频在线| 日韩AV无码网站| 超碰吊日色| 精品久久大胆人体| 玖玖97综合| 色婷婷五月综合激情中文字幕| 国产成人91一区二区三区| 天天影视91看看| 亚洲爱爱视频一区二区| 天天综和| 日本91白丝| 深田咏美亚洲精品福利社| 日韩 国产 欧美自拍| 91性网| 91熟女视频网| 久久天堂网| 91超碰碰在线| 99re这里只有精品9| 风月影院男女十八禁| 久久综合女优| 又摸又舔在线观看网站| 久视频在线观看| 91久久久久免| 日韩偷拍色图| 久草久热| 夜夜操91744565| 色999人与兽| 久7色| 久久久久久久人妻| 久久久一级| 97色伦欧美| 五月天开心网| 东京日日夜夜| 久久久久久久久久久久久久9999| 亚欧精品久久久久久久久久久| 久久xxxx| 大香樵伊人网| 性色乱AV一区二区| 日日AV加勒比| 亚洲日韩熟女人妻高清在线| 亚洲综合校园春色| 麻豆a'v电影| 夜夜国自区| 噜噜噜噜天天狠狠| 久久九色| 强奸乱伦AV网址| 影音先锋视频在线| 嫖老熟女A片一二三区| 亚洲色图殴美色图激情乱伦| 国产成人无码久久精品| 五月丁香影院| yazhousetuoumei| 亚洲黄色网址| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 极品美女嘿咻| 嗯嗯啊啊好爽| 精品无码不卡视频| 亚洲精品无码少妇久久| 能看的av| 美骚妇av高清在线| 9九九国产| 蜜臀久久99精品久久久久久-DVD原版全| 黑人猛交| 岛国黄色短视频| 99视频内射三四| 不卡九肏| 综合熟妇一区二区三区| 秋霞午夜成人福利片片| 欧美老妇曰批的视频| 久久婷婷热| 久久综合中文国产| 情色图区| 国产一区二区在线播放量| 91天堂色男人的天堂| 调教熟妇 久久久久久| 五十路熟女工口| 日本2020一区二区| 欧美激情另类一区二区| 在线只有精品| 亚洲日韩久久精品一区| 亚洲色狠| 欧美成人性爱视频大全| 亚洲免费日韩在线一区二区| 久热精品在线| 日韩性爱毛片操骚逼| 亚洲老熟妇xxx| 黄色十八禁| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 91综合天天看| www.亚洲成人一区| 麻豆人妻精品一区二区| 亚洲欧美国产va在线| 亚洲图片另类| 97干在线视频| 超碰一区二区| 亚洲成人性爱网站在线播放| 久9爱经典视频| 九九九九热| 97操碰| 欧美第一页| 丰满美女一级毛片在线播放| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 一区二区偷拍拍视频| 热久久无毒不卡| 亚欧性爱无码| 人妻一区久久二区三区色播| 欧美天天干| 欧洲熟妇xxXx欧美老妇裸体| 五十路人妻在线| 亚洲 日本 国产 综合| 内射中出日韩在线观看视频| 精品97久久| 激情小说五月天| 97日韩欧美亚洲| 黄色网址在线免费观看| 天天操美美| 999亚洲国产视频| 夜草欧美| 亚洲导航深夜福利| 操淫穴亚洲五月丁香| 99精品欧美一区二区三区桃色| 综合久欧洲| 蜜乳AV免费观看| av在线人气| 26uuu最新| 亚洲图片欧美制度| 黑人美精品 A片| 日韩精品怡红院| 日韩亚洲中文字幕在线| 99热18这里只有精品| 日韩精品黄片免费观看| 天天干1区2区在线| 欧美一级做a爰片免费视频| 97视频免费在线| 婷婷九月| 毛片一区二区| 97一区二区三区视频| 2019天天干天天操| 夜夜黄| 性欧美另类高清| 18禁止看精品中文字幕| 91天美传媒在线观看| 婷婷午夜成人色中色| 中文字幕免费看| 丁香六月婷婷久久综合| 97香蕉网| 97频视在线| 大香蕉520| 久久久久九九九九| 使劲用力艹少妇视频一区二区| 黑人嘿嘿嘿超爽免费视频| 久久久涩| 麻豆婷婷成人一二三| 18禁免费视频| 亚洲狠| 东北老女人的激情视频| 久久香蕉综合一本到3atv| 精品久久久久综合无码| 殴美综合色88| 日本国产欧美高清在线| 国产精品久久久| 久久精品视| 红杏大香蕉| 一本久道在线综合视频| 91亚洲图片| 撸撸成人在线视频| 97人人草| 亚洲va有码在线天堂| 风韵犹存大大大大香蕉| 亚洲免费97免费| 啪啪91| 蜜乳av一区二区| 亚洲人妻日日日| 999综合色| 中文字幕五区| 免费av大片| 波多野结衣AV无码一区| 99re这里只有精品2| 欧美情色男人的天堂| 日韩成人综合网| 一本久道在线综合视频| 久久久久亚洲Av无码专区老牛影视| 亚洲性图91| 婷婷伊人一区| 亚洲一区二区麻豆影院| 日韩欧美亚洲一区二区三区影院| 性无码专区2020| 老司机香蕉久久久久| 蜜臀一二三| 日韩二三区| 九九九九九九九精品视频| 国产理论视频在线播放| 影音先锋每日最新资源在线观看| 校园春色第一页| 欧美在线第五页| 欧美伦乱爱| 欧美 亚洲 大香| 天天肏美女| 欧美激情综合| 久久婷婷亚洲| 亚洲精品人妻吞精av| 亚洲精品天堂久久A∨51成人漫| 久久久新亚洲AV| 91性感在线| 九九操久久国产免费视频| 日日日日做夜夜夜夜做无码97| 欲香欲色天天天综合和网| 久久久穴999| 少妇与黑人高潮在线| 久操视频免费在线观看| 夜夜一区二区| 欧美性爱97超碰| 亚洲欧洲偷拍一区| 校园春色制服丝袜中文字亚洲| 9久久精品| 99色在线观看| 97色色网| 偷拍欧美激情| 欧美熟女激情| 96免费视频在线| 久操 高清| 91欧美丨精品丨入口| 色色色色色色色色综合| 亚洲资源网| 免费97视频| 亚洲做性| 久久精品—区二区三区内射| 少妇久久久久久| 亚洲男人天堂网| 1000部熟女视频在线观看| 国模无码人体一区二区三| 日韩黄色av中文字幕| 手机在线中文字幕国产| 国产真实野战在线视频| 东京热免费视频| 96AV精品| 99在线视频播放| 熟妇高潮二区三区| 91丝袜视频在线观看| 欧美天天| 日韩亚洲国产视频| 91丨九色丨大屁股| 蜜桃中文字日产乱幕4区| 四虎视频在线观看| 人妻少妇久久| 亚洲精品久久久久久久蜜桃臀| 久草尤物| 欧美日韩性爱操大逼| 五月婷色| 白丝少妇一区二区| 欧美啪啪天堂| 亚洲人成网站7777| 国产精品久久久久久 百度| www.99在线| 超碰 另类 欧美 | 超碰78| 黄片免费久久久久久久| 欧美精品第3页| 精品999日本| 天天欲望网| 国产男女边吃边摸视频网站| **一级毛片国产| 美女的肌被草喷水视频| 亚洲丝袜二区在线| 粉嫩av久久一区二区三区| 日韩人妻无码专区| 久久久久亚洲精品| 国产精品96久久久久久| 93人人操人人| 欧洲Au麻豆| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 欧美性猛交美女自慰91| 亚洲九九爱| 国产精品不卡高清在线观看| www.色操逼| 欧美亚州综合图片| 亚洲日韩电影| 探花激情视频| 久久久专区| 女性喷水高潮在线观看| 久热9| 婷婷九月国产| 欧美一级美片在线观看免费| 婷婷在线播放| 青青青草原| 国内毛片婷婷六月色| 嗯啊啊啊轻点视频 | 欧美性爱精品一区二区| 91nbbbbbb| 伊人久久综合影院精品久久久| 26uuu欧美| 天天干人妻视频| 少妇干B| 久久99草| 不卡av在线中文字幕| 国产久久久9999| 青青在线视频日韩欧美| 99热亚洲| 91美女在线| 天天爽夜夜操| 亚洲色图A| 操操啪| 亚洲国产97在线精品一区| 久久香蕉综合一本到3atv| 亚洲综合射| 成人性爱视频在线看| 东京热av男人的天堂| 亚洲无码超碰免费| 中文字幕91综合| 97在线观看免费视频| av中文字幕在线熟女| 欧美性夜| 日韩在线视频1234| 视频一区二区免费在线| 精品无码一区二区| 激情久久av一区av二区av| 久久九操在线观看| 日日碰狠狠添天天爽超| 神马久久久久久久久| 十八禁啪啦拍视频无遮挡| 91麻豆天美国产欧美高潮| 精品婷婷| 亚洲色图欧美| 少妇天堂网络| 99精品欧美一区二区三区桃色| 精品人妻一区二区乱码一区二区| 97人人夜夜精品视频| silk lablo在线观看一区二区| 99精品欧美一区二区三区桃色| 丰满人妻一区| 操人91| 玖草在线视频| 国产天天看| 午夜偷拍久久熟女| 欧美亚洲特P| 婷婷三区| 999亚洲国产视频| 激情婷婷丁香网| 97九色人妻| WWW操逼| 亚洲欧洲激情| 夂久色| 99re免费视频精品全部| 久久精品成人一区二区三区蜜臀| 色欲久久综合| 黑人精品XXX一区一二区| 超碰久久精品| 亚洲成人av色网| 亚洲一区二区三区不卡国产欧美| 夜夜爽夜夜摸夜夜操免费视频| 丁香婷婷久久| 日婷婷| 尤物视频新赏网鲜网色诱网| 校园春色之综合网| 岛国色情视频在线观看| 这里都是精品| 久久久久78| 日韩人妻少妇 一区二区三区| 香蕉国产精品麻豆亚洲欧美日韩| 97在线欧| 色眯眯射| 亚洲国产精品久久久久久久久久| 国产精品人人爽人人做可爱福利| 精品人妻一区二区三区蜜桃视频| 99青草| 免费操逼视频下载| 国产黄色剧情影片麻豆免费播放| 亚洲欧美综合网站| 毛片视频白嫩| 强免费黄色网址| 国产精品人人爽人人做可爱福利| 国产精品一区二区三区在线| 91高跟美女在线播放| 亚洲五月丁香花狠狠干一区二区三区| 久思思热视频在线观看| 久久系列| 日日AAvv| 亚州欧美总和| 2019AV天堂| 天天透伊人| 亚洲免费看片| 欧洲一级性爱视频在线观看| 激情五月综合开心五月| 国产精品网址| 99re这里只有精品2| 久久99草| 久久久久9999妇女| 亚洲熟女国产综合另类| 国产激情久久久| 国产精品久久久久久久久AV大片| 日本十八禁免费看污网站| 色激情综合网站| 亚洲高清欧美总合| 精品少妇高潮久久| 舔舔啊| 亚洲国产亚洲天堂| h色99999| 少妇内射www在线观看视频| 亚洲乱色视频一区、二区在线| 久久综合五月天| www色色色com| 五月丁香婷婷色| 国产亚洲精品自在线亚洲情侣| 强奸乱伦大香蕉网| 国产精品无码在线| 国产欧美日韩精品中文| 鸡巴插逼视频| 操逼操网| 在线人人人人人人精品超 | 天天舔九色婷婷| 夜夜操av亚洲一区二区| 婷婷综合在线观看| 丰满少妇一区二区三区四区观看| 伊人综合色网| 欧美色图亚洲色图成人在在线| 中文字幕二区日韩天堂| 超AV色女| 岛国AV一区二区电影| 天堂日本亚洲欧美| 欧美97日韩| 国产精品suv一区| 人人搡人人肉久久精品| 青青草字幕AV| 久久人妻一区二区三区高清| 中文字幕第95页| 男人的天堂久久| 校园春色 欧美| 日本超碰在线国产一区| 又黄又爽在线观看视频| 怡红院视频在线| 国产久久一区二区三区野外在线| 情色五月天久久久| 大乔未久88一区| 色99久草| 蜜臀99久久| 熟女这里只有精品6| 国产亚洲精品av一区| 日本色色的视频| 日韩人妻资源在线看| 亚洲综合另类欧美久久久| 久久爽爽精品| 91精品91久久久久77777| 性91| 免费自拍三级综合| 热99这里只有精品| 人妻天堂综合网| 9久久美女首页| 色与欲影视天天看综合网| 91色香| 国产亚洲女v在线观看| 日韩一级片| 啊好爽受不了无码| 97超碰色中文字幕| 97天天日| 亚洲国产麻豆一区二区三区| 99色色网| 青青三级视频| 国产日韩久久| 日韩无码黄色片| 丁香五月av| 日本超碰97日韩精品人妻| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 亚欧色图在线激情| 操逼片中文| 亚洲情色五月天| 久久精品男人的天堂| 国产精品com| 超碰成人国产| 日韩精品第3页| 91色婷婷综合久久中文字幕二区| 无码精品久久| 大香樵伊人网| 国产外初女出血视频| 国产精品999aaa| 欧美啪啪女女| 欧美亚洲涩涩| 色吧 综合| 久久99亚洲精品久久99果| 人人超碰在线观看黄| 亚洲久久久| 自拍偷拍2025在线观看| 好好的日:com久久九九| 国产精品第一页国产大屁股视频免费区 | 精品丰满人妻一区二区三区免费观| 欧美999999| 久久在线观看免费视频| 色综合色综合网| 国产欧美黑人丰满在线| 夜夜操美女| 色综合一区二区三巨| 欧美,日韩,中文,另类| 国产传媒操逼视频| 精品十三区| 日韩免费a级毛片无码a∨| 五月天成人综合| 人伦四五区| 欧美成人一区二区三区在线播放| 黑丝日韩av丝袜av| 最新无码国产| 中文字幕日产av人| 国产99热| 超碰三级秋霞| 91成人无码| 蜜桃久久综合视频| 天堂性色| 爱爱60秒免费视频| 91制服丝袜中文字幕| 精品一区二区亚洲国产| 久久精品一区一起草| 殴美大黄片| 丝袜美腿91| 中文字幕黄色片| 天天影视综合色| 自偷自拍的亚洲视频| 欧美第五页| 午夜丁香| 亚洲丝袜少妇在线| 色哟哟av| 欧美有码激情视频一区二区三区| 五月天综合网| 中文字幕激情小说| 亚洲综合五月天| 亚洲同性aV综合| 日韩成人精品中文字幕| 亚洲欧洲综合| 欧美亚洲综合色| 亚洲精品久久久久毛片A片拉屎| 96精品在线| 9色国产精品一区粉嫩| 91欧美长吊| 亚洲国产精品有声| 日韩欧美天堂| 91操碰| 亚洲天堂男人天堂网| 日韩丝袜人妻AV| 久久天天艹| 九九人妻| 大香樵伊人网| 精品人妻一区二区三区四区石在线| 日欧美色| 日韩欧美中文日韩欧美色| 欧美性Fer办公室秘书| 日本久久精品| 国产欧美在线观看免费观看| 久久伊人青青草| 在免费jIzzjIzz在线视频| 日本幼女18+| 爆乳免费黄网站| 中文字幕丝袜国产第一页不卡| 综合色久欲| 美女黄页| 国模艳艳啪啪一区| 理论久久婷婷网8| 99爱久久视频频| 成人性爱高清视频免费看| 欧成人精品一区二区三区| 精品久久久久黄少妇| 日韩不卡在线一区二区| 91宗合网| 久久久久密臀视频| 99热这里都是精品| 天天干天天燥| 天堂性色| 亚洲色悠悠久久88| 亚洲 综合 欧美| 无套内射人妻在线播放| 欧美se综合| 欧美 亚洲 另类 综合| 三级三级三级日本99| 久久久久免费看少妇A片特黄| 香港久久久| 日韩图区| 欧美日韩国产中文精品字幕自在自线,| 东北丰满熟女国产一区| 91成人无码| 超碰碰小说97| 97在线欧洲| www.夜夜操| 美女写真| yaouchengrenav| 国产午夜精品一区二区三区牛牛| 亚州再线| 91狠| 国产精品自产拍在线观看社区| 狠狠久久手机视频精品| 亚洲中字慕不卡| 粉嫩AV输入| 亚洲国产一级中文综合久久天堂在线免费观看| 69精品久久久久中文字幕| 内射小黄片| 日本三级R| gogogo免费高清看中国国语| 91麻豆天美传媒在线| 九九九九九九九| 亚洲97p| 久久一二三级一一一| 精品区9| 97自拍视频在线| 国产AV高清AV无码| 国产操逼逼网| 91深夜夜| 中文字幕日韩精品久久| 麻豆天美传媒毛片| 超碰97 线线 在现| 夜夜夜爽www精品视频| 97资源站久久| 蜜臀th| 91视频综合在线| 久久综合久色欧美综合狠狠| 超碰99热中文字幕| 午夜呻吟欧美| 欧美综合97www| 四虎永久在线精品免费网址| 裸体美女国产免费久久久网站| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 插B在线观看| 天堂精品一区| 蜜臀久久精品久久久久视频| 日本一久是| 91少妇通奸网站| 欧美91色| 免费男人的天堂| 亚洲天堂电影网99999| 超碰色美女| 国产精品一区二区密臀| 欧美亚洲今日在线| 一本久道久久综合狠狠爱一密臀精| 96超碰网| 97超碰久久| 国产精品一区二区手机看片| 1769一区| 国产亚洲精品无码三区| 天天激情综合站| 国产精品久久久无码AV网站| 美国日韩黄色片| 久99热| 久久啊哟|