据我所知,我们从DNS查询中得到的是IP地址。因此,在最后一天,如果那是真的,我们仍在使用IP地址来连接服务器,并且域名对于它们来说是漂亮的名字。
那么服务器如何知道我用来查询该IP地址的域? 虚拟主机如何工作,了解在dns查询期间域数据是否丢失?
答案 0 :(得分:1)
APOC Procedures。每个层使用不同种类的参数来完成其工作。
第3层通常是IP aka Internet协议。为了使用IP地址工作,每台计算机至少要有一台能够与另一台计算机进行讨论。实际上有两个系列:版本4和版本6。
由于某些服务可以同时存在于任何给定的计算机上,因此您需要在其之上的一层即第4层处理传输。 “主要”是TCP,即传输控制协议,但也有UDP。 TCP和UDP使用端口:一个2字节的整数,用于特定协议的编码。
例如,HTTP的端口号为80(完全任意),HTTPS的端口号为443。
DNS本身使用UDP和TCP(在端口53上),允许将给定的主机名映射到给定的IP地址或多个IP地址。这是典型的A
和AAAA
记录。还有一条CNAME
记录将一个域名映射到另一个域名。还存在一条SRV
记录,该记录将服务(协议名称+传输)映射到给定的主机名和端口号。
当一台计算机连接到另一台计算机时,针对上述所有操作的第一步是找出要用于连接的IP地址。它可以为此使用DNS。通常,它只会获取IP地址,但取决于协议(第4层以上),也可能会获取端口(如果使用SRV
记录)。
HTTP世界不使用SRV
记录。因此,浏览器仅使用硬编码的80或443端口,或使用URL中显示的端口号。
那么我们处于传输层,我们说TCP。
连接已经完成(因为现在知道了远程IP地址和端口),并且TCP之上的协议(如HTTP)可以自由传递任何形式的额外数据,例如客户端最初使用的主机名(取自URL) )以查找IP地址。
这是通过HTTP host
标头完成的,请参见The Internet works in layers
请注意,如果您通过TLS(概念上位于TCP和HTTP之间)进行操作,则甚至还会发生其他事情:SNI或服务器名称指示。
在进行TLS握手时,因此在发送任何类型的HTTP标头或内容之前,客户端将在某些特定的TLS消息中发送所需的最终主机名。为什么?这样,服务器就可以找到应该回答哪个特定证书的请求,否则它将无法知道请求哪个主机名,因为它位于某个HTTP标头中,直到TLS握手完成后,该标头才存在。
Web服务器将既可以查看SNI内容以查找要发送回的证书,又可以查看host
标头来查找哪个VirtualHost
(在Apache中)与查询相关正在处理。
如果您不在HTTP世界中,那么这完全取决于所使用的协议。像FTP这样的旧协议一开始并没有计划进行“多宿主”,例如,给定的IP地址仅意味着一个主机名和服务。