在/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。
如果不是,如何指定服务,以便可以指定其传输协议以及其主机名和端口号?
谢谢。
发布于 2019-02-13 21:53:42
当服务被指定为(主机名、端口号)时,这是否指定了传输协议?
不是的。example.com:80可以是一个http服务,但它也可以很容易地成为一个VPN服务。如果它是运行OpenVPN的VPN服务,那么它可以是tcp或udp,这取决于应用程序是如何配置的。
如果不是,如何指定服务,以便可以指定其传输协议以及其主机名和端口号?
我不相信有这样的惯例,我可能会使用example.com:80/tcp,但是使用YMMV。
发布于 2019-02-13 21:49:01
主机名/DNS与运行在特定端口上的服务无关。它严格处理IP地址到名称的转换,反之亦然。
/etc/services充当getportbyname()的提示查找,这样本地机器上的脚本/程序就不必知道它们处理的是哪个端口。也就是说,如果我有一个脚本可以远程进入其他机器,我可以让它尝试/etc/services指定的所有端口。
服务,特别是它们使用的传输协议,取决于它们是如何编写和/或配置的。如果要将服务配置为特定的端口/传输协议,则必须查看该特定服务的配置。有些用户可能不允许您监听UDP,但允许您指定任何您想要的TCP端口。其他人可能会让你同时设置,这是高度依赖于服务。
例如,在设置nginx时,可以使用lets指令指定IP地址和(tcp)端口,但仅此而已。您可以进行UDP负载平衡,但不能使用udp侦听HTTP。
https://serverfault.com/questions/953815
复制相似问题