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