在 中/etc/services
,服务名称可以有多个(传输协议、端口号)对。例如,Linux 编程接口说:
/etc/services 文件由包含三列的行组成,如以下示例所示:
# Service name port/protocol [aliases] 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
哪些字段可以作为表中的键?
该示例显示服务名称可以对应于多个传输协议。
给定一个服务名称和一种传输协议,它们是否可以对应多个端口号?换句话说,一个服务可以在同一传输协议中侦听两个端口吗?
谢谢。
答案1
该文件描述于联机services(5)
帮助页,以及它的用法相关函数的联机帮助页。后者表明以下对预计是关键:
- 名称和协议;
- 端口号和协议。
请注意,服务可以有别名(您的示例未说明)。www
例如通常是以下的别名http
:
http 80/tcp www # WorldWideWeb HTTP
关于什么服务能do,/etc/services
仅提供映射,不限制任何内容。因此,在 TCP 上请求的人http
将被告知相应的分配端口是 80,但 HTTP 守护进程可以侦听它想要(并且被允许)的任何端口;同样,有人在 TCP 上请求端口 80 时会被告知相应的名称是http
,但这并不意味着侦听端口 80 的服务器必须是 HTTP 服务器。此外,单个进程可以侦听多个端口,并且从内核 3.9 开始,在 BSD 和 Linux 上,多个进程可以侦听同一端口。