/etc/protocols 和 /etc/services 的来源?

/etc/protocols 和 /etc/services 的来源?

这些文件是包含 IP 协议号、别名和​​服务映射的数据库。作为一名用户,我通常不会与任何人互动直接的方式,但是需要创建特殊的 Linux/GNU 发行版,并且我注意到 perl 测试套件由于无法从 /etc/protocols 数据库中获取所需的数字而失败,因为它不存在于我的自定义系统中。

例如,从我选择的桌面发行版(SMP Debian 4.17.17-1 (2018-08-18) x86_64 GNU/Linux):

/etc/protocols 声称是根据 IANA 列表创建的。

# Internet (IP) protocols
#
# Updated from http://www.iana.org/assignments/protocol-numbers and other
# sources.
# New protocols will be added on request if they have been officially
# assigned by IANA and are not historical.
# If you need a huge list of used numbers please install the nmap package.

/etc/services 也是如此。

# Network services, Internet style
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, officially ports have two entries
# even if the protocol doesn't support UDP operations.
#
# Updated from http://www.iana.org/assignments/port-numbers and other
# sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services .
# New ports will be added on request if they have been officially assigned
# by IANA and used in the real-world or are needed by a debian package.
# If you need a huge list of used numbers please install the nmap package.

事实上,他们提供的数据看起来来自指定来源(但不是全部,这些数据库似乎是部分的)。这种特殊性让我完全困惑。

有 posix 函数调用来访问它们 - getprotoent(3),IEEE Std 1003.1-2008 对此进行了如下描述:

endprotoent、getprotobyname、getprotobynumber、getprotoent、setprotoent - 网络协议数据库函数

这些函数应检索有关协议的信息。该信息被认为存储在可以顺序或随机访问的数据库中。该数据库的实现未指定。

格式相对简单,提供这些文件会很好,但我不想在没有正确理解的情况下手动填充数据库或复制其他工作:是否有任何类型的中央源?谁负责填写数据库?

  • 公开 getprotoent(3) 调用并因此定义格式(如 glibc)的库?
  • 当前 POSIX 规范中是否有指定的标准内容图像?
  • 它属于哪个发行版维护者?
  • 或者完全是其他人/事?

答案1

由于您正在创建自己的发行版,因此您对安装的文件/etc/protocols和文件的内容负责。/etc/services

控制协议和服务编号分配的机构是 IANA,如您引用的文件头中所述;相应的列表可在其网站上找到,协议号服务名称和端口号。然而,分发维护者通常会添加已使用但尚未提交给 IANA 或尚未批准的条目,并删除他们认为已过时的条目。对于 Debian,这两个文件的源位于存储netbase

POSIX 定义了可用于检索协议和服务信息的函数,但它没有指定如何存储或检索数据,如您的引用中所示:

该数据库的实现未指定。

数据库中包含的信息也未指定; POSIX 仅有效地对模式强加要求。

相关内容