DNS、HTTP

总结:以HTTP请求为例。用户在浏览器中输入网址URL -> 浏览器解析、生成请求 -> 向DNS服务器查询请求的Web服务器IP地址 -> DNS服务器返回IP -> 浏览器委托协议栈发送消息

1. 生成HTTP请求
  • 用户在浏览器中输入网址(URL)
  • 浏览器对网址进行解析
    也就是把网址的各个元素拆分出来,如可将http://www.lab.glasscom.com/dir1/file1.html解释为访问www.lab.glasscom.com这个Web服务器上路径名为/dir/file1.html的文件
  • 浏览器根据网址含义生成请求消息
    • HTTP协议:定义了客户端和服务器之间交互的消息内容和步骤。
    • HTTP消息有严格的格式:
      • 请求消息:
        在这里插入图片描述

        消息头:尽管通过第一行的请求行我们就可以大致理解请求的内容,但有时还需要一些额外的详细信息,这些放在消息头中。如日期、客户端支持的数据类型、语言、压缩格式、客户端和服务器的软件名称和版本、数据有效期和最后更新时间等

        消息体:使用GET方法时,消息体中不需要填写任何数据

      • 响应消息:
        在这里插入图片描述

        状态码和响应短语:它们表示的内容一致,但用途不同。状态码是一个数字,用来向程序告知执行的结果;响应短语则是一段文字,用来向人们告知执行的结果

2. 向DNS服务器查询Web服务器的IP地址

网址中只有Web服务器的域名,而TCP/IP网络是通过IP地址来确定通信对象的,因此浏览器要向DNS服务器查询域名对应的IP地址

  • 为什么
    • 那为什么网址中不直接写服务器的IP地址:因为人们记不住
    • 那为什么不用名称来确定通信对象:IP地址是32比特,域名最短也要几十个字节,要是让每个路由器都处理几十~255个字节的字符,会增加其负担,传送数据会花费更长时间。互联网内部流动的数据量已然让路由器疲于应付了,不应该再采用效率更低的设计
    • 综上:采用让人使用名称、让路由器使用IP地址的方法。而为了填补二者之间的障碍,需要一个机制能够通过名称来查询IP地址,或通过IP地址来查询名称。这个机制就是DNS(Domain Name System)
  • 向DNS发出查询:
    • DNS客户端存在于我们的计算机中,称为DNS解析器(实际上是一段程序)。调用DNS解析器(指明解析器程序名称gethostbyname和要解析的域名)后,解析器会向DNS服务器发送查询消息,然后(经过下面的大接力后)DNS服务器会返回响应消息。解析器取出响应消息中的IP地址,将其写入浏览器指定的内存中,就完成了IP地址的查询
    • DNS服务器的IP地址:向DNS服务器发送消息,当然也要知道DNS服务器的IP地址。这个IP地址是作为TCP/IP的一个设置项目事先设置好的
3. DNS服务器大接力

全世界有上万台DNS服务器,它们相互接力才能完成IP地址的查询。

  • DNS服务器的工作内容:接收来自客户端的查询消息,然后根据消息的内容返回响应
  • 将信息分布保存在多台DNS服务器中:将互联网中所有服务器信息全部保存在一台DNS服务器中是不可能的,需要这些DNS服务器接力配合,从而查找要查询的信息
    • 保存结构:按照域名以分层次的结构保存。一个域(层级用句点来分隔,一个层级的部分称为域)的信息是作为一个整体存放在DNS服务器中,不能将一个域拆开存放在多台DNS服务器中(但一台DNS服务器可存放多个域的信息)
    • 保存细节:负责下级域的DNS服务器的IP地址注册到它们的上级DNS服务器中(如负责管理lab.glasscom.com这个域的DNS服务器的IP地址需要注册到glasscom.com域的DNS服务器中,glasscom.com域的DNS服务器的IP地址需要注册到com域的DNS服务器中),这样就可通过上级DNS服务器查询出下级DNS服务器的IP地址
    • 根域的DNS服务器:保管着com、jp、cn等DNS服务器的信息,可以从根域开始一路往下找到任意一个域的DNS服务器。这就需要将根域的DNS服务器信息保存在互联网中所有的DNS服务器中(实际上根域DNS服务器的相关信息已经包含在DNS服务器程序的配置文件中了,因此只要安装了DNS服务器程序,这些信息就被自动配置好)。分配给根域DNS服务器的IP地址全世界只有13个(采用使用多台服务器来对应一个IP地址的运营方法,因此尽管IP地址只有13个,但服务器的数量是很多的)。
  • 接力过程(先递归,再迭代):
    • 客户端访问最近的一台DNS服务器(即客户端的TCP/IP设置中填写的DNS服务器地址),查询www.lab.glasscom.com的IP地址
    • 若该DNS服务器中有要查询的域名-IP地址,就返回。然后结束
    • 没有的话,最近的DNS服务器根据自己保存的根域DNS服务器的信息,将来自客户端的查询消息转发给根域DNS服务器
    • 根域DNS服务器判断这个域名属于com域,会返回它所管理的com域中的DNS服务器的IP地址
    • 最近的DNS服务器会向com域的DNS服务器发送查询消息
    • com域的DNS服务器返回glasscom.com域的DNS服务器的IP地址,以此类推
    • 最终最近的DNS服务器得到www.lab.glasscom.com的IP地址,然后返回给客户端
  • DNS缓存(无需接力):
    • 原理:如果要查询的域名和相关信息已经在缓存中,就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。相比于每次都从根域找起来说,缓存可以减少查询所需的时间。
    • 有效期:当缓存中的信息超过有效期,数据就会从缓存中删除。(作用:避免信息被缓存后,原本的注册信息发生改变,导致缓存的信息错误)
4. 委托协议栈发送消息

浏览器将消息委托给操作系统,发送到Web服务器的IP地址

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值