HTTP协议学习(三)——连接管理

转载 2015年11月19日 21:18:23
本篇将讲述(可以参考《HTTP权威指南》的第四章、连接管理):
一、HTTP如何使用TCP连接的?
二、TCP连接的延时、瓶颈在哪儿?。
三、HTTP的连接优化方法?
首先说说第一个问题,HTTP如何使用TCP连接?
由于HTTP协议几乎都是由TCP/IP承载,所以在说HTTP如何使用TCP连接之前、必须要了解TCP/IP连接的一些基本知识点、首先TCP是点对点[源IP+端口和目标IP+端口]的通讯,TCP连接中通过[员IP,源端口,目标IP,目标端口]来识别的。这四个值共同定义了一条唯一的连接、不同的TCP连接不能拥有4个完全相同的地址组件值。
TCP的数据传输是通过IP分组的小数据块来发送的。因为HTTP位于HTTP网络协议栈的最顶层(顺带说一下HTTPS网络协议栈、HTTPS只是在HTTP的基础上在HTTP和TCP之间添加了一层加密安全层(SSL OR TSL)协议栈结构组成,如图:
HTTP协议学习(三)——连接管理 - 夜深,人未静 - AlexChen
 )、因此HTTP要传输请求时会以流的形式将报文数据内容通过一条打开(已建立连接)TCP连接按顺序传输、TCP收到数据流之后再将数据库分成若干段小数据块,并将段封装在IP分组中、再通过internet进行传输。如下图(截图至HTTP权威指南)
HTTP协议学习(三)——连接管理 - 夜深,人未静 - AlexChen
 
TCP提供了一条可靠的传输通道(从tcp建立连接成功之后、客户端和服务段的报文就永远不会丢失,计算机奔溃或网络中断的情况下通信会通知客户端和服务器连接中断),另外TCP的传输中、一端填入的字节会在另一端以原有的顺序、正确的传送和输出。这就保证了传输内容在传递过程中不会出现错序而引起的数据混乱。
总结一句话就是:HTTP协议的请求和传输是建立在TCP协议之上的,在内部是以流的形式将数据分为若干小数据块进行传输(这一步是浏览器完成的,浏览器通过我们请求的URL解析出目标IP(查询DNS), 端口,然后建立目标IP+端口的连接,最后在通过TCP发送HTTP的请求内容,得到反馈后浏览器断开连接)。这就整个HTTP从请求到断开连接的一个全过程(不完整、但是开始节点和结束节点完整)。

再来说一下关于:TCP连接的延时、瓶颈。
从HTTP协议栈的组成来看就明白HTTP位于紧邻TCP的上层、因此在很大程度上HTTP的事物性能取决与TCP通信的性能。
HTTP事物延迟有以下几种主要原因
1:URL的解析、如果没有对URI中主机名进行过访问、那么浏览器在通过DNS解析URI主机名转换IP时将花费数十秒的时间(多数客户端会有dns缓存,这可以提高速度)。
2:解析成功之后客户端会想目标服务器发送一条TCP连接请求、并等待目标服务器回送一个接受应答请求(或拒绝,拒绝则中断后续步骤),需要知道的是、在TCP建立连接时会有建立时延,通常时延很快,一两秒甚至更短、但如果有多个HTTP事物的话、时延将会增加。
3:连接成功之后、客户端将通过新建立的TCP管道发送HTTP请求、数据到达目标服务器时服务器会从TCP中读取报文并处理,这个传输和处理过程、需要时间。
4:服务器回送HTTP响应,这个传输过程也需要数据。正常情况是响应内容越多时间越长。
这些延迟大小取决于硬件速度、网络、服务器负载、R/Q(请求和响应)内容大小、客户端和服务器的距离等因素共同决定。在《HTTP权威指南》中还列出了最常见的TCP相关延时,如图:
HTTP协议学习(三)——连接管理 - 夜深,人未静 - AlexChen
 有兴趣的可以具体查阅TCP握手协议以及相关读物了解原因。本博文不再赘述。
下面我们来了解一下HTTP的连接优化。
优化连接的前提是你的知道有那些连接,才能知道如何下手、在HTTP中有几种连接(具体几种笔者要不能确定、因此这里只简述笔者知道的连接)
并行连接
说并行之前稍微说一下串行连接的问题、顾名思义、串行连接时间请求是累加的、也就是顺序请求、有先有后、下面用一张图来说明串行连接
HTTP协议学习(三)——连接管理 - 夜深,人未静 - AlexChen
如图、随着请求的增多(一个页面有多个资源、每个资源都对应一个请求连接),横坐标时间就越大。其中最严重的问题是、在执行一个请求时、其它的都处于等待状态、比如加载页面图片、在加载A图片时、其它页面对象是没有任何反应的、“感觉”就是很慢的样子。浏览器计算对象的显示位置和大小。因为在对象加载完之前整个屏幕是空白的。
现在真正进入并行连接的介绍、并行连接顾名思义就是多任务同时执行、如图:
HTTP协议学习(三)——连接管理 - 夜深,人未静 - AlexChen
 
