当服务被指定为(主机名,端口号)时,是否指定了传输协议?

当服务被指定为(主机名,端口号)时,是否指定了传输协议?

在 中/etc/services,服务名称可以有多个(传输协议、端口号)对。例如,

http            80/tcp                  # Hypertext Transfer Protocol
http            80/udp
ssh             22/tcp                  # Secure Shell
ssh             22/udp
telnet          23/tcp                  # Telnet
telnet          23/udp
smtp            25/tcp                  # Simple Mail Transfer Protocol
smtp            25/udp

当服务被指定为(主机名,端口号)时,是否指定了传输协议?

如果是,那么传输协议是从哪里和何时推断出来的(主机名、端口号)?我猜不是 DNS 服务器,因为 DNS 服务器不知道/etc/services各个服务器机器上的情况。

如果没有,您将如何指定服务,以便可以指定它的传输协议以及它的主机名和端口号?

谢谢。

答案1

当服务被指定为(主机名,端口号)时,是否指定了传输协议?

不。example.com:80 可能是 http 服务,但也可能是 VPN 服务。如果是运行 OpenVPN 等的 VPN 服务,则可能是 tcp 或 udp,具体取决于应用程序的配置方式。

如果没有,您将如何指定服务,以便可以指定它的传输协议以及它的主机名和端口号?

我不相信对此有惯例,我可能会使用 example.com:80/tcp,但 YMMV。

答案2

主机名/DNS 与特定端口上运行的服务无关。它严格负责将 IP 地址转换为名称,反之亦然。

/etc/services 用作 getportbyname() 的提示查找,这样本地机器上的脚本/程序就不会知道它们正在处理哪个端口。例如,如果我有一个远程访问其他机器的脚本,我可以让它尝试 /etc/services 指定的所有端口。

服务,特别是它们使用的传输协议取决于它们的编写和/或配置方式。如果您正在考虑将服务配置到特定端口/传输协议,则必须查看该特定服务的配置。有些可能不允许您侦听 UDP,但允许您指定所需的任何 TCP 端口。其他可能允许您同时设置两者,这在很大程度上取决于服务。

例如,在设置 nginx 时,您可以使用 listen 指令来指定 IP 地址和 (tcp) 端口,但仅此而已。您可以进行 udp 负载平衡,但不能使用 UDP 监听 HTTP。

相关内容