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协议学习 – HTTP HTTP协议介绍 持续连接 HTTP消息

1、HTTP协议介绍: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的...

ArrayList从源码上看其线程安全问题(jdk1.8)

http:Hypertext Transfer Protocol,超文本传输协议,一般用于WEB浏览器与WEB服务器之间的双工通信。 http报文:在http应用程序之间发送的数据块一般由三个部分组成...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

HTTP长连接和短连接

好的知识值得分享!!!

http 长连接和短连接介绍

对于http长连接和短连接这样的概念,不知道大家了解多少,今天的文章将给大家介绍http短连接和长连接的定义、http协议以及短连接长连接的操作过程等内容。

HTTP/TCP/SOCKET连接协议和原理

套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议...

HTTP协议学习

引言                        ...

HTTP连接管理

原文地址:HTTP连接管理   曾经有同事给我说有客户问她我们的产品是否支持长连接,听到这问题,我告诉她长连接可以通过websocket来实现,考虑到目前的浏览器兼容性,大部分时候采用客户端轮询来...

http连接管理

1.TCP连接 几乎所有的HTTP通信都有由TCP/IP承载的,TCP/IP是全球计算机及网络设备都在使用的一种常用的分组交换网络分层协议集。一旦连接建立起来,客户端和服务器之间交换的报文就永远不会丢...

http 连接管理

连接管理 HttpClient有一个对连接初始化和终止,还有在活动连接上I/O操作的完整控制。而连接操作的很多方面可以使用一些参数来控制。 2.1 连接参数 这些参数可以影响连接操作...

HTTP协议学习

什么是HTTP协议? 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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