每一个请求都是一个新的TCP连接(即客户端建立多个TCP连接,这样可以提高页面的传输速度),用于同时(近似的看成是同时、如果你够细心的话会发现上图中的软件时延)处理其它请求、请求之间并行执行、这样能减短时延。通常情况下来说、并行连接是个不错的选择、但同时也会引发其它的客户端和服务端性能问题、稍后我会阐述。
持久连接
持久连接,在请求初期不断开与服务器的连接、而在接下来的请求中使用最开始建立的连接、这样能减少建立连接的时延、这样可以更快速的传输数据。持久连接需要客户端或者服务端来终止。但在持久连接中如何很好的管理空连接也是一个棘手的问题(即在什么时候断开持久连接),大量的空连接会耗掉客户端和服务器更多的资源、确切的说是浪费。

总结串行连接、并行连接、持久连接的优缺点:
在串行连接中:优点是不会浪费服务器资源、一切都按照顺序执行,缺点也很明显、对于请求资源非常多的情况下会“很慢”,因为第二个资源必须等到第一个请求响应完毕后才会开始。串行连接的性能主要消耗在连接的建立,数据请求和传输中。对服务器影响不大,可以忽略。

在并行连接中:优点是能同时发起多个请求、减少因某个请求过大而造成假阻塞的情况、相比串行而言极大的提高了传输速度。因此也带来了它的缺点、客户端会建立多个请求、因此会造成客户端本身的性能问题(因为每个新请求都是一个TCP连接),因此浏览器使用的就是并行连接,但默认会限制并行请求个数比如4个,5个的方式来保证客户端的其它性能优良。
并行连接的性能在客户端主要消耗在TCP创建是的内存消耗上、对客户端的影响比较大(如果带宽不够大,多个连接争抢定大的带宽可想而知、每个请求都会很慢)、对服务器(还有高速代理)的影响也不容忽视、比如100个用户,每个用户打开100个连接,则服务器需要处理100*100个连接。这会导致服务器性能严重下降。

在持久连接中:优点是省去了并行连接的连接建立时延和适应时延(因为持久连接只建立一次、以后都使用第一次建立的连接),缺点也很明显、如果不能很好的管理(因为持久连接需要客户端或服务器来关闭)持久连接将会出现很多空连接、这会极大的影响且浪费服务器性能。
建议,采用并行连接以及持久连接的方式,这样更利于性能的保证和资源的充分利用。

自此、HTTP中的性能优化点就阐述完毕。
转载地址:http://blog.163.com/ny_lonely/blog/static/1889242732013116112920514/

相关文章推荐

HTTP协议——建立连接/请求和响应

2.1 HTTP/1.0和HTTP/1.1的比较 RFC 1945定义了HTTP/1.0版本,RFC 2616定义了HTTP/1.1版本。 笔者在blog上提供了这两个RFC中文版的下载地...

SERVLETJSP学习(一)——Servlet基础 、 HTTP协议

1. Servlet基础 1.1. Web应用的演变 1.1.1. 单机程序 软件从附着于电脑硬件之日起,就在不断的进行着自我完善和演变。从其使用模式的角度出发,可以简单分为单机程序和网络程序。发...

协议学习——HTTP2帧结构总结

前言:   HTTP2引入了二进制分帧层,将普通的请求/响应,拆解为帧实现请求和响应的并发。HTTP2规定了10中类型的帧。本文将对这10种类型的帧做总结。 帧的结构:    所有的帧都包含一个9...

android学习笔记——http协议

这里不在赘述http协议的具体内容,直接说如何使用用一个例子来说明: 1、先用Eclipse创建一个web项目,同时创建一个servlet,很简单只需一个表单,将数据提交到servlet中。在serv...

javaweb学习总结(四)——Http协议

一、什么是HTTP协议   HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间...

HTTP协议学习(一)——URL与资源,报文结构详解

一、URL 在http传输中、我们都是通过url来寻找网络资源的。但是你真的了解url吗?你知道url的构成是怎么样的吗?如果你知道,那好吧、恭喜你、可以跳过URL这一小节了。oh~~ if n...

Java基础学习总结(7)——HTTP协议详解

一、什么是HTTP协议   HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换...

http协议学习和总结系列——基础概念篇

转至:http协议学习和总结系列——基础概念篇 http协议学习和总结系列 ——协议详解篇 文:阿蜜果 日期:2009-11-30 1. 基础概念篇 1.1 介绍   HTT...
  • salahg
  • salahg
  • 2011年01月24日 16:22
  • 473

http协议学习和总结系列——深入了解篇

http://www.blogjava.net/amigoxie/archive/2009/12/03/304634.html 3. 深入了解篇 3.1 Cookie和Session Co...

【JAVA WEB】学习笔记——HTTP协议

C/S模式和B/S模式 客户端和服务器B/S模式:客户端与服务器一问一答(通讯)遵循:HTTP协议 HTTP概念: HTTP,(超文本传输协议),它是TCP/IP协议中的一个应用层协议。 HTTP...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HTTP协议学习(三)——连接管理
举报原因:
原因补充:

(最多只允许输入30个字)