通过前面的学习我们已经知道,URL会被解析然后生成HTTP消息。接下来就是要将HTTP消息发送给Web服务器。
由于实际通信中使用的是ip地址而不是域名,所以一定要有一个能够将域名转换为IP地址的角色,这个角色就是DNS服务器

加入DNS这个角色的好处

就像让你记电话号码一样,如果让你记忆一个主机的IP地址(很长很无规律那种)会很反人类,电话号码还好,没那么长,但是说实在的,现代人事情那么多如果不是重要的号码如父母配偶老板的号码,谁会记忆其他人的号码呢,那么难记。所以让人类记忆一个主机的域名就很人性化,比方说百度就是“www.baidu.com”。只要会简单的汉语拼音就可以了。

但是如果是单纯的用域名去通信呢?

域名最都是字符组成,短也要几十个字节,最长甚至可以达到255字节。而IP地址是一串32位比特的数据,也就是4字节,这对路由器的负担很小,也就是说使用IP地址去通信对机器是十分友好的。
又要减轻人类记忆的负担,又要减轻机器处理的负担,那就只能再引入一个第三方咯,让他记住IP地址和域名的映射关系。我们需要从其一去推断另一个时只需要像它询问就行。

IP地址工作的基本思路

TCP/IP的结构:一个范围内的一个个主机由集线器连接成子网,一个个子网又会由路由器联结在一起。边缘的路由器又会由中间的集线器联结。
子网就像一个房子,子网内的主机们就是房子里面的一个个房间。
所谓的IP地址就是要描述出:XX网络的XX主机,也即XX房子的XX房间,比如说如家酒店1033号。这样就标识了一个服务器在互联网中的位置。

关于通过IP地址去寻址到目标主机的过程已经在前面的视频里讲解过了,不再赘叙。

IP地址是一串32位的二进制数据,按8比特为一组分成4组,分别用十进制表示然后再用圆点隔开。
这一串数据怎么去同时表示网络号和主机号?
这就要引入子网掩码了:
子网掩码的作用就是去指示一串IP地址哪一部分是网络号,哪一部分是主机号。
例如

十进制表示:IP/掩码
10.1.2.3/255.255.255.0二进制表示:
00001010.00000001.00000010.00000011/11111111.11111111.11111111.00000000把子网掩码对应着IP地址写下来:
00001010.00000001.00000010.00000011
11111111.11111111.11111111.00000000这种写法太长了,可以把子网掩码1重复的次数用十进制表示写在IP的后面,即:
10.1.2.3/24        #24代表1重复了24次,剩下的32-24=8位为0
---------网络号-----------.--主机--

其中子网掩码前面24位都为1,后8位都为0
为1的部分指示IP地址相应的那一部分为网络号,为0的部分指示IP地址相应的那一部分为主机号

顺带一提,主机号部分的比特全部为0或者全部为1时代表两种特殊的含义。
主机号部分全部为0代表整个子网而不是子网中的某台设备。
主机号部分全部为1代表向子网上所有设备发送包,即广播

向DNS服务器查询IP地址

向DNS服务器查询IP地址,需要调用Socket库,它是用于调用网络功能的程序的组件集合
你可以将这个库看作操作系统的网络通信部分的“代理人”
我们前面所说的将HTTP消息发送过去就是委托了操作系统去办这件“寄信”的事务。

有关DNS服务器地址

我们主机上会预装DNS客户端,DNS服务器则在远方,要和指定的服务器通信必须设定好它的地址
win11上支持查询DNS

使用DNS解析器获取IP

通过Socket库,可以很方便的去访问DNS服务器并获取目标域名对应的IP,使用DNS解析器

<内存地址> = gethostbyname("www.baidu.com");

这就调用了解析器完成了向DNS服务器查询IP地址的操作
这段代码应该是内嵌在浏览器程序中的,当浏览器要发送HTTP请求就必须先进行DNS查询IP。

解析器工作流程

下图是工作流程的概览(上面已经指定了访问哪个DNS服务器的前提下)

该过程之后DNS服务器返回了相应的IP地址到应用程序指定的内存地址上
此后应用程序就可以用该IP去访问真正要请求数据的服务器了

DNS服务器的基本工作

DNS客户端会向DNS服务器发送如下三种信息:

  • 域名
  • Class 不常用 默认为IN
  • 记录类型 表示域名对应的类型,A代表请求的是IP,MX代表请求的是邮件服务器

相应的服务器上会存储包含这三类信息,当DNS客户端请求消息到来时服务器就在自己维护的“表”中查询对应的记录

域名的层次结构

互联网中存在着不计其数的服务器,将这些服务器的信息全部保存在一台DNS服务器中是不可能的,因此一定会出现在DNS服务器中找不到要查询的信息的情况。
所以要将信息分布保存在多台DNS服务器中,这些DNS服务器相互接力配合,从而查找出要查询的信息
DNS服务器中的所有信息都是按照域名以分层次的结构来保存的。层次结构这个词听起来可能有点不容易懂,其实就类似于公司中的事业集团、部门、科室这样的结构。层次结构能够帮助我们更好地管理大量的信息。

