是什麼導致了客戶端TCP連不上伺服器?

来源:https://www.cnblogs.com/justnow/archive/2022/06/07/16351129.html
-Advertisement-
Play Games

當服務端啟動後,但是telnet其監聽的埠卻失敗了。或者當服務端運行了一段時間後,突然其監聽的埠telnet不通了。當類似這樣情況出現時,要如何排查問題所在了? ...


   這幾年做了很多基於 GGTalk開源即時通訊系統 的定製開發項目,經常會碰到如下兩個問題,分享出來,應該對大家會有所幫助:

(1)定製開發完成後,在給客戶部署GGTalk即時通訊服務端到正式的伺服器上時,經常出現GGTalk客戶端連不上伺服器的情況。

(2)部署好的GGTalk在運行的過程中,突然出現新的客戶端連不上登錄不了。

      這些時候,使用telnet命令測試,通常會發現telnet失敗了。

    telnet命令的主要作用是與目標埠進行TCP連接(即完成TCP三次握手)。

      當服務端啟動後,但是telnet其監聽的埠,卻失敗了。或者,當服務端運行了一段時間後,突然其監聽的埠telnet不通了。當類似這樣的telnet失敗的情況出現時,都可以按照如下方面進行排查:

1.觀察一下服務端進程的CPU和記憶體是否有異常。

       比如,當CPU持續在100%時,就有可能導致來自客戶端的TCP連接請求被丟棄或無暇處理。 

2.埠監聽器是否運行正常?

        GGTalk 服務端可以通過IRapidServerEngine的Advanced屬性的GetPortListenerState方法來獲取埠監聽器的狀態,該方法返回一個PortListenerState對象,其包含3個屬性:

(1)IsMaxConnection:是否達到了最大連接數的限制。

(2)IsListening:是否正在監聽埠。如果未授權,或達到了最大連接數限制,則將會停止監聽埠。

(3)LastDetectTime:最後一次檢測TCP連接隊列(已完成OS底層的三次握手,但尚未被ESFramework提取的TCP連接存放於該隊列中)的時間。 

        如果上述兩點都正常,則接下來,需要專業的運維人員或網管人當員參與進來協助排查。

3.在當前伺服器上執行telnet命令,看能否連接成功?

        如果能連接成功,至少表明本機的TCP握手請求是能正常地被接收和處理的。 

4.在伺服器上執行netstat命令

          netstat是一個非常有用的查看埠狀態的命令,執行netstat命令後,請註意查看以下信息:

(1)目標埠是否處於監聽狀態?

(2)目標埠上是否存在已成功建立的TCP連接(ESTABLISHED)?其數量是多少?

(3)是否存在半開連接(SYN_RECV)?其數量是多少?

(4)是否存在等待關閉的連接(TIME_WAIT)?其數量是多少?

          這裡,最有可能的原因是半開連接數達到最大限制,導致windows系統丟棄後續的TCP連接請求。 

5.TCP三次握手是否正常?

         對於一些奇怪現象的跟蹤與分析,數據抓包工具是不可缺少的。

         在伺服器上將抓包工具運行起來,然後在其他的電腦上telnet該伺服器的目標埠,通過抓包工具觀察目標埠上TCP三次握手的過程是否正常:

(1)目標埠是否收到了來自客戶端的SYN請求?

(2)目標埠有回覆SYN_ACK給客戶端?

(3)目標埠有收到來自客戶端的第三次握手?

         只有當TCP三次握手順利完成後,windows底層才會將建立好的TCP連接放入隊列中,提交給上層的應用程式。

6.伺服器網路拓撲結構、防火牆、路由器、網路安全監控等相關軟硬體

        在抓包分析的同時,結合伺服器的網路拓撲介面進行考慮是很有必要的。很可能來自客戶端的三次握手請求被防火牆、路由器、或某些網路完全監控的相關軟硬體給擋住了

        此時,需要專業的運維人員或網管人員參與進來,協助排查問題,比如:

(1)在伺服器上執行netstat命令,查看目標埠的相關狀態信息。

(2)在伺服器上執行抓包工具,監測目標埠上是否有數據從客戶端過來。

(3)分析伺服器的網路拓撲結構,並以伺服器為中心,依次向外檢查防火牆、路由器、網路安全監控等相關軟硬體等的設定,併進行針對性的排查測試。

 

     經過以上的排查分析,應該都可以找到問題的根源所在,如果還有疏漏的方面,可以給我留言一起討論。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、synchronized關鍵字簡介 synchronized是java中的一個關鍵字,在中文中為同步,也被稱之為'同步鎖',以此來達到多線程併發訪問時候的併發安全問題,可以用來修飾代碼塊、非靜態方法。靜態方法等; 修飾代碼塊時:給當前指定的對象加鎖 修飾非靜態方法時:作用於當前實例加鎖 修飾靜態 ...
  • 雙親委派機制:當某個類載入器準備載入一個.class位元組碼文件時,它首先將這個載入任務委派給上一級類載入器,上一級載入器再委派到更上一級類載入器,遞歸這個操作直到最頂級的類載入器。 一、類載入器的類別 在介紹Java的雙親委派機制的時候,不得不提ClassLoader(類載入器) 我們編譯的Java ...
  • 一、分散式鏈路追蹤發展簡介 1.1 分散式鏈路追蹤介紹 關於分散式鏈路追蹤的介紹,可以查看我前面的文章 微服務架構學習與思考(09):分散式鏈路追蹤系統-dapper論文學習(https://www.cnblogs.com/jiujuan/p/16097314.html) 。 這裡的 OpenTel ...
  • 條碼的應用已深入生活和工作的方方面面。在處理條碼時,常需要和各種文檔格式相結合。當需要在文檔中插入、編輯或者刪除條碼時,可藉助於一些專業的類庫工具來實現。本文,以操作PDF文件為例,介紹如何在編輯表格時,向單元格中添加條形碼。 【程式環境】 本次功能測試中,使用 Free Spire.PDF for ...
  • 1 Sentinel主頁 https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 1.1 Sentinel介紹 隨著微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 是面向分散式服務架構的流量控制組件,主要以流量為切 ...
  • 前言 dubbo是一款微服務開發框架,它提供了 RPC通信 與 微服務治理 兩大關鍵能力。作為spring cloud alibaba體系中重要的一部分,隨著spring cloud alibaba在國內活躍起來,dubbo也越來越深受各大公司的青睞。本文就來對dubbo的spi機制源碼進行剖析,看 ...
  • ​ 問題描述 我在Eclipse上運行項目的時候,在我用fileUpload上傳圖片,等到下一次Tomcat刷新的時候,這個照片就沒了,而且點擊查看那個文件夾也查看不到有圖片文件。 原因 我後來在網上查詢相關資料發現是Eclipse整 合Tomcat的問題,因為他們整合之後,你用相對路徑上傳的圖片會 ...
  • 用戶 在系統里,用戶是一個核心概念。它代表了一個人的唯一身份標識,除了與角色、團隊、組織架構等有關,甚至還會影響到在同一個界面不同的用戶操作流程與顯示內容都會發生變化,再複雜一點的話,或許在同一個系統內的一個用戶進入到不同產品後的身份也會變化 用戶與角色 用戶可以擁有一個或多個角色,讓角色作為許可權組 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...