我不是在问DNS是如何将域名转换成IP地址的--我可以在这方面找到大量非常好的信息。我似乎找不到关于应用程序如何和何时与DNS交互以在双方之间建立连接的描述。在我写这个问题的方式中,我的误解会变得很清楚--这不是故意的,我只是无法理解这种"DNS交互“。
如果有一个网络链接(我还没有找到)来解释我的问题的答案,请提供。
让我给出一个简单的设想。我想访问我最喜欢的网站,水果派。
所以我输入了我的浏览器:http://www.fruity-pies.com
现在,在“连接过程”的早期,这个地址需要转换成一个IP地址--这就是DNS为我所做的。DNS,或者更准确地说,绑定(?),在应用层“工作”,就像HTTP一样。所以我认为HTTP (或者我使用的任何服务,比如ftp)“知道”对DNS/BIND (?)的调用。是必需的。发送的是域名,果树-pies.com,返回的是资源的IP地址,213.1.19.34?这就是发生的事吗?如果这是正确的,那么每个应用层进程都必须有代码来“调用”DNS,这种复制对我来说是不正确的。
尽管应用程序已经从DNS接收到IP地址,但这只在网络层变得非常重要。那么IP地址是从应用层传递到传输层,却被忽略了,因为它与传输层无关吗?传输层将原始消息拆分为数据包,并添加端口号以标识在目的地处理消息的进程。然后,数据包以IP地址(来自与DNS/BIND的应用层交互)传递到将IP地址作为报头的网络层?对吗?
抱歉,如果这是一个误解,但强调我目前的主要问题是DNS/BIND如何适应通信的设置。我可以看到,一旦IP地址被解析,DNS/BIND就不再需要用于这种特定的通信。
发布于 2017-09-08 05:49:45
我想我已经想出了IPv4连接问题的解决方案。来自https://wiki.python.org/moin/TcpCommunication的原始Python源
我相信,当应用程序试图使用套接字与某个“远程”进程通信时,无论是否需要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) <<这会创建(?)一个套接字,表示我希望使用IPv4 (AF_INET)和TCP (SOCK_STREAM)协议进行通信。
s.connect((TCP_IP, TCP_PORT)) << --这是连接到远程位置的尝试。因为远程地址是一个字符串,‘www.rupity-pies.com’,这个地址会被截获,并且通过本地主机文件或DNS来解析名称,试图找到一条记录来将www.rupity-pies.com翻译成一个IP地址。
.... rest of code我认为我的误解是基于这样一种想法,即TCP/IP处理与OSI层的工作方式相同,并且每个“调用”都将参数“向下”传递到下一层。因此,如果OSI应用程序运行在级别7,那么一些级别6进程接收连接请求。类似地,我认为从试图与远程进程通信的应用程序发出套接字调用,其中目标地址被表示为字符串,例如:www.rupity-pies.com,一些传输层进程将负责将其转换为IP地址。这似乎不是工作的方式。
https://stackoverflow.com/questions/46099807
复制相似问题