美文网首页
OSI七层模型+http演进历史

OSI七层模型+http演进历史

作者: entro | 来源:发表于2019-02-28 19:39 被阅读0次

HTTP 相关

一、OSI七层

OSI层数 名称 功能 协议
第七层 应用层 (Application Layer) 为应用程序提供网络服务 https,ftp,ssh,telnet,ssl,tls
第六层 表示层 (Presentation Layer) 数据格式化,代码转换,数据加密 /
第五层 会话层 (Session Layer) 互连主机通讯 /
第四层 传输层 (Transport Layer) 端到端连接 TCP,UDP
第三层 网络层 (Network Layer) 路由:确定地址和最佳路径 ip,icmp……
第二层 数据链路层 (Data Link Layer) 传输有地址的帧,CRC、奇偶校验 arp,mtu……
第一层 物理层 (Physical Layer) 二进制的传输 IEEE802.11a/b/g,ISO2110

第一层物理层传输二进制信息,包含ISO2110(局域网有线协议)、IEEE802.11a/b/g(无线协议)。
第二层数据链路层传输的单位是帧,提供CRC校验,奇偶位校验等能力,包含arp,mtu等协议。
第三层网络传输层,主要功能是路由,包含ip,icmp协议等
第四层传输层提供端到端的连接能力,包含TCP,UDP协议
第五层传输层提供主机之间的通讯会话控制。
第六层表示层提供数据格式化,代码转换,数据加密等能力
第七层应用层,为应用程序提供网络服务,包含很多应用协议,http,ssh,ftp,map等协议。

  • Http是基于TCP/IP协议的 应用层协议
  • HTTPS 是在TCP/IP协议之上加了SSL/TLS(应用层协议)协议进行加密。
OSI是理论结构,SSL/TLS是实践协议不能准确的放入OSI七层协议的某一层。
SSL/TLS 其实是两层协议:下层SSL记录协议,上层是SSl握手协议。SSl握手协议是四种协议的统称SSL握手协议(SSL HandShake Protocol)、SSL密码参数修改协议(SSL Change Cipher Spec Protocol)、应用数据协议(Application Data Protocol)和SSL告警协议(SSL Alert Protocol))。

二、HTTP协议演进

2.1 http/0.9

1991年发布的,只有一个命令GET.

2.2 http/1.0

1996年五月发布,引入了POST HEAD命令,keep-alive(TCP复用,http1.0默认关闭,必须在header里写Connection:Keep-Alive)

2.3 http/1.1

1997年一月,目前应用最广的协议版本,持久连接 persistent connection 默认打开(客户端不用在header里写Connection:Keep-Alive就默认打开)

2.3.1 persistent connection 的两种方式

1)HTTP/1.0 + keep-alive 连接

  1. HTTP/1.1 + persistent 连接
2.3.2 管道机制

在同一个TCP连接里面,客户端可以同时发送多个请求,服务器按照顺序一个个返回这些请求。虽然允许复用TCP,但是服务器只有处理完一个请求,才会处理下一个。
如果前面的请求处理很慢,会造成"队头堵塞 head-of-line blocking"。

2.3.3 页面速度优化

要解决队头堵塞head-of-line这个问题,有两种方法:减少请求数。同时开启多个持久连接。这就是网页优化技巧的原则。
常用的页面优化技巧:合并表单样式表、将图片嵌入CSS代码、域名分片(一个域名只允许6个持久连接)。
如果http协议设计的更好一点,这些工作就是可以避免的。

2.3.4 Content-Length

一个TCP通过管道机制可以返回多个回应,那么就需要一种机制来区分这些回应。Content-Length就是这个作用。

2.3.5 分块传输

Content-Length可以使用的前提是服务器知道回应的长度。但是对一些耗时操作来说,这样效率很低。更好的方法是产生一块数据,采用"流模式steam"取代"缓存模式buffer"。
因此http/1.1可以不使用Content-Length,而使用分块传输编码(chunked transfer encoding)。只要请求或回应的header里有Transfer-Encoding字段,则表明将有数量未定的数据块。

Transfer-Encoding:chunked

每个非空数据块之前,有一个16禁止的数值,表示块长度。最后一个大小为0的块表示本次数据块已经全部发送完毕。

2.4 http/2 的前身:SPDY协议

2009年谷歌公开了自行研发的spdy协议,该协议在chrome上验证可行后,被当作http/2的基础。主要特性在http/2中得到继承。

2.5 http/2

叫http/2不是2.0,因为标准委员会不打算发布子版本了。下版将是http/3

2.5.1 二进制协议

http/1.1版的header是ASCII编码的文本信息。而http/2则是一个彻底的二进制协议。header和数据体都是二进制,并统称为"帧":头信息帧、数据帧。

2.5.2 多工

http/2复用TCP连接时,客户端和浏览器可以同时发送多个请求回应,并且不用按照顺序一一对应。避免了对头拥塞head-of-line blocking。
这样双向实时的通信就叫多工。

2.5.3 头信息压缩
  • http协议不带状态,每次请求都必须附上所有信息,所以很多字段都是重复的,比如cookie和user agent。
  • http/2对此做了优化:
    1)一方面头信息经过gzip或者compress压缩后再发送,
    2)另一方面,客户端和服务器同时维护一张头信息表。所有字段都存入这个表。生成一个索引号。以后就不发送同样的字段,只发送索引号。
2.5.4 服务器推送

支持主动向客户端发送资源。

相关文章

网友评论

      本文标题:OSI七层模型+http演进历史

      本文链接:https://www.haomeiwen.com/subject/xsgkuqtx.html