我试图绕过这个。我正在制作一个特定于业务的消息传递应用程序,它将通过WCF将5000到10,000台机器连接回我们的数据中心(没有vpns,整个网络)。它主要用于警报,我需要能够将消息直接发送给特定客户端,WCF允许我使用双工合同完成所有这些操作,但是有了这么多客户端,它让我想到最大化TCP端口空间65535个端口。
我将假设所有入站连接都将通过我选择的任何端口进入,但是回到客户端的出口将分别占用一个端口。我很好奇,如果WCF端口共享服务做了什么来解决这个问题,或者它只有65535个端口到IP地址?就此而言,MSN Messenger等如何应对这种情况。当然,我可能永远不会达到它,但我至少会进入这个领域。
或者服务端的WCF双工合同是否在客户端期间保持端口打开以进行回调,还是将其释放?
答案 0 :(得分:4)
在高开放/关闭交易环境中排除默认TCP堆栈仍然非常容易,例如套接字服务器提供非持久连接。
默认的TIME-WAIT延迟 - 套接字在被回收之前必须关闭的时间 - 这默认为90秒(如果我没记错的话)
要从我的其他线程中回收一些位 - 有一堆可以调整的注册表项 - 建议至少创建/编辑以下键
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
TcpTimedWaitDelay = 30
MaxUserPort = 65534
MaxHashTableSize = 65536
MaxFreeTcbs = 16000
MSDN上的大量文档& Technet关于这些键的功能。 e.g。
调整套接字服务器应用程序的这些密钥是很常见的,例如SQL,Biztalk,IIS等。
答案 1 :(得分:3)
我认为每个端口实际上是DestinationTCPAddress和端口号的组合 - 所以你不会用完。
即。您可以在同一源端口上与多个订户进行通信。这只是一个容量问题。
答案 2 :(得分:2)
如果这些连接都是并发的,那么您需要确保防火墙能够同时处理这么多连接。
状态防火墙需要记录通过它们的每个正在进行的连接,以便它们可以判断是否允许后续数据包。小型防火墙的会话限制数百个并不少见。
答案 3 :(得分:2)
通过源地址和目标地址,源端口,目标端口,连接是不同的(至少在IP层)。对最大连接数的某种操作系统限制可能会成为一个问题,但不要因为端口号本身是任何形式的限制而感到困惑。