为内部应用程序分配TCP/IP端口

为内部应用程序分配TCP/IP端口,tcp,Tcp,我已经编写了一个由Windows服务托管的WCF服务,它需要在已知的TCP/IP端口上侦听。我可以在什么范围内安全地分配一个端口以在我的组织内使用?该端口将嵌入服务和使用该服务的客户机的配置文件中。这里是一个很好的示例。在一个空槽里做你自己的选择。也许您还应该扫描您的网络,以查找任何内部特殊应用程序 通常情况下,可以使用大量端口,我建议使用,但它们可能会被防火墙阻止。选择从49152到65535的端口号 IANA发布当前分配的端口列表 动态和/或专用端口是从49152到65535的端口。这是您

我已经编写了一个由Windows服务托管的WCF服务,它需要在已知的TCP/IP端口上侦听。我可以在什么范围内安全地分配一个端口以在我的组织内使用?该端口将嵌入服务和使用该服务的客户机的配置文件中。

这里是一个很好的示例。在一个空槽里做你自己的选择。也许您还应该扫描您的网络,以查找任何内部特殊应用程序


通常情况下,可以使用大量端口,我建议使用,但它们可能会被防火墙阻止。

选择从49152到65535的端口号

IANA发布当前分配的端口列表

动态和/或专用端口是从49152到65535的端口。这是您应该为内部应用程序选择端口的范围。当然,可以使用属于已发布列表中未分配范围之一的任何端口。但请注意,通过从这些未分配的范围中选择端口号,无法保证您选择的端口将来不会成为保留端口

不应使用未分配的端口号 用过。IANA将分配号码 应用程序后的端口 已获批准

并确保您选择的端口号是可配置的,如您所述:

该端口将嵌入到 服务的配置文件和 正在使用 服务


这将避免头痛的情况下,其他第三方您无法接触软件正在使用您的端口号。如果发生这种情况,您只需继续在配置文件中更改它,它就会正常工作。

除了关于选择公共应用程序端口的其他建议外,我建议您在应用程序中配置端口。硬编码端口号不是一个好主意,尤其是当您以后发现端口与另一个应用程序冲突并需要更改您的端口时。

简短回答:避免使用1023或49152以上的端口,并根据网络上的服务测试所选端口

如果您已经采取了合理的预防措施(将端口号放在配置文件中),那么如果以后发现冲突,就不会造成巨大的中断


但是(这样我就可以在我打字时弹出的其他建议中添加一些内容)请确保您可以轻松地进行更改!如果它在配置文件中,请将其显示出来。记录它,并在故障排除中指出它。这类事情可能会出错,因此,如果需要更改,请轻松调试。

请记住,通过netstat/a/n检查这些端口,以查看其他应用程序是否正在使用它。我发现vista使用了49152。。。。出于某些应用程序级别的原因。基本上,因为大多数系统级侦听器并没有实现端口共享,所以使用那个些根本并没有使用的端口是非常安全的

祝你有愉快的一天
AMir

端口0-1023是众所周知的端口,由IANA分配。这些应仅用于公共网络上分配的协议

端口1024-65535过去称为注册端口号(请参阅),但现在分为两个区域(请参阅)

端口1024-49151是用户端口,用于您自己的协议

端口49152-65535是动态端口,不应指定为协议

用户端口可以用于任何协议,但数量有限,因此您的使用将与其他人在某个网络某处的使用发生冲突。IANA保留注册端口号的记录(0-49151)。如果您的协议将在公共网络上使用,那么您需要考虑向IANA注册它。如果您仅在自己的网络中使用它,请在此区域(1024-49151)中选择一个端口,并对照检查该端口,以确保该端口未被网络上可能使用的协议使用。对于私人使用,选择一个分配给您知道不会使用的协议的编号可能比选择一个未分配的编号更好,因此将来可能会分配


不要在动态范围内使用端口号。这些端口是由操作系统动态地随机分配的。如果您打开一个客户端连接(使用bind()和port=0),将从动态范围中为您分配一个未使用的端口。无法保证此范围内的端口对您的协议始终是免费的。

另一方面,应用软件不得假设动态端口范围内的特定端口号始终可用于通信,因此该范围内的端口号不得用作服务标识符。博鲁是正确的。不要在动态范围内使用端口号。请参阅本页其他地方我的解释。不明智。因为系统可能会选择分配您在任何给定时刻使用的端口。因此,您的服务器可能看起来只能在后一次加载时失败。相反,请使用已分配给您确定永远不会需要的端口。例如,TCP 31457被分配给TeNET,所以这是一个相当肯定的赌注(除非你的业务是多人俄罗斯方块)。如上所述,“端口1024-49151是用户端口,是用于您自己的协议的端口。”,但与在同一端口中侦听的另一个应用程序的冲突是远程的,可以通过选择另一个端口来修复。如果选择动态范围内的端口,由于Windows将其用于传出连接,任何时候都可能已被其他应用程序使用,因此几乎不可能保证动态范围内的端口始终可用于您的应用程序。这是一个有用的问题,其他回答者很好地证明了“被接受”的答案(由豪尔赫·费雷拉(Jorge Ferreira)所作)是不正确的,或者至少是不完整的,就像上面的答案一样