当前位置: 首页 > news >正文

输入url(网址)之后到显示网页的过程?

已订正,每个步骤都可以细化成很多问题,也可以说这个问题可以覆盖计算机网络常见知识的每个内容。

参考链接:link

  1. DNS (Domain Name Server)域名解析:浏览器查询 DNS,获取域名对应的 IP 地址。查找顺序为:浏览器 、缓存系统的缓存、本地的hosts文件、本地DNS服务器、递归查询、迭代查询
  2. TCP 连接:浏览器获得域名对应的 IP 地址以后,浏览器向服务器请求建立链接,发起三次握手;
  3. 发送 HTTP 请求:TCP 连接建立起来后,浏览器向服务器发送 HTTP 请求;
  4. 服务器处理请求并返回HTTP报文:服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器。
  5. 浏览器解析渲染页面:浏览器解析并渲染视图,若遇到对 js 文件、css 文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。
  6. TCP断开连接:为什么现在结束?浏览器在解析过程中,如果遇到请求外部资源时,如图像,iconfont,JS等。浏览器将重复1-5过程下载该资源。

Host文件?

是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”。

为什么要域名解析?

自己注册了域名之后如何才能看到自己的网站内容,用一个专业术语就叫“域名解析”。
  在相关术语解释中已经介绍,域名和网址并不是一回事,域名注册好之后,只说明你对这个域名拥有了使用权,如果不进行域名解析,那么这个域名就不能发挥别的作用,经过解析的域名可以用来作为电子邮箱的后缀,也可以用来作为网址访问自己的网站,因此域名投入使用的必备环节是“域名解析”。
  我们知道域名是为了方便记忆而专门建立的一套地址转换系统,要访问一台互联网上的服务器,最终还必须通过IP地址来实现,域名解析就是将域名重新转换为IP地址的过程。一个域名只能对应一个IP地址,而多个域名可以同时被解析到一个IP地址。域名解析需要由专门的域名解析服务器(DNS)来完成。
解析过程.比如,一个域名为: www.stasp.com,实现HTTP服务,如果想看到这个网站,要进行解析,首先在域名注册商那里通专门的DNS服务器解析解析到一个WEB服务器的一个固定IP上:211.214.1.***,然后,通过WEB服务器来接收这个域名,把www.stasp.com 这个域名映射到这台服务器上.那么,输入www.stasp.com 这个域名就可以实现访问网站内容了.即可以实现了域名解析全过程;
人们习惯记忆域名,但机器间互相只认IP地址,域名与IP地址之间是一一对应的,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。

http://baike.baidu.com/view/30676.htm

DNS查找详细过程

  • 浏览器缓存 – 浏览器会缓存DNS记录一段时间。 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等)。
  • 系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname)。这样便可获得系统缓存中的记录。
  • 路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存。
  • ISP DNS 缓存 – 接下来要check的就是ISP缓存DNS的服务器。在这一般都能找到相应的缓存记录。
  • 递归搜索 – 你的ISP的DNS服务器从跟域名服务器开始进行递归搜索,从.com顶级域名服务器到
  • Facebook的域名服务器。一般DNS服务器的缓存中会 有.com域名服务器中的域名,所以到顶级服务器的匹配过程不是那么必要了。

谈谈你对域名缓存的了解?

为了提高 DNS 查询效率,并减轻服务器的负荷和减少因特网上的 DNS 查询报文数量,在域名服务器中广泛使用了高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录。
由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如:每个项目两天)。当域名服务器已从缓存中删去某项信息后又被请求查询该项信息,就必须重新到授权管理该项的域名服务器绑定信息。当权限服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名解析的正确性。
不仅在本地域名服务器中需要高速缓存,在主机中也需要。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机应当定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删除无效的项。由于域名改动并不频繁,大多数网点不需花精力就能维护数据库的一致性。

域名解析过程

1.域名系统

img

img

2.域名服务器

img

  1. 在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

  2. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

  3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

  4. 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主机。

  • 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。

  • 不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

什么是递归查询,迭代查询?

  1. 主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的 IP 地址,或者是报错,表示无法查询到所需的 IP 地址。

  2. 本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的 IP 地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的 IP 地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,本地域名服务器得到了所要解析的 IP 地址或报错,然后把这个结果返回给发起查询的主机。

  3. 递归查询时,返回的结果只有两种:查询成功或查询失败.

迭代查询,又称作重指引,返回的是最佳的查询点或者主机地址

https://www.cnblogs.com/qingdaofu/p/7399670.html

相关文章:

  • Java中的陷阱题
  • Host文件?
  • js阻止表单重复提交
  • 为什么要域名解析?
  • Providers、Controller 、Service、DirectiveFactory
  • DNS查找详细过程
  • 将一个数进行拆分,并且正序输出
  • 谈谈你对域名缓存的了解?
  • 进程间通信方式
  • 什么是递归查询,迭代查询?
  • Java中的4种代码块
  • 什么是沾包?如何处理?
  • 继续測试,一如既往的稳定
  • 【< TCP专题之三次握手四次挥手>】
  • SQL 设置空值(NULL)
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • es6
  • java多线程
  • Rancher-k8s加速安装文档
  • Service Worker
  • Spring Boot MyBatis配置多种数据库
  • 创建一种深思熟虑的文化
  • 计算机常识 - 收藏集 - 掘金
  • 模型微调
  • 跳前端坑前,先看看这个!!
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 第二十章:异步和文件I/O.(二十三)
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​iOS安全加固方法及实现
  • ​比特币大跌的 2 个原因
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #include<初见C语言之指针(5)>
  • $forceUpdate()函数
  • (C++20) consteval立即函数
  • (初研) Sentence-embedding fine-tune notebook
  • (二)JAVA使用POI操作excel
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .gitignore
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [1525]字符统计2 (哈希)SDUT
  • [52PJ] Java面向对象笔记(转自52 1510988116)
  • [BT]BUUCTF刷题第8天(3.26)
  • [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
  • [BZOJ1060][ZJOI2007]时态同步 树形dp