首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器如何知道使用了哪个域名?

服务器如何知道使用了哪个域名?
EN

Stack Overflow用户
提问于 2018-11-29 19:01:33
回答 1查看 719关注 0票数 0

据我所知,我们从dns查询得到的是一个ip地址。因此,到最后,如果是这样的话,我们仍然使用ip地址来连接服务器,域名也是它们的名字。

那么,服务器如何知道我用来查询ip地址的域呢?如果域数据在dns查询期间丢失,vhost如何工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-29 20:36:37

因特网是分层次工作的。每个层使用不同类型的参数来完成其工作。

第三层通常是IP,也就是Internet协议。为了使用IP地址,每台计算机至少有一台可以与另一台计算机进行讨论。实际上有两个家族:第4版和第6版。

由于在任何给定的计算机上都可以有多个服务,所以您需要在第4层之上建立一个处理传输的层。“优势”之一是TCP,也就是传输控制协议,但也有UDP。TCP和UDP使用端口:一个为特定协议编码的2字节整数。

例如,HTTP的端口号为80 (完全任意),HTTPS端口为443。

DNS本身使用UDP和TCP (端口53),允许将给定的主机名映射到给定的IP地址或多个IP地址。这是典型的AAAAA记录。还有一个CNAME记录,它将一个域名映射到另一个域名。还有一个SRV记录,它将服务(即协议名+传输)映射到给定的主机名和端口号。

当一台计算机连接到另一台计算机时,其第一步就是找出要连接到的IP地址。它可以使用DNS。通常,它将只获得IP地址,但是,(取决于协议(4层以上))也可能获得一个端口(如果使用SRV记录)。

HTTP不使用SRV记录。因此,浏览器只使用硬编码的80或443端口,或者URL中显示的端口号。

那么我们就处于传输级别,比如说TCP。连接已经完成(因为现在知道了远程IP地址和端口),TCP上面的协议,像HTTP一样,可以自由地传递任何类型的额外数据,比如客户机最初使用的主机名(从URL中获取)来查找IP地址。这是通过HTTP host报头完成的,请参阅RFC 2616

请注意,如果您通过TLS (概念上位于TCP和HTTP之间)进行操作,甚至还会发生其他事情: SNI或Server名称指示。

在进行TLS握手时,因此在任何类型的HTTP头或内容之前,客户端将在某些特定的TLS消息中发送所需的最终主机名。为什么?这样,服务器就可以找到它应该回答哪个特定的证书,否则它将无法知道请求哪个主机名,因为它位于某些HTTP头中,在完成TLS握手之前不存在。

see服务器将能够查看SNI内容,以查找要发回哪个证书,然后查看host头,以确定哪个VirtualHost (在Apache中)部分与正在处理的查询相关。

如果您不在HTTP世界,那么这完全取决于所使用的协议。早期的协议,如FTP,一开始并不打算“多主机”,例如,给定的IP地址只意味着一个主机名和服务。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53545873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档