【问题标题】:At what point in session set up is DNS “called”在会话设置中的什么时候“调用”DNS
【发布时间】:2017-09-07 15:10:02
【问题描述】:

我不是在问 DNS 是如何将域名转换为 IP 地址的“事情”——我可以在这方面找到大量非常好的信息。我似乎找不到关于应用程序如何以及何时与 DNS 交互以在两方之间建立连接的描述。我的误解会在我写这个问题的方式中变得清晰 - 这不是故意的,我只是无法理解这个“DNS 交互”。

如果有解释我的问题答案的网络链接(我没有找到),请提供。

让我给出一个简单的场景。我想访问我最喜欢的网站,fruity-pies。

所以我在我的网络浏览器中输入:http://www.fruity-pies.com

现在,在“连接过程”的早期,需要将地址转换为 IP 地址——这就是 DNS 为我做的事情。 DNS,或者更准确地说是 BIND(?),像 HTTP 一样在应用层“工作”。所以我认为 HTTP(或我正在使用的任何服务,如 ftp)以某种方式“知道”对 DNS/BIND(?)的调用是必需的。发送的是域名fruity-pies.com,返回的是资源的IP地址213.1.19.34?。这是怎么回事?如果这是正确的,那么每个应用层进程都必须有代码来“调用”DNS,而这种重复对我来说似乎不正确。

虽然应用程序已从 DNS 收到 IP 地址,但这仅在网络层变得重要。那么 IP 地址是否从应用层传递到了传输层,但被忽略了,因为它与传输层无关?传输层将原始消息拆分为数据包并添加端口号以识别哪个进程在目的地处理消息。然后数据包与 IP 地址(来自应用层与 DNS/BIND 的交互)一起传递到将 IP 地址作为标头放置的网络层?对吗?

抱歉,如果这是一个误解,但要强调我目前的主要问题是 DNS/BIND 如何适合通信设置。我可以看到,一旦解析了 IP 地址,此特定通信就不再需要 DNS/BIND。

【问题讨论】:

    标签: dns ip-address tcp-ip


    【解决方案1】:

    我想我已经为我的 IPv4 连接问题找到了解决方案。来自https://wiki.python.org/moin/TcpCommunication的原始Python源代码

    我相信,当应用程序尝试使用 sockets 与某个“远程”进程通信时,是否需要 DNS 服务取决于传递给应用程序套接字的参数。因此,在下面从一个用 Python 3 编码的客户端中提取并尝试连接到远程位置

    import socket  
    

    TCP_IP = 'www.fruity-pies.com'  
    

    TCP_PORT = 40375  
    

    BUFFER_SIZE = .....
    MESSAGE = .......
    
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
    

    s.connect((TCP_IP, TCP_PORT))  
    

    .... rest of code
    

    我认为我的误解是基于这样一种想法,即 TCP/IP 处理的工作方式与 OSI 层的工作方式相同,并且每个“调用”都将参数“向下”传递到下一层。因此,如果 OSI 应用程序在第 7 级运行,那么某个第 6 级进程会收到连接请求。同样,我认为从尝试与远程进程通信的应用程序进行套接字调用,其中目标地址表示为字符串,例如 www.fruity-pies.com,某些传输层进程将负责将其转换为一个 IP 地址。这似乎不是工作方式。

    【讨论】:

      猜你喜欢
      • 2019-11-18
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 1970-01-01
      • 2019-12-25
      相关资源
      最近更新 更多