URL和DNS解析

  以下内容摘自《Go Web编程》,介绍的通俗易懂。

  我们浏览网页都是通过URL访问的,那么URL到底是怎么样的呢?
  URL(Uniform Resource Locator)是“统一资源定位符”的英文缩写,用于描述一个网络上的资源, 基本格式如下
    schema://host[:port#]/path/.../[?query-string][#anchor]
    scheme 指定低层使用的协议(例如:http, https, ftp)
    host HTTP服务器的IP地址或者域名
    port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/
    path 访问资源的路径
    query-string 发送给http服务器的数据
    anchor 锚
  DNS(Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它从事将主机名或域名转换为实际IP地址的工作。DNS就是这样的一位“翻译官”,它的基本工作原理可用下图来表示。

  更详细的DNS解析的过程如下,这个过程有助于我们理解DNS的工作模式
  1. 在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
  2. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
  3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
  4. 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
  5. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至 “根DNS服务器”,“根DNS服务器”收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面的动作,进行查询,直至找到www.qq.com主机。
  6. 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

  所谓 递归查询过程 就是 “查询的递交者” 更替, 而 迭代查询过程 则是 “查询的递交者”不变。举个例子来说,你想知道某个一起上法律课的女孩的电话,并且你偷偷拍了她的照片,回到寝室告诉一个很仗义的哥们儿,这个哥们儿二话没说,拍着胸脯告诉你,甭急,我替你查(此处完成了一次递归查询,即,问询者的角色更替)。然后他拿着照片问了学院大四学长,学长告诉他,这姑娘是xx系的;然后这哥们儿马不停蹄又问了xx系的办公室主任助理同学,助理同学说是xx系yy班的,然后很仗义的哥们儿去xx系yy班的班长那里取到了该女孩儿电话。(此处完成若干次迭代查询,即,问询者角色不变,但反复更替问询对象)最后,他把号码交到了你手里。完成整个查询过程。
  通过上面的步骤,我们最后获取的是IP地址,也就是浏览器最后发起请求的时候是基于IP来和服务器做信息交互的。

时间: 2024-10-14 01:14:06

URL和DNS解析的相关文章

DNS解析中的A记录、AAAA记录、CNAME记录、MX记录、NS记录、TXT记录、SRV记录、URL转发等

AA记录: 将域名指向一个IPv4地址(例如:100.100.100.100),需要增加A记录 NSNS记录: 域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录 SOASOA记录: SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中标记哪一台是主服务器 MXMX记录: 建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录.建立邮箱时,一般会根据邮箱服务商提供的MX记录填写此记录 TXTTXT记录: 可任意填写,可为空.一般做

Dnsmasq安装与配置-搭建本地DNS服务器 更干净更快无广告DNS解析

默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢.其次是部分网站域名不能正常被解析,莫名其妙地打不开,或者时好时坏. 如果碰上不稳定的本地DNS,还可能经常出现无法解析的情况.除了要避免"坏"的DNS的影响,我们还可以利用DNS做些"好"事,例如管理局域网的DNS.给手机App Store加速.纠正错误的DNS解析记录.保证上网更加安全.去掉网

[爬虫学习笔记]C#基于ARSoft.Tools.Net的DNS解析模块(半成品)

      最近在做爬虫的作业,今天学习的内容是关于DNS解析模块的制作的.使用的库为ARSoft.Tools.Net,它是一个非常强大的开源DNS控件库,包含.Net SPF validation, SenderID validation以及DNS Client.DNS Server接口.使用该接口可轻松实现DNS客户请求端及服务器解析端.项目地址:http://arsofttoolsnet.codeplex.com/,Nuget包地址:https://www.nuget.org/packag

python dns解析以及服务检测

最近在看刘天斯的python自动化运维,按照刘老师的思路,记录一个dns轮询以及服务检测的粟子,作为学习笔记. #!/usr/bin/env python import dns.resolver import os import httplib iplist = [ ]               //定义一个空列表,用于存放解析得到的IP地址 appdomain = "www.baidu.com"            //定义业务域名 def get_iplist(domain=&

DNS解析过程原理

DNS解析原理及过程. 当用户访问我们网站一个网页时,他需要经过以下步骤: 1)找到这个网页的存放服务器: 2)服务器将用户的请求信息接入: 3)服务器通过文件路径(URL)查找用户请求网页: 4)用户将该网页内容下载到自己电脑上. 我们所讲的DNS解析主要是第一个步骤,即让用户通过URL找到文件存放的服务器. 1.为什么要有DNS解析? 让用户电脑和服务器(网页存放电脑)连接起来并不是靠域名进行,网络上计算机之间实现连接是通过每台计算机在网络中拥有的惟一的IP地址来完成的.但IP地址并不便于记

关于MySQL DNS解析探究之一:DNS解析确实在起作用

机器A --> 192.168.103.94  -- 服务器 机器B --> 192.168.4.2        -- 客户端 机器A => 装上mysql-server,启动: 使用root用户登录,查看DNS解析是否开启,执行如下命令: mysql> show variables like 'skip_name_resolve%'; +-------------------+-------+ | Variable_name     | Value | +-----------

http/https监控获取响应时间(DNS解析时间,RRT时间,服务器处理时间等)

有时候为了测试网络情况,需要返回每个阶段的耗时时间,比如DNS解析耗时,建立连接所消耗的时间,从建立连接到准备传输所使用的时间,从建立连接到传输开始所使用的时间,整个过程耗时,下载的数据量,下载速度,上传数据量,上传速度等等 有时候为了测试网络情况,需要返回每个阶段的耗时时间,比如DNS解析耗时,建立连接所消耗的时间,从建立连接到准备传输所使用的时间,从建立连接到传输开始所使用的时间,整个过程耗时,下载的数据量,下载速度,上传数据量,上传速度等等.下面的脚本获取以上信息: CURL的资料参见:

从输入url到页面(一):URL与DNS

浏览器引擎默认:webkit内核 一.输入地址 当我们开始在浏览器中输入网址的时候,现代浏览器就可以智能的匹配完整 url了,它会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全url地址. 如果输入的地址和候选项很匹配,在敲下回车之前,chromium就可以开始尝试建立TCP链接,chrome 的浏览器,他甚至会直接从缓存中把网页展示出来. 1.主机名扩展.将输入的主机名扩展为完整的主机名,如输入baidu,浏览器会尝试插入www. 和 .com.

怎样一键检测域名或url是否正常解析并传输

好久没有写博客了,现在重新拾起来,我想还不算晚. 工作中,经常会有人抱怨:网站好卡,dns是不是有问题...... 有没有一键的方式了解到是dns解析的问题还是网络传输导致的吗? 有.可以写一些脚本检查.shell可以充分利用curl工具编写脚本,python可以充分利用pycurl模块编写脚本. #!/usr/bin/env python #coding: utf-8 ''' 功能:检测域名解析及url响应时间 用法:可以将相关域名或url写死,也可以修改脚本变成交互式,每次可以检测多个 作者