如何理解 TCP/IP,SPDY,WebSocket 三者之间的关系
按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP是应用层的协议。在这三者之间,SPDY和 WebSocket都是与HTTP相关的协议,而TCP是HTTP底层的协议。一、HTTP的不足HTTP协议经过多年的使用,发现了一些不足,主要是性能方面的,包括:HTTP的连接问题,HTTP客户端和服务器之间的交互是采用请求/应答模式,在客户端请求时,会建立一个HTTP连接,然后发送请求消息,服务端给出应答消息,然后连接就关闭了。(后来的HTTP1.1支持持久连接)因为TCP连接的建立过程是有开销的,如果使用了SSL/TLS开销就更大。在浏览器里,一个网页包含许多资源,包括HTML,CSS,JavaScript,图片等等,这样在加载一个网页时要同时打开连接到同一服务器的多个连接。HTTP消息头问题,现在的客户端会发送大量的HTTP消息头,由于一个网页可能需要50100个请求,就会有相当大的消息头的数据量。HTTP通信方式问题,HTTP的请求/应答方式的会话都是客户端发起的,缺乏服务器通知客户端的机制,在需要通知的场景,如聊天室,游戏,客户端应用需要不断地轮询服务器。而SPDY和WebSocket是从不同的角度来解决这些不足中的一部分。除了这两个技术,还有其他技术也在针对这些不足提出改进。二、SPDYSPDY的主要目的是减少50%以上的页面加载时间,但是呢不增加部署的复杂性,不影响客户端和服务端的Web应用,只需要浏览器和Web服务器支持SPDY。主要有以下几点:多路复用,一个TCP连接上同时跑多个HTTP请求。请求可设定优先级。去除不需要的HTTP头,压缩HTTP头,以减少需要的网络带宽。使用了SSL作为传输协议提供数据安全。对传输的数据使用gzip进行压缩提供服务方发起通信,并向客户端推送数据的机制。实质上,SPDY就是想不影响HTTP语义的情况下,替换HTTP底层传输的协议来加快页面加载时间。SPDY的解决办法就是设计了一个会话层协议帧协议,解决多路复用,优先级等问题,然后在其上实现了HTTP的语义。三、WebSocketWebSocket则提供使用一个TCP连接进行双向通讯的机制,包括网络协议和API,以取代网页和服务器采用HTTP轮询进行双向通讯的机制。本质上来说,WebSocket是不限于HTTP协议的,但是由于现存大量的HTTP基础设施,代理,过滤,身份认证等等,WebSocket借用HTTP和HTTPS的端口。由于使用HTTP的端口,因此TCP连接建立后的握手消息是基于HTTP的,由服务器判断这是一个HTTP协议,还是WebSocket协议。 WebSocket连接除了建立和关闭时的握手,数据传输和HTTP没丁点关系了。WebSocket也有自己一套帧协议。四、SPDY和WebSocket的关系SPDY和WebSocket的关系比较复杂。1.补充关系,二者侧重点不同。SPDY更侧重于给Web页面的加载提速,而WebSocket更强调为Web应用提供一种双向的通讯机制以及API。2. 竞争关系,二者解决的问题有交集,比如在服务器推送上SPDY和WebSocket都提供了方案。3. 承载关系,试想,如果SPDY的标准化早于WebSocket,WebSocket完全可以侧重于API,利用SPDY的帧机制和多路复用机制实现该API。 Google提出草案,说WebSocket可以跑在SPDY之上。WebSocket的连接建立在SPDY的流之上,将WebSocket的帧映射到SPDY的帧上。 4. 融合关系,如微软在HTTP Speed+Mobility中所做的。

