1.需要将域名映射成对应的IP地址,也就是域名解析的过程;
a.在浏览器缓存中查找映射;
b.在本地主机host文件查找映射;
c.在本地路由(也可以说是网络运营商)查找映射;
d.在DNS服务器的缓存中查找域名的映射;
e.最后会在根域名服务器去匹配对应的域名映射;
2.IP解析成功以后,浏览器会准备发起连接,构建请求;
1.http发起请求,首先要建立服务器对你的信任,也就是tcp的三次握手;
浏览器想服务器发送一个SYN的包到服务器;服务器确认浏览器发送的syn包,
同时服务器会发送一个SYN+ACK包到浏览器;浏览器确认服务器的ACK包,
然后准备一个ACK包至服务器,此时三次握手完毕;
2.确认连接后,浏览器需要发送http请求报文至服务器;
请求报文大概分为:
请求行 => 请求方式,url,http协议版本号
请求头部 => host(主机名),cookie
空行
请求数据 => 也就是入参
3.服务器响应
返回响应结果
请求的状态码,以及请求的数据等
4.渲染DOM
5.异步加载网页中的连接
6.完成渲染
-------------------------------------------------------------------
1.获取域名所对应的IP地址;
A.先查看浏览器缓存是否有对应的IP;
B.再查看系统缓存;
C.路由器缓存;
D.ISP DNS服务器;
E.最后在 根域名服务器 进行查找;
2.浏览器和服务器进行三次TCP握手
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.
3、浏览器发送数据,等待服务器响应
4、服务器处理请求,向浏览器做出响应
5、浏览器得到响应,得到HTML代码
6、渲染页面
1、浏览器对地址进行解析
(获取协议、主机、端口号、 路径)
2、将解析出的域名进行DNS解析
(找到域名对应的IP地址)
3、根据IP寻址找到目标服务器
(根据IP找到目标服务器)
4、浏览器和服务器进行三次TCP握手,建立连接
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.
5、浏览器发送数据,等待服务器响应
6、服务器处理请求,向浏览器做出响应
7、浏览器得到响应,得到HTML代码
8、渲染页面
当你在浏览器中输入一个网址,浏览器的处理过程如下:
第一步 浏览器查找该域名的 IP 地址
第二步 浏览器根据解析得到的IP地址向 web 服务器发送一个 HTTP 请求
第三步 服务器收到请求并进行处理
第四步 服务器返回一个响应
第五步 浏览器对该响应进行解码,渲染显示。
第六步 页面显示完成后,浏览器发送异步请求。
下面对每个环节做进一步分析:
01 浏览器查找该域名的 IP 地址
浏览器缓存 首先是查找浏览器缓存,浏览器会缓存DNS记录一段时间,不同浏览器保存的时常不等(2分钟到30分钟不等)。
系统缓存 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用来查找这个网址的对应DNS信息。
路由器缓存 如果在系统缓存里没有找到找到对应的IP,请求会发向路由器,它一般会有自己的DNS缓存。
ISP DNS服务器 如果在路由器缓存里还是没有对应的IP,请求会被发送到ISP。
根域名服务器 如果还是没有,请求将发向根域名服务器进行搜索。找不到就说明此域名不存在。
02 浏览器根据解析得到的IP地址向 web 服务器发送一个 HTTP 请求
可能会重定向响应
例如“[http://facebook.com/](http://facebook.com/)”,服务器会给浏览器响应一个301永久重定向响应,这样浏览器就会访问“[http://www.facebook.com/](http://www.facebook.com/)” 而非“[http://facebook.com/](http://facebook.com/)”。
服务器重定向的原因有很多,举其中两个:
一:跟搜索引擎排名有关。你看,如果一个页面有两个地址,就像“[http://www.facebook.com/](http://www.facebook.com/)” 和“[http://facebook.com/](http://facebook.com/)”。搜索引擎会认为它们是两个网站,结果造成每一个的搜索链接都减少从而降低排名。
二:不同的地址会造成缓存友好性变差。当一个页面有好几个名字时,它可能会在缓存里出现好几次。
然后浏览器会跟踪重定向地址
浏览器会发送另一个获取请求到”[http://www.facebook.com/](http://www.facebook.com/)”。
过程:
通过DNS获取到IP后,目标IP和本机IP分别与子网掩码相与的结果相同,那么它们在一个子网,那么通过ARP协议可以查到目标主机的MAC地址,否则的话,需要通过网关转发,也就是目标MAC是网关的MAC。
请求需要进行编码,生成一个HTTP数据包,依次打上TCP、IP、以太网协议的头部。其中TCP头部主要信息是本机端口和目标端口号等信息,用于标识同一个主机的不同进程,对于HTTP协议,服务器端的默认端口号是80,本机浏览器的话生成一个1024到65535之间的端口号。IP头部主要包含本地IP和目标IP等信息。以太网协议头部主要是双方的MAC地址,目标MAC可以由第一条所诉方法得到。以太网数据包的数据部分,最大长度为1500字节,所以如果IP包太大的话还要拆包,比如IP包5000字节,要分为4包,每一包都包含一个IP头部。
03 服务器收到请求并进行处理
负载均衡
网站可能会有负载均衡设备来平均分配所有用户的请求。
负载均衡,即对工作任务进行平衡,分摊到多个操作单元上执行,如图片服务器,应用服务器。可分为链路负载均衡,集群负载均衡,操作系统负载均衡
集群负载均衡又分为硬件负载均衡和软件负载均衡。
CDN
请求的数据可能存储在分布式缓存、静态文件或者数据库中。如果请求的数据是静态文件,如果在CDN上,那么CDN服务器又会处理这个用户的请求。如果在数据库中需要向数据库发起查询请求。
04 服务器返回一个响应
过程:
服务器返回一个 HTTP 响应,如果返回状态码304,浏览器可以直接使用之前缓存的资源。对于内容响应,浏览器需要进行响应解码,渲染显示。
05 浏览器对该响应进行解码,渲染显示。
过程:
在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了,如果是个静态的页面,拿到此就基本结束了。如果是是动态的,那么在浏览器显示HTML时,会获取嵌入在HTML中的对象,浏览器会发送获取请求来重新获得这些文件。这些请求都要经历一个和HTML读取类似的过程。
对于静态的页面内容,浏览器通常会进行缓存,而对于动态的内容,浏览器通常不会进行缓存。
06 页面显示完成后,浏览器发送异步请求。
过程:
页面显示完成后客户端仍与服务器端保持着联系。
它会持续与服务器保持联系来及时更新一些页面信息。在浏览器中执行的 JavaScript代码会给服务器发送异步请求。这个异步请求发送给特定的地址,它是一个按照程式构造的获取或发送请求。
相关扩展:
ARP原理
01 每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
02 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。
03 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
04 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
RARP原理
RARP是逆地址解析协议,作用是完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。
工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装