从url输入到页面加载完成发生了什么?

大致的说,可分为如下几个步骤:

  1. 解析URL
  2. DNS(Domain Nams System,域名解析服务器)查询,把域名转换成为网络可以识别的IP地址
  3. ARP(Address Resolution Protocol,地址解析协议)广播,根据IP地址来解析到MAC地址
  4. 分别从应用层到传输层、网络层和数据链路层分别加入各个层的头部封装为包
  5. 进行三次握手后,客户端与服务器建立连接
  6. 服务器向客户端返回数据,浏览器接收到数据
  7. 浏览器开始渲染页面

第一步:在浏览器输入URL

URL是什么?

URL:Uniform Resource Locator,统一资源定位符,有时也被俗称为网页地址(网址),用于定位互联网上的资源
http、https、ftp、file 协议

http://jirengu.com/blog
file:///Users/hunger/workspace/a.html
https://10.245.23.456:3000/users
//jirengu.com/static/imgs/a.png

第二步:域名解析

对于http://jirengu.com的URL,浏览器实际上并不知道jirengu.com到底是什么东西,需要查找jirengu.com网站所在的服务器的IP地址,才能找到目标

为什么要发明域名,不直接用IP?

域名是为了方便理解而存在的,也解决了IP地址和网络服务设备的关系不固定的问题

  • 域名是什么?
    • 对于http://jirengu.com:8080/blogjirengu.com就是域名
  • IP地址是什么?
    • 每个处于互联网中的设备都有IP地址,形如192.168.0.1
    • 局域网IP和公网IP是有差别的
    • 127.0.0.1代表本机的IP

域名解析的流程

  1. 浏览器缓存 —— 浏览器会缓存DNS记录一段时间
  2. 系统缓存 —— 从Hosts文件查找是否有该域名和对应IP
  3. 路由器缓存 —— 一般路由器也会缓存域名信息
  4. ISP DNS缓存 —— 比如到电信的DNS上查找缓存
  5. 如果都没有找到,则向根域名服务器查找域名对应IP,根据域名服务器把请求转发到下一级,直到找到IP

电脑上不了网,为什么修改dns为8.8.8.8或者144.144.144.144?

  • 用户在浏览器中输入域名之后,操作系统首先就要将域名解析到IP地址才能访问,如果IP地址信息中配置的DNS服务器本身出现问题(比如宕机或者遭受攻击等),那么很显然是不能完成解析工作的,结果就是访问的网站打不开,不过既然互联网这么发达,DNS服务器远远不止一台,事实上,基本每个地区自己的DNS服务器(甚至个别规模比较大的公司也有专业的DNS服务器对外提供服务),我们可以配置当地的DNS服务器地址也可以配置其他地区的甚至国外的
  • 8.8.8.8是一个IP地址,是Google提供的免费DNS服务器的IP地址,用户可以使用Google提供的DNS服务器上网,无论从稳定性还是安全性上来说都非常的有保障,不过因为8.8.8.8这台DNS服务器位于国外,虽然有一定的优势,还是建议国内用户用境内的DNS服务器为妙,毕竟中美之间的带宽有限,也经常会发生访问不正常的事情。要找境内的DNS服务器其实很简单,就在百度中搜当地的DNS就行了
  • 114.114.114.114 是国内电信联通移动全国通用DNS

DNS是什么?

  • DNS(Domain Name System)中文意思为域名解析服务器,它在互联网的作用是把域名转换成为网络可以识别的IP地址。当用户在浏览器中输入网址域名时,首先就会访问系统设置的DNS域名解析服务器(通常由ISP运营商如电信、联通提供)。如果该服务器内保存着该域名对应的IP信息,则直接返回该信息供用户访问网站。否则,就会向上级DNS逐层查找该域名的对应数据

DNS劫持是什么?

  • DNS劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回假的IP地址或者什么都不做使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址
  • 目前国内用户普遍使用的是ISP运营商提供的DNS服务器,这样有着一个巨大的风险,就是DNS劫持,目前国内ISP运营商普遍采用DNS劫持的方法,干扰用户正常上网,例如,当用户访问一个不存在(或者被封)的网站,电信运营商就会把用户劫持到一个满屏都是广告的页面,以帮助自己盈利

第三步:服务器处理

服务器是一台安装系统的机器,常见的系统如Linux、windows server 2012。系统里安装的处理请求的应用叫 Web server

三次握手

  1. 建立连接时,客户端发送SYN包到服务器,等待服务器确认
  2. 服务器收到SYN包之后 ,确认客户的SYN,同时自己也发送一个SYN包
  3. 客户端收到服务器的包之后,向服务器发送确认包,此包发送完毕,客户端和服务器进入连接状态
  4. 开始传输数据

Web服务器

常见的web服务器有 Apache、Nginx、IIS、Lighttpd
web服务器接收用户的Request交给网站代码,或者接收请求反向代理到其他的web服务器

从url输入到页面加载完成发生了什么?_第1张图片

网站处理流程

MVC:模型(model)- 视图(view)- 控制器(controller)
这里以 Rails 举例:


从url输入到页面加载完成发生了什么?_第2张图片

浏览器处理

  • 浏览器渲染页面详解:
    • 由从服务器接收到的html形成DOM
    • 样式被加载和解析,形成css对象模型CSSOM
    • DOM和CSSOM创建一个渲染树
    • 每个渲染元素来说,它的坐标是经过计算的,进行渲染树的布局layout
    • 最后,将布局显示在浏览器窗口,进行渲染树的绘制painting
  • HTML字符串被浏览器接收后被一句句读取解析,解析到link标签后重新发送请求获取css, 解析到script标签后发送请求获取js,并执行代码,解析到img标签后发送请求获取图片资源
  • 绘制网页
    • 浏览器根据HTML和CSS计算得到渲染树,绘制到屏幕上,js会被执行

参考:

  • 从url输入到页面加载完成发生了什么?
  • 为什么域名访问比IP慢?
  • 随便修改dns有什么后果?
  • DNS设置错误,浏览器能够正常访问网站么?

你可能感兴趣的:(从url输入到页面加载完成发生了什么?)