http网络协议栈
- HTTP 应用层
- TCP 传输层
- IP 网络层
- 网络特有的链路接口 数据链路层
- 物理网络硬件 物理层
浏览器是怎样通过http显示位于远程服务器总的html资源的?

- 浏览器从url中解析出服务器的主机名
- 浏览器将服务器的主机名转换成服务器的ip地址
- 将端口号从url中解析出来
- 建立一条与web服务器的tcp连接
- 向服务器发送一条http请求报文
- 服务器向浏览器回送一条http响应报文
- 关闭连接
http报文
报文流动报文的三个组成部分起始行首部块主体请求报文: 响应报文: 请求和响应报文的区别请求报文支持的方法状态码200、201、300、301、304、400、401、403、404、500、502http首部键值对的列表通用首部(Date)请求首部(Accept:*/*)响应首部(Server:Tiki-Hut/1.0)实体首部(Content-Type)扩展首部()
响应报文:
请求和响应报文的区别请求报文支持的方法状态码200、201、300、301、304、400、401、403、404、500、502http首部键值对的列表通用首部(Date)请求首部(Accept:*/*)响应首部(Server:Tiki-Hut/1.0)实体首部(Content-Type)扩展首部()
TCP连接
TCP/IP是分组交换网络分层协议集
TCP的数据是通过名为IP分组的小数据块来发送的
每个IP分组包括
- 一个IP分组首部(源和目的IP地址、长度和一些标记)
- 一个TCP段首部(TCP端口号、TCP控制标记)
- 一个TCP数据块
TCP是通过端口号来保持连接正确运行的
<源IP地址、源端口号、目的IP地址、目的端口号>独一无二
TCP性能
- HTTP事务的时延

造成时延的主要原因:
- 客户端根据url获取服务器的ip地址和端口号,如果最近没有对该服务器进行访问,那通过DNS解析系统转换url中的IP地址可能花费数十秒的时间
- TCP连接请求,最多只有一两秒钟,但是http事务过多的话,时延会快速叠加
- 服务器读取请求报文,并对请求进行处理
- 回送http响应
性能聚焦
- TCP连接握手


- TCP慢启动拥塞控制
TCP为了防止因特网的突然过载和拥塞,有一个慢启动机制,一开始会限制连接的最大速度,如果数据传输成功,随着时间的推移提高传输的速度
- 数据聚集的Nagle算法
- TCP延迟确认算法
- TIME_WAIT时延和端口耗尽
二、http连接的处理
- connection首部
- 串行事务处理时延
简单的对连接处理,那么连接时延和慢启动时延就会叠加起来
处理方案:
- 并行连接
- 并行连接可以提高加载速度,重叠时延时间,充分利用带宽(前提是带宽充裕)
- 浏览器通常会有4个并行连接,过多会消耗内存,引发自身的性能问题
缺点:
- 每个事务都会维护一条连接,耗费时间和带宽
- TCP慢启动的存在,每条新连接的性能都会降低
- 并行连接的数量有限
- 持久连接
- 站点本地性:同一个web页面上的资源大多来自同一个站点,浏览器可能会对同一个站点访问多次获取资源
- 降低时延和连接建立的开销,将连接保持在已调谐的状态,而且减少了打开连接的潜在数据量
缺点
- 可能会出现大量空闲的连接,耗费本地和服务器的资源
方案:
持久连接和并行连接配合使用,浏览器打开最多4条并行连接,每一条都是持久连接
http/1.0 => keep-alive http/1.1 persistent

http/1.0通过connection:keep-alive首部来使用持久连接,如果响应报文里没有keep-alive首部,说明服务器不支持keep-alive,之后会关闭连接
keep-alive:max=5,timeout=120
浏览器最多为5个事务保持连接的状态,或者将保持连接状态到连接空闲了2分钟之后
http/1.1持久连接
默认激活,需要关闭时,需要显示的增加connection:close首部
- 管道化连接
- 复用的连接(实验阶段)