什么是TLS
资料来自百度百科 TLSTLS:安全传输层协议(TLS:Transport Layer Security Protocol)安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。 TLS 记录协议提供的连接安全性具有两个基本特性:私有――对称加密用以数据加密(DES 、RC4 等)。对称加密所产生的密钥对每个连接都是唯一的,且此密钥基于另一个协议(如握手协议)协商。记录协议也可以不加密使用。可靠――信息传输包括使用密钥的 MAC 进行信息完整性检查。安全哈希功能( SHA、MD5 等)用于 MAC 计算。记录协议在没有 MAC 的情况下也能操作,但一般只能用于这种模式,即有另一个协议正在使用记录协议传输协商安全参数。TLS 记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间相互认证,协商加密算法和加密密钥。 TLS 握手协议提供的连接安全具有三个基本属性:可以使用非对称的,或公共密钥的密码术来认证对等方的身份。该认证是可选的,但至少需要一个结点方。共享加密密钥的协商是安全的。对偷窃者来说协商加密是难以获得的。此外经过认证过的连接不能获得加密,即使是进入连接中间的攻击者也不能。协商是可靠的。没有经过通信方成员的检测,任何攻击者都不能修改通信协商。TLS 的最大优势就在于:TLS 是独立于应用协议。高层协议可以透明地分布在 TLS 协议上面。然而, TLS 标准并没有规定应用程序如何在 TLS 上增加安全性;它把如何启动 TLS 握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。协议结构TLS 协议包括两个协议组―― TLS 记录协议和 TLS 握手协议――每组具有很多不同格式的信息。在此文件中我们只列出协议摘要并不作具体解析。具体内容可参照相关文档。TLS 记录协议是一种分层协议。每一层中的信息可能包含长度、描述和内容等字段。记录协议支持信息传输、将数据分段到可处理块、压缩数据、应用 MAC 、加密以及传输结果等。对接收到的数据进行解密、校验、解压缩、重组等,然后将它们传送到高层客户机。TLS 连接状态指的是 TLS 记录协议的操作环境。它规定了压缩算法、加密算法和 MAC 算法。TLS 记录层从高层接收任意大小无空块的连续数据。密钥计算:记录协议通过算法从握手协议提供的安全参数中产生密钥、 IV 和 MAC 密钥。 TLS 握手协议由三个子协议组构成,允许对等双方在记录层的安全参数上达成一致、自我认证、例示协商安全参数、互相报告出错条件。改变密码规格协议警惕协议 握手协议
词名:TLS 中文解释:传输层安全;传送层安全缩写:TLS来历:Transport Layer Security TLS是IETF的SSL(安全套接层)3.0版。IETF曾设法使SSL标准化,但不愿意使用RSA Security的专有加密技术,因此它开始致力于TLS(传输层安全),TLS使用Diffie-Hellman公钥密码技术。如在RFC 2246(The TLS Protocol,Version 1.0,January 1999)所概述的,TLS还使用了HMACTLS。另请参阅“SSL(安全套接层)”。 根据RFC 2316(Report of the IAB,April 1998),HMAC(散列消息身份验证码)以及IPSec被认为是Interact安全的关键性核心协议。它不是散列函数,而是采用了将MD5或SHA.1散列函数与共享机密密钥(与公钥/私钥对不同)一起使用的消息身份验证机制。基本来说,消息与密钥组合并运行散列函数。然后运行结果与密钥组合并再次运行散列函数。这个128位的结果被截断成96位,成为MAC。 RFC 2104(HMAC:Keyed—Hashing for Message Authentication,February 1997)说明了应该如何优先使用HMAC(优先于旧技术,特别加密的散列函数)。由于MD5的一些弱点,特别应该避免基于MD5的加密散列。HMAC是首选的共享机密身份验证技术,应该与SHA.1结合使用。它可以用于验证任意消息并适于登录。

TSL和SSL的区别相关信息
SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。SSL是Netscape开发的专门用户保护Web通讯的,目前版本为3.0。最新版本的TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的。SSL (Secure Socket Layer)为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。目前一般通用之规格为40 bit之安全标准,美国则已推出128 bit之更高安全标准,但限制出境。只要3.0版本以上之I.E.或Netscape浏览器即可支持SSL。当前版本为3.0。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。SSL协议提供的服务主要有:1)认证用户和服务器,确保数据发送到正确的客户机和服务器;2)加密数据以防止数据中途被窃取;3)维护数据的完整性,确保数据在传输过程中不被改变。SSL协议的工作流程:服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。从SSL 协议所提供的服务及其工作流程可以看出,SSL协议运行的基础是商家对消费者信息保密的承诺,这就有利于商家而不利于消费者。在电子商务初级阶段,由于运作电子商务的企业大多是信誉较高的大公司,因此这问题还没有充分暴露出来。但随着电子商务的发展,各中小型公司也参与进来,这样在电子支付过程中的单一认证问题就越来越突出。虽然在SSL3.0中通过数字签名和数字证书可实现浏览器和Web服务器双方的身份验证,但是SSL协议仍存在一些问题,比如,只能提供交易中客户与服务器间的双方认证,在涉及多方的电子交易中,SSL协议并不能协调各方间的安全传输和信任关系。在这种情况下,Visa和MasterCard两大信用卡公组织制定了SET协议,为网上信用卡支付提供了全球性的标准。TLS(Transport Layer Security Protocol):安全传输层协议安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。较低的层为 TLS 记录协议,位于某个可靠的传输协议(例如 TCP)上面。TLS 记录协议提供的连接安全性具有两个基本特性:私有――对称加密用以数据加密(DES 、RC4 等)。对称加密所产生的密钥对每个连接都是唯一的,且此密钥基于另一个协议(如握手协议)协商。记录协议也可以不加密使用。可靠――信息传输包括使用密钥的MAC进行信息完整性检查。安全哈希功能( SHA、MD5 等)用于 MAC 计算。记录协议在没有 MAC 的情况下也能操作,但一般只能用于这种模式,即有另一个协议正在使用记录协议传输协商安全参数。TLS记录协议用于封装各种高层协议。作为这种封装协议之一的握手协议允许服务器与客户机在应用程序协议传输和接收其第一个数据字节前彼此之间相互认证,协商加密算法和加密密钥。 TLS 握手协议提供的连接安全具有三个基本属性:可以使用非对称的,或公共密钥的密码术来认证对等方的身份。该认证是可选的,但至少需要一个结点方。共享加密密钥的协商是安全的。对偷窃者来说协商加密是难以获得的。此外经过认证过的连接不能获得加密,即使是进入连接中间的攻击者也不能。协商是可靠的。没有经过通信方成员的检测,任何攻击者都不能修改通信协商。TLS的最大优势就在于:TLS是独立于应用协议。高层协议可以透明地分布在TLS协议上面。然而, TLS 标准并没有规定应用程序如何在TLS上增加安全性;它把如何启动 TLS 握手协议以及如何解释交换的认证证书的决定权留给协议的设计者和实施者来判断。协议结构TLS 协议包括两个协议组――TLS记录协议和TLS握手协议――每组具有很多不同格式的信息。在此文件中我们只列出协议摘要并不作具体解析。具体内容可参照相关文档。TLS记录协议是一种分层协议。每一层中的信息可能包含长度、描述和内容等字段。记录协议支持信息传输、将数据分段到可处理块、压缩数据、应用MAC 、加密以及传输结果等。对接收到的数据进行解密、校验、解压缩、重组等,然后将它们传送到高层客户机。TLS连接状态指的是TLS记录协议的操作环境。它规定了压缩算法、加密算法和MAC算法。TLS记录层从高层接收任意大小无空块的连续数据。密钥计算:记录协议通过算法从握手协议提供的安全参数中产生密钥、 IV 和MAC密钥。TLS 握手协议由三个子协议组构成,允许对等双方在记录层的安全参数上达成一致、自我认证、例示协商安全参数、互相报告出错条件。关系就是。。。。并列关系最新版本的TLS(Transport Layer Security,传输层安全协议)是IETF(Internet Engineering Task Force,Internet工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。在TLS与SSL3.0之间存在着显著的差别,主要是它们所支持的加密算法不同,所以TLS与SSL3.0不能互操作。1.TLS与SSL的差异1)版本号:TLS记录格式与SSL记录格式相同,但版本号的值不同,TLS的版本1.0使用的版本号为SSLv3.1。2)报文鉴别码:SSLv3.0和TLS的MAC算法及MAC计算的范围不同。TLS使用了RFC-2104定义的HMAC算法。SSLv3.0使用了相似的算法,两者差别在于SSLv3.0中,填充字节与密钥之间采用的是连接运算,而HMAC算法采用的是异或运算。但是两者的安全程度是相同的。3)伪随机函数:TLS使用了称为PRF的伪随机函数来将密钥扩展成数据块,是更安全的方式。4)报警代码:TLS支持几乎所有的SSLv3.0报警代码,而且TLS还补充定义了很多报警代码,如解密失败(decryption_failed)、记录溢出(record_overflow)、未知CA(unknown_ca)、拒绝访问(access_denied)等。5)密文族和客户证书:SSLv3.0和TLS存在少量差别,即TLS不支持Fortezza密钥交换、加密算法和客户证书。6)certificate_verify和finished消息:SSLv3.0和TLS在用certificate_verify和finished消息计算MD5和SHA-1散列码时,计算的输入有少许差别,但安全性相当。7)加密计算:TLS与SSLv3.0在计算主密值(master secret)时采用的方式不同。8)填充:用户数据加密之前需要增加的填充字节。在SSL中,填充后的数据长度要达到密文块长度的最小整数倍。而在TLS中,填充后的数据长度可以是密文块长度的任意整数倍(但填充的最大长度为255字节),这种方式可以防止基于对报文长度进行分析的攻击。2.TLS的主要增强内容TLS的主要目标是使SSL更安全,并使协议的规范更精确和完善。TLS 在SSL v3.0 的基础上,提供了以下增强内容:1)更安全的MAC算法2)更严密的警报3)“灰色区域”规范的更明确的定义3.TLS对于安全性的改进1)对于消息认证使用密钥散列法:TLS 使用“消息认证代码的密钥散列法”(HMAC),当记录在开放的网络(如因特网)上传送时,该代码确保记录不会被变更。SSLv3.0还提供键控消息认证,但HMAC比SSLv3.0使用的(消息认证代码)MAC 功能更安全。2)增强的伪随机功能(PRF):PRF生成密钥数据。在TLS中,HMAC定义PRF。PRF使用两种散列算法保证其安全性。如果任一算法暴露了,只要第二种算法未暴露,则数据仍然是安全的。3)改进的已完成消息验证:TLS和SSLv3.0都对两个端点提供已完成的消息,该消息认证交换的消息没有被变更。然而,TLS将此已完成消息基于PRF和HMAC值之上,这也比SSLv3.0更安全。4)一致证书处理:与SSLv3.0不同,TLS试图指定必须在TLS之间实现交换的证书类型。5)特定警报消息:TLS提供更多的特定和附加警报,以指示任一会话端点检测到的问题。TLS还对何时应该发送某些警报进行记录。
SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。 TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。

