简单地说,我想要一个关于Web浏览器之类的应用程序如何解析URL,查询DNS服务器,然后实际建立TCP连接的低级解释。
我的例子就是这样:
http://site.example.com:7902/svn
现在在这种情况下,使用正常的主机记录,DNS查询是否只是尝试将site.example.com
部分解析为IP地址?
备用端口号如何影响这种情况?我认为端口号与基本的DNS解析无关。正如我希望DNS解析site.example.com
然后在形成TCP数据包时使用端口号。然后,我希望在建立TCP连接后简单地传递目录/svn
。
现在我的动机:
最近我问了一个问题,为什么我可以使用它的外部IP地址和备用端口号访问Apache服务器,但在使用域名时遇到问题。
所以,我的问题是这很好用:
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主机名上。
感谢您尝试理解这一点......
答案 0 :(得分:0)
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还没有得到更新?
答案 1 :(得分:0)
你的基本理解大多是正确的。在此过程中您遗漏的一个(通常是关键的)步骤是主机头的存在。基本上,浏览器将包含一个如下所示的请求标头:
Host: site.example.com
...作为请求的一部分。 Web服务器将使用它来确定如何将请求映射回给定站点。仅当有多个站点绑定到给定IP地址时才需要这样做,但通常情况就是如此。当您使用IP与名称请求时,可能会有不同结果的原因可能与此主机标头的存在以及Web服务器如何配置以响应它有关。
要记住的另一件事是路由的差异 - 如果您的名称解析为您手动输入的IP以外的IP,那么(当然)可能会导致不同的结果。我只提到这一点,因为有时DNS服务器会根据各种标准分发不同的IP,例如您在网络上的位置。
最后,代理也可能引入复杂性。当涉及代理时,所有投注都会关闭,因为这可能会完全改变请求的处理方式。