Http权威指南(TCP连接)
1.HTTP请求的过程
世界上几乎所有的HTTP通信都是由TCP/IP承载的,当发生HTTP请求时,实际上经过了以下几个步骤:
①浏览器从请求的URL中解析主机名
②浏览器查询这个主机名的IP地址
③浏览器获得端口号
④浏览器发起到IP:端口的连接(TCP连接)
⑤浏览器向服务器发送一条请求报文
⑥浏览器从服务器读取响应报文
⑦浏览器关闭连接(TCP连接)
图解:
2.TCP性能聚焦点
2.1TCP连接的握手时延
建立TCP连接甚至是发送任意数据之前,TCP软件之间都会交换一系列的IP分组,对连接参数进行沟通
所以,如果每次都只传输少量的数据,导致最终建立连接的次数增加,那么这些交换过程就会严重降低HTTP性能
2.2TCP段中的标记和首部
每个TCP段中都会至少装载40个字节的标记和首部,那么举个例子:
1000个字节的数据传输量,用10个TCP段装载,那么至少在原数据量的基础上增加40X10=400个字节的数据量;
如果用100个TCP段装载,那么至少在原数据量的基础上增加40X100=4000个字节的数据量;
如此一来,平白无故多了3600个字节的传输量,自然性能就严重下降了。
2.3TCP慢启动
TCP慢启动限制了每一个TCP端点在任意时刻可以传输的分组数,每成功接收一个分组,就会拥有发送另外两个分组
的权限,接收了两个分组,就会有发送另外四个分组的权限,以此类推。如果一个HTTP事务有大量数据要发送,必
须要依据以上的规则,此种方式被称为“打开拥塞窗口”。
由于这种特性,新连接的传输速度会比已经交换过一定数据量的“已调谐”的连接慢一点,因为后来的TCP连接单次能发
送的分组数比前者少,所以HTTP中有一些可以重用现存TCP连接(旧连接)的工具,这就是“持久连接”。
3.TCP连接性能提升解决方案
3.1Nagle算法
这个算法是为了解决2.2中TCP段多导致多出的标记和首部数据问题;
该算法鼓励发送全尺寸的TCP段(LAN上最大分组大约是1500字节,在因特网上是几百字节),只有当所有其他分组
都被确认之后,该算法才允许发送非全尺寸的分组;如果其他分组仍在传输,那就将数据缓存起来,只有当挂起分组
被确认或者缓存中积累了足够发送一个全尺寸分组的数据时,才会将缓存数据发送出去。
3.2串行事务时延问题(该栏目下每个灰框表示一个TCP连接,黑线表示HTTP事务)
所谓串行事务,打个比方,如果一个web页面有三张图片,那么浏览器就需要发起4个HTTP事务来显示此页面(HTML
+3张嵌入的图片),倘若每个事务都需要一条新的TCP连接,那么每条连接的连接时延和慢启动时延就会叠加起来,造
成最终加载页面的总时间增加,为此,有几种现存或者新兴的方法可以针对此问题进行处理从而提高HTTP连接性能。
3.2.1并行连接
所谓并行连接呢,顾名思义了,就是同时打开多条TCP连接,并行地执行多个HTTP事务,就上面的例子来讲,同时打开
4条TCP连接,相比串行事务而言,性能上有一定提升。
为什么说只是有一定的提升呢,因为并行连接的速度受限于网络带宽,先后打开了4条TCP连接,因为是并行地,他们会去
竞争这有限的带宽,可能之前串行的时候事务1只要花费100ms完成,因为此时没有其他的事务与之竞争带宽,并行之后,
可能需要300ms才能执行完这个事务,因为争夺到的带宽不足以使事务1的速度最大化。
那么,可能有人就会说了,我家的网是200M光纤的,为什么访问百度的时候和别人20M的网速差不多呢,首先,网页数据
量小差异不容易体现,其次服务器不会任由某个客户端并行地发起任意数量个TCP连接,倘若一个浏览器并行地打开100个
连接,那100个浏览器就是并行地打开10000个连接啊,服务器可吃不消,实际上呢,浏览器确实使用了并行连接,但不是
100个,通常是4个,并且服务器可以随意关闭来自特定客户端的超量连接(这或许就是之前我数据采集的时候下载10000+
数据之后访问网站受限的原因了)
但总的来说,并行连接,给人感觉还是比串行事务的处理方式快一点,4张图同时慢速地加载,和4张图分先后一次加载给人
感觉上是不同的。
3.2.2 持久连接
我们知道,TCP连接的连接建立阶段以及慢启动是很耗时的,那么我为什么一次又一次地在这个阶段反复花时间呢,于是持
久连接就出现了,打开TCP连接后,不关闭连接,等待下一个事务的进入,还是就之前的例子来说,建立第一次TCP连接之
后,不关闭连接,事务2、3、4陆续进入这个连接直到事务结束才关闭连接,于是:
相较之前的4个事务4次连接来说,这里少了3次TCP连接的步骤,自然时间上也就减少了,性能也就提升了。
3.2.3持久连接+并行连接
现在,很多web应用程序都会打开少量的并行连接,其中的每一个都是持久连接。
持久连接有两种类型:HTTP/1.0+ "keep-alive"连接、HTTP/1.1 "persistent"
Http权威指南(TCP连接)的更多相关文章
- HTTP权威指南之连接管理
TCP连接世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的, TCP/IP 是全球计算机及网络设备都在使用的一种常用的分组交换网络分层协议集. 客户端应用程序可以打开一条 TCP/IP 连 ...
- 和我一起学《HTTP权威指南》——连接管理
连接管理 1.TCP连接 几乎所有的HTTP通信都是由TCP/IP承载的. 浏览网页时客户端执行的操作: 如浏览http://www.joes-hardware.com:80/power-tools. ...
- 4.nodejs权威指南--TCP和UDP
1. TCP和UDP 1.1 TCP服务端 var net = require('net'); var server = net.createServer(); server.on('connecti ...
- HTTP权威指南读书笔记
HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...
- 《HTTP权威指南》之HTTP连接管理及对TCP性能的考虑
在上一篇博客中(<HTTP权威指南>之HTTP相关概念详解)我们简单对HTTP相关的基本概念做了一些简单的了解,但未对HTTP连接管理的内容做一些详细的介绍.本篇博客我们就一起来看一下HT ...
- HTTP权威指南阅读笔记四:连接管理
HTTP通信是由TCP/IP承载的,HTTP紧挨着TCP,位于其上层,所以HTTP事务的性能很大程度上取决于底层TCP通道的性能. HTTP事务的时延 如图: HTTP事务的时延有以下几种主要原因. ...
- HTTP权威指南-连接管理
现在已经开始学习到第四章咯,坚持就是胜利哟~!ok,废话少说,继续写笔记. 本章中我们要介绍到HTTP的连接.好,现在有几个问题,我列出来了,带着这几个问题,我们进入本章的学习. 1.HTTP是如何使 ...
- 图解HTTP权威指南(二)| 连接管理
一.两个问题 1.HTTP是如何使用TCP连接的 2.HTTP的连接,并行连接.keep-alive(持久连接)和管道化连接 二.TCP连接 1.什么是TCP TCP/IP是全球计算机及网络设 ...
- Netty权威指南
Netty权威指南(异步非阻塞通信领域的经典之作,国内首本深入剖析Netty的著作,全面系统讲解原理.实战和源码,带你完美进阶Netty工程师.) 李林锋 著 ISBN 978-7-121-233 ...
随机推荐
- Python(面向对象编程—1)
class tst: l=[] x=1 a=tst() b=tst() a.l.append('a') b.l.append('b') a.x='a' b.x='b' print(a.l,a.x) # ...
- 解释一下python中的成员运算符
通过成员运算符‘in’ 和 ‘not in’,我们可以确认一个值是否是另一个值的成员 print('me' in 'disappointment')#True print('us' in 'disap ...
- ununtu16.04+python3+selenium+firefox环境搭建
一.初始配置: 1.安装完系统并配置好地址及DNS.2.设置root密码: sudo passwd root 3.更改云源: sudo cp /etc/apt/sources.list /etc/ap ...
- java GC 回收机制 转
JVM分代垃圾回收策略的基础概念 由于不同对象的生命周期不一样,因此在JVM的垃圾回收策略中有分代这一策略.本文介绍了分代策略的目标,如何分代,以及垃圾回收的触发因素. 文章总结了JVM垃圾回收策略为 ...
- thinkphp api架构搭建
1.结构搭建 模块下面使用 controller , model ,service,validate分别对应的作用 controller控制器里面可以进行分版本 v1,v2之类的,不过要访问通必须配置 ...
- JSP与Servlet之前台页面自动回复之实现
[JSP与Servlet之前台页面自动回复之实现] 该内容 来自于imooc的一个视屏教程.http://www.imooc.com/video/4562 就是当点击 发送 的时候把这个对话框内容添加 ...
- windows查看端口占用、结束进程
在开发中难免会遇到windows的端口被占用,现在我们来查看端口的占用和结束占用端口的进程. win+r 输入cmd进入命令提示符: 比如我们要查看8080端口的占用情况,输入netstat -aon ...
- BZOJ 1185 [HNOI2007]最小矩形覆盖:凸包 + 旋转卡壳
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1185 题意: 给出二维平面上的n个点,问你将所有点覆盖的最小矩形面积. 题解: 先找出凸 ...
- springmvc学习(2)
SpringMvc是最主流的MVC框架之一. Spring3.0后全面超越Struts2,成为最优先的MVC框架 SpringMVC通过一套MVC注解,让POJO成为处理请求的控制器,而无须实现任何借 ...
- Entity Framework 6:专家版本
随着 Entity Framework 最新主版本 EF6 的推出,Microsoft 对象关系映射 (ORM) 工具达到了新的专业高度,与久负盛名的 .NET ORM 工具相比已不再是门外汉. EF ...