一、访问网站的基本流程
第一步:客户端用户在浏览器输入www.51cto.com网站,回车后,系统首先会查找系统本地的DNS缓存及hosts文件信息,确定是否存在www.51cto.com余名对应的IP解析记录,如果有就直接获取IP地址,然后去访问这个IP地址对应余名www.51cto.com的服务器。一般第一次请求的时候,DNS缓存是没有解析记录的,而hosts躲在内部临时测试时使用。
第二步:如果客户端本地DNS缓存及hosts文件没有www.51cto.com余名对应的解析记录,那么,系统会把浏览器的解析请求发送给客户端本地设置的DNS服务器地址(称为LDNS)解析,如果LDNS服务器的本地缓存有对应的解析记录就会直接返回IP地址给客户端;如果没有,则LDNS会负责继续请求其他的DNS服务器。
第三步:LDNS从DNS系统的根开始请求对www.51cto.com余名的解析,并针对各个层级的DNS服务器系统进行一系列的查找,最终会查找到51cto.com域名对应的授权DNS服务器,而这个授权DNS服务器正式企业购买域名时用于管理域名解析的服务器,这个授权服务器会有www.51cto.com对应的IP解析记录。如果此时没有,就表示企业的域名管理人员没有为www.51cto.com域名做解析设置,即网站还没有架设好。
第四步:51cto.com余名的授权DNS服务器会把www.51cto.com对应的最终IP解析记录发给LDNS。
第五步:LDNS把来自授权DNS服务器的www.51cto.com对应的IP解析记录发给客户端浏览器,并且它会把该域名和IP地址的对应解析缓存起来,以便下一次更快的返回相同解析请求的记录,这些缓存记录在指定的时间(DNS TTL)内不会过期。
第六步:客户端浏览器获取了www.51cto.com对应的IP地址,接下来,浏览器会请求获得IP地址对应的网站服务器,网站服务器接收到客户的请求并响应处理(此处的处理可能是数百台集群的服务器系统,也可能是一台云主机),将客户请求的内容返回给客户端浏览器。至此,一次访问浏览网页的完整过程也就完成了。
附:
(1)查看windows客户端的本地缓存记录:
ifconfig /displaydns
(2)清楚Windows客户端本地缓存DNS记录:
ifconfig /flushdns
(3)Windows系统下的hosts域名解析记录位置:
C:\Windows\System32\drivers\etc\hosts
二、DNS系统解析基本流程
DNS简介
A记录----把余名解析为对应的IP地址。
CNAME别名记录--别名解析功能常备CDN加速服务商应用
MX邮件记录--MX记录功能,在购买或搭建邮件服务器时会被用到
PTR记录--反向解析,即把IP地址解析为对应域名,和A记录的解析相反,此功能在邮件服务业务中会用
DNS解析流程图
通过dig命令来实践理解DNS解析流程
[[email protected] ~]# dig +trace www.51cto.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> +trace www.51cto.com ;; global options: +cmd . 47942 IN NS j.root-servers.net. . 47942 IN NS f.root-servers.net. . 47942 IN NS b.root-servers.net. . 47942 IN NS h.root-servers.net. . 47942 IN NS e.root-servers.net. . 47942 IN NS g.root-servers.net. . 47942 IN NS k.root-servers.net. . 47942 IN NS l.root-servers.net. . 47942 IN NS m.root-servers.net. . 47942 IN NS i.root-servers.net. . 47942 IN NS c.root-servers.net. . 47942 IN NS a.root-servers.net. . 47942 IN NS d.root-servers.net. ;; Received 228 bytes from 192.168.0.1#53(192.168.0.1) in 54 ms ## a-m一共13个DNS服务器,j.root-servers.net根DNS负责了此处的解析 com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. ;; Received 491 bytes from 198.97.190.53#53(198.97.190.53) in 352 ms ##解析com的一共有13个DNS服务器,.com的a.gtld-servers.net负责了此处解析 51cto.com. 172800 IN NS ns1.dnsv2.com. 51cto.com. 172800 IN NS ns2.dnsv2.com. ;; Received 249 bytes from 192.54.112.30#53(192.54.112.30) in 272 ms ##解析 ns1.dnsv2.com负责了最终A记录解析 www.51cto.com. 600 IN CNAME web.dns.51cto.com. web.dns.51cto.com. 600 IN CNAME gf.dns.51cto.com. gf.dns.51cto.com. 600 IN A 218.11.0.91 51cto.com. 86400 IN NS ns2.dnsv2.com. 51cto.com. 86400 IN NS ns1.dnsv2.com. ;; Received 162 bytes from 115.236.151.178#53(115.236.151.178) in 139 ms
附:
常用的HTTP请求方法
HTTP方法 | 作用描述 |
---|---|
GET | 客户端请求指定资源信息,服务器返回指定资源 |
HEAD | 只请求响应保温中的HTTP首部 |
POST | 将客户端的数据提交到服务器,例如注册表单 |
PUT | 用从客户端向服务器传送的数据取代指定的文档内容 |
DELETE | 请求服务器删除Request-URI所标识的资源 |
MOVE | 请求服务器将指定的页面移至另一个网络地址 |
不同范围的状态码及其对应的应用
状态码范围 | 作用描述 |
---|---|
100-199 | 用于指定客户端响应相应的某些动作 |
200-299 | 用于表示请求成功 |
300-399 | 用于已经移动的文件,并且常被包含在定位头信息中指定新的地址信息 |
400-499 | 用于指出客户端的错误 |
500-599 | 用于指出服务器的错误 |
状态代码 | 详细描述说明 |
---|---|
200-OK | 服务器成功返回网页,这是成功的HTTP请求返回标准状态码 |
301-Moved Permanently | 永久跳转,所请求的网页将永久跳转到被设定的新位置,例如:从www.baidu.com跳转到www.qq.com |
403-Forbidden | 禁止访问,虽然这个请求是合法的,但是服务器端因为匹配了预先设置的规则而拒绝响应客户端的请求,此类问题一般为服务器或服务器权限配置不当所致 |
404-Not Found | 服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源所致 |
500-Internal Server Error | 内部服务错误,服务器遇到了意料不到的情况,不能完成客户的请求。这是一个笼统的报错,一般为服务器的设置或内部程序问题导致。例如:SELinux开启,而有没有为HTTP设置规则许可,客户端访问就是500 |
502-Bad Gateway | 坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器。这通常为反向代理服务器下面的节点出问题所致 |
503-Service Unavailable | 服务当前不可用,可能是服务器超载或停机维护导致,或者是反向代理服务器后面没有可以提供服务的节点 |
504-Gateway Timeout | 网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定的时间内完成处理请求。多数是服务器过载导致没有在指定时间内返回数据给前端代理服务器 |
可以通过curl 命令在Linux命令行查看HTTP响应的数字状态码:
[[email protected] ~]# curl -I wwww.baidu.com HTTP/1.1 302 Found ##302 即为状态码 Date: Sat, 01 Oct 2016 14:56:01 GMT Server: Apache Location: http://www.baidu.com/ Cache-Control: max-age=86400 Expires: Sun, 02 Oct 2016 14:56:01 GMT Connection: Keep-Alive Content-Type: text/html; charset=iso-8859-1 [[email protected] ~]# curl -I -s -w %{http_code} -o /dev/null www.baidu.com 200 ##200即是状态码