本文介紹Windows執行個體的Time_Wait串連不釋放,導致訪問外網失敗問題的問題描述、問題原因和解決方案。
問題描述
當在Windows執行個體上可以ping通外網,但是無法使用瀏覽器訪問外網、訪問外網載入時間過長或者Windows執行個體上的應用連網異常時,在Windows執行個體的CMD命令提示字元中,執行netstat -an |find "TIME_WAIT" /c 命令,發現存在大量TCP串連處於TIME_WAIT狀態,樣本如下:
問題原因
Windows作業系統從Windows Server 2008版本以後,預設動態連接埠的數量為16384個(從49152起始,到65536結束)。由於TCP預設的Time Wait Delay時間為4分鐘,如系統內有大量的活動串連,在結束後會在較長時間處於Time_Wait狀態並佔用大量連接埠,從而導致新的串連或應用因無連接埠使用而出現異常。
解決方案
以下操作步驟以Windows Server 2012 R2為例,實際操作以您實際的Windows執行個體作業系統為準。
使用VNC串連Windows執行個體。
具體操作,請參見通過密碼認證登入Windows執行個體。
開啟CMD命令提示字元。
單擊案頭左下角
表徵圖,然後單擊
表徵圖。在搜尋方塊輸入
cmd。
單擊命令提示字元。
進入命令提示字元。

執行如下命令,查看當前動態連接埠配置。
netsh int ipv4 show dynamicport tcp回顯樣本如下,表示動態連接埠的數量為16384個(從49152起始,到65536結束)。

執行如下命令,增大動態連接埠數量。
netsh int ipv4 set dynamicport tcp start=1025 num=60000說明start和num參數表示開始端點口和連接埠數量,您需要根據實際情況調整參數值。回顯樣本如下,表示動態連接埠的數量增大到60000個(從1025起始,到61025結束)。

重新訪問外網或串連應用。
訪問成功,該問題解決。
訪問失敗,執行下一步,修改註冊表來降低Time Wait時間。
如果增大動態連接埠數量仍然不能完全解決該問題,您可以通過修改註冊表來降低Time Wait時間,最低支援設定為30秒,具體操作如下:
重要為了避免註冊表誤操作帶來的作業系統問題或者造成的資料丟失,請您操作註冊表前,務必對系統硬碟和資料盤建立快照,並且操作完畢後需要重啟Windows執行個體後才能使修改生效,具體操作如下:
建立快照,請參見建立一個雲端硬碟快照。
重啟Windows執行個體,請參見重啟執行個體。
開啟登錄編輯程式。
單擊案頭左下角
表徵圖,然後單擊
表徵圖。在搜尋方塊輸入
regedit。
單擊regedit。
進入登錄編輯程式。

在登錄編輯程式的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services>Tcpip>Parameters路徑下,將登錄機碼TcpTimedWaitDelay的數值資料設定為十進位數值30。如果
TcpTimedWaitDelay項不存在,請建立對應登錄機碼,然後再修改數值資料。以TcpTimedWaitDelay不存在為例,操作如下:在登錄編輯程式的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services>Tcpip>Parameters路徑下,按右鍵登錄機碼空白地區,然後選擇建立(N) > DWORD (32 位)值。
輸入
TcpTimedWaitDelay,按Enter鍵。按右鍵登錄機碼
TcpTimedWaitDelay,然後單擊修改。
在對話方塊中,勾選十進位,然後將數值資料設定為
30。
單擊確定。