Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从URL形成DNS查询?_Url_Dns - Fatal编程技术网

如何从URL形成DNS查询?

如何从URL形成DNS查询?,url,dns,Url,Dns,简单地说,我想要一个低层次的解释,说明像web浏览器这样的应用程序如何解析URL、查询DNS服务器,然后实际建立TCP连接 我的例子是: http://site.example.com:7902/svn 现在,在这种情况下,如果主机记录正常,DNS查询不会简单地尝试将site.example.com部分解析为IP地址吗 备用端口号如何影响这种情况?我认为端口号与基本DNS解析无关。我希望DNS解析site.example.com,然后在形成TCP数据包时使用端口号。然后,我希望一旦建立了TCP

简单地说,我想要一个低层次的解释,说明像web浏览器这样的应用程序如何解析URL、查询DNS服务器,然后实际建立TCP连接

我的例子是:

http://site.example.com:7902/svn
现在,在这种情况下,如果主机记录正常,DNS查询不会简单地尝试将
site.example.com
部分解析为IP地址吗

备用端口号如何影响这种情况?我认为端口号与基本DNS解析无关。我希望DNS解析
site.example.com
,然后在形成TCP数据包时使用端口号。然后,我希望一旦建立了TCP连接,目录
/svn
就可以简单地传递


现在谈谈我的动机:

最近我问了一个问题,为什么我可以使用Apache服务器的外部IP地址和备用端口号访问它,但在使用域名时遇到问题

所以,我的问题是这很好:

http://xx.xx.xxx.xxx:7902/svn   // this works fine with my external IP
…但在使用DNS时失败:

http://site.example.com:7902/svn  // this didn't resolve
有了这个问题,我使用了另一个DNS提供商(而不是dyndns),一切正常。所以我问了这个问题,因为我很好奇为什么我不能在dyndns主机名中使用备用端口号


感谢您尝试理解这一点……

DNS解析IP地址、周期(嗯……有不同类型的DNS条目,如A记录、CNAME记录、MX记录,但它们似乎与您的问题无关)

端口不是DNS解析的一部分,而是IP地址后面服务器的一个方面

尝试从命令行解析site.example.com,查看是否获得了预期的IP地址。对于Windows和Unix,您可以使用

nslookup site.example.com

在Windows下,如果在没有任何参数的情况下运行
nslookup
,则进入nslookup的命令模式,然后可以在其中键入

服务器8.8.8.8

其中“8.8.8.8”是您要用于解析的DNS服务器(8.8.8.8是由Google运行的有效DNS服务器,但您可以将其分为任何您想要的DNS服务器)

然后你就可以打字了

site.example.com

看看IP是如何解析的。尝试不同的DNS服务器,看看是否获得相同的IP


请注意,DNS更改可能需要一段时间才能传播。如果IP地址发生变化,世界上的每台DNS服务器都可能需要几天的时间才能收到变化的通知(尽管在目前的实践中,世界上大多数国家只需要几小时就可以得到更新)。也许IP地址最近发生了变化,dyndns还没有得到更新?

您的基本理解基本上是正确的。在这个过程中,您遗漏的一个(通常是关键的)步骤是主机头的存在。基本上,浏览器将包括如下所示的请求头:

Host: site.example.com
。。。作为请求的一部分。web服务器将使用它来确定如何将请求映射回给定的站点。只有当有多个站点绑定到一个给定的IP地址时,这才是必要的,但通常情况就是这样。当您使用IP和名称进行请求时,可能会产生不同结果的原因可能与此主机头的存在以及web服务器如何配置以响应此主机头有关

要记住的另一件事是路由的不同——如果您的名字解析为IP而不是手动键入的IP,那么(当然)可能会导致不同的结果。我之所以提到这一点,是因为有时候DNS服务器会根据不同的标准分发不同的IP,例如您在网络上的位置


最后,还有代理可能带来的复杂性。当涉及到代理时,所有的赌注都被取消,因为这可能会完全改变请求的处理方式。

这里似乎解释得很好: