-
首先请求dns服务器(会首先在浏览缓存中获取,找不到就会去host文件中获取,最后才会dns获取),对www.xxx.com进行域名解析,获取ip等信息
-
根据拿到的服务器的地址信息,发起发起TCP的3次握手
(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
(2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
-
建立TCP连接后,向服务器发起http请求
-
服务器响应http请求,向浏览器发送html代码
-
浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
-
浏览器对页面进行渲染呈现给用户
-
关闭TCP连接
接下来看下例子帮助大家理解一下
名词解释:
-
Queueing: 在请求队列中的时间。
-
Stalled: 从TCP 连接建立完成,到真正可以传输数据之间的时间差,此时间包括代理协商时间。
-
Proxy negotiation: 与代理服务器连接进行协商所花费的时间。
-
DNS Lookup: 执行DNS查找所花费的时间,页面上的每个不同的域都需要进行DNS查找。
-
Initial Connection / Connecting: 建立连接所花费的时间,包括TCP握手/重试和协商SSL
-
SSL: 完成SSL握手所花费的时间。
-
Request sent: 发出网络请求所花费的时间,通常为一毫秒的时间。
-
Waiting(TFFB): TFFB 是发出页面请求到接收到应答数据第一个字节的时间。
-
Content Download: 接收响应数据所花费的时间。