2014-05-01 42 views
1

我使用Internet Explorer 9連接到嵌入式系統支持的Web服務器。Windows 7位於客戶端。 該網頁有許多標籤,我瀏覽,直到問題發生。大約需要一分鐘的時間。 嵌入式系統凍結,因此無法瀏覽並且不響應ping。過了一會兒,嵌入式系統將恢復,因爲它被設計爲重新啓動。我加入了一個Wireshark跟蹤,在這個跟蹤中你可以看到92個連接(使用值爲[0,91]的過濾器「tcp.stream eq 0」),你會看到。我有源代碼,所以我知道嵌入式系統不支持超過37個同時連接。原因是資源耗盡?Web服務器資源耗盡 - 套接字基本說明

但我有一個更基本的問題,我真的更加欣賞一個答案。 Web服務器的端口號爲172.21.1.12,客戶端的端口號爲 ,端口號爲172.21.9.70(請參閱跟蹤)。由於服務器端的IP和端口不會更改,因此服務器端正在使用多少個套接字?這個問題很重要,因爲更多的套接字被打開,資源更可能耗盡。 如果答案只有一個套接字,那麼我必須得出結論,因爲它可以支持37,所以我不會缺乏資源。

我也建議你在Wireshark中使用filter ip.addr == 172.21.1.12。

我想我可以上傳wireshark文件。我不知道如何與你分享。請幫助? Dropbox?

回答

0

根據您尚未指定嵌入式系統的警告,大多數TCP堆棧將爲每個新連接創建一個新的套接字,並且從套接字到連接的映射爲1-1。

當數據包到達網絡堆棧時,它必須將該數據包關聯到正確的套接字。通常,這是通過使用從TCP 4元組到套接字的映射來完成的,其中4元組由[local-ip,local-port,remote-ip,remote-port]組成。

服務器通過監聽希望使用該服務的客戶端已知的固定本地端口來使其服務可用。如你所知,這通常是一個Web服務器的端口80,而大多數TCP實現的軟件接口專用一個套接字,目的是允許API對該服務的網絡參數執行操作。但是,套接字沒有完全連接(4元組的最後兩部分被設置爲特殊的「未指定」值,通常都是0位)。當接受新連接時,將創建一個新的套接字,其中4元組由偵聽套接字的本地信息以及從啓動TCP連接的SYN數據包的源地址和端口獲取的遠程信息組成。

服務器可以支持的連接數限制取決於操作系統的配置方式(你說你的限制爲37)。使用4元組,單個服務(即固定本地ip和本地端口)的絕對限制將爲絕對限制()(_RESERVED_PORTS)。對於IPv4,位數是32,而對於IPv6,位數是128.

創建連接時,客戶端將指定目標地址和端口(它將填充4位遠程信息,元組),但通常不指定源信息。 TCP堆棧將根據路由選擇一個合適的源地址,並選擇一個可用的源端口(這將成爲完成四元組的本地信息)。從理論上講,任何未被選定本地接口用於通信到相同遠程服務的源端口都可以用作本地端口。大多數堆棧將爲此專用一組編號較高的端口(稱爲臨時端口範圍)。