【问题标题】:Is dymamic port range in Windows reserved in total or per target port?Windows 中的动态端口范围是全部保留还是每个目标端口保留?
【发布时间】:2021-06-19 08:59:42
【问题描述】:

在客户端应用程序中,我多次连接到同一个服务器以设置 TCP 套接字。

TcpClient client = new TCPClient();
...
await client.ConnectAsync(host, outport);

看来,我的动态端口已用尽,因为我得到了“Only one usage of each socket address (protocol/network address/port) is normally permitted”。

这条消息有点误导,但我观察到,它总是在使用相同数量的连接后出现。

所以我尝试在不同的端口上运行多个服务器。但是,这并没有什么不同——第一个错误发生在相同数量的端口之后...... 我现在很惊讶:

是否要考虑 Windows 10 上的保留端口范围

  1. 总共或
  2. 我们连接到的每个目标端口?

我认为 2) 是答案,但根据我的观察,我不确定了。

【问题讨论】:

  • Fromcmd.exe >Netstat -a.在客户端和服务器上运行。输出列出所有 TCP/UDP 端口和状态。您不能使用已与相同源 IP 和目标 IP 一起使用的端口。
  • 您的处理方式正确,对吧?

标签: c# sockets networking tcp tcpclient


【解决方案1】:

总计

所有套接字共享的只有 1 个临时端口池。

请参阅以下 MSDN 文章以配置可用的临时端口范围:

The default dynamic port range for TCP/IP has changed since Windows Vista and in Windows Server 2008

Troubleshoot port exhaustion issues

更新:嗯,更准确地说,至少每个本地 IP 的端口数量是有限的。如果您安装了多个 IP 适配器(即您的 PC 连接到多个网络),您可以将多个套接字绑定到同一个本地端口,只要它们绑定到不同的本地 IP。套接字连接由元组[Protocol, Local IP, Local Port, Remote IP, Remote Port] 唯一标识。因此,如果您使用相同的协议(在本例中为 TCP)与同一个远程 IP/端口建立一堆连接,那么本地 IP/端口对必须是唯一的。因此,如果所有传出套接字都绑定到同一个本地 IP,这会限制您可以使用的可用本地端口。但是,如果您在本地 IP 上使用多个套接字,则会扩大可用的本地端口。但这仅适用于您的用例,前提是这些多个网络具有到您感兴趣的服务器的路由。

【讨论】:

  • 这意味着,无论我连接到一个还是多个目标服务器,我都不能使用超过给定数量的并行传出端口?
  • @MichaelW 这是正确的。你真的不应该一开始就建立这么多同时连接。为什么需要这么多连接,为什么不能重用连接?您是否正在尝试对服务器进行某种压力测试?
  • 这是一个模拟压力测试。
猜你喜欢
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
相关资源
最近更新 更多