2017-09-07 99 views
0

我不是在问DNS是如何将域名转换为IP地址的“事情” - 我可以找到丰富的非常好的信息。我似乎无法找到描述的内容是应用程序如何与DNS进行交互以建立双方之间的连接。我的错误理解在我写这个问题的时候会变得很清楚 - 这不是刻意的,我只是无法理解这种“DNS互动”。在会话建立过程中的什么时候是DNS“名为”

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

让我给一个简单的场景。我想访问我最喜欢的网站,果味派。

所以我输入到网页浏览器:http://www.fruity-pies.com

现在,早在“连接过程”该地址需要转换成IP地址 - 这就是DNS不适合我。 DNS,或者更准确地说BIND(?),可以像HTTP那样在应用层“起作用”。所以我认为HTTP(或者我使用的任何服务,比如f​​tp)“知道”需要调用DNS/BIND(?)。发送的是域名fruity-pies.com,返回的是该资源的IP地址213.1.19.34。这是怎么回事?如果这是正确的,那么每个应用程序层进程都必须让代码“调用”DNS,并且重复对我来说似乎不正确。

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

对不起,如果这是一个误解,但现在强调我的主要问题是DNS/BIND如何适应通信的设置。我可以看到,一旦IP地址解析完毕,DNS/BIND就不再需要这种特定的通信。

回答

0

我想我已经为IPv4连接解决了我的问题。从https://wiki.python.org/moin/TcpCommunication

相信当应用程序试图使用插座一些“远程”的过程进行通信,不论是否需要DNS的服务原Python源发生,因为传递到应用程序插座的参数的结果。因此,在从客户端在Python 3编码的尝试连接到远程位置

import socket 

< <这告诉的Python程序将要进行网络连接,所以包括必要的代码下面摘录

TCP_IP = 'www.fruity-pies.com' 

< <这就是应用程序要连接到

TCP_PORT = 40375 

< <这是客户端应用程序要在果味馅饼

BUFFER_SIZE = ..... 
MESSAGE = ....... 

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

< <这将创建(?)套接字连接到并指示我想使用的IPv4(AF_INET)和TCP(SOCK_STREAM)协议的端口通信

s.connect((TCP_IP, TCP_PORT)) 

< <这是连接到远程位置的尝试。由于远程地址是一个字符串'www.fruity-pies.com',所以这个字符串会被拦截并且通过本地主机文件或DNS解析名称,并尝试查找记录以将www.fruity-pies.com翻译为一个IP地址。

.... rest of code 

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

相关问题