一个请求经历了什么(一)

浏览器解析

  1. 检查是否合法

  2. 解析出相应的协议、域名、端口、路径等(如果没有端口则按协议添加默认端口)

  3. 判断是否有本地缓存

DNS解析

解析流程

浏览器代理 => 计算机host => 局域网DNS服务器 => 更上层DNS服务器 => …… => 顶层DNS服务器

递归寻址

先寻找一级域名DNS服务器,再寻找二级域名DNS……

寻找服务器

当设置为DHCP时,在开机后会寻找DNS服务器,使用广播寻找,DNS服务器收到广播后主动通知,得到响应后缓存DNS服务器地址

TCP

与UDP的区别

TCP是可靠传输,确保包的传输和发送是同步并且顺序的。如果出现丢包,则会触发重发机制。常见于文件传输等重要内容传输。

UDP是不可靠传输,部分内容的丢失是允许的,不会对整体造成太大影响。常见于视频等流传输。

TCP为了可靠传输,建立了一套握手机制、慢启动机制和重发机制。因此传输速率低。

UDP传输只受限于硬件和部分软件限制,传输速率高

三次握手

一个请求经历了什么(一)_第1张图片

  • 第一次握手:客户端向服务端发送连接请求:“我要连接你了,可以吗”
  • 第二次握手:服务端向客户端发送确认请求:“可以。你真的要连接吗”(防止延时请求造成的资源浪费)
  • 第三次握手:客户端向服务端发送确认请求:“要的,就现在”

四次挥手

一个请求经历了什么(一)_第2张图片

  • 第一次挥手:发送端向接收端发送关闭请求:“我的数据传输完了,你可以关闭了”(发送端关闭数据通道,保留会话通道)
  • 第二次挥手:接收端向发送端发送确认报文:“好的,我收到了。正在处理”
  • 第三次挥手:接收端向发送端发送关闭请求:“我的内容已经全部接收完了,数据通道已经关闭,你可以关闭通道了”(接收端关闭数据通道,保留会话通道)
  • 第四次挥手:发送端向接收端发送确认报文:“好的,我已经关闭所有通道了,你也可以全部关闭了”(发送端进入计时等待(一般2s),接收端关闭会话通道)

注:计时等待:防止接收端报文延时造成接收端通道关闭不了

慢启动&拥塞控制&快速重传&快速恢复

两个概念:

ssthresh: 慢启动阈值,超过阈值则使用拥塞避免算法,不超过则使用慢启动算法
cwnd:发送窗口大小,即每次发送多少数据包
一个请求经历了什么(一)_第3张图片

一个请求经历了什么(一)_第4张图片

一个请求经历了什么(一)_第5张图片

假设设定初始发送报文数为1,慢启动增长倍数为2倍,初始ssthresh值为16,拥塞控制每次加1

慢启动:从初始cwnd开始,每次发送都是上一次的n倍,达到ssthresh后改为拥塞控制算法

拥塞控制:cwnd每次加一定数量,直到发生超时或重复确认。发生超时时将ssthresh减半,并将cwnd重置为初始大小,重新进入慢启动阶段;若发生重复确认,则将ssthresh减半,将cwnd设置为ssthresh的大小,重发所丢包,重新进入拥塞控制阶段

HTTP

基于TCP的封装

TCP是传输层协议,HTTP是应用层协议。

HTTP是基于TCP的封装,所以TCP拥有的一切特性,HTTP都会有。

HTTP在TCP基础上,封装了默认端口,封装了请求方法、payload、缓存、状态吗等。

HTTP不包括域名解析!!(但会将域名放入Host字段,处理跨域等)

短连接

三次握手,数据传输,四次挥手,就是一个典型的短连接。

长连接

HTTP1.1中默认使用长连接,在报文里增加Keep-alive字段。需要两边都支持,否则会导致连接未关闭长期占用资源(http version判断)

三次握手,数据传输,等待一定时间或主动断开,四次挥手

作用:复用连接,减少握手的损耗

管道连接

一个请求经历了什么(一)_第6张图片

不需要等待前面的事务处理完毕,就发送下个请求。

在网络状况良好时大幅提高效率,在网络状况不好的时候会造成额外的开销

缓存机制

目的:减少数据传输,加快响应速度,尽早释放资源,缓解源站压力
参考http://www.cnblogs.com/vajoy/p/5341664.html
一个请求经历了什么(一)_第7张图片

缓存及缓存更新策略:

  1. 是否开启缓存;
  2. 不缓存则每次都请求,缓存之后,缓存时间内不请求,超过缓存时间后则比对etag和last modified。
  3. 当缓存没有发生变化时,返回302状态码,客户端或缓存服务器使用已有的缓存;否则更新本地缓存。
    注意:使用缓存不一定没有发送请求!

cookie与session

可参考https://my.oschina.net/kevinair/blog/192829

  1. HTTP是无状态的协议,浏览器无法判断请求者的身份,需要每次请求都带上自己的身份。而cookie就是类似身份证的存在。
  2. cookie一般由服务器应用派发,并存储在客户端
  3. cookie包含key,value,domain,path,expires,secure等属性,只有满足条件的未过期的cookie才会被携带
  4. session是过期时间为当前值的cookie,会话结束后将被丢弃

应用1:记住我登录
应用2:csrf攻击

代理服务器/缓存服务器

与网关的区别

网关:类似门的存在,帮助门内的包找到路径

代理服务器:类比快递中转站,不能直接到达目的地的包可以通过代理来到达

缓存服务器:类比零售网点,有货则直接提货,否则往上级网点取货

作用

代理服务器:减少寻址过程,更快的响应速度

缓存服务器:减少源站压力,加快响应速度

原理

维持和上一个客户端的连接,请求下一个服务器,记忆两个连接的映射

正向代理&反向代理

正向代理即是上面所述代理,是跳板或者中转站的存在

反向代理则是为了隐藏目的地,用户访问到的最终节点是反向代理,而反向代理会去向真正的源站请求数据。

区别在于隐藏的身份不同。正向代理可以隐藏客户端的真实身份,即将请求的源设定成代理服务器,让源站以为访问者是代理服务器(代理)。而反向代理隐藏了服务端的真实身份,对外宣传自己是源站。

以下章节敬请期待

源站处理

浏览器渲染

HTTPS

HTTP 2.0

你可能感兴趣的:(综合,TCP三次握手,缓存,代理服务器,DNS)