當客戶端啟動到服務器的 TCP/IP 套接字連接時,客戶端通常連接到服務器上的特定端口,并請求服務器通過臨時(或暫時)TCP 或 UDP 端口進行響應。在 Windows Server 2003 和 Windows XP 中,客戶端應用程序所使用的臨時端口的默認范圍為 1025 到 5000。在某些情況下,有可能耗盡默認范圍的可用端口。
TCP/IP 端口耗盡的癥狀隨客戶端應用程序的不同而不同,但通常都表現(xiàn)為顯示網(wǎng)絡連接失敗錯誤。若要確定網(wǎng)絡連接失敗是否是由 TCP/IP 端口耗盡造成的,請在客戶端計算機上執(zhí)行以下步驟:
在運行 Windows XP 或 Windows Server 2003 的計算機上單擊“開始”,再單擊“運行”,然后鍵入 cmd,單擊“確定”打開命令提示。執(zhí)行以下操作之一:
- 在 Windows XP 或 Windows Server 2003 計算機上的命令提示中輸入以下命令,顯示此計算機上 TCP/IP 協(xié)議所使用的活動連接:netstat -n 這將列出綁定到客戶端計算機的 TCP/IP 地址以及 TCP/IP 地址與遠程服務器通信所使用的端口。如果列出的端口使用了所有可用的端口,則出現(xiàn)了 TCP/IP 端口耗盡現(xiàn)象。
- 在基于 Windows Server 2003 的客戶端計算機的命令提示中輸入以下命令,以顯示 TCP/IP 協(xié)議所使用的活動連接:netstat -b 這將列出綁定到客戶端計算機的 TCP/IP 地址、TCP/IP 地址與遠程服務器通信所使用的端口以及使用這些端口的應用程序。此信息可以幫助您確定那個客戶端應用程序正在使用過多的 TCP/IP 端口。
與 TCP/IP 端口耗盡有關的問題
當客戶端應用程序嘗試使用 TCP/IP 套接字連接到 BizTalk Server,或當 BizTalk 應用程序嘗試使用 TCP/IP 套接字連接到服務器時,可能會出現(xiàn)類似于下面的情況:
- System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send.Unable to connect to the remote server.
- System.Net.Sockets.SocketException: Only one usage of each socket address (protocol/network address/port) is normally permitted.
當出現(xiàn)這些錯誤時,還可能出現(xiàn)以下問題:
- 客戶端應用程序可能無法連接到 BizTalk Server。
- BizTalk 應用程序服務可能無法連接到遠程 SQL 服務器。
- BizTalk Server 適配器可能無法連接到遠程服務器。
原因
如果客戶端計算機中存在數(shù)目超常的 TCIP/IP 套接字連接,則客戶端計算機上可能出現(xiàn) TCP/IP 端口耗盡的情況。當 TCP/IP 端口耗盡時,將無法預留客戶端端口,并且嘗試通過 TCP/IP 套接字連接到服務器的客戶端應用程序也將出錯。
客戶端應用程序預留的每個端口均占用內核內存。如果預留了數(shù)目超常的客戶端端口,Windows 內核內存的占用率將相應增加。
解決方法
如果大量客戶端應用程序要啟動已知數(shù)量的 TCP/IP 套接字連接,但沒有足夠數(shù)量的可用臨時端口來滿足連接請求,則需要進行以下注冊表修改。
增加動態(tài)分配到客戶端 TCP/IP 套接字連接的臨時端口的上限。
- 啟動注冊表編輯器。
- 在注冊表中,瀏覽到并單擊注冊表項 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters。
- 在“編輯”菜單中單擊“新建”、“DWORD 值”,然后添加注冊表值,以增加可以動態(tài)分配到客戶端的臨時端口的數(shù)量:
值名稱 MaxUserPort
值數(shù)據(jù) <在此輸入一個 5000 到 65534 之間的十進制值> - 關閉注冊表編輯器。
注意:必須重新啟動計算機,此更改才會生效。增加用于客戶端 TCP/IP 連接的臨時端口的范圍將占用 Windows 內核內存。請勿將此設置的值增加至超過容納客戶端應用程序套接字連接所需要的值,以便盡可能降低對 Windows 內核內存的不必要占用。