5 DNS
1) 概念
域名系统(Domain Name System,DNS))是Internet上解决网上机器命名的一种系统。就像拜访朋友要先知道别人家怎么走一样,Internet上当一台主机要访问另外一台主机时,必须首先获知其地址
.因为IP地址是固定长度的,IPv4是32位,IPv6是128位,而域名是变长的,不便于计算机处理,IP地址对于用户来说不方便记忆,但域名便于用户使用,例如www.baidu.com这是百度的域名。**总结一点就是IP地址是面向主机的,而域名则是面向用户的。**域名可将一个IP地址关联到一组有意义的字符上去。用户访问一个网站的时候,既可以输入该网站的IP地址,也可以输入其域名,对访问而言,两者是等价的。
2) DNS系统
-
一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系
-
如果新计算机接入网络,将这个信息注册到数据库中
-
用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址
4.在域名解析的过程中仍然会优先查找hosts文件的内容。
3) 域名的层次结构
eg :我们熟悉的,www.baidu.com
\1. com: 一级域名. 表示这是一个企业域名。同级的还有 “net”(网络提供商), “org”(⾮非盈利组织) 等。
\2. baidu: 二级域名,指公司名。
\3. www: 只是一种习惯用法。
域名可以划分为各个子域,子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等
其中顶级域名分为:国家顶级域名、通用顶级域名、反向域名。
国家顶级域名 | 中国:cn, 美国:us,英国uk… |
---|---|
通用顶级域名 | com公司企业,edu教育机构,gov政府部门,int国际组织,mil军事部门 ,net网络,org非盈利组织… |
反向域名 | arpa,用于PTR查询(IP地址转换为域名) |
4) 域名服务器
域名是分层结构,域名服务器也是对应的层级结构。
有了域名结构,还需要有一个东西去解析域名,域名需要由遍及全世界的域名服务器去解析,域名服务器实际上就是装有域名系统的主机。由高向低进行层次划分,可分为以下几大类:
分类 | 作用 |
---|---|
根域名服务器 | 最高层次的域名服务器,本地域名服务器解析不了的域名就会向其求助 |
顶级域名服务器 | 负责管理在该顶级域名服务器下注册的二级域名 |
权限域名服务器 | 负责一个区的域名解析工作 |
本地域名服务器 | 当一个主机发出DNS查询请求时,这个查询请求首先发给本地域名服务器 |
注:一个域名服务器所负责的范围,或者说有管理权限的范围,就称为区
我们需要注意的是:
\1. 每个层的域名上都有自己的域名服务器,最顶层的是根域名服务器
\2. 每一级域名服务器都知道下级域名服务器的IP地址
\3. 为了容灾, 每一级至少设置两个或以上的域名服务器
5) 域名解析过程
①输入域名后,首先查询自己主机对应的根域名服务器,域名服务器先查找自己的数据库
②如果没有,就依次向上级数据库进行查找,依次类推
③最多回溯到根服务器就肯定能找到这个域名对应的ip地址
④ 域名服务器本身具有一定缓存的功能,可以将之前查找过的ip地址和域名对应起来
注意:本地域名服务器可以看成离当前用户最近的服务,本地即指浏览器,本机,路由器,ISP…,其中hosts文件在本机系统层面
具体可描述如下:
\1. 主机先向本地域名服务器进行递归查询
\2. 本地域名服务器采用迭代查询,向一个根域名服务器进行查询
\3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址
\4. 本地域名服务器向顶级域名服务器进行查询
\5. 顶级域名服务器告诉本地域名服务器,下一步查询权限服务器的IP地址
\6. 本地域名服务器向权限服务器进行查询
\7. 权限服务器告诉本地域名服务器所查询的主机的IP地址
\8. 本地域名服务器最后把查询结果告诉主机
如图所示:
上文我们提出了两个概念:递归查询和迭代查询
(1)递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机
(2)迭代查询:本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它再去查,每次它都是以客户机的身份去各个服务器查询。
通俗地说,递归就是把一件事情交给别人,如果事情没有办完,哪怕已经办了很多,都不要把结果告诉我,我要的是你的最终结果,而不是中间结果;如果你没办完,请你找别人办完。
迭代则是我交给你一件事,你能办多少就告诉我你办了多少,然后剩下的事情就由我来办。
6) hosts文件
hosts文件是一个没有扩展名的系统文件,可以用记事本等工具打开,作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。好处如下
加快域名解析,对于要经常访问的网站,可以通过在Hosts中配置域名和IP的映射关系,这样当输入域名计算机就能很快解析出IP,而不用请求网络上的DNS服务器,Hosts文件配置的映射是静态的,如果网络上的计算机更改了请及时更新IP地址,否则将不能访问
hosts位置:C:\windows\system32\drivers\etc
添加hosts:按照 ip地址 域名 的格式添加单独的一行记录 182.61.171.72 www.axure.com , ip地址和域名之间,要有至少1个空格
案例:提高外网github.com的访问速度
一个域名对应多个P地址的时候,智能DNS服务器会根据请求的线路、地理位置等信息综合考虑,返回对于该请求最快的IP,让后将其配置到hosts文件中如
7) Http请求的步骤
① 从浏览器地址栏输入域名
② 由DNS服务器解析为ip地址,详情为在5.5
③ 客户机与服务器建立TCP/IP服务(tcp的三次握手)
④ 浏览器向WEB服务器发送request(Http)请求
-
一个Http请求报文包括请求行,请求头,请求体,空行四部分组成
-
请求行中有三部分,请求方式(GET,POST…),请求地址URL,HTTP协议版本,技巧是将其理解为里面的内容
-
请求头是由冒号分隔的键值对类型, 请求头部的最后会有一个空行,表示请求头部结束,请求头的信息是用来告诉服务器浏览器有哪些要求,例如哪个浏览器连接的哪个服务器,保持何种形式的连接,服务器应该发送何种字符,何种编码,何种语言…
POST /index.php HTTP/1.1 请求行 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 请求头 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: zh-cn,zh;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Referer: http://localhost/ Content-Length:25 Content-Type:application/x-www-form-urlencoded 空行 username=aa&password=1234 请求数据
-
请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合,格式通常为username=aa&password=1234,在GET请求中就是url地址栏?后面的部分
⑤ 服务器处理浏览器的request请求,并将响应信息response发送给客户机浏览器
-
一个Http响应报文由响应行,响应头,响应主体,空行组成
-
状态行中有响应状态码如下图,协议版本(与请求报文版本一致)
-
响应头部,如果将请求头立理解为浏览器向服务器要求的响应格式的话,那么响应头就可以看做服务器告诉浏览器具体是如何响应的
HTTP/1.1 200 OK 状态行 Date: Sun, 17 Mar 2013 08:12:54 GMT 响应头部 Server: Apache/2.2.8 (Win32) PHP/5.2.5 X-Powered-By: PHP/5.2.5 Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Length: 4393 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=utf-8 空行 <html> 响应数据 <head> <title>HTTP响应示例<title> </head> <body> Hello HTTP! </body> </html>
⑥ 浏览器收到response后开始解析HTML代码并请求HTML代码中的静态资源(css,js,jquery,img,video),每个静态资源都意味着浏览器要发送一条请求去获取,如baidu.com
⑦ 断开TCP/IP连接,浏览器利用自己内部的工作机制,把请求到的静态资源和HTML代码进行渲染,呈现给用户。