在 中/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。