2012-02-27 96 views
0

端口号是与硬件机器上特定软件的逻辑连接。然后,Web服务器中的一组软件与请求的URL中使用的端口号之间应该有关系。但是,似乎Port No和HTTP(80),FTP(21),Telnet(23)等使用的应用层协议(从Internet Protocol Suite)之间存在关系。为什么这样?URL中的协议和端口号之间的关系或对应关系

我在stackoverflow上提到了一个类似的问题here。正如Aaron Maenpaa回答的,协议和港口之间并没有严格的一一对应关系。这只是一个惯例。我们也可以在其他端口上监听HTTP(比如8080)。那我们怎么做呢?

这会导致另一个问题。 我们如何将自定义服务器程序映射到某个非标准的TCP端口号?

回答

0

任何应用程序都可以bind()为任何可用端口,但可能需要管理权限的低编号端口除外。绝对没有强制什么类型的应用程序监听什么端口号,只是惯例。这是因为端口号本身只是数据包头中的一个16位字段,操作系统无法知道应用程序级别发生了什么。

通常,应用程序监听的端口号由应用程序本身决定:它必须决定将什么端口交给bind()调用。在应用程序的外部,您可以在路由器或防火墙中使用NAT(网络地址转换)将任何端口号重定向到任何其他端口号。

请注意,TCP端口完全独立于UDP端口。使用TCP端口12345的应用程序与使用UDP端口12345的应用程序完全没有关系。防火墙允许或阻止一个不会自动允许或阻止另一个。

不幸的是,IANA(关于哪些应用程序使用哪些端口号的非强制约定的守护者)已决定为UDP和TCP端口分配服务名称,即使该服务仅使用一个端口其中。

+0

这里你是什么意思的应用程序。在Container中部署的人正确吗?例如。使用Tomcat,该应用程序是在webapps内部署的。那么我怎样才能为我的应用程序配置端口号? – whitehat 2012-02-28 08:26:28

+0

“应用程序”只是指在系统上运行的进程。端口号由'bind()'系统调用决定。 – 2012-02-28 15:41:12