大致的说,可分为如下几个步骤:
- 解析URL
- DNS(Domain Nams System,域名解析服务器)查询,把域名转换成为网络可以识别的IP地址
- ARP(Address Resolution Protocol,地址解析协议)广播,根据IP地址来解析到MAC地址
- 分别从应用层到传输层、网络层和数据链路层分别加入各个层的头部封装为包
- 进行三次握手后,客户端与服务器建立连接
- 服务器向客户端返回数据,浏览器接收到数据
- 浏览器开始渲染页面
第一步:在浏览器输入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/blog
,jirengu.com
就是域名
- 对于
- IP地址是什么?
- 每个处于互联网中的设备都有IP地址,形如
192.168.0.1
- 局域网IP和公网IP是有差别的
-
127.0.0.1
代表本机的IP
- 每个处于互联网中的设备都有IP地址,形如
域名解析的流程
- 浏览器缓存 —— 浏览器会缓存DNS记录一段时间
- 系统缓存 —— 从Hosts文件查找是否有该域名和对应IP
- 路由器缓存 —— 一般路由器也会缓存域名信息
- ISP DNS缓存 —— 比如到电信的DNS上查找缓存
- 如果都没有找到,则向根域名服务器查找域名对应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
三次握手
- 建立连接时,客户端发送SYN包到服务器,等待服务器确认
- 服务器收到SYN包之后 ,确认客户的SYN,同时自己也发送一个SYN包
- 客户端收到服务器的包之后,向服务器发送确认包,此包发送完毕,客户端和服务器进入连接状态
- 开始传输数据
Web服务器
常见的web服务器有 Apache、Nginx、IIS、Lighttpd
web服务器接收用户的Request交给网站代码,或者接收请求反向代理到其他的web服务器
网站处理流程
MVC:模型(model)- 视图(view)- 控制器(controller)
这里以 Rails 举例:
浏览器处理
- 浏览器渲染页面详解:
- 由从服务器接收到的html形成DOM
- 样式被加载和解析,形成css对象模型CSSOM
- DOM和CSSOM创建一个渲染树
- 每个渲染元素来说,它的坐标是经过计算的,进行渲染树的布局layout
- 最后,将布局显示在浏览器窗口,进行渲染树的绘制painting
- HTML字符串被浏览器接收后被一句句读取解析,解析到
link
标签后重新发送请求获取css, 解析到script
标签后发送请求获取js,并执行代码,解析到img
标签后发送请求获取图片资源 - 绘制网页
- 浏览器根据HTML和CSS计算得到渲染树,绘制到屏幕上,js会被执行