我编写了一个由Windows服务托管的WCF服务,它需要侦听已知的TCP/IP端口.我可以在哪个范围内安全地分配端口以在我的组织内使用?该端口将嵌入到服务的配置文件和使用该服务的客户端中.
端口0-1023是众所周知的端口,由IANA分配.这些应仅用于公共网络上的指定协议.
端口1024-65535以前称为注册端口号(参见rfc1700),但现在分为两个区域(参见rfc6335).
端口1024-49151是用户端口,是用于您自己的协议的端口.
端口49152-65535是动态端口,不应为协议规定.
用户端口可用于任何协议,但有一个有限的数字,因此您的使用将与某些网络上的某些人使用冲突.IANA保留了注册端口号(0-49151)的记录.如果您的协议将在公共网络上使用,那么您需要考虑向IANA注册它.如果您只在自己的网络中使用它,请在此区域内选择一个端口(1024-49151),并根据IANA注册检查该端口,以确保它不会被可在您的网络上使用的协议使用.对于私人使用,最好选择一个分配给您知道不会被使用的协议的号码,而不是选择一个未分配的协议,因此可能在将来分配.
请勿在动态范围内使用端口号.这些端口由操作系统分配,动态且有些随机.如果打开客户端连接(使用带端口= 0的bind()),将为动态范围分配一个未使用的端口.无法保证此范围内的端口始终可用于您的协议.
从49152到65535选择一个端口号.
IANA发布当前分配的端口列表.
http://www.iana.org/assignments/port-numbers
动态和/或专用端口是从49152到65535的端口.这是您应该为内部应用程序选择端口的范围.当然,可以使用属于已发布列表上的未分配范围之一的任何端口.但请注意,通过从未分配范围中选择端口号,无法保证您选择的端口将来不会成为保留端口.
不应使用未经授权的港口号码.在您的申请获得批准后,IANA将为该港口分配号码.
并确保您选择的端口号可以按照您的说明进行配置:
该端口将嵌入到服务的配置文件和使用该服务的客户端中.
如果某些其他第三方您无法触摸的软件正在使用您的端口号,这将避免令人头疼.如果发生这种情况,您只需继续在配置文件中进行更改即可.
简短回答:避免包括1023或超过49152在内的任何内容,并针对您网络上的服务测试所选端口.
如果您采取了合理的预防措施(将端口号放在配置文件中),如果您以后发现冲突,则不应该造成巨大的破坏.
但是(这样我可以在我输入时弹出的其他建议中添加一些内容)确保您可以轻松更改!如果它在配置文件中,请将其显而易见.记录它,并在故障排除中指出它.这是可能出错的事情,因此如果需要更改,可以轻松调试.
除了有关选择通用应用程序端口的其他建议之外,我建议您在应用程序中使该端口可配置。硬编码的端口号不是一个好主意,特别是如果以后您发现端口与另一个应用程序冲突并且需要更改您的应用程序时,尤其如此。