在一个浏览器中输入一个网址,他是怎么运行的
在一个浏览器中输入一个网址,他是怎么运行的
1. 查询DNS,获取域名所对应的IP地址
1.1 检查浏览器缓存,检查本地hosts文件中是否有这个网址的映射,如果有,就调用这个IP地址映射,解析完成;
1.2 如果没有,则查找本地DNS解析器缓存是否有这个网址的映射,如果有,就调用这个IP地址映射,解析完成;
1.3.如果没有,则查找填写或分配的首选DNS服务器,成为本地DNS服务器。服务器接到查询时,如果要查询的域名包含在本地配置的区域资源中,返回解析结果,查询结束,此结果具有权威性。如果要查询的域名不由本地的DNS服务器区域解析,但服务器缓存了此网址的映射关系,返回解析结果,查询结束,此结果不具有权威性;
1.4如果本地DNS服务器也失败:
如果采用转发模式(迭代),本地DNS就把请求发送给13台根DNS,根DNS服务器收到请求后,会判断这个域名(如.com)是谁来授权管理,并返回一个顶级域名服务器的IP,本地DNS服务器收到顶级域名服务器的IP后,继续向该顶级域名服务器IP发送请求,该服务器如果无法解析,则会找到负责这个域名的下一级DNS服务器(权限域名服务器)的IP给本地DNS服务器,循环往复直至查到映射,将解析结果返回到本地DNS服务器,再由本地DNS服务器返回解析结果,查询完成。
采用递归:此DNS服务器就会把请求转至上一级DNS服务器,如果上一级DNS服务器不能解析,则继续向上请求,最终解析结果依次返回本地DNS服务器,本地DNS服务器在返回给客户机,查询完成。
2. 得到目标服务器的IP地址及端口号(http 80端口 https 443端口),会调用系统库函数socket,请求一个TCP流套接字,客户端向服务器发送HTTP请求报文;
2.1 应用层:客户端发送HTTP请求报文;
2.2传输层:加入源端口,目的端口,建立连接,实际发送数据之前,三次握手客户端和服务器建立起一个TCP连接;
2.3 网络层:加入IP头,路由寻址;
2.4 数据链路层: 加入frame头,传输数据;
2.5 物理层:物理传输比特。
3. 服务端经过物理层-数据链路层-网络层-传输层-应用层,解析请求报文,发送HTTP响应报文;
4.四次挥手,关闭连接
5. 客户端解析HTTP响应报文,浏览器显示HTML。