Sockets web服务器上的资源耗尽-套接字基本说明

Sockets web服务器上的资源耗尽-套接字基本说明,sockets,http,tcp,Sockets,Http,Tcp,我使用Internet Explorer 9连接到嵌入式系统支持的web服务器。Windows 7位于客户端。 该网页有许多选项卡,我浏览这些选项卡直到问题出现。大约需要一分钟的时间。 嵌入式系统冻结,因此无法浏览,并且不会响应ping。过一会儿,嵌入式系统将恢复,因为它被设计为重新启动。我加入了Wireshark跟踪,在该跟踪中,您可以看到92个连接使用过滤器tcp.stream eq 0,值为[0,91],您将看到。我有源代码,所以我知道嵌入式系统不支持超过37个同时连接。原因是资源枯竭吗

我使用Internet Explorer 9连接到嵌入式系统支持的web服务器。Windows 7位于客户端。 该网页有许多选项卡,我浏览这些选项卡直到问题出现。大约需要一分钟的时间。 嵌入式系统冻结,因此无法浏览,并且不会响应ping。过一会儿,嵌入式系统将恢复,因为它被设计为重新启动。我加入了Wireshark跟踪,在该跟踪中,您可以看到92个连接使用过滤器tcp.stream eq 0,值为[0,91],您将看到。我有源代码,所以我知道嵌入式系统不支持超过37个同时连接。原因是资源枯竭吗

但我有一个更基本的问题,我真的更希望得到答案。web服务器位于172.21.1.12端口80,客户端位于 172.21.9.70和可变端口号见跟踪。由于服务器端的IP和端口不变,服务器端使用了多少个套接字?这个问题很重要,因为打开的套接字越多,资源就越可能耗尽。 如果答案只有1个socket,那么我必须得出结论,这并不缺乏资源,因为它可以支持37个socket

我还建议您使用Wireshark中的过滤器ip.addr==172.21.1.12

我想我可以上传wireshark文件。我不知道如何与你分享。请帮忙?
投递箱

在您尚未指定嵌入式系统的警告下,大多数TCP堆栈将为每个新连接创建一个新套接字,并且从套接字到连接的映射为1-1

当数据包到达网络堆栈时,它必须将该数据包与正确的套接字相关联。通常,这是通过使用从TCP 4元组到套接字的映射来实现的,其中4元组包括[本地ip、本地端口、远程ip、远程端口]

服务器通过侦听希望使用该服务的客户端已知的固定本地端口使其服务可用。正如您所理解的,对于web服务器来说,这通常是端口80,而大多数TCP实现的软件接口专用于一个套接字,以便允许API对该服务的网络参数执行操作。但是,套接字未完全连接。4元组的最后两部分被设置为一个未指定的特殊值,通常所有位均为0。接受新连接时,将创建一个新套接字,其中4元组由侦听套接字的本地信息和从发起TCP连接的SYN数据包的源地址和端口获取的远程信息组成

服务器可以支持的连接数限制取决于操作系统的配置方式,您可以说您的操作系统将其限制为37。使用4元组,作为固定本地ip和本地端口的单个服务的绝对限制为2ADDR\u位-保留\u ADDRS×216-保留\u端口。对于IPv4,比特数为32,而对于IPv6,比特数为128

创建连接时,客户机将指定目标地址和端口,用于填写4元组的远程信息,但通常不指定源信息。TCP堆栈将根据路由选择适当的源地址,并选择一个可用的源端口,该端口将成为完成4元组的本地信息。理论上,任何未被所选本地接口用于与同一远程服务通信的源端口都可以用作本地端口。大多数堆栈将为此专门提供一组编号较高的端口,称为临时端口范围