TCP长连接和短连接-深入浅出(还在总说http长连接吗)

查阅了一些资料,站在前人的肩膀上看世界会很美好。

什么是长连接和短连接

1.官方解释

长连接(long connnection),指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。

短连接(short connnection),是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时才去建立一个连接,数据发送完成后则断开此连接,即每次连接只完成一项业务的发送。

2.通俗一点

长连接:连接->传输数据->保持连接 -> 传输数据-> …->直到一方关闭连接,客户端关闭连接。长连接指建立SOCKET连接后无论使用与否都要保持连接。

短连接:连接->传输数据->关闭连接。下次一次需要传输数据需要再次连接。

下图对比帮助理解(当然,连接和响应的具体流程需要看对应的通信协议):

在这里插入图片描述

3.应用场景

长连接

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用新建立TCP连接。

例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

短连接

而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。

所以并发量大,但每个用户无需频繁操作情况下需用短连好。

4.TCP长短连接的优势

TCP短连接

模拟一下TCP短连接的情况,client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起close操作。

从上面的描述看,短连接一般只会在client/server间传递一次读写操作。

短连接优点:管理起来方便,存在的连接都是有效的连接,不需要额外的控制手段。

TCP长连接

接下来我们再模拟一下长连接的情况,client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。下面介绍一下TCP的保活功能。

TCP的保活功能主要为服务器应用提供。如果客户端已经消失而连接未断开,则会使得服务器上保留一个半开放的连接,而服务器又在等待来自客户端的数据,此时服务器将永远等待客户端的数据。保活功能就是试图在服务端器端检测到这种半开放的连接。如下示例:Client2关闭,TCP的保活功能使得Client1上仍然保留有一个半开放的连接,仍然在等待Cilent2的数据。

在这里插入图片描述

如果一个给定的连接在两小时内没有任何的动作,则服务器就向客户发一个探测报文段,客户主机必须处于以下4个状态之一:

  1. 客户主机依然正常运行,并从服务器可达。客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保证定时器复位。
  2. 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。服务端将不能收到对探测的响应,并在75秒后超时。服务器总共发送10个这样的探测 ,每个间隔75秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。
  3. 客户主机崩溃并已经重新启动。服务器将收到一个对其保证探测的响应,这个响应是一个复位,使得服务器终止这个连接。
  4. 客户机正常运行,但是服务器不可达,这种情况与2类似,TCP能发现的就是没有收到探查的响应。

在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损。如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,这样可以完全避免某个蛋疼的客户端连累后端服务。

长连接和短连接的产生在于client和server采取的关闭策略,具体的应用场景采用具体的策略,没有十全十美的选择,只有合适的选择。

HTTP与TCP/IP

关于HTTP和TCP/IP各协议的详细介绍点击【计算机网络-学习总结篇】。

1.HTTP协议与TCP/IP协议的关系

HTTP协议的长连接和短连接,本质上是TCP协议的长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。 IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠地传递数据包,使得网络上接收端收到发送端所发出的所有包,并且接受顺序与发送顺序一致。TCP协议是可靠的、面向连接的。TCP才负责连接,只有负责传输的这一层才需要建立连接!!!!!

HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码(但要服务器和客户端都设置):

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的TCP连接。也就是说在长连接情况下,多个HTTP请求可以复用同一个TCP连接,这就节省了很多TCP连接建立和断开的消耗

Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

2.如何理解HTTP协议是无状态的

HTTP协议是无状态的,指的是HTTP协议对事务处理没有记忆能力,服务器不知道客户端是什么状态。即第一次和第二次发起对应的请求之间没有任何联系。

长轮询与短轮询

1.什么是长轮询与短轮询

短轮询相信大家都不难理解,比如你现在要做一个电商中商品详情的页面,这个详情界面中有一个字段是库存量(相信这个大家都不陌生,随便打开淘宝或者京东都能找到这种页面)。而这个库存量需要实时的变化,保持和服务器里实际的库存一致。

这个时候,你会怎么做?

最简单的一种方式,就是你用JS写个死循环,不停的去请求服务器中的库存量是多少,然后刷新到这个页面当中,这其实就是所谓的短轮询

这种方式有明显的坏处,那就是你很浪费服务器和客户端的资源。客户端还好点,现在PC机配置高了,你不停的请求还不至于把用户的电脑整死,但是服务器就很蛋疼了。如果有1000个人停留在某个商品详情页面,那就是说会有1000个客户端不停的去请求服务器获取库存量,这显然是不合理的。

那怎么办呢?

长轮询这个时候就出现了,其实长轮询和短轮询最大的区别是,短轮询去服务端查询的时候,不管库存量有没有变化,服务器就立即返回结果了。而长轮询则不是,在长轮询中,服务器如果检测到库存量没有变化的话,将会把当前请求挂起一段时间(这个时间也叫作超时时间,一般是几十秒)。在这个时间里,服务器会去检测库存量有没有变化,检测到变化就立即返回,否则就一直等到超时为止

而对于客户端来说,不管是长轮询还是短轮询,客户端的动作都是一样的,就是不停的去请求,不同的是服务端,短轮询情况下服务端每次请求不管有没有变化都会立即返回结果,而长轮询情况下,如果有变化才会立即返回结果,而没有变化的话,则不会再立即给客户端返回结果,直到超时为止。

这样一来,客户端的请求次数将会大量减少(这也就意味着节省了网络流量,毕竟每次发请求,都会占用客户端的上传流量和服务端的下载流量),而且也解决了服务端一直疲于接受请求的窘境。

