oracle软件一般使用主机名的目的是让客户端能可以通过直接输入服务端的主机名,而不是其IP地址网络连接到服务端。故而为了实现这一目的,就需要让主机名与IP地址映射成一条映射条目。在window系统下,由于win操作系统上的某一进程所调用的rtlIPv6AddressToStringW函数(来自win操作系统上的ntdll.dll文件)可以自动构造出这一映射条目(即程序写死的),所以hosts文件里的内容可以为空,也能实现上述目的;在Linux系统中,没有上述功能,所以要在/etc/hosts文件中手动添加这一条记录。
在window系统下,构造出了一个映射条目 习惯 将“IP地址 名字1 名字2”[这是一般形式写法]这一格式里的名字1写为<fully qualified hostname>,名字2写为 <short hostname> ,也就是Hostname。最后结果,即为<ipaddress> <fully qualified hostname> <short hostname> 。Hostname指定系统的 DNS 主机名,该主机名可由“hostname”命令返回。也就是FQDN (fully qualified domain name,完全限定域名)=主机名+域名(包括顶级域)中的那个主机名。因为hostname是dns主机名,所以hostname会出现在dns系统用的fqdn格式的域名里。但是这里window系统下一函数构造出了一个映射条目里也是有fqdn格式的域名。
参考0:
oracle软件一般使用主机名的目的是让客户端能可以通过直接输入服务端的主机名,而不是其IP地址网络连接到服务端。
例如,listener.ora里host填写为主机名 ,还是可以正常监听,就是因为已经有了主机名与IP地址映射成的一条映射条目。
注释:
1、服务端不一定就是和客户端在不同的主机上,也可以在同一主机上。比如,一主机有ip地址A和B,服务端用A,客户端用B。或者,一主机只有一个ip地址A,服务端用A,客户端也同时可用A。
在 win操作系统上, 一般来说,在安装oracle数据库软件期间,会调用一次win操作系统上的rtlIPv6AddressToStringW函数(来自win操作系统上的ntdll.dll文件)来构造出现有主机名与现有IP地址间的这一映射条目保存在安装好的oracle数据库软件上。待操作系统修改了主机名或是IP地址后,oracle上涉及主机名的一些功能就会不正常。
参看:
参考1:
Linux系统在向DNS服务器发出域名解析请求之前会查询/etc/hosts文件,如果里面有相应的记录,就会使用hosts里面的记录。/etc/hosts文件通常里面包含这一条记录
127.0.0.1 localhost.localdomain localhost
hosts文件格式是一行一条记录,分别是IP地址 hostname aliases,三者用空白字符分隔,aliases可选 IP地址 域名1 域名2 。。。。。域名n。
127.0.0.1到localhost这一条建议不要修改,因为很多应用程序会用到这个,比如sendmail,修改之后这些程序可能就无法正常运行。
修改hostname后,如果想要在本机上用newhostname来访问,就必须在/etc/hosts文件里添加一条newhostname的记录。比如我的eth0的IP是192.168.1.61,我将hosts文件修改如下:
#hostname blog.infernor.net
# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.1.61 blog.infernor.net blog
这样,我就可以通过blog或者blog.infernor.net来访问本机。
从上面这些来看,/etc/hosts于设置hostname是没直接关系的,仅仅当你要在本机上用新的hostname来访问自己的时候才会用到/etc/hosts文件。两者没有必然的联系。
参考2:
附加:
1、客户端会用到(自己的)hosts文件在建立连接时,而不是服务端用到(自己的)hosts文件
客户端的操作系统在向DNS服务器发出域名解析请求之前会查询自己的hosts文件,所以说hosts文件里的映射条目都是指服务端主机的ip地址和ip地址的域名间的映射:
客户端比如在浏览器中输入一个域名时,就会自动查询事先存在自己hosts文件里的映射条目,之后就能查出服务端的ip地址,从而通过ip地址连接到服务端(两个主机间要建立连接通讯只能靠ip地址的形式,而不是域名之类别的形式,因为通讯协议即ip协议设计时就是只支持ip地址格式的)。
2、hosts文件里的映射条目在格式上不必说<ip地址> 后的第一个域名是<fully qualified hostname>形式的,第二个域名是<short hostname>形式的
所以说,hosts文件里的映射条目在格式上不必说<ip地址> 后的第一个域名是<fully qualified hostname>形式的,第二个域名是<short hostname>形式的,即不一定要用下面的写法,只是该写法是一个习惯而已:
hosts文件格式是一行一条记录,分别是IP地址 hostname aliases,三者用空白字符分隔,aliases可选
<ipaddress> <fully qualified hostname> <short hostname> <ip地址><完全合格的主机名> <短主机名>
其实,<ip地址> 后跟着的域名为什么名字是客户端可以随便取的,因为这个域名,只要写着该域名的hosts文件所在的客户端所在的主机(即操作系统)认识该域名即可,也就是说,该域名是该主机给某一个ip地址取的别名而已,主机将该别名和真名(即ip地址)的映射存在自己的hosts文件里,这样,下次主机在自己的浏览器上输入这个别名就可知道这个别名对应的真名(即ip地址)是什么,从而连接到自己想要连接的主机(即操作系统)服务端上。类似于,你给某一个人取了个别名,这个别名除了你自己别人(被你取了别名的那人)都不到这个别名真实的意思是什么,你自己说这个别名时自己知道这个别名是指谁(相当于你的主机hosts文件有这么一条映射条目),如果你自己说这个别名时自己也不知道这个别名是指谁(相当于你的主机hosts文件没有有这么一条映射条目),那你就不知道说这个别名的目的何在了(相当于没法通过域名解析后连接到对方)。
而DNS系统(由因特网上的多个DNS服务器主机加上DNS协议组成)是给因特网上所有的主机取了别名,而且这个别名是按照一定规则取的,不是乱取名的,比如,某一批人的别名会出现.com等。当你手里有一个人的别名而不知道别名具体指谁时,就可以向DNS系统(上的DNS服务器主机)查询这个别名具体指谁,DNS服务器主机就会告诉你这个别名对应的真名(即ip地址)是什么,从而连接到自己想要连接的主机(即操作系统)服务端上。如果你乱写了一个别名,在DNS系统的别名库没有的话,那你问DNS系统(上的DNS服务器主机)也问不出结果的,因为它不认识这个别名。
DNS系统和hosts文件给同一主机取了别名,但是因为是两套别名系统,各自不知道对方取的别名的含义,就像两个人,一个讲英语,一个讲中文,双方都听不懂对方的语言,所以两个人都在说苹果,但双方都不知道讲的意思。
在DNS系统下,映射条目的写法为<ipaddress> <fully qualified hostname> <short hostname>;
在host文件下,映射条目的写法为“IP地址 名字1 名字2”。
不可以,因为FQDN是DNS协议设计时规定好的一种域名取名的格式,即就是要求DNS服务端给DNS客户端取一个FQDN 时该FQDN有客户端的主机名。
Hostname指定系统的 DNS 主机名,该主机名可由“hostname”命令返回。也就是FQDN (fully qualified domain name,完全限定域名)=主机名+域名(包括顶级域)中的那个主机名。因为hostname是dns主机名,所以hostname会出现在dns系统用的fqdn格式的域名里。
注释:
1、服务端不一定就是和客户端在不同的主机上,也可以在同一主机上。比如,一主机有ip地址A和B,服务端用A,客户端用B。或者,一主机只有一个ip地址A,服务端用A,客户端也同时可用A。
2、fully qualified host name就是fully qualified domain name
<short hostname>就是平时说的主机名。
3、域名,确切地说,是和主机(即操作系统)上的一个IP地址对应。