具体流程
1.DNS域名解析
- 在浏览器DNS缓存中搜索
- 在操作系统DNS缓存中搜索
- 读取系统hosts文件,查找其中是否有对应的ip
- 向本地配置的首选DNS服务器发起域名解析请求
2.建立TCP连接
-
主机浏览器通过DNS解析得到了目标服务器的IP地址后,与服务器建立TCP连接。
-
TCP3次握手连接:浏览器所在的客户机向服务器发出连接请求报文(SYN标志为1);服务器接收报文后,同意建立连接,向客户机发出确认报文(SYN,ACK标志位均为1);客户机接收到确认报文后,再次向服务器发出报文,确认已接收到确认报文;此处客户机与服务器之间的TCP连接建立完成,开始通信。
3.浏览器通过http协议发送请求
2.1 应用层:发送HTTP请求
浏览器构造一个HTTP报文,包括:
- 请求报头(Request Header):请求方法、目标地址、遵循的协议等等。
- 请求主体
2.2 传输层:TCP传输报文
传输层会发起一条到达服务器的TCP连接,会对数据进行分割(已以报文段为单位),标记编号,方便服务器接收时准确地还原报文信息。
在建立连接前,会先进行TCp三次握手
2.3 网络层:IP协议查询Mac地址
将数据段打包加入源地址和目标的ip地址,寻找传输路线。
判断目标地址是否与当前地址处于同一个网络中,如果是直接根据Mac地址发送,否则使用路由表查找下一跳的地址,以及使用ARP协议查询它的Mac地址。
ps: 跳(hop):网络中的一个区间。一跳:是主机或路由器网卡不经其他路由器而能直接到达的相邻主机或路由器网卡之间的一个区间。
ARP协议:Address Resolution Protocol,一种解决地址问题的协议。以目标ip地址为线索,定位下一个应该接受数据分包的网络设备对应的MAC地址。
2.4 链路层:以太网协议
根据以太网协议将数据分为以“帧”为单位的数据包,每一帧分两部分:
- 标头:数据包的发送者、接受者、数据类型
- 数据:数据包具体内容
4 某些服务会做重定向相应
对大型网站存在多个主机站点,为了负载均衡,会重定向,返回的状态码以3开头的重定向码,浏览器获得重定向响应后,在响应报文中Location项找到重定向地址,浏览器重新访问。
例: client: GET /sample.html
server: 302 Found
Location:http://www.newsample.com/sample.html
重定向的作用:为了负载均衡或导入流量,提高SEO排名。可以提高站点的业务并发处理能力,也可将多个域名的访问,集中到一个站点。
4 服务器发出一个HTML响应
返回状态码200 ok,表示服务器可以相应请求,返回报文,由于在报头中Content-type为“text/html”,浏览器以html形式呈现。
5 释放TCP连接
- 浏览器向服务器发出连接释放报文,然后停止发送数据;
- 服务器接收到释放报文后发出确认报文,然后将服务器上为传送完的数据发送完。
- 服务器传输完毕后,向客户机发送连接释放报文;
- 客户端收到报文后,发出确认,然后等待一段时间后,释放TCP连接
6 浏览器显示页面
浏览器接收到返回的数据包,根据浏览器的渲染机制对相应的数据进项渲染。
7 获取其他内容
浏览器发送获取嵌入在html中的其他内容,比如图片url,js文件等,浏览器会通过这些url重新发送请求,请求过程依然是html读取类似的过程,查询域名,发送请求,重定向等。这些静态文件可缓存到浏览器中。