互联网中有数万台DNS服务器,肯定不能一台一台挨个去找。我们可以采用下面的办法。首先,将负责管理下级域的DNS服务器的IP地址注册到它们的上级DNS服务器中,然后上级DNS服务器的IP地址再注册到更上一级的DNS服务器中,以此类推。也就是说,负责管理lab.glasscom.com这个域的DNS服务器的IP地址需要注册到glasscom.com域的DNS服务器中,而glasscom.com域的DNS服务器的IP地址又需要注册到com域的DNS服务器中。这样,我们就可以通过上级DNS服务器查询出下级DNS服务器的IP地址,也就可以向下级DNS服务器发送查询请求了。

计算机网络---通过DNS服务器查询Web服务器的IP地址相关推荐

  1. 【网络是怎么连接的】—— 1.2 向 DNS 服务器查询 Web 服务器的 IP 地址

    目录 1.2 向 DNS 服务器查询 Web 服务器的 IP 地址 1.2.1 IP地址基础知识 1.2.2 域名和 IP 地址并用的理由 1.2.3 Socket 库提供查询 IP 地址的功能 1. ...

  2. 《网络是怎样连接的》第一章第二节:向DNS服务器查询Web服务器的IP地址

    <网络是怎样连接的>第一章:浏览器生成消息 概述:这本书以 "从在浏览器输入网址,到屏幕显示出网页,当中到底发生了什么?"为疑问,探究其中的过程.本章讲的是浏览器怎么把 ...

  3. 探索浏览器(二)向DNS服务器查询Web服务器的IP地址

    1.IP地址基础知识 (1)尽管浏览器能解析网址并生成HTTP消息,但它本身是不能发送网络消息的,这必须委托给操作系统来实现.在此之前,我们要查询网址中的服务器域名找到对应的IP地址.所以任务又可以细 ...

  4. 网络是怎样链接的--向DNS服务器查询Web服务器的IP地址

    文章目录 2.1 IP地址的基本知识 2.2 域名和IP地址共用理由 2.3 DNS本质是什么 2.4 浏览器如何获取IP 2.5 DNS解析器内部工作原理 2.1 IP地址的基本知识 浏览器能够解析 ...

  5. Linux下查看DNS服务器IP地址以及使用host命令查询域名对应的IP地址

    Linux下查看DNS服务器IP地址以及使用host命令查询域名对应的IP地址 Linux使用etc/resolv.conf文件来存放DNS服务器的IP地址,使用cat命令查看. cat /etc/r ...

  6. 应用程序服务器和Web服务器之间有什么区别?

    应用程序服务器和Web服务器之间有什么区别? #1楼 最大的不同是Web服务器处理HTTP请求,而应用程序服务器将在任意数量的协议上执行业务逻辑. #2楼 这取决于特定的体系结构. 某些应用程序服务器 ...

  7. 在家巧用树莓派(广告屏蔽,下载机,NAS服务器,web服务器,私有云)

    广告屏蔽,下载机,NAS服务器,web服务器,私有云 Raspberry Pi(中文名为"树莓派")是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux. ...

  8. 如何搭建自己的本地服务器,Web服务器

    搭建本地服务器,Web服务器--保姆级教程! 本文首发于https://chens.life/How-to-build-your-own-server.html. 先上图!大致思路就是如此. 前言 暑 ...

  9. Linux服务器搭建----Web服务器(apache)

    WWW的介绍 万维网(亦作"Web"."WWW"."'W3'",英文全称为"World Wide Web"),是一个由许 ...

  10. Linux中的网络服务初步---FTP服务器、Web服务器

    一.实验目的     (一)FTP服务器:配置,文件的上传和下载.     (二)Web服务器:网页的创建,访问网页. 二.实验环境     (一)服务器:Linux   主机,iP地址:192.16 ...

最新文章

  1. 牲畜体表信息的三维重建
  2. php utf-8读取,PHP读取文件,解决中文乱码UTF-8的方法分析
  3. 如何用python画圆形的代码-Python实现的圆形绘制(画圆)示例
  4. C#以post方式调用struts rest-plugin service的问题
  5. 攻防世界-Misc-_Aesop_secret
  6. 【编程】二叉搜索树的定义
  7. 数组中子数组求最大和
  8. java和ssm是什么关系,JAVA --- SSH和SSM的区别
  9. navicat创建数据库后显示图标灰色,右键后无法新建数据库
  10. Oracle中的USEREVN()
  11. Eclipse在ubuntu平台不显示顶部菜单栏
  12. 《Python Cookbook 3rd》笔记(2.8):多行匹配模式
  13. java.util.concurrent.atomic原子操作类包
  14. 南理工OJ-1098 - 字符串问题
  15. 无法使用SQL login去登陆SQL Server - 'Password did not match'
  16. 数据结构课程设计-航空订票系统
  17. Nacos 配置中心作用以及使用
  18. 调用高德api 实现地点搜索,且获取经纬度
  19. Jdon框架(JdonFramework)应用系统
  20. slice与split的区别

热门文章

  1. xampp配置虚拟主机的步骤
  2. 当你第一次发送ping请求包,ARP缓存表为空时会发生什么?(详细解析全过程)
  3. 交易系统的高盈亏比怎么实现?
  4. 设置Hi提醒实现机器人盯盘|自动监测股票价格达到条件推送消息通知
  5. win7计算机右键菜单多,win7系统清理右键菜单多余的选项|win7删除右键菜单多余选项的方法...
  6. 2021迅雷web实习生面试经验
  7. 解压RAR时出现“不可预料的压缩文件末端”的解决方法
  8. python scipy 计算黎曼ζ函数
  9. 数据库中COMMENT关键字的使用
  10. walking机器人仿真教程-应用-多点导航结合睡眠功能实现智能取药