一、首先将url输入浏览器的地址栏中
二、查看本地缓存,如果缓存中有,就会直接显示页面内容,没有的话就进入第三步
本地缓存有 浏览器缓存 系统缓存 路由器缓存
三、在发送http请求前,需要解析域名(DNS解析)
DNS是Domain Name System的缩写,是一种组织成域层次结构的计算机和网络服务命名系统, 用于TCP/IP网络,提供将主机名和域名转化为IP地址的工作,基本原理是如下图
四、浏览器向服务器发起TCP连接,与服务器简历TCP三次握手
由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包。 他们都是有TCP创建的一个客户端发起,服务器接收的类似连接的通道,这个连接可以一直保持, http请求时在这个连接的基础上发送的。 在HTTP1.0中可以以某种方式声明这个连接一直保持,一个请求传输完之后,另个请求可以接着传输。 这样的好处是创建一个TCP连接的过程中需要三次握手的消耗,三次握手代表有三次网络传输。
三次握手 。分别客户端为C ,服务段为C 先了解下重要的字段
- 序号。seq序号,占32位,用来标记从TCP源端向目的端发送的字节流, 发起方发送数据时对此进行标记
- 确认号。 ACk序号,占32位,只有ack标记为1时,确认序号才有效,Ack=Seq+1
- 标记位。共6个,即URG,ACK,PSH,RST,SYN,FIN URG 紧急指针有效 ACK 确认序号才有效 PSH 接收方应该尽快将这个报文交给应用层 RST 重置连接 SYN 发起一个新的连接 FIN 释放一个连接
- 第一次握手 C 发向 S ==> 部分报文为 标记位SYN 序号Seq=X(X一般为1) ==> C进入SYN-SENT阶段
- 第二次握手 S收到,结束LISTEN阶段 返回报文 ==> 标记位SYN和ACK 序号Seq=y;确认号Ack=x+1 ==> S 进入SYN-RCVD阶段
- 第三次握手 C收到,结束SYN-SENT阶段 返回报文 ==> 标记位ACK, 序号Seq=x+1 确认号Seq=y+1 ==> C 结束SYN-SENT阶段,进入ESTABLISHED阶段。 总结为:我知道,我也想让你知道, 我知道,你知道,你也想让我知道, 我知道,你知道,我知道,我也想让你知道我知道
五、握手成功后,浏览器向服务器发送http请求,请求数据包。
六、服务器处理收到的请求,将数据返回到浏览器
四次挥手 TCP连接的释放(解除) 分别客户端为C ,服务段为C
- 第一次挥手 C向S发送报文 ==> 标记位FIN Seq=U ==>C 进入FIN-WAIT-1阶段,停止发送,但能接收
- 第二次挥手 S结束ESTABLISHED阶段,进入CLOSE_WAIT阶段(半关闭状态),返回报文 ==> 标记位ACK,序号Seq=V 确认号Ack=U+1 ==>服务端释放连接,客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段
- 第三次挥手 S向客户端发送报文 ==> 标记位FIN,ACK 序号Seq=W 确认号Ack=U+1 ==> S结束CLOSE-WAIT,进入LAST-ACK,还可以接受从C传输过来的数据
- 第四次挥手 C向S发送报文 ===> 标记号ACK 序号Seq=U+1 ACK=W+1 ==> 客户端开始TIME—WAIT阶段等待2MSL