2015-09-05 33 views
3

让我介绍一下我在问什么,以便说清楚:
在通过Internet进行服务器 - 客户端TCP通信的上下文中,当服务器进程正在运行时,客户端进程可以启动TCP连接到服务器。它通过发起三方握手来实现。
在用手摇动阶段结束时,accept()函数(调用在在服务器侧欢迎插座)将设立插座 - 一个连接插座 - 专用于新的输入客户端连接。
从现在起,直到此连接将被终止,服务器将通过连接套接字与客户端进行通信。由于每个客户端都获得一个连接套接字,并且服务器上的TCP-socket由四元组(src IP地址,src端口号,dest IP地址,dest端口号)唯一标识,并且端口号为一个16位的数字,那么服务器如何支持超过65,536个客户端(好吧,65,536减去保留的)?为什么服务器可以支持超过65,536个客户端?

+0

http://serverfault.com/questions/533611/how-do-high-traffic-sites-service-more-than-65535-tcp-connections – CodeCaster

+0

通过引入多个CD服务器(农场)来增加冗余 - 假设资源是约束。 –

+0

而且还http://stackoverflow.com/questions/2332741/what-is-the-theoretical-maximum-number-of-open-tcp-connections-that-a-modern-lin。尝试搜索。 – CodeCaster

回答

2

该元组除了客户端口外还有三个其他成员。如果其中一个变化,连接可能发生。通常,客户端端口和IP会有所不同,以允许服务器使用一个IP和一个端口。如果需要,服务器可以使用多个IP和多个端口,这很难。

+0

因此......服务器上的两个“连接套接字”可以具有相同的本地端口**,只要该四元组中的其他因素不同即可。 –

+0

是的。如果Web服务器接受端口80上的某些内容,则该连接将位于端口80上。不仅仅是监听。 – usr

+0

@ so.very.tired:如果服务器正在侦听单个IP /端口,所有连接的客户端将具有相同的服务器端IP /端口,并且通过客户端IP /端口进行区分。如果服务器正在监听多个IP /端口,则来自同一台计算机的两个连接的客户端可以使用相同的客户端IP **和**端口,只要它们各自连接到不同的服务器端IP /端口即可。这并不常见,但这是可能的。客户端端口通常是随机选择的,但也可以通过bind()静态地进行选择。 –

相关问题