首页 > 编程知识 正文

计算机网络连接,计算机网络怎么连接

时间:2023-05-06 17:47:35 阅读:217698 作者:1312

计算机网络之HTTP之持续连接与非持续连接 前言非持续连接串行的非持续连接并行的非持续连接 持续连接不带流水的持续连接带流水的持续连接 相同情境下,不同连接方式的效率不同采用非持续连接的串行方式采用非持续连接的并行方式采用持续连接不带流水的方式采用持续连接带流水的方式


前言

在许多因特网应用程序中,客户和服务器在一个相当长的时间范围内通信,其中客户发出一系列请求并且服务器对每个请求进行响应。
每个请求/相应对是经一个单独的TCP连接发送,还是所有的请求及其相应经相同的TCP连接发送?
关于这里,我们有一个简单而形象的比喻:
一个同学醉熏的火龙果在寝室里开小卖部,因为怕别的同学举报,他的门一直关着,等来买东西的人敲门时再打开。

非持续连接

前一种方法,即每个请求/响应对是经一个单独的TCP连接发送。称为非持续连接。
非持续连接中,一个TCP连接只能传送一个对象。每个TCP连接只传输一个请求报文和响应报文。在非持续连接中又分串行和并行。

串行的非持续连接

取回网页后,TCP连接就断掉。
串行的非持续连接之醉熏的火龙果小卖部:
柔弱的超短裙来敲门说我要一个方便面和一根烤肠——醉熏的火龙果开门把面给柔弱的超短裙——醉熏的火龙果关门——醉熏的火龙果开门把烤肠给柔弱的超短裙——醉熏的火龙果关门。
这个过程中, 即使柔弱的超短裙这一个人要两个东西(方便面和烤肠),醉熏的火龙果也得开关两次门,分两次给他。

并行的非持续连接

大部分浏览器可以打开5~10个并行的TCP连接,每条连接处理一个请求响应事务。如果用户愿意,可以把最大并行连接数设置为1,这样连接就是串行建立的。
显然使用并行的TCP连接可以缩短响应时间。

持续连接 不带流水的持续连接

不带流水的持续连接之醉熏的火龙果小卖部:
柔弱的超短裙来敲门说我要一个方便面——醉熏的火龙果开门把面给柔弱的超短裙——醉熏的火龙果问柔弱的超短裙:“你还需要什么别的吗?

如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。这种情况下,web页面所引用的每个对象(上例中的10个图像)都经历1个RTT的延迟,用于请求和接收该对象。与非持久连接2个RTT的延迟相比,不带流水线的持久连接已有所改善,不过带流水线的持久连接还能进一步降低响应延迟。不带流水线版本的另一个缺点是,服务器送出一个对象后开始等待下一个请求,而这个新请求却不能马上到达。这段时间服务器资源便闲置了。

带流水的持续连接

带流水的持续连接之醉熏的火龙果小卖部:
柔弱的超短裙来敲门并递出一个清单——醉熏的火龙果开门按照柔弱的超短裙的清单把柔弱的超短裙要的东西都给他。

HTTP/1.1的默认模式使用带流水线的持久连接。这种情况下,HTTP客户每碰到一个引用就立即发出一个请求,因而HTTP客户可以一个接一个紧挨着发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个紧挨着发出各个对象。如果所有的请求和响应都是紧挨着发送的,那么所有引用到的对象一共只经历1个RTT的延迟(而不是像不带流水线的版本那样,每个引用到的对象都各有1个RTT的延迟)。另外,带流水线的持久连接中服务器空等请求的时间比较少。与非持久连接相比,持久连接(不论是否带流水线)除降低了1个RTT的响应延迟外,缓启动延迟也比较小。其原因在于既然各个对象使用同一个TCP连接,服务器发出第一个对象后就不必再以一开始的缓慢速率发送后续对象。相反,服务器可以按照第一个对象发送完毕时的速率开始发送下一个对象。

参考博文HTTP协议的持续连接和非持续连接

相同情境下,不同连接方式的效率不同

现在有一个客户向服务器请求一个Web页面,假设这个Web页面里面含有一个HTML基本文件和10个JPEG图形,并且这11个对象位于同一台服务器上。现在要把网页和引用对象都取回来。
我们已经知道建立一个TCP连接需要三次握手,而进行一次请求/响应需要一个RTT。
注意必须先把HTML文件取回来,才能取其他对象,也就是那10个JPEG文件。书上的原话是:

HTTP客户接收相应报文,TCP连接关闭。该报文指出封装的对象是一个HTML文件,客户从响应报文中提取出该文件,检查该HTML文件,得到对10个JPEG文件的引用

采用非持续连接的串行方式

总共需要22个RTT
首先建立TCP连接并传输HTML文件需要2个RTT。
然后TCP连接断开。
再建立TCP连接并传输第一个JPEG图形需要2个RTT。
然后TCP连接断开。
再建立TCP连接并传输第二个JPEG图形需要2个RTT。
……
总共需要2*11=22个RTT

采用非持续连接的并行方式

假设最多可以并行3条TCP连接
总共需要10个RTT
首先建立TCP连接并传输HTML文件=2个RTT
10/3=3……1
因此可以分成四组,前三组有3个,最后一组只有1个JPEG文件
每个组内的对象是并行传输的,因此每个组只需要2个RTT
2*4=8
因此总共需要2+8=10个RTT

采用持续连接不带流水的方式

总共需要12个RTT
首先建立TCP连接并传输HTML文件=2个RTT
接下来取10个JPEG文件
TCP连接已经建立,并且在东西全部取回来之前不会关闭。
客户发送一个HTTP请求报文——服务器在TCP连接上发送JPEG文件——客户接收到整个JPEG文件。
这个过程总共耗费1个RTT
因为有10个JPEG文件,所以重复10次。
总共需要2+10=12个RTT

采用持续连接带流水的方式

总共需要3个RTT
带流水的持续连接就是一下子把所有的能发的请求都发出去,再一下子把要的东西都拿回来。
建立TCP连接并传输HTML文件=2个RTT
接下来取10个JPEG文件,10个请求同时发出去,10个JPEG文件同时取回来,共需要1个RTT。
总共需要2+1=3个RTT

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。