端口号是与硬件计算机上特定软件的逻辑连接。然后,Web服务器中的软件集与请求URL中使用的端口号之间应该存在关系。但是,似乎端口号与使用的应用层协议(来自Internet Protocol Suite)之间存在关联,如HTTP(80),FTP(21),Telnet(23)等。为什么会如此? ??
我在stackoverflow上引用了类似的问题here。正如Aaron Maenpaa所回答的那样,议定书和港口之间没有严格的一对一通信。这只是一个惯例。我们也可以在其他端口上监听HTTP(例如8080)。那我们怎么做呢?
这引出了另一个问题。 我们如何将自定义服务器程序映射到某些非标准TCP端口号?
答案 0 :(得分:0)
任何应用程序都可以bind()
到任何可用端口,但可能需要管理权限的低编号端口除外。绝对没有强制执行什么类型的应用程序监听什么端口号,只是惯例。这是因为端口号本身只是数据包标题中的16位字段,操作系统没有实际的方法来了解应用程序级别的内容。
通常,应用程序侦听的端口号由应用程序本身确定:它必须决定将哪个端口传递给bind()
调用。在应用程序外部,您可以在路由器或防火墙中使用NAT(网络地址转换)将任何端口号重定向到任何其他端口号。
请注意,TCP端口完全独立于UDP端口。使用TCP端口12345的应用程序与使用UDP端口12345的应用程序完全没有任何关系。允许或阻止其中一个的防火墙不会自动允许或阻止另一个。
不幸的是,IANA(关于什么应用程序使用什么端口号的未执行约定的守护者)决定将服务名称分配给UDP和TCP端口这一事实常常使这一点感到困惑,即使该服务仅使用其中一个它们。