可以针对不同模块进行性能优化
-
DNS域名解析(CDN原理)
-
CDN是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。解决因分布、带宽、服务器性能带来的访问延迟问题,适用于站点加速、点播、直播等场景。
-
部署了CDN的时候
-
浏览器将域名解析为IP地址,向本地DNS发送请求
-
本地DNS依次向根服务器、顶级域名服务器、权限服务器发送请求;得到全局负载均衡系统(GSLB)的IP地址
-
本地DNS再向GSLB发出请求。GSLB主要是根据DNS的IP判断请求的位置,筛选到距离用户较近的SLB的位置,并将SLB的IP作为结果返回给DNS
-
DNS将SLB的IP发送给浏览器,浏览器向其发送请求
-
SLB根据请求的资源,选择最优的缓存服务器发回给浏览器
-
浏览器将请求重定向到缓存服务器
-
缓存服务器有其请求的资源就返回;没有的话,向源服务器请求,并返回资源
-
没有部署CDN的时候
-
浏览器需要将域名解析为IP地址,因此向本地DNS发出请求
-
本地DNS依次向根服务器、顶级域名服务器、权限服务器发出请求,最终得到域名的IP地址。
-
DNS将IP发送给浏览器,浏览器向网站服务器IP地址发出请求,得到请求的资源
-
TCP/IP链接
-
32 比特的序号字段和确认号字段,TCP 字节流每一个字节都按顺序编号。确认号是接收方期望从对方收到的下一字节的序号。
-
ACK 标志位,用于指示确认字段中的值是有效的 ACK=1 有效,ACK=0 无效。
-
SYN 标志位,用于连接建立,SYN 为 1 时,表明这是一个请求建立连接报文。
-
FIN 标志位,用于连接拆除,FIN 为 1 时,表明发送方数据已发送完毕,并要求释放连接。
-
三次握手
-
TCP 标准规定,ACK 报文段可以携带数据,但不携带数据就不用消耗序号。
-
TCP 报文段到达服务器主机后,服务器提取报文段,并为该 TCP 连接分配缓存和变量。然后向客户端发送允许连接的 ACK 报文段(不包含应用层数据)。这个报文段的首部包含 4 个信息:ACK 置 为 1,SYN 置为 1;确认号字段置为客户端的序号 + 1;随机选择自己的初始序号(一般为 0)
-
收到服务器的 TCP 响应报文段后,客户端也要为该 TCP 连接分配缓存和变量,并向服务器发送一个 ACK 报文段。这个报文段将服务器端的序号 + 1 放置在确认号字段中,用来对服务器允许连接的报文段进行响应,因为连接已经建立,所以 SYN 置为 0。最后一个阶段,报文段可以携带客户到服务器的数据。并且以后的每一个报文段,SYN 都置为 0
-
客户端发送一个不包含应用层数据的 TCP 报文段,首部的 SYN 置为 1,随机选择一个初始序号(一般为 0)放在 TCP 报文段的序号字段中。(SYN 为 1 的时候,不能携带数据,但要消耗掉一个序号)
-
四次分手
-
FIN 报文段即使不携带数据,也要消耗序号
-
服务器回送一个确认报文段
-
服务器发送 FIN 置为 1 的报文段
-
客户端回送一个确认报文段
-
客户端发送一个 FIN 置为 1 的报文段
-
为什么是四次分手,不是三次
-
当 A 给 B 发送 FIN 报文时,代表 A 不再发送报文,但仍可以接收报文
-
B 可能还有数据需要发送,因此先发送 ACK 报文,告知 A “我知道你想断开连接的请求了”。这样 A 便不会因为没有收到应答而继续发送断开连接的请求(即 FIN 报文)
-
B 在处理完数据后,就向 A 发送一个 FIN 报文,然后进入 LAST_ACK 阶段(超时等待)
-
A 向 B 发送 ACK 报文,双方都断开连接
-
HTTP请求(书:图解Http)
-
通用首部字段
-
Catch-control:控制缓存的行为(强缓存/协商缓存)
-
Connection:连接的状态
-
http请求报文
-
报文首部:在客户端和服务器处理是至关重要的信息在此处
-
请求行:方法、URI、http版本
-
请求首部字段:http首部字段
-
Accept(Charset/Encoding/Languange/Authorization)
-
报文主体:用户信息以及资源信息
-
http响应报文
-
报文首部
-
状态行:http版本、状态码
-
响应首部字段:http首部字段
-
报文主体
-
浏览器处理返回结果
-
重排、重绘
-
链接断开