HTTP,SSL/TLS和HTTPS协议的区别与联系
概述:HTTP是普通明文传输协议,HTTPS是加密协议,相当于HTTP的安全版本,但需要HTTPS加密必须拥有SSL证书与TLS协议交流产生,SSL证书在线签发:网页链接1、“HTTP”是什么?超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法(具体可查看马海祥博客《深入解析互联网协议的原理》的相关介绍)。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。简单来说,HTTP就是一个网络协议,是专门用来帮你传输Web内容的,关于这个协议,就算你不了解,至少也听说过吧?比如你访问我的博客的主页,浏览器地址栏会出现的网址:http://www.mahaixiang.cn,大部分网站都是通过HTTP协议来传输Web页面、以及Web页面上包含的各种东东(图片、CSS 样式、JS 脚本)。2、“SSL/TLS”是什么?SSL是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”,它是在上世纪90年代中期,由网景公司设计的(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”)。为啥要发明SSL这个协议捏?因为原先互联网上使用的HTTP协议是明文的,存在很多缺点——比如传输内容会被偷窥(嗅探)和篡改,发明SSL协议,就是为了解决这些问题。到了1999年,SSL因为应用广泛,已经成为互联网上的事实标准,IETF就在那年把SSL标准化,标准化之后的名称改为TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。3、“HTTPS”是什么意思?解释完 HTTP 和 SSL/TLS,现在就可以来解释 HTTPS 啦,咱们通常所说的 HTTPS 协议,说白了就是“HTTP 协议”和“SSL/TLS 协议”的组合,你可以把 HTTPS 大致理解为——“HTTP over SSL”或“HTTP over TLS”(反正 SSL 和 TLS 差不多)。HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。它是一个URI scheme(抽象标识符体系),句法类同http:体系,用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间),这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。4、谈谈“对称加密”和“非对称加密”的概念如果我们想搞明白“对称加密”和“非对称加密”的概念,首先,我们就要先知道什么是“加密”和“解密”?(1)、什么是“加密”和“解密”?通俗而言,你可以把“加密”和“解密”理解为某种互逆的数学运算,就好比“加法和减法”互为逆运算、“乘法和除法”互为逆运算。“加密”的过程,就是把“明文”变成“密文”的过程;反之,“解密”的过程,就是把“密文”变为“明文”,在这两个过程中,都需要一个关键的东东——叫做“密钥”——来参与数学运算。(2)、什么是“对称加密”?所谓的“对称加密技术”,意思就是说:“加密”和“解密”使用相同的密钥。这个比较好理解,就好比你用 7zip 或 WinRAR 创建一个带密码(口令)的加密压缩包,当你下次要把这个压缩文件解开的时候,你需要输入同样的密码,在这个例子中,密码/口令就如同刚才说的“密钥”。对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法,对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。(3)、什么是“非对称加密”?所谓的“非对称加密技术”,意思就是说:“加密”和“解密”使用不同的密钥,这玩意儿比较难理解,也比较难想到,当年“非对称加密”的发明,还被誉为“密码学”历史上的一次革命。非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key),私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人,非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。由于篇幅有限,对“非对称加密”这个话题,我就不展开了,有空的话,我会再单独写一篇文章在马海祥博客上发布。(4)、各自有啥优缺点?看完刚才的定义,很显然:(从功能角度而言)“非对称加密”能干的事情比“对称加密”要多,这是“非对称加密”的优点,但是“非对称加密”的实现,通常需要涉及到“复杂数学问题”,所以,“非对称加密”的性能通常要差很多(相对于“对称加密”而言)。这两者的优缺点,也影响到了 SSL 协议的设计。5、HTTP协议的特点作为背景知识介绍,还需要再稍微谈一下 HTTP 协议本身的特点,HTTP本身有很多特点,考虑到篇幅有限,马海祥只谈那些和HTTPS相关的特点,想要了解更深入的HTTP知识,可查看马海祥博客《HTTP服务的七层架构技术解析及运用》的相关介绍。(1)、HTTP的版本和历史如今咱们用的 HTTP 协议,版本号是 1.1(也就是 HTTP 1.1),这个 1.1 版本是1995年底开始起草的(技术文档是RFC2068),并在1999年正式发布(技术文档是RFC2616)。在 1.1 之前,还有曾经出现过两个版本“0.9 和 1.0”,其中的 HTTP 0.9 没有被广泛使用,而 HTTP 1.0 被广泛使用过。(2)、HTTP 和 TCP 之间的关系简单地说,TCP 协议是 HTTP 协议的基石——HTTP 协议需要依靠 TCP 协议来传输数据。在网络分层模型中,TCP 被称为“传输层协议”,而 HTTP 被称为“应用层协议”。有很多常见的应用层协议是以 TCP 为基础的,比如“FTP、SMTP、POP、IMAP”等。TCP被称为“面向连接”的传输层协议,关于它的具体细节,俺就不展开了(否则篇幅又失控了),你只需知道:传输层主要有两个协议,分别是TCP和UDP,TCP比UDP更可靠,你可以把 TCP 协议想象成某个水管,发送端这头进水,接收端那头就出水,并且 TCP 协议能够确保,先发送的数据先到达(与之相反,UDP不保证这点)。(3)、HTTP协议如何使用 TCP 连接?HTTP对 TCP 连接的使用,分为两种方式:俗称“短连接”和“长连接”(“长连接”又称“持久连接”,叫做“Keep-Alive”或“Persistent Connection”)假设有一个网页,里面包含好多图片,还包含好多外部的CSS文件和JS文件,在“短连接”的模式下,浏览器会先发起一个 TCP 连接,拿到该网页的 HTML 源代码(拿到 HTML 之后,这个 TCP 连接就关闭了)。然后,浏览器开始分析这个网页的源码,知道这个页面包含很多外部资源(图片、CSS、JS)。然后针对每一个外部资源,再分别发起一个个 TCP 连接,把这些文件获取到本地(同样的,每抓取一个外部资源后,相应的 TCP 就断开)。相反,如果是“长连接”的方式,浏览器也会先发起一个 TCP 连接去抓取页面,但是抓取页面之后,该 TCP 连接并不会立即关闭,而是暂时先保持着(所谓的“Keep-Alive”),然后浏览器分析 HTML 源码之后,发现有很多外部资源,就用刚才那个 TCP 连接去抓取此页面的外部资源。在 HTTP 1.0 版本,默认使用的是“短连接”(那时候是 Web 诞生初期,网页相对简单,“短连接”的问题不大)。到了1995年底开始制定 HTTP 1.1 草案的时候,网页已经开始变得复杂(网页内的图片、脚本越来越多了),这时候再用短连接的方式,效率太低下了(因为建立 TCP 连接是有“时间成本”和“CPU成本”),所以,在 HTTP 1.1 中,默认采用的是“Keep-Alive”的方式。6、SSL/TLS协议的基本运行过程SSL/TLS协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密,但是这里有两个问题:(1)、如何保证公钥不被篡改?解决方法:将公钥放在数字证书中,只要证书是可信的,公钥就是可信的。(2)、公钥加密计算量太大,如何减少耗用的时间?解决方法:每一次对话(session),客户端和服务器端都生成一个"对话密钥"(session key),用它来加密信息。由于"对话密钥"是对称加密,所以运算速度非常快,而服务器公钥只用于加密"对话密钥"本身,这样就减少了加密运算的消耗时间。因此,SSL/TLS协议的基本过程是这样的:(1)、客户端向服务器端索要并验证公钥。(2)、双方协商生成“对话密钥”。(3)、双方采用“对话密钥”进行加密通信。7、SSL、HTTP和HTTPS协议的联系SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5 以及RSA等加密算法,使用40位的密钥,适用于商业信息的加密。同时,Netscape公司相应开发了HTTPS协议并内置于其浏览器中,HTTPS实际上就是SSL over HTTP,它使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十分之一。假如为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低,而且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别,所以,我们只需对那些涉及机密数据的交互处理使用HTTPS协议,这样就做到鱼与熊掌兼得(具体可查看马海祥博客《从SEO的角度来分析网站是否该采用HTTPS协议》的相关介绍)。总之不需要用https的地方,就尽量不要用。8、HTTPS协议的需求是什么?花了好多口水,终于把背景知识说完了,下面正式进入正题,先来说说当初设计HTTPS是为了满足哪些需求?很多介绍 HTTPS 的文章一上来就给你讲实现细节,对此,马海祥觉得这是不好的做法,一上来就给你讲协议细节,你充其量只能知道如何做,无法理解为什么,我在前一个章节讲了“背景知识”,在这个章节讲了“需求”,这就有助于你理解了。为什么要设计成这样?——这就是 WHY 型的问题。(1)、兼容性因为是先有 HTTP 再有 HTTPS,所以,HTTPS 的设计者肯定要考虑到对原有 HTTP 的兼容性。这里所说的兼容性包括很多方面,比如已有的 Web 应用要尽可能无缝地迁移到 HTTPS;比如对浏览器厂商而言,改动要尽可能小。基于“兼容性”方面的考虑,很容易得出如下几个结论:①、HTTPS还是要基于 TCP 来传输如果改为 UDP 作传输层,无论是 Web 服务端还是浏览器客户端,都要大改,动静太大了。②、单独使用一个新的协议,把 HTTP 协议包裹起来所谓的“HTTP over SSL”,实际上是在原有的 HTTP 数据外面加了一层 SSL 的封装,HTTP 协议原有的 GET、POST 之类的机制,基本上原封不动。打个比方:如果原来的 HTTP 是塑料水管,容易被戳破;那么如今新设计的 HTTPS 就像是在原有的塑料水管之外,再包一层金属水管,一来,原有的塑料水管照样运行;二来,用金属加固了之后,不容易被戳破。(2)、可扩展性前面说了,HTTPS 相当于是“HTTP over SSL”。如果 SSL 这个协议在“可扩展性”方面的设计足够牛逼,那么它除了能跟 HTTP 搭配,还能够跟其它的应用层协议搭配,岂不美哉?现在看来,当初设计 SSL 的人确实比较牛,如今的 SSL/TLS 可以跟很多常用的应用层协议(比如:FTP、SMTP、POP、Telnet)搭配,来强化这些应用层协议的安全性。接着刚才打的比方:如果把 SSL/TLS 视作一根用来加固的金属管,它不仅可以用来加固输水的管道,还可以用来加固输煤气的管道。(3)、保密性(防泄密)HTTPS需要做到足够好的保密性。说到保密性,首先要能够对抗嗅探(行话叫 Sniffer),所谓的“嗅探”,通俗而言就是监视你的网络传输流量,如果你使用明文的 HTTP 上网,那么监视者通过嗅探,就知道你在访问哪些网站的哪些页面。嗅探是最低级的攻击手法,除了嗅探,HTTPS 还需要能对抗其它一些稍微高级的攻击手法——比如“重放攻击”(后面讲协议原理的时候,会再聊)。(4)、完整性(防篡改)除了“保密性”,还有一个同样重要的目标是“确保完整性”。在发明 HTTPS 之前,由于 HTTP 是明文的,不但容易被嗅探,还容易被篡改。举个例子:比如咱们的网络运营商(ISP)都比较流氓,经常有网友抱怨说访问某网站(本来是没有广告的),竟然会跳出很多中国电信的广告,为啥会这样呢?因为你的网络流量需要经过 ISP 的线路才能到达公网,如果你使用的是明文的 HTTP,ISP 很容易就可以在你访问的页面中植入广告。所以,当初设计 HTTPS 的时候,还有一个需求是“确保 HTTP 协议的内容不被篡改”。(5)、真实性(防假冒)在谈到 HTTPS 的需求时,“真实性”经常被忽略,其实“真实性”的重要程度不亚于前面的“保密性”和“完整性”。举个例子:你因为使用网银,需要访问该网银的 Web 站点,那么,你如何确保你访问的网站确实是你想访问的网站?有些天真的同学会说:通过看网址里面的域名,来确保,为啥说这样的同学是“天真的”?因为 DNS 系统本身是不可靠的(尤其是在设计 SSL 的那个年代,连 DNSSEC 都还没发明),由于 DNS 的不可靠(存在“域名欺骗”和“域名劫持”),你看到的网址里面的域名未必是真实滴!所以,HTTPS 协议必须有某种机制来确保“真实性”的需求(至于如何确保,后面会细聊)。9、HTTPS和HTTP的区别超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。一般来说,HTTPS和HTTP的区别主要为以下四点:(1)、https协议需要到ca申请证书,一般免费证书很少,需要交费。(2)、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。(3)、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。(4)、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全(具体可查看马海祥博客《HTTP与HTTPS的区别》的相关介绍)。10、HTTPS和HTTP的性能比较再来说最后一个需求——性能。本来简单的http协议,一个get一个response,由于https要还密钥和确认加密算法的需要,单握手就需要6、7个往返,任何应用中,过多的round trip肯定影响性能,接下来才是具体的http协议,每一次响应或者请求,都要求客户端和服务端对会话的内容做加密/解密。尽管对称加密/解密效率比较高,可是仍然要消耗过多的CPU,为此有专门的SSL芯片,如果CPU信能比较低的话,肯定会降低性能,从而不能serve更多的请求,加密后数据量的影响,所以,才会出现那么多的安全认证提示(具体可查看马海祥博客《HTTPS对网站性能优化的影响》的相关介绍)。一般来说,引入HTTPS之后,不能导致性能变得太差,否则的话,谁还愿意用?为了确保性能,SSL 的设计者至少要考虑如下几点:(1)、如何选择加密算法(“对称”or“非对称”)?(2)、如何兼顾 HTTP 采用的“短连接”TCP 方式?SSL 是在1995年之前开始设计的,那时候的 HTTP 版本还是 1.0,默认使用的是“短连接”的 TCP 方式——默认不启用 Keep-Alive。HTTPS的关键性能影响是CPU和往返,如果CPU很强的话,性能可能就是有人讲的80%;如果cpu是瓶颈的话,有人讲原来可以server330-500个请求每秒,现在只有30-50%,因此在使用https请求数据的时候要注意看看你的项目里面是否真的需要。
1. “HTTP”是干嘛用滴? 首先,HTTP 是一个网络协议,是专门用来帮你传输 Web 内容滴。大部分网站都是通过 HTTP 协议来传输 Web 页面、以及 Web 页面上包含的各种东东(图片、CSS 样式、JS 脚本)。2. “SSL/TLS”是干嘛用滴?SSL 是洋文“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景公司设计的。(顺便插一句,网景公司不光发明了 SSL,还发明了很多 Web 的基础设施——比如“CSS 样式表”和“JS 脚本”)为啥要发明 SSL 这个协议捏?因为原先互联网上使用的 HTTP 协议是明文的,存在很多缺点——比如传输内容会被偷窥(嗅探)和篡改。发明 SSL 协议,就是为了解决这些问题。到了1999年,SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在那年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。很多相关的文章都把这两者并列称呼(SSL/TLS),因为这两者可以视作同一个东西的不同阶段。3. “HTTPS”是啥意思? 解释完 HTTP 和 SSL/TLS,现在就可以来解释 HTTPS 啦。咱们通常所说的 HTTPS 协议,说白了就是“HTTP 协议”和“SSL/TLS 协议”的组合。你可以把 HTTPS 大致理解为——“HTTP over SSL”或“HTTP over TLS”(反正 SSL 和 TLS 差不多)。
一、什么是HTTPS、TLS、SSLHTTPS,也称作HTTP over TLS。TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。二、HTTP和HTTPS协议的区别1、HTTPS协议需要到证书颁发机构(Certificate Authority,简称CA)申请证书,一般免费证书很少,需要交费。2、HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。3、HTTP和HTTPS使用的是完全不同的连接方式,使用的端口也不一样,前者是80,后者是443。4、HTTP的连接很简单,是无状态的。5、HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比HTTP协议安全。从上面可看出,HTTPS和HTTP协议相比提供了· 数据完整性:内容传输经过完整性校验· 数据隐私性:内容经过对称加密,每个链接生成一个唯一的加密密钥· 身份认证:第三方无法伪造服务端(客户端)身份其中,数据完整性和隐私性由TLS Record Protocol保证,身份认证由TLS Handshaking Protocols实现。详解HTTPS、TLS、SSL、HTTP区别和关系请参考:网页链接
HTTP,SSL/TLS和HTTPS协议的区别:HTTP:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。SSL/TLS:SSL是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”;1999年,IETF将SSL标准化,标准化之后的名称改为TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。HTTPS:(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。HTTP,SSL/TLS和HTTPS协议的联系:HTTPS实际上就是SSL/TLS + HTTP,HTTPS使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接受方进行解密,加密和解密需要发送方和接收方通过交换共知的密钥来实现。
简单点说,http是明文传输,https 则是加密传输,https是http的安全、高级版本。 网站实现https访问需要安装ssl证书,GDCA就有各种类型的ssl证书,现在的浏览器都要求安装了。

如何理解 TCP/IP,SPDY,WebSocket 三者之间的关系
按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP是应用层的协议。在这三者之间,SPDY和WebSocket都是与HTTP相关的协议,而TCP是HTTP底层的协议。 一、HTTP的不足HTTP协议经过多年的使用,发现了一些不足,主要是性能方面的,包括:HTTP的连接问题,HTTP客户端和服务器之间的交互是采用请求/应答模式,在客户端请求时,会建立一个HTTP连接,然后发送请求消息,服务端给出应答消息,然后连接就关闭了。(后来的HTTP1.1支持持久连接)因为TCP连接的建立过程是有开销的,如果使用了SSL/TLS开销就更大。在浏览器里,一个网页包含许多资源,包括HTML,CSS,JavaScript,图片等等,这样在加载一个网页时要同时打开连接到同一服务器的多个连接。HTTP消息头问题,现在的客户端会发送大量的HTTP消息头,由于一个网页可能需要50-100个请求,就会有相当大的消息头的数据量。HTTP通信方式问题,HTTP的请求/应答方式的会话都是客户端发起的,缺乏服务器通知客户端的机制,在需要通知的场景,如聊天室,游戏,客户端应用需要不断地轮询服务器。而SPDY和WebSocket是从不同的角度来解决这些不足中的一部分。除了这两个技术,还有其他技术也在针对这些不足提出改进。二、SPDYSPDY的主要目的是减少50%以上的页面加载时间,但是呢不增加部署的复杂性,不影响客户端和服务端的Web应用,只需要浏览器和Web服务器支持SPDY。主要有以下几点:多路复用,一个TCP连接上同时跑多个HTTP请求。请求可设定优先级。去除不需要的HTTP头,压缩HTTP头,以减少需要的网络带宽。使用了SSL作为传输协议提供数据安全。对传输的数据使用gzip进行压缩提供服务方发起通信,并向客户端推送数据的机制。实质上,SPDY就是想不影响HTTP语义的情况下,替换HTTP底层传输的协议来加快页面加载时间。SPDY的解决办法就是设计了一个会话层协议--帧协议,解决多路复用,优先级等问题,然后在其上实现了HTTP的语义。三、WebSocketWebSocket则提供使用一个TCP连接进行双向通讯的机制,包括网络协议和API,以取代网页和服务器采用HTTP轮询进行双向通讯的机制。本质上来说,WebSocket是不限于HTTP协议的,但是由于现存大量的HTTP基础设施,代理,过滤,身份认证等等,WebSocket借用HTTP和HTTPS的端口。由于使用HTTP的端口,因此TCP连接建立后的握手消息是基于HTTP的,由服务器判断这是一个HTTP协议,还是WebSocket协议。 WebSocket连接除了建立和关闭时的握手,数据传输和HTTP没丁点关系了。WebSocket也有自己一套帧协议。四、SPDY和WebSocket的关系SPDY和WebSocket的关系比较复杂。补充关系,二者侧重点不同。SPDY更侧重于给Web页面的加载提速,而WebSocket更强调为Web应用提供一种双向的通讯机制以及API。竞争关系,二者解决的问题有交集,比如在服务器推送上SPDY和WebSocket都提供了方案。承载关系,试想,如果SPDY的标准化早于WebSocket,WebSocket完全可以侧重于API,利用SPDY的帧机制和多路复用机制实现该API。 Google提出草案,说WebSocket可以跑在SPDY之上。WebSocket的连接建立在SPDY的流之上,将WebSocket的帧映射到SPDY的帧上。 融合关系,如微软在HTTP Speed+Mobility中所做的。

本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/59141.html。