通过解析器向DNS服务器发出查询

解析器的用法非常简单。Socket库中的程序都是标准组件,只要从应用程序中进行调用就可以了。具体来说,在编写浏览器等应用程序的时候,只要像图1.11这样写上解析器的程序名称“gethostbyname”以及Web服务器的域名“www.lab.glasscom.com”就可以了,这样就完成了对解析器的调用
在这里插入图片描述
在应用程序中编写上图中的一行代码后就能够调用解析器完成向DNS服务器查询IP地址的操作。调用解析器后,解析器会向DNS服务器发送查询消息,然后DNS服务器会返回响应消息。响应消息中包含查询到的IP地址,解析器会取出IP地址,并将其写入浏览器指定的内存地址中。只要运行图1.11中的这一行程序,就可以完成前面所有这些工作,我们也就完成了IP地址的查询。接下来,浏览器在向Web服务器发送消息时,只要从该内存地址取出IP地址,并将它与HTTP请求消息一起交给操作系统就可以了

根据域名查询IP地址时,浏览器会使用Socket库中的解析器

解析器的内部原理

下面来看一看当应用程序调用解析器时,解析器内部是怎样工作的(图1.12)。网络应用程序(在我们的场景中就是指浏览器)调用解析器时,程序的控制流程就会转移到解析器的内部。“控制流程转移”这个说法对于没有编程经验的人来说可能不容易理解,所以这里简单解释一下。
在这里插入图片描述

通过让多个程序按顺序执行操作,数据就被发送出去了。

一般来说,应用程序编写的操作内容是从上往下按顺序执行的,当到达需要调用解析器的部分时,对应的那一行程序就会被执行,应用程序本身的工作就会暂停(图1.12①)。然后,Socket库中的解析器开始运行(图1.12②),完成应用程序委托的操作。像这样,由于调用了其他程序,原本运行的程序进入暂停状态,而被调用的程序开始运行,这就是“控制流程转移”。

当控制流程转移到解析器后,解析器会生成要发送给DNS服务器的查询消息。这个过程与浏览器生成要发送给Web服务器的HTTP请求消息的过程类似,解析器会根据DNS的规格,生成一条表示“请告诉我www.lab.glasscom.com的IP地址”的数据,并将它发送给DNS服务器(图1.12③)。发送消息这个操作并不是由解析器自身来执行,而是要委托给操作系统内部的协议栈来执行。这是因为和浏览器一样,解析器本身也不具备使用网络收发数据的功能。解析器调用协议栈后,控制流程会再次转移,协议栈会执行发送消息的操作,然后通过网卡将消息发送给DNS服务器(图1.12④⑤)。

当DNS服务器收到查询消息后,它会根据消息中的查询内容进行查询。这个查询的过程有点复杂,我们稍后会进行讲解,这里先不关心具体的方法。

总之,如果要访问的Web服务器已经在DNS服务器上注册,那么这条记录就能够被找到,然后其IP地址会被写入响应消息并返回给客户端(图1.12⑥)。接下来,消息经过网络到达客户端,再经过协议栈被传递给解析器(图1.12⑦⑧),然后解析器读取出消息取出IP地址,并将IP地址传递给应用程序(图1.12⑨)。实际上,解析器会将取出的IP地址写入应用程序指定的内存地址中,图1.11用“<内存地址>”来表示,在实际的程序代码中应该写的是代表这一内存地址的名称。

到这里,解析器的工作就完成了,控制流程重新回到应用程序(浏览器)。现在应用程序已经能够从内存中取出IP地址了,所以说IP地址是用这种方式传递给应用程序的。

计算机的内部结构就是这样一层一层的。也就是说,很多程序组成不同的层次,彼此之间分工协作。当接到上层委派的操作时,本层的程序并不会完成所有的工作,而是会完成一部分工作,再将剩下的部分委派到下层来完成

顺带一提,向DNS服务器发送消息时,我们当然也需要知道DNS服务器的IP地址。只不过这个IP地址是作为TCP/IP的一个设置项目事先设置好的,不需要再去查询了。不同的操作系统中TCP/IP的设置方法也有差异,Windows中的设置如图1.13所示,解析器会根据这里设置的DNS服务器IP地址来发送消息。
在这里插入图片描述

总结

  • 根据域名查询IP地址时,浏览器会使用Socket库中的解析器

思考

  • 什么是Socket库?
  • 什么是解析器?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值