当连接过多时,传出的客户端TCP端口被阻止

时间:2017-11-16 06:50:09

标签: c# sockets wcf networking tcp

我有一个分发系统,用于在Windows上的目标客户端计算机上执行文件操作并运行shell命令。我使用自定义TCP端点连接到驻留在服务器上的Windows服务。

现在我已经创建了这个工具,可以在一台机器上创建该代理(客户端)的大量实例,并从服务器对所有这些实例运行某个作业集。问题是客户端计算机上的所有传出TCP端口在启动超过几百个代理后都会被阻止。每个代理都使用动态端口并正在侦听单个服务器端口。

说,我有2000个代理在端口2000-3999上运行,并且都在监听服务器上的端口5111。 我在Windows事件日志中收到的错误消息如下:

  

TCP / IP无法建立传出连接,因为已选中   最近使用本地端点连接到同一个远程   端点。传出连接通常会发生此错误   以高速率打开和关闭,导致所有可用的本地端口   使用并强制TCP / IP重用本地端口进行传出   连接。为了最大限度地降低数据损坏的风险,TCP / IP   标准要求在连续之间经过最短时间   从给定本地端点到给定远程端点的连接。

发生这种情况时,本机无法再使用任何TCP端口。我确实尝试在注册表中更改一些TCP默认行为,但无济于事。打开连接之间的间隔在1到5秒之间。

管理最佳延迟和/或以某种方式使Windows信任该应用程序的任何解决方法,无论测试所需的积极网络活动如何?

1 个答案:

答案 0 :(得分:0)

如果在没有适当间隙的情况下打开连接,则会导致客户端上的所有端口因攻击性行为而被阻止。最后,我通过增加每个连接之间的延迟从1000毫秒到3000毫秒来连接我的所有代理。我仍然要弄清楚这种情况的动态,并且可能在并行线程而不是进程中打开代理程序毕竟是更好的解决方案。具有相同名称的大量进程似乎对操作系统没有吸引力。