但是长轮询也是有坏处的,因为把请求挂起同样会导致资源的浪费,假设还是1000个人停留在某个商品详情页面,那就很有可能服务器这边挂着1000个线程,在不停检测库存量,这依然是有问题的。

因此,从这里可以看出,不管是长轮询还是短轮询,都不太适用于客户端数量太多的情况,因为每个服务器所能承载的TCP连接数是有上限的,这种轮询很容易把连接数顶满。哪怕轮询解决不了获取库存这个问题,但只要大家明白了长短轮询的区别,这就足够了。

2.长短轮询和长短连接的区别

这里简单说一下它们的区别:

  • 第一个区别是决定的方式,一个TCP连接是否为长连接,是通过设置HTTP的Connection Header来决定的,而且是需要两边(服务器端与应用端)都设置才有效。而一种轮询方式是否为长轮询,是根据服务端的处理方式来决定的,与客户端没有关系。
  • 第二个区别就是实现的方式,连接的长短是通过协议来规定和实现的。而轮询的长短,是服务器通过编程的方式手动挂起请求来实现的。

参考:

https://cloud.tencent.com/developer/article/1640430

https://www.cnblogs.com/gotodsp/p/6366163.html

  • 21
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《TCP/IP详解(三卷全)PDF》是一本网络通信方面的著作,由美国著名计算机科学家Douglas E. Comer所著。该书以系统而全面的方式介绍了TCP/IP协议栈的设计、实现和应用。 该书一共分为三卷,包括《TCP/IP卷 1:协议》、《TCP/IP卷 2:实现》和《TCP/IP卷 3:TCP 宏观》。第一卷介绍了网络协议的基本原理和概念,如数据传输、网络层的IP协议、UDP协议和ICMP协议等。通过深入理解这些协议,读者可以更好地了解网络通信的工作原理。 第二卷主要讲解了TCP/IP协议栈的实现细节,包括网络接口、ARP协议、IP路由、以太网和无线网络等。通过该卷的学习,读者可以深入了解TCP/IP协议栈的底层实现原理,理解网络通信的细节和技术。 第三卷则将焦点放在了TCP协议上,详细探讨了TCP连接的建立、数据传输、流量控制和拥塞控制等主题。读者可以通过学习和实践,加深对TCP协议的理解,并学会如何利用TCP协议优化网络应用性能。 的来,这本书全面系统地介绍了TCP/IP协议栈的方方面面,无论是初学者还是有一定经验的网络工程师,都可以从中获得丰富的知识和实践经验。通过阅读《TCP/IP详解(三卷全)PDF》,读者可以更好地理解和应用TCP/IP协议,提升自身在网络通信领域的能力。 ### 回答2: 《TCP/IP详解(三卷全)》是由美国计算机科学家Douglas Comer所著的一套经典计算机网络参考书。该书主要讲解了TCP/IP协议族,是网络通信领域的权威指南。 本书的内容共分为三卷,分别是《TCP/IP协议》、《IP协议》和《TCP协议》。第一卷主要介绍了网络通信的基础知识和TCP/IP协议族的结构,包括IP地址、子网掩码、路由选择以及网络层和链路层等各个方面的内容。第二卷重点讲解了IP协议,包括IP分组的格式、IP地址的分配和转发、IPv4和IPv6的特点等。第三卷则着重介绍了TCP协议,包括TCP连接的建立与终止、数据传输、拥塞控制和流量控制等细节。 《TCP/IP详解(三卷全)》以其全面、系统的讲解方式,深入浅出地阐述了TCP/IP协议族的原理和应用,对于学习计算机网络或从事网络工程师相关工作的人来,是一本不可多得的参考书。无论是对于初学者还是有经验的网络专业人员,该书都提供了详实的案例和丰富的实践经验,使读者能够深入理解TCP/IP协议的工作原理,并能够应用于实际网络环境中。 之,《TCP/IP详解(三卷全)》是一本经典而权威的网络技术书籍,对于学习和理解TCP/IP协议族的原理和应用具有重要意义。无论是对于网络专业人员还是普通的网络使用者,这套书都有很高的参考价值,帮助读者更好地掌握和应用TCP/IP协议,促进网络技术的发展和应用。 ### 回答3: 《TCP/IP详解(三卷全)PDF》是一本经典的计算机网络书籍,由Douglas E. Comer所著。这本书以全面、深入的方式介绍了TCP/IP协议族的各个方面。 首先,这本书分为三卷,每一卷都从不同的角度深入探讨了TCP/IP协议族的相关知识。第一卷主要介绍了TCP/IP协议族的基础知识,包括IP协议、ICMP协议、ARP协议等。第二卷则详细讲解了TCP协议和UDP协议的原理和实现。第三卷则针对IPv6协议进行了深入的解析。 《TCP/IP详解(三卷全)PDF》的一大特点是其详尽的内容。无论是网络层还是传输层,无论是IPv4还是IPv6,这本书都提供了全面的讲解。读者可以通过阅读本书,了解到TCP/IP协议族的每个细节,从而更好地理解和应用这些协议。 此外,这本书还提供了丰富的实例和案例分析,帮助读者更好地理解TCP/IP协议族在实际网络中的应用。同时,它还提供了许多问题与练习,供读者巩固所学知识。 的来,《TCP/IP详解(三卷全)PDF》是一本经典的计算机网络教材。无论是对于网络工程师还是对于对计算机网络感兴趣的读者来,这本书都是一本不可多得的宝藏。阅读这本书,能够帮助读者深入理解计算机网络的基础知识,提升网络